爱收集资源网

锁定你的数据,释放你的创造力

网络整理 2023-09-28 04:04

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

首先应当明晰锁存器和触发器是由与非门之类的东西构成。尤其是锁存器,虽说数字电路定义富含锁存器或触发器的电路叫时序电路,但锁存器有好多组合逻辑电路的特点。

电平触发的储存单元,数据储存的动作取决于输入时钟(或者使能)信号的电平值,当锁存器处于使能状态时,输出就会随着数据输入发生变化。(简单地说,它有两个输入,分别是一个有效讯号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来组成锁存器,这样就浪费了资源;

(钟控 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):用来暂时储存参与运算的数据和运算结果。在实际的数字系统中,通常把才能拿来储存一组二进制代码的同步时序逻辑电路称为寄存器。

区别与联系:由于触发器内有记忆功能,因此借助触发器可以便捷地构成寄存器。由于一个触发器才能储存一位二进制码,所以把 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的描述(行为级、门级)

在数字电路上面,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. module RS_Flip( clk,r,s,q,qb);

  2.  
  3. input wire clk,r,s;

  4. output reg q;

  5. output wire qb;

  6. assign qb = ~q;

  7. always@(posedge clk)begin

  8.     case({r,s})

  9.     2'b00:  q <= q;

  10.     2'b01:  q <= 1;

  11.    2'b10:  q <= 0;

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

  13.    endcase

  14. end

  15. module RS_latch(r,s,q,qn);
  16. input s,r;
  17. output q,qn;
  18. nor nor1(q,qn,r);
  19. nor nor2(qn,q,s);
  20. endmodule

D锁存的功能是在时钟高/低电平的时侯通过数据用jk触发器实现t触发器,在时钟低/高电平的时侯锁存数据(这样就明晰地说明了哪些时侯锁存哪些数据,而不是像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是哪些用jk触发器实现t触发器,输出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

触发器有好多类型,比如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. module T_Flip( clk,rst,t,q,qb);
  4.     input wire  clk,t,rst;


  5.     output wire qb;


  6.     output reg  q;

  7.     assign qb = ~q;
  8.     always@(posedge clk)begin


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


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


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


  17. module D_Flip( clk,rst,d,q,qb);


  18.  input wire  clk,rst,d;


  19.  output reg  q;


  20.  output wire qb;


  21.  assign  qb = ~q;
  22.  always@(posedge clk)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. module JK_Flip( clk,j,k,q,qb );

  32. input wire  clk,j,k;


    output wire qb;


  33. output reg  q;


  34. assign qb = ~q;


  35. always@(posedge clk)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

  47.  

用jk触发器实现t触发器
上一篇:微商赚钱秘籍:引爆流量、销售技巧揭秘 下一篇:没有了