问题:

什么是锁存器?

什么时候出现锁存器?

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

如何在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.

Verilog设计中的锁存器的更多相关文章

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

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

  2. verilog 2001中的一些新语法

    比较有用的:1,generate语句,但需注意,generate-for中变量范围是已知的确定值, generate-case,generate-if语句中变量都必须是固定的, generate必须跟 ...

  3. 数字设计中的时钟与约束(gate)

    转载:https://www.cnblogs.com/IClearner/p/6440488.html 最近做完了synopsys的DC workshop,涉及到时钟的建模/约束,这里就来聊聊数字中的 ...

  4. FPGA异步时钟设计中的同步策略

    1 引言    基于FPGA的数字系统设计中大都推荐采用同步时序的设计,也就是单时钟系统.但是实际的工程中,纯粹单时钟系统设计的情况很少,特别是设计模块与外围芯片的通信中,跨时钟域的情况经常不可避免. ...

  5. Verilog HDL中阻塞语句和非阻塞语句的区别

    在Verilog中有两种类型的赋值语句:阻塞赋值语句(“=”)和非阻塞赋值语句(“<=”).正确地使用这两种赋值语句对于Verilog的设计和仿真非常重要. Verilog语言中讲的阻塞赋值与非 ...

  6. 全数字锁相环(DPLL)的原理简介以及verilog设计代码

    随着数字电路技术的发展,数字锁相环在调制解调.频率合成.FM 立体声解码.彩色副载波同步.图象处理等各个方面得到了广泛的应用.数字锁相环不仅吸收了数字电路可靠性高.体积小.价格低等优点,还解决了模拟锁 ...

  7. 【CPU微架构设计】利用Verilog设计基于饱和计数器和BTB的分支预测器

    在基于流水线(pipeline)的微处理器中,分支预测单元(Branch Predictor Unit)是一个重要的功能部件,它负责收集和分析分支/跳转指令的执行结果,当处理后续分支/跳转指令时,BP ...

  8. Verilog设计Valid-Ready握手协议

    转自http://ninghechuan.com 我不生产知识,我只是知识的搬运工. Handshake Protocol握手协议!为了保证数据传输过程中准确无误,我们需要加上握手信号来控制信号的传输 ...

  9. 在嵌入式设计中使用MicroBlaze(Vivado版本)(转)

    原文Xilinx官方文档<ug898-vivado-embedded-design>第三章 一.MicroBlaze处理器设计介绍(略) 二.创建带有MicroBlaze处理器的IP设计 ...

随机推荐

  1. HDU6028:Forgiveness(TLE ing,占位)

    Problem Description Little Q is now checking whether string A matches B. Two strings are considered ...

  2. 【TJOI2013】 单词

    [题目链接] 点击打开链接 [算法] AC自动机+递推 [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 200 ...

  3. 修改RedHat的系统显示时间

    1.修改日期 date -s 12/21/2012 2.修改时间 date -s 15:14:00 3.检查硬件(CMOS)时间 clock -r 4.将系统时间写入CMOS clock -w 切记四 ...

  4. .NETFramework:HttpRuntime

    ylbtech-.NETFramework:HttpRuntime 1.返回顶部 1. #region 程序集 System.Web, Version=4.0.0.0, Culture=neutral ...

  5. Windows下如何生成数字证书

    1.Makecert.exe<证书创建工具>使用说明:http://msdn.microsoft.com/zh-cn/library/bfsktky3.aspx 2.SignTool.ex ...

  6. C++ 动态多维数组的申请与释放

    今天在实验室的项目中遇到了一个问题,直接上代码: void ViBe::init(Mat img) { imgcol = img.cols; imgrow = img.rows; // 动态分配三维数 ...

  7. Epoll简介以及例子

    第一部分:Epoll简介 问题 :  Select,Poll和Epoll的区别 答案 : Epoll和Select的区别 1. 遍历方式的区别.select判断是否有事件发生是遍历的,而epoll是事 ...

  8. STL排序和检索

    //参考书是刘汝佳的那本算法书P108 //sort的用法也就是本来是从小到大排序,如果想要从大到小,中间写一个比较函数就可以了: //以下两个检索的东西 //lower_bound找到一个值的最小插 ...

  9. PTA 朋友圈【并查集的合并问题】

    一开始,考虑的是每次就是把第一个作为祖先,这样很明显是错误的,比如 7 4 3 1 2 3 2 4 2 3 5 6 7 1 6 所以这正是更好地体现对于集合的代表.只有把所有的元素合并一下,然后选一个 ...

  10. python __builtins__ credits类 (15)

    15.'credits', 信用 class _Printer(builtins.object) | interactive prompt objects for printing the licen ...