问题:

什么是锁存器?

什么时候出现锁存器?

锁存器对电路有什么影响?

如何在FPGA设计中避免锁存器?

在FPGA设计中应该避免锁存器.实际上,锁存器与D触发器实现的逻辑功能基本相同,都有暂存数据的功能。但如果两者都由与非门搭建的话,锁存器耗用的逻辑资源要比D触发器少(D触发器需要12个MOS管,锁存器只需6个MOS管),锁存器的集成度更高。所以在的ASIC设计中会用到锁存器。但锁存器对毛刺敏感,无异步复位端,不能让芯片在上电时处在确定的状态;另外,锁存器会使静态时序分析变得很复杂,不利于设计的可重用,所以,在ASIC设计中,除了CPU这高速电路,或者RAM这种对面积很敏感的电路,一般不提倡用锁存器。

FPGA的底层基本组件是查找表(LUT)和D触发器,并不存在锁存器,所以,FPGA中综合出来的锁存器都是由查找表和寄存器构成的,反而会更耗资源。

基于以上原因,在FPGA设计中,应该避免使用锁存器。在组合电路中,可以通过让代码覆盖所有条件分支,或者在组合进程中以赋默认值的方式避免锁存器。在具体实现中:

always @(*) 这种语句中当条件语句没有覆盖到所有分支时将产生锁存器,即if和case条件不全时综合器会综合出锁存器。

以下是通过在always电平敏感进程中通过赋默认值避免产生锁存器。

always @(sel or a)

begin

y2 = 3’b000; //赋默认值,避免产生锁存器

casex(sel)

3’bxx1: y2 = a[0];

3’bx1x: y2 = a[1];

3’b1xx: y2 = a[2];

endcase

end

在写三段式状态机时,在写状态转换时也会用到这个技巧:

always @(*)

begin

n_state = c_state; //赋默认值,避免产生锁存器

case(c_state)

IDLE:

n_state = RD;

RD:

endcase

end

注:锁存器是个时序电路,还是组合电路?

参考文献:

[1] 王钿, 卓兴旺. 基于VerilogHDL数据系统应用设计(第2版). 国防工业出版社. 2007,08.

[2] Verilog. https://en.wikipedia.org/wiki/Verilog. 2015,08,10.

转载于:https://www.cnblogs.com/dpc525/p/4722713.html

Verilog设计中的锁存器相关推荐

  1. Verilog设计中如何匹配变量的位宽?($clog2系统函数)

    1.位宽太小 在FPGA设计中,我们经常需要用寄存器来寄存某些"数量类"的变量,比如FIFO的深度啦.或者计数器的最大值啦:又或者输入输出信号也需要将位宽用parameter参数化 ...

  2. 为什么在 Verilog HDL 设计中一定要用同步而不能用异步时序逻辑?

    本博文内容来源于:<从算法设计到硬件逻辑的实现>,仅供学习交流使用! 同步时序逻辑是指表示状态的寄存器组的值只可能在唯一确定的触发条件发生时刻改变.只能由时钟的正跳沿或负跳沿触发的状态机就 ...

  3. FPGA设计组合逻辑电路中的锁存器问题

    在设计中 一般避免锁存器,锁存器不仅消耗资源,且更容易受到干扰,使得经常出现电路的仿真结果和在线调试结果不一致的情况. https://cloud.tencent.com/developer/arti ...

  4. 数字IC设计中为什么要避免锁存器(Latches)

    数字IC设计中为什么要避免锁存器(Latches) 上学时,老师说判断语句要把条件写全,不然会生成锁存器,做项目时又说多比特寄存器信号的赋值一定要加if条件,不让出现else的赋值.就很矛盾,本文主要 ...

  5. 【 Verilog HDL 】避免出现锁存器的组合电路描述方式

    无论多么复杂的FPGA设计,如果我们将其中具有存储功能的机构(寄存器.RAM.FIFO等)全部拿掉,那么剩下的若干独立数字电路网络则都是纯组合逻辑电路,对应的,我们称FPGA设计中这些具有存储功能的结 ...

  6. 硬件描述语言Verilog设计经验总结

    一.硬件描述语言Verilog 粗略地看Verilog与C语言有许多相似之处.分号用于结束每个语句,注释符也是相同的(/* ... */和// 都是熟悉的),运算符"=="也用来测 ...

  7. 数字设计中的时钟与约束

    数字设计中的时钟与约束 </div> ps:可以转载,转载请标明出处:http://www.cnblogs.com/IClearner/ 最近做完了synopsys的DC workshop ...

  8. FPGA的设计艺术(16)逻辑设计中无刻不在的判断之if/case语句

    前言 Verilog中的if或者case语句十分简单,但确实十分重要,我们的逻辑设计可以说一定离不开它,我们时时刻刻使用它,我们使用它进行建模,通常对应的是多路选择器这样的硬件单元或者变种. 我们通常 ...

  9. Verilog设计实例(8)按键防抖设计之软件防抖

    博文目录 写在前面 正文 背景介绍及回顾 单个按键 单按键的其他设计版本 多个按键 写在最后 参考资料 交个朋友 写在前面 个人微信公众号: FPGA LAB 个人博客首页 注:学习交流使用! 正文 ...

  10. Verilog设计实例(3)基于Verilog的单端口同步读写RAM设计

    文章目录 写在前面 正文 电路设计 行为仿真 交个朋友 写在前面 为什么要写单端口同步读写RAM呢? 没有那么多为什么?就是因为简单.基础,能清晰说明单端口RAM的原理,顺手给出设计,也能说明你的设计 ...

最新文章

  1. Sqoop的基础应用
  2. adobe premiere elements 2019中文版
  3. 【Source Insight 4.0 英文版】 如何设置选中高亮
  4. GAN处理手写图片数据集
  5. OpenCV PCA提取对象的方向的实例(附完整代码)
  6. 【Flink】Flink 写入 Clickhouse 大对象直接进入老年代 导致OOM
  7. linux脚本转win7脚本,使用一个脚本让Ubuntu“变身”Windows7
  8. mysql隔离级别与锁,接口并发响应速度的关系(2)
  9. SqlServer语句中替换like的另一种写法
  10. VS2010远程调试
  11. hp ux安装oracle 11g,HP UX安装oracle 11g asm扫不到盘
  12. C++ 输出tm结构的各个组成部分
  13. Chibi Dinos上线薄饼IFO打新,是否值得参与?
  14. mysql 1.42_mysql-查询(DQL)
  15. 机器学习中的置信区间与置信度
  16. 百度地图API Android SDK 常见问题
  17. 如何利用嵌入式集成开发工具,让其更好地服务于设计?
  18. newman执行测试_用Postman/Newman搞定API测试
  19. 中国大陆网站TOP100
  20. 微软开放技术云浪生:微软开源.NET是民心之所向

热门文章

  1. python:多维数组变一维数组
  2. python2.7 安装第三方库
  3. 一直跳动的按钮插件_关于Excel--Power Click插件的一些说明
  4. moba的m是什么意思_moba游戏是什么
  5. delphi listview怎么自动宽度_黑龙江胶带纸管切割机企业该怎么选择
  6. 「译」创建一个Hexo主题-Part2:其他页面
  7. VBS 拷贝 注册表键值
  8. js返回上一页并刷新、返回上一页、自动刷新页面
  9. 《中国人工智能学会通讯》——11.24 本文的出发点:模仿人类视觉
  10. 通读5G 半导体产业有新商机