关于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 ...
随机推荐
- Android 中文API (67) —— BluetoothClass.Device.Major
前言 本章内容是android.bluetooth.BluetoothClass.Device.Major,为Android蓝牙部分的章节翻译,版本为Android 2.3 r1,翻译来自中山大学 ...
- 百度复制SQL语句
本词条从基础知识.判断对象和应用技巧等方面,介绍了SQL(Structured Query Language)结构化查询语言的应用方法. 目录 1基础 ▪ 创建数据库▪ 删除数据库▪ 备份sql se ...
- CSS引入的方式有哪些? link和@import的区别是?转载
CSS引入的方式有哪些? link和@import的区别是? HTML 中引入 CSS 的方式 有 4 种方式可以在 HTML 中引入 CSS.其中有 2 种方式是在 HTML 文件中直接添加 CSS ...
- Vmware中Ubuntu挂ISO到虚拟光驱
Ubuntu 下挂ISO到虚拟光驱的方法 https://i.cnblogs.com/EditPosts.aspx?opt=1 如果要ubuntu找到rpm软件包,需要把iso挂载到/media/cd ...
- An Introduction to Interactive Programming in Python
这是在coursera上面的一门学习pyhton的基础课程,由RICE的四位老师主讲.生动有趣,一共是9周的课程,每一周都会有一个小游戏,经历一遍,对编程会产生很大的兴趣. 所有的程序全部在老师开发的 ...
- 【QT相关】文件、目录基础操作
判断目录是否存在: QString proFile(t_path); proFile.append("/dir"); QFileInfo proFileInfo(proFile); ...
- [Swust OJ 795]--Penney Game
题目链接:http://acm.swust.edu.cn/problem/795/ Time limit(ms): 1000 Memory limit(kb): 65535 Description ...
- CSS3 总结-2
过渡属性 下面的表格列出了所有的转换属性: 属性 描述 CSS transition 简写属性,用于在一个属性中设置四个过渡属性. 3 transition-property 规定应用过渡的 CSS ...
- hdu 4372 第一类stirling数的应用/。。。好题
/** 大意: 给定一系列楼房,都在一条水平线上,高度从1到n,从左侧看能看到f个, 从右侧看,能看到b个,问有多少种这样的序列.. 思路: 因为肯定能看到最高的,,那我们先假定最高的楼房位置确定,那 ...
- 转: 用css把图片转为灰色图
小tip: 使用CSS将图片转换成黑白(灰色.置灰) by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.co ...