博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Verilog设计中的锁存器
阅读量:6820 次
发布时间:2019-06-26

本文共 980 字,大约阅读时间需要 3 分钟。

问题:

什么是锁存器?

什么时候出现锁存器?

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

如何在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. . 2015,08,10.

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

你可能感兴趣的文章
cocos2d-x3.0beta版+NDK-r9b在android上的启动过程
查看>>
基于Spring MVC+Spring JPA技术实战开发大型商业ERP项目教程
查看>>
黑马程序员_进程和线程的区别
查看>>
DHCP原理与实例
查看>>
类的虚继承
查看>>
MySQL批量删除指定前缀表
查看>>
JDK与TOMCAT安装
查看>>
将屏幕的全部输出存到文件 转
查看>>
postgresql学习笔记(五)备份与恢复
查看>>
从SCCM中创建并运行Powershell脚本卸载软件
查看>>
【java解惑】java字符串替换方法使用
查看>>
条件查询detachedCriteria的使用
查看>>
2012年第二届中国海宁长三角科技博览会(转)
查看>>
Mongodb 分片 手动维护chunk
查看>>
【C#|.NET】lock(this)其实是个坑
查看>>
我的友情链接
查看>>
最大连续和 Medium
查看>>
1030.在线视频—开源网管Cacti系列讲座(五)Cacti插件架构与插件安装
查看>>
Linux中exec命令相关
查看>>
asp.net mvc 如何调用微信jssdk接口:分享到微信朋友(圈)| 分享到qq空间
查看>>