Verilog设计中的锁存器

问题:

什么是锁存器?

什么时候出现锁存器?

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

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

时间: 2024-11-08 21:25:14

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

数字设计中的时钟与约束

最近做完了synopsys的DC workshop,涉及到时钟的建模/约束,这里就来聊聊数字中的时钟(与建模)吧.主要内容如下所示: ·同步电路与异步电路: ·时钟/时钟树的属性:偏移(skew)与时钟的抖动(jitter).延时(latency).转换(transition)时间: ·内部时钟: ·多路复用时钟: ·门控时钟: ·行波时钟: ·双沿时钟: ·Design Compiler中的时钟约束. 1.同步电路与异步电路 首先来谈谈同步电路与异步电路.那么首先就要知道什么是同步电路.什么是

FPGA数字逻辑设计中一些重要的基本概念

一.关于建立时间与保持时间 建立时间(Tsu:Setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,建立时间不够,数据将不能在这个上升沿被打入触发器:保持时间(Th:Hold time)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,如果保持时间不够,数据同样不能被打入触发器.首先:建立时间和保持时间都是器件要求的特性,其中建立时间是器件输入端在时钟信号有效沿到来前,要求输入信号稳定不变的时间,保持时间是器件输入端要求输入信号在时钟信号有效沿到来后保持稳定不变

verilog 2001中的一些新语法

比较有用的:1,generate语句,但需注意,generate-for中变量范围是已知的确定值, generate-case,generate-if语句中变量都必须是固定的, generate必须跟endgenerate 中间begin加块名. 2,算术左移右移 3,有符号数,其实就是两个变量位宽不一致做运算的时候,低位宽的补齐位宽的方式与以前发生了变化,原来是用零补齐,现在看最高位如果是1就以1补齐,如果是0,就以0补齐. 4,多维向量,并且可以取向量的任意一位. 1.Verilog-200

Perl在IC设计中的应用

Perl和Tcl是ic设计中最常用的两种脚本语言,在我学习perl之前完全的不知道他们到底是干什么的.在这里先总结一下Perl的作用: 1.用于生成Verilog代码 在写verilog时,经常遇到一些规律性强,编写又比较麻烦的代码,而这些恰恰又是可重用性比较强的.比如总线模块.FIR滤波器.IIR滤波器,只要 滤波器阶数和参数定了编码都大致相似的模块,就比较适合用来自动生成实现他们功能的verilog代码.Perl的强项在于文本处理,对于verilog 代码的生成,perl的代码会比较简洁易写

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

1 引言    基于FPGA的数字系统设计中大都推荐采用同步时序的设计,也就是单时钟系统.但是实际的工程中,纯粹单时钟系统设计的情况很少,特别是设计模块与外围芯片的通信中,跨时钟域的情况经常不可避免.如果对跨时钟域带来的亚稳态.采样丢失.潜在逻辑错误等等一系列问题处理不当,将导致系统无法运行.本文总结出了几种同步策略来解决跨时钟域问题. 2 异步设计中的亚稳态    触发器是FPGA设计中最常用的基本器件.触发器工作过程中存在数据的建立(setup)和保持(hold)时间.对于使用上升沿触发的触

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

随着数字电路技术的发展,数字锁相环在调制解调.频率合成.FM 立体声解码.彩色副载波同步.图象处理等各个方面得到了广泛的应用.数字锁相环不仅吸收了数字电路可靠性高.体积小.价格低等优点,还解决了模拟锁相环的直流零点漂移.器件饱和及易受电源和环境温度变化等缺点,此外还具有对离散样值的实时处理能力,已成为锁相技术发展的方向. 所谓数字PLL,就是指应用于数字系统的PLL,也就是说数字PLL中的各个模块都是以数字器件来实现的,是一个数字的电路. 数字锁相环的优点是电路最简单有效,可采用没有压控的晶振,

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

在基于流水线(pipeline)的微处理器中,分支预测单元(Branch Predictor Unit)是一个重要的功能部件,它负责收集和分析分支/跳转指令的参数和执行结果,当处理新的分支/跳转指令时,BPU将根据已有的统计结果和当前分支跳转指令的参数,预测其执行结果,为流水线取指提供决策依据,进而提高流水线效率. 下面讨论提出分支预测机制的主要原因和实际意义: 在流水线处理分支跳转指令时,目标地址往往需要推迟到指令的执行阶段才能运算得出,在此之前处理器无法及时得知下一条指令的取指地址,因此无法

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

原文Xilinx官方文档<ug898-vivado-embedded-design>第三章 一.MicroBlaze处理器设计介绍(略) 二.创建带有MicroBlaze处理器的IP设计 使用Vivado进行MicroBlaze设计和使用ISE有很大的不同.(译者加:所以你要仔细看下面的说明) Vivado IDE使用IP综合设计工具进行嵌入式开发.IP综合工具是一个基于图像界面的工具,能够帮助你构建复杂的IP子系统. Vivado IDE的IP目录中提供了很多现成的IP核,提供使用.你也可以

传统同步设计中的功耗

在传统设计风格中,系统时钟控制每个寄存器时钟端,功耗由3部分组成 1.每个时钟沿变化的组合逻辑所产生的功耗(触发器驱动这些组合逻辑): 2.触发器本身产生的功耗(即使触发器的输入和内部状态未变化,该功耗仍然存在): 3.设计中时钟树产生的功耗. 时钟树几乎消耗了整个芯片的功耗的50%,因此最好始终在根部产生或关闭时钟,以使整个时钟树都关闭: 解决方案 用门控时钟: 1.不含锁存器的门控时钟,只简单的使用单个门(与门,或门) 此要求使能信号宽度覆盖时钟高电平时时间, 不然会产生过早截断时钟 或者产