0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

锁存器、触发器、寄存器的关联与区别及其相应的verilog描述

FPGA设计论坛 来源:未知 2022-12-19 12:25 次阅读

1:锁存器、触发器、寄存器的关联与区别

首先应该明确锁存器和触发器是由与非门之类的东西构成。尤其是锁存器,虽说数字电路定义含有锁存器或触发器的电路叫时序电路,但锁存器有很多组合逻辑电路的特性。
  • 锁存器(latch)

电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)信号的电平值,当锁存器处于使能状态时,输出才会随着数据输入发生变化。(简单地说,它有两个输入,分别是一个有效信号EN,一个输入数据信号DATA_IN,它有一个输出Q,它的功能就是在EN有效的时候把DATA_IN的值传给Q,也就是锁存的过程)
  1. 锁存器:电平敏感

  2. always @ (enable)

  3. if (enable) q <= d;
锁存器分为:普通锁存器和门控锁存器。
普通锁存器无控制信号:如基本RS锁存器,其无须时钟脉冲的触发。set为置数端,reset为复位端。
门控锁存器:门控D锁存器结构如下图所示。(E为使能信号,D为信号输入)
E为1时,C为1,TG1被1驱动导通,TG2被0驱动断开。(TG1为传输门,当C为1时,将输入端的模拟信号整体传输之输出端,无损耗,C为0时门关闭)
应用场合:数据有效滞后于时钟信号有效,这意味着时钟信号先到,数据信号后到。在某些运算器电路中有时采用锁存器作为数据暂存器;
优点:面积小、锁存器比FF快,所以用在地址锁存是很合适的,不过一定要保证所有的latch信号源的质量,锁存器在CPU设计中很常见,正是由于它的应用使得CPU的速度比外部IO部件逻辑快许多。
缺点:时序分析较困难;
不用锁存器的原因有二:1、锁存器容易产生毛刺,2、锁存器在ASIC设计中应该说比FF要简单,但是在FPGA的资源中,大部分器件没有锁存器这个东西,所以需要用一个逻辑门和FF来组成锁存器,这样就浪费了资源;
  • 触发器(flip-flop)

(钟控 D 触发器其实就是 D 锁存器,边沿 D 触发器才是真正的 D 触发器)
触发器(Flip-Flop,简写为 FF)---对脉冲边沿敏感,其状态只在时钟脉冲的上升沿或下降沿的瞬间改变;
触发器也叫双稳态门,又称双稳态触发器,是一种可以在两种状态下运行的数字逻辑电路。触发器一直保持它们的状态,直到它们收到输入脉冲,又称为触发。当收到输入脉冲时,触发器输出就会根据规则改变状态,然后保持这种状态直到收到另一个触发;

  1. 触发器:我们把输出只在时钟某个时刻变化的玩意儿叫触发器。边沿敏感

  2. always @ (posedge clk)

  3. if (enable) q <= d;
  4. 这个便是一个d触发器。只在enable(一般大家都叫它clock)的上升沿q采样d,而且在每个时钟的上升沿都会采样。
触发器分为两种,一种是主从触发器和边沿触发器
主从触发器在时钟有效期内 (主触发器) 接收数据,在时钟边沿输出状态转换。
应用场合:时钟有效迟后于数据有效,这意味着数据信号先建立,时钟信号后建立,在CP有效沿时刻打入到寄存器;
边沿触发器在时钟边沿期间, 触发器才接收数据并使输出状态转换。
下面为常见的几种边沿触发器(符号中的“>”代表边沿触发,单是这个符号代表上升沿触发,如果在CP信号输入与边框的交界处还有空心则代表下降沿触发)
D=0 清零;D=1 置1(clk上升沿有效)
T=0 保持;T=1 翻转(clk上升沿有效)
S为1时置1;R为1时清0;R与S都为0时,保持状态;R、S不能同时为1
JK触发器的功能基本与RS触发器相同:J=1 K=0时,置1;J=0 K=1时,清零;J=0 K=0时,保持;J=1 K=1时,翻转(初态为0,次态为1;初态为1,次态为0)。
总结下锁存器的主要缺点:
(1)对毛刺敏感,不能异步复位,因此在上电后处于不确定的状态。
(2)锁存器会使静态时序分析变得非常复杂,不具备可重用性。(首先, 锁存器没有时钟参与信号传递,无法做 STA;其次,综合工具会将 latch 优化掉,造成前后仿真结果不一致)
(3)在 PLD 芯片中,基本的单元是由查找表和触发器组成的,若生成锁存器反而需要更多的资源。根据锁存器的特点可以看出,在电路设计中,要对锁存器特别谨慎,如果设计经过综合后产生出和设计意图不一致的锁存器,则将导致设计错误,包括仿真和综合。因此,在设计中需要避免产生意想不到的锁存器。
总结一下避免生成锁存器的一些方法:
1)组合逻辑尽量使用assign语句描述组合逻辑电路。
2)时序逻辑电路不用担心生成锁存器,但也要尽量规避一些if-else 或者case不完整的情况,养成好的coding style.
3)如果采用case或者if结构描述组合逻辑时,应确保全部写全,不能遗漏。或者在组合逻辑块中先给输出变量赋初值。

  • 寄存器 (register)

