1、锁存器
锁存器对脉冲电平敏感,也就是电平触发,在有效电平下锁存器处于使能状态,输出根据输入而变化。 此时,信号不被锁存,类似于缓冲器。 如果锁存未启用,则数据被锁定,输入信号不起作用,此时输出保持锁存的状态信息(锁存最后拍的数据)。 常见的锁存器包括SR锁存器、d锁存器和JK锁存器
1.1、锁存器工作原理
这里,d是输入信号,e为高时,输出q是输入d; 当e低时,q保持e高时的最后状态,即锁存过程。
1.2、锁存器优缺点
优点:面积小。 锁存器比FF快,所以适合用于地址锁存器,但必须保证所有latch输入源的质量。 (锁存器在CPU设计中很常见,因为它的应用使CPU的速度比外部IO部件的逻辑快得多。 在asic中,latch完成相同功能所需的门比触发器少,因此在asic中被较多使用)。
缺点:
a、容易发生毛刺
b、资源浪费:在Xilinx的FPGA上,多达6个系列的设备都有Latch; 在6系列和7系列FPGA中,一个Slice中50%的存储元素可以配置为Latch或Flip-Flop,而另一半只能配置为Flip-Flop。 例如,在7系列FPGA中,一个Slice有8个Flip-Flop,如果将其放置在Latch上,则该Slice的其他4个Flip-Flop将不可用。
c、时序分析困难:锁存器不含正常时钟,静态时序分析困难。
2、D触发器
触发器(简称Flip-Flop、FF () ),又称双安定门,也称双稳态触发器。 对边缘敏感,也就是边缘触发。
2.1、锁存器工作原理
因为触发器只在时钟沿工作,所以即使输入的信号有毛刺,输出也比较干净。 FPGA中使用最多的是触发器。
3、寄存器
用于存储数据的小存储区域。 用于临时存储参与运算的数据和运算结果,广泛用于各种数字系统和计算机。 其实寄存器是常用的时序逻辑电路,但这个时序逻辑电路只包含存储电路。 的存储电路由锁存器或触发器构成。 一个锁存器或触发器可以存储一位二进制数,从而允许n个锁存器或触发器配置n位寄存器。 工程寄存器一般按计算机中字节的位数设计,因此有8位寄存器、16位寄存器等。
4、RTL代码产生锁存器
时序逻辑中不会出现锁存器。 组合逻辑在特定情况下合并锁存器。 或者沿边缘敏感的语句只合并触发器。 对等级敏感的语句在覆盖不完整时,会出现闩锁。 (典型的if…else…或case…default…语句不完整,即出现信号保持。
1 )1) ) ) )。
Always@(* ) begin
是if(d )
a=b;
结束
2 )
Always@(Begin
是if(d )
a=b;
else
a=a;
结束
3 )3) ) )。
always @ (b or d )
是case(d )
2’b 00: a=B1;
2’b 11: c=B1;
default:begin
a=b;
c=b;
结束
结束案例
4 )4) ) )。
Always@(bord ) begin
a=b;
c=b;
是case(d )
2’b 00: a=B1;
2’b 11: c=B1;
结束案例
结束
5 ) ) ) )。
Always@(bord ) begin
case(d )//synopsys full_case
2’b 00: a=B1;
2’b 11: c=B1;
结束案例
结束
6 ) ) ) )。
Always@(Posedgeclk ) begin
if(A1 ) begin
b=d;
结束
ELSEif(A2 ) begin
c=d;
结束
结束
1 )合并时语句自动完成,完成后为代码2 ),else后的信号赋值为保持,由于if.else不完整,发生锁存。
3 )信号赋值语句不完整。 也就是说,由于d=2’b00不向信号c分配值,d=2’b11不向信号a分配值,而是在合并时语句自动互补,明显地也会出现信号保持,从而产生锁存器。
4 )闩锁不出现
5 )赋值语句不完整,发生锁存
6 )缺少else,信号赋值语句不完整,但属于时序逻辑,不发生锁存
5、锁存器和触发器综合后Schematic和Device
5.1、触发器
always@(PosedgeI_clk ) begin
是if(a )
b=c;
结束
5.2、
Always@(* ) begin
是if(a )
b=c;
结束
使用Flip-Flop时,存储元素已集成到FDRE (触发器)中; 使用Latch电路时,存储元件集成到LDCE中。
有些地方没有表,只能用latch。 例如,现在用一个clk连接到latch的使能端(
设为高电平使能),这样所需的setup时间是到时钟的下降沿为止需要数据的时候
不过,对于DFF,设置时间是时钟上升所需的时间。 这个说
亮数据比控制信号慢时,只能使用latch。 在这种情况下,如上所述
latch timing borrow。 基本上相当于借用了高水平的时间