关于VerilogHDL生成的锁存器
总是会遇到有写文档中提到,不要生成锁存器。问题是
一: 什么叫锁存器
二 : 为什么不要生成锁存器
三 : 如何避免生成锁存器
好,现在就这三个问题,一一做出解答
一 什么叫锁存器
module datadistributor(datain,sel,enable,a,b,c,d);
input datain;
input[:] sel;
input enable;
output a;
output c;
output d;
output b;
reg a,b,c,d;
always @(datain or enable or sel)
begin
if(enable=='b1)
begin
case(sel)
'b00:a<=datain;
'b01:b<=datain;
'b10:c<=datain;
'b11:d<=datain;
default:a<=datain;
endcase
end
else
begin
a<='bz;
b<='bz;
c<='bz;
d<='bz;
end
end
endmodule
这个帖子的结论就是 //synthesis full_case 去除的是没有描述到的case情况所产生的锁存器。所以上述代码中产生的锁存器是无法通过这条简单的语句来消除的,好又有大神提及到
在 always 块的 if..else 语句中如果所列的条件不完整,综合时则会产生锁存器。
if(action) out1 <= 1'b1;
if(action) out1 <= 1'b1;
满满以为这个我就可以大功告成,总算知道怎么样避免产生锁存器了。于是检查了一下我的代码,发现锁存器好多啊,比如这个
//pulse_count and bit_count
reg [:] pulse_count = 'd0;
reg [:] bit_count = 'd0;
always @ (posedge i2c_clk) begin
if (curr_state == `IDLE) begin
pulse_count <= 'd0;
bit_count <= 'd0;
end else begin
if (pulse_count == 'd4) pulse_count <= 3'd0;
else if ((curr_state != `WAIT) || scl )
pulse_count <= pulse_count + 'd1;
if (((curr_state == `TX) || (curr_state == `RX)) && (pulse_count == 'd4)) begin
if (bit_count == 'd8) bit_count <= 4'd0;
else bit_count <= bit_count + 'd1;
end
end
end
第12行产生的真值表并不全面那么事产生了锁存器吗?这个是李亚民老师的代码
上面那位大神博文我只看了一半,后来才发现下面这么写:
但是,在描述时序逻辑的时候,也通常利用 if 语句的隐式条件对带时钟使能的 D 触发器建模
结论 : 组合逻辑,有无效状态就会产生锁存器
(补充:看到博文说case 有优先级,可是我记得在特权的书上以及自己做的实验上是看到if else 有优先级,case是并行处理的啊。当时我记得看的是RTL viewer,是不死后粗糙了点。是不是要去追寻到更底层去验证呢)
关于VerilogHDL生成的锁存器的更多相关文章
- FPGA代码设计规范整理
1.设计中的FIFO.状态机接口需要有异常恢复状态和状态上报机制,格雷码电路防止被综合电路优化掉. a)自行设计的格雷码FIFO(一般用于连续数据流跨时钟域)用Synplify综合时,为了防止被优化需 ...
- IC芯片設計
IC從生產目的上可以分成為通用IC(如CPU,DRAM,接口芯片等)和ASIC(ApplicationSpecificIntegreted Circuit)兩種,ASIC是因應專門用途而生產的IC. ...
- Verilog学习笔记基本语法篇(五)········ 条件语句
条件语句可以分为if_else语句和case语句两张部分. A)if_else语句 三种表达形式 1) if(表达式) 2)if(表达式) 3)if(表达 ...
- verilog 基础知识
mealy型状态机的下一状态和输出取决于当前状态和当前输入: moore型状态机的下一状态和输出取决于当前状态和当前输入,但其输出仅取决于现在的状态: 基本门原语的输出端口必须写在端口列表的前面,基本 ...
- Oracle 11g数据库详解(2)
FAILED_LOGIN_ATTEMPTS 用于指定连续登陆失败的最大次数 达到最大次数后,用户会被锁定,登陆时提示ORA-28000 UNLIMITED为不限制 精确无误差 是 实时 PASSWOR ...
- [整理]一个有关Latch(锁存器)的有趣问题
起源 今天诳论坛,突然发现了一个有关latch的问题,由于对D Flip-Flop和Latch还有些疑问,就点击了进去,一看果然有些意思,也挺有学习意义的,于是本文就诞生了.喊出口号~Just not ...
- VerilogHDL常用的仿真知识
在描述完电路之后,我们需要进行对代码进行验证,主要是进行功能验证.现在验证大多是基于UVM平台写的systemverilog,然而我并不会sv,不过我会使用verilog进行简单的验证,其实也就是所谓 ...
- VerilogHDL可综合设计的注意事项
可综合的语法已经记录得差不多了,剩下一些遗留的问题,在这里记录一下吧. 一.逻辑设计 (1)组合逻辑设计 下面是一些用Verilog进行组合逻辑设计时的一些注意事项: ①组合逻辑可以得到两种常用的RT ...
- 【转载】FPGA 中的latch 锁存器
以下这篇文章讲述了锁存器的一些概念和注意事项.原文标题及链接: FPGA 中的latch 锁存器 - 快乐至永远上的博客 - 与非博客 - 与网 http://www.eefocus.com/liuy ...
随机推荐
- IOS本地化。
1,项目名本地化 点击项目,蓝色图标->info 最下面+号,添加chinese本地化. Supporting Files->infoPlist.strings 下会有两个文件,有一个是设 ...
- cython教程
.写测试代码: zhouhh@zhouhh-home:~$ vi test.pyx [python] view plaincopy def sayhello(char* str): if str == ...
- c++ cout 保留小数点位
需要头文件 <iomanip> 输出时需要用 fixed 和 setprecision() fixed代表输出浮点数,setprecision()设置精度. #include <io ...
- projecteuler---->problem=8----Largest product in a series
title: The four adjacent digits in the 1000-digit number that have the greatest product are 9 9 8 9 ...
- hdu 1085 Holding Bin-Laden Captive! (母函数)
//给你面值为1,2,5的三种硬币固定的数目,求不能凑出的最小钱数 //G(x)=(1+x+...+x^num1)(1+x^2+...+x^2num2)(1+x^5+,,,+x^5num3), //展 ...
- hdu 5007 水 弦
http://acm.hdu.edu.cn/showproblem.php?pid=5007 纯粹的联系String的substr 什么时候substr拦截比写短话 string te; int n; ...
- IIS MIME的 映射 网站有些类型的文件不能通过网页访问
在iis中能够浏览所有扩展名的文件时,IIS MIME的 映射 您只能在故障排除过程中将通配符映射添加到 IIS MIME 映射中,以作为一种临时解决方案.确定缺少 MIME 类型是问题的原因后,请删 ...
- c 围圈报数
#include<stdio.h> /*围圈报数*/ void left(int *p,int m,int n) { int i,j,count; i = j = count = ; ) ...
- URlRewriter组件下载及使用说明
下载地址:http://www.chx99.cn/file/URLRewriter.rar在web.config添加如下配置节: <httpHandlers> <add ver ...
- 读书笔记之MERGE 语句使用
常用语法 MERGE INTO <target table> AS TGT USING <SOURCE TABLE> AS SRC ON <merge predicate ...