寄存器(register):用来暂时存放参与运算的数据和运算结果。在实际的数字系统中,通常把能够用来存储一组二进制代码的同步时序逻辑电路称为寄存器。
区别与联系:由于触发器内有记忆功能,因此利用触发器可以方便地构成寄存器。由于一个触发器能够存储一位二进制码,所以把 n 个触发器的时钟端口连接起来就能构成一个存储 n 位二进制码的寄存器。
从寄存数据的角度来讲,寄存器和锁存器的功能是相同的;它们的区别在于寄存器是同步时钟控制,而锁存器是电位信号控制。
寄存器一般是边沿触发的触发器,电路里叫register,而触发器就是楼上所说的各种逻辑门构成的包含电平触发和边沿触发的两种,而锁存器则是电平触发的。所以一般说来,我们只叫寄存器和锁存器两种,在时序电路中寄存器的作用就是只在时钟的边沿有效传输data(setup time和hold time满足),而锁存器则在有效电平器件都可以传输data

寄存器(register):用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。其实寄存器就是一种常用的时序逻辑电路,但这种时序逻辑电路只包含存储电路。寄存器的存储电路是由锁存器或触发器构成的,因为一个锁存器或触发器能存储1位二进制数,所以由N个锁存器或触发器可以构成N位寄存器。工程中的寄存器一般按计算机中字节的位数设计,所以一般有8位寄存器、16位寄存器等;

  1. 寄存器这个玩意儿是一个概念层次的东西,1个寄存器就是能存1bit数据的东西。既可以用触发器实现也可以用锁存器实现。以触发器为例,由于触发器每个时钟上升沿都会采样,所以触发器会有一个反馈逻辑,当load有效的时候才会采样d,否则保持不变。

  2. always @ (posedge clk or negedge rst_n)

  3. if (!rst_n)

  4. q <= 0;

  5. else if (load)

  6. q <= d;

  7. 这便就是一个寄存器了。

2:RS锁存器、D锁存器、D触发器等边沿触发器的电路结构及其相应Verilog的描述(行为级、门级)

  • RS锁存器

在数字电路里面,SR锁存器是最简单的时序单元,它由一对交叉耦合的或非门构成,如下所示:

主要功能就是通过输入的S、R端分别控制Q进行置位(set)和复位(reset)。下面我们就对这个电路的分析:
二输入或非门的功能是,只要有一个输入为1,输出就为了0。这SR锁存电路在正常情况下,输入RS的组合之一4种可能,即00、01、10和11,下面我们就来看看这4种输入对输出Q的影响:
·输入R=0,S=0时:
A,假设原来的状态Q=0时,对应的原来状态就是Q’=1;那么N2的输入就是0和0,输出Q’=1,这样子就巩固了原来的状态Q’=1;Q’=1,对于N2,输入就是0和1,输出Q=0,也巩固了原来的状态,也就是与原来的假设一致。所以这个状态可以稳定下来,也就是当输入SR=00时,输出Q=1,Q’=0是可以存在的,如下图所示:

B,假设原来的状态Q=1时,对应的原来状态就是Q’=0;那么N2的输入就是0和1,输出Q’=0,这样子就巩固了原来的状态Q’=0;Q’=0,对于N2,输入就是0和0,输出Q=1,也巩固了原来的状态,也就是与原来的假设一致。所以这个状态可以稳定下来,也就是当输入SR=00时,输出Q=0,Q’=1是也是可以存在的,如下图所示:

由此可见,只要原来的状态一定了,那么输入SR=00时,输出也就是原来的状态。
·输入S=1,R=0时
根据或非门的功能,由于S=1,N2的输出Q’= 0;于是N1的输入就是00,输出Q就等于1;然后Q=1反馈回N2的输入,让N2的输出稳定为0,从而让Q的输出稳定为1;输入SR=10时,输出Q=1,称为置位功能。
(这里我们看一下,在SR=10时,S的信号稳定多久输出Q和Q’才稳定下来:S=1到来,首先经过N2的门延时t1,然后是Q’反馈回N1的线延时t2,接着是N1的门延时t3,再然后是Q反馈回N2的门延时t4,也就是有2个门延时和两个线延时,这是对于Q’的;对于Q还有增加一个N2门延时和一个Q’反馈回N1输入的线延时)如下图所示:

从上面的分析中,我们知道输入S=1,R=0时,输出Q=1,也就是置位的功能。
1.·当S=0,R=1时,这种情况跟SR=10类似,只不过是输出Q=0,也就是复位的功能。
2.·当S=1,R=1时,根据或非门的功能知道,输出Q=0,Q’=0。很显然这时候Q=Q’了,这跟我们给输出取值的字面意义是相反的,我们把这种状态称为错误输出,这是要注意的。这里需要说明的是,S和R都有效是没有意义的,锁存器不能同时被复位和置位,这样会引起输出都是0的混乱电路反应。
通过上面的分析,我们知道,SR锁存器可以具有锁存数据的功能:在S有效时,复位输出Q=1;在R有效时,输出复位Q=0;当S和R都无效时,就会保持前一个状态的输出。

同步RS锁存器:有r(复位),s(置位)。它的缺点在于会有不确定状态x。

  1. moduleRS_Flip(clk,r,s,q,qb);

  2. inputwireclk,r,s;

  3. outputregq;

  4. outputwireqb;

  5. assignqb=~q;

  6. always@(posedgeclk)begin

  7. case({r,s})

  8. 2'b00:q<= q;

  9. 2'b01:q<= 1;

  10. 2'b10:q<= 0;

  11. 2'b11:q<= 1'bx;

  12. endcase

  13. end

  14. module RS_latch(r,s,q,qn);
  15. input s,r;
  16. output q,qn;
  17. nor nor1(q,qn,r);
  18. nor nor2(qn,q,s);
  19. endmodule
  • D锁存器

D锁存的功能是在时钟高/低电平的时候通过数据,在时钟低/高电平的时候锁存数据(这样就明确地说明了什么时候锁存什么数据,而不是像SR锁存器一样,不知道锁存什么数据),具体的结构图和分析如下所示:
D锁存器常见结构和电路符号图如下所示:
可以看到,D锁存器可以分为前级门电路(两个与门和一个非门)和后级SR锁存器组成,(PS:反相器2个晶体管,两个与门共12个晶体管,两个或非门共8个晶体管,D锁存器一个22个晶体管)下面我们就来分析一下它的功能:
输入是Clk(相当于第一节所展示电路图中的E)和D,也就是输入有四种可能:
·当clk=0时,红S红R都为0,也就是SR锁存器的输入为00,根据SR锁存器的功能,输出Q和Q’将保持原来的状态;因此clk=0时,不管D是什么,输出Q和Q’都不随D变化,只与原来的状态有关,也就是保持。
·当clk=1时,R=(1·D’)=D’;S=(1·D)=D。
也就是说,当clk=1的时候,SR锁存的输入是互补的,不会出现S和R同时有效的情况。当D=1时,S=1,置位有效,输出Q=1;当D=0时,R=1,复位有效,输出Q=0;因此就可以知道,在clk=1时,输出Q=D,也就是输出等于输入。
通过上面的分析,上面的D锁存器结构功能为:在clk=1时,数据通过D锁存器流到了Q;在Clk=0时,Q保持原来的值不变。这样的锁存器也称为透明锁存器或者电平敏感锁存器(这里需要注意的是,上面结构中电平敏感锁存器是高电平敏感,也是就是高电平有效,这里的有效不是指“锁存”的这个功能有效,而是指输出发生变化即输入信号得以传送到输出,方便后面的锁存操作)。然后低电平敏感的D锁存器的电路结构这里就不介绍了。
  1. module d_latch(clk,d,q,qn);
  2. input clk,d;
  3. output q,qn;
  4. wire r,s;
  5. and and1 (s,d,clk);
  6. and and2 (r,~d,clk);
  7. RS_latch rs (s,r,q,qn);//RS锁存器中的所展示的门级描述
  8. endmodule
  • D触发器

触发器有很多类型,比如J-K触发器、T触发器、D触发。前面我们也说了,锁存器的应用之一就是构成触发器,这里我们只聊最简单的触发器——D触发器,D触发器的结构和电路符号图如下所示:
D触发器可以由两个D锁存器构成,驱动时钟的相位相反(也就是),前面的D锁存器称为主锁存器,后面的D锁存器称为从锁存器,因此D触发器也可以称为主从触发器(PS:两个D锁存器共44个晶体管,非门2个晶体管,因此D触发器46个晶体管)。下面我们分析一下D触发的功能:
假设要传输的数据D=D1:在(clock简称clk)clk=0的时候,主锁存打开进行传输数据,把输入传送到从到从锁存器的输入端,即Qm = D1。然后clk从0→1的时候,主锁存器准备关闭,保持原来的值D1,与此同时从锁存器准备打开,把Qm的值传输到输出Qs,也就是Qs=Qm=D1。在clk=1的时候,主锁存器是关闭的,Qm保持D1不变,即Qm=D1;从锁存器是打开的,Qs=Qm=D1。接着clk从1→0的时候,主锁存器准备打开,准备传输数据;而从锁存器准备关闭。在clk=0的时候,主锁存打开进行传输数据,把输入传送到从到从锁存器的输入端,即Qm = D2;与此同时,从锁存器关闭,由于新的Qm即Qm还没有到达从锁存器的D端,因此在从锁存器关闭的时候,从锁存器锁存的是原来的值即D1,因此输出Qs =D1。然后接下来上升沿就传输D2…
从上面的分析可以找到,D触发器在时钟上升沿的时候锁存在时钟上升沿采到的值,并且保持一个时钟周期。这种在时钟上升沿锁存数据的触发器称为正边沿触发器,与此对应的还有负边沿触发的触发器,这里就不进行介绍了。
由D触发器延伸出去的知识点还有很多,比如寄存器,寄存器由多个D触发器构成(一个D触发器可以看做1位的寄存器);
比如带使能的触发器:

带复位的触发器:
  1. module D_flip_flop(clk,d,q,qn);
  2. input clk,d;
  3. output q,qn;
  4. wire q0,qn0;
  5. d_latch dlatch1(~clk,d,q0,qn0);//d_latch来源于上节
  6. d_latch dlatch2(clk,q0,q,qn);
  7. endmodule

其他边沿触发器的行为级描述

  1. 同步T触发器:
  2. 在时钟沿到来的时候若T为0,那么触发器输出不变。如果为1,则输出反转。


  3. moduleT_Flip(clk,rst,t,q,qb);
  4. inputwireclk,t,rst;


  5. outputwireqb;


  6. outputregq;

  7. assignqb=~q;
  8. always@(posedgeclk)begin


  9. if(rst)
  10. q<= 0;
  11. elseif(t)
  12. q<= ~q;


  13. else;//本来应该有保持与翻转两种,但q不变其实就不需要给出?
  14. end
  15. endmodule
    同步D触发器:这种触发器是最常用的。


  16. 它是在RS触发器的基础上改进而来。


  17. moduleD_Flip(clk,rst,d,q,qb);


  18. inputwireclk,rst,d;


  19. outputregq;


  20. outputwireqb;


  21. assignqb=~q;
  22. always@(posedgeclk)begin
  23. if(rst)
  24. q<= 0;


  25. else
  26. q<= d;
  27. end


  28. endmodule
  29. 同步JK触发器:
  30. 处于时钟沿触发时当JK为00,01,10时和RS触发器一样,当为11时和T触发器一样。
  31. moduleJK_Flip(clk,j,k,q,qb);

  32. inputwireclk,j,k;


    outputwireqb;


  33. outputregq;


  34. assignqb=~q;


  35. always@(posedgeclk)begin

  36. case({j,k})

  37. 2'b00:

  38. q<= q;

  39. 2'b01:

  40. q<= 0;

  41. 2'b10:

  42. q<= 1;

  43. 2'b11:

  44. q<= ~q;

    endcase

  45. end

  46. endmodule






精彩推荐



至芯科技12年不忘初心、再度起航12月17日北京中心FPGA工程师就业班开课、线上线下多维教学、欢迎咨询!
关于多周期路径约束
FPGA学习-PL控制PS端DDR的设计
扫码加微信邀请您加入FPGA学习交流群




欢迎加入至芯科技FPGA微信学习交流群,这里有一群优秀的FPGA工程师、学生、老师、这里FPGA技术交流学习氛围浓厚、相互分享、相互帮助、叫上小伙伴一起加入吧!


点个在看你最好看




原文标题:锁存器、触发器、寄存器的关联与区别及其相应的verilog描述

文章出处:【微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1603

    文章

    21328

    浏览量

    593264

原文标题:锁存器、触发器、寄存器的关联与区别及其相应的verilog描述

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    t触发器和jk触发器区别和联系

    触发器是数字电路中常用的组合逻辑电路,在现代电子系统中有着广泛的应用。其中,最常用的两种触发器是T触发器和JK触发器。本文将详细介绍T触发器
    的头像 发表于 02-06 14:04 1094次阅读

    d触发器有几个稳态 触发器上升沿下降沿怎么判断

    稳态是指触发器在某个特定的输入状态下稳定保持输出的状态。根据触发器的类型和触发方式,触发器分为很多种类,不同类型的触发器有不同的稳态。本文将
    的头像 发表于 02-06 13:36 792次阅读

    d触发器有几个稳态 d触发器和rs触发器区别

    区别 输入方式不同: D触发器只有一个输入端D,用来接收输入信号; RS触发器有两个输入端R和S,在不同情况下,分别用来置位和复位。 输出方式不同: D触发器有一个输出端Q和一个补码
    的头像 发表于 02-06 11:32 726次阅读

    XMC7200 ADC触发器输入和触发通道输入有什么区别吗?

    山地车的设备配置中,我看到了触发器输入和触发通道输入的选项。 我可以知道这两者有什么区别,以及使用它们而不是另一个的注意事项吗?
    发表于 01-24 07:53

    CY8CMBR3xxx系列中的LATCHED_BUTTON_STAT寄存器机制是怎样的?

    请教下CY8CMBR3xxx系列中的LATCHED_BUTTON_STAT寄存器机制是怎样的?器件是在什么时候 去清除LATCHD_BUTTON_STAT?谢谢。
    发表于 01-24 07:43

    移位寄存器的工作原理 移位寄存器左移和右移怎么算

    移位寄存器是一种用于在数字电路中实现数据移位操作的基本电路元件。它由多个触发器以及相关控制电路组成,具有存储、接受和移动数据的功能。移位寄存器可以分为两种类型:串行移位寄存器和并行移位
    的头像 发表于 01-18 10:52 1635次阅读

    触发器和锁存器的区别和联系

    触发器和锁存器是数字逻辑电路中两种重要的元件,它们在不同的应用场景中发挥着关键作用。虽然触发器和锁存器在一些方面有相似之处,但它们在功能和应用方面也存在一些明显的区别。下面将详细介绍触发器
    的头像 发表于 12-25 14:50 795次阅读

    的作用是什么?

    数码管的动态显示截取了部分程序,使用了74hc573,但是我觉得去掉程序照样可以执行
    发表于 10-26 07:18

    JK触发器与T触发器Verilog代码实现和RTL电路实现

    JK 触发器Verilog 代码实现和 RTL 电路实现
    的头像 发表于 10-09 17:29 2551次阅读
    JK<b class='flag-5'>触发器</b>与T<b class='flag-5'>触发器</b>的<b class='flag-5'>Verilog</b>代码实现和RTL电路实现

    什么是移位寄存器?数字电路中的寄存器类型有哪些呢?

    移位寄存器是一种时序逻辑电路,能够存储和传输数据。它们由触发器组成,这些触发器的连接方式使得一个触发器的输出可以作为另一个触发器的输入,具体
    的头像 发表于 09-20 10:44 4315次阅读
    什么是移位<b class='flag-5'>寄存器</b>?数字电路中的<b class='flag-5'>寄存器</b>类型有哪些呢?

    锁存器与触发器的概念及其区别

    请简述锁存器与触发器的概念,并分析二者的区别
    的头像 发表于 08-15 09:24 3432次阅读
    锁存器与<b class='flag-5'>触发器</b>的概念<b class='flag-5'>及其</b><b class='flag-5'>区别</b>

    Verilog设计寄存器

    现代逻辑设计中,时序逻辑设计是核心,而寄存器又是时序逻辑的基础,下面将介绍几种常见的寄存器Verilog设计代码供初学者进行学习理解。
    的头像 发表于 07-27 09:03 2099次阅读
    <b class='flag-5'>Verilog</b>设计<b class='flag-5'>寄存器</b>

    寄存器是什么?怎么操作寄存器点亮LED灯?

    寄存器,是集成电路中非常重要的一种存储单元,通常由触发器组成。在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两
    的头像 发表于 07-21 16:59 2981次阅读
    <b class='flag-5'>寄存器</b>是什么?怎么操作<b class='flag-5'>寄存器</b>点亮LED灯?

    基于STM32F407寄存器开发点灯

    寄存器的功能是存储二进制代码,它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发
    的头像 发表于 05-19 15:08 1092次阅读
    基于STM32F407<b class='flag-5'>寄存器</b>开发点灯

    LX2160A 的 UART 寄存器 (UARTMISC) 规格是什么?

    关于UARTMISC寄存器的行为,我觉得文档描述和实现是有区别的。通过设置1,“释放中断屏蔽时发生中断”是否正确? 根据 QorIQ LX 2160 A Reference Manual, Rev.
    发表于 05-19 07:01