参考:《数字电子技术基础简明教程》(第三版)
《正点原子逻辑设计指南 V1.8》
目录
锁存器与触发器
RS锁存器
锁存器(俗称 Latch)是数字电路中的一种具有记忆功能的逻辑元件。锁存器对脉冲电平敏感的存储单元电路,它只在输入脉冲的高电平(或低电平)期间对输入信号敏感并改变状态。在数字电路中可以记录二进制数字信号“0”和“1”。
真值表:
R(Reset) | S(Set) | Qn+1 |
0 | 0 | Qn |
0 | 1 | 1 |
1 | 0 | 0 |
1 | 1 | 不使用 |
逻辑门控RS锁存器
在RS锁存器的基础上增加了使能信号
D锁存器
真值表:
C | D | Qn | Qn+1 |
0 | X | 0 | 0 |
0 | X | 1 | 1 |
1 | 0 | 0 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 |
D触发器
工作原理:
D触发器具有主从结构的D锁存器,主锁存器受/CLK控制,从锁存器受CLK控制。
- CLK=1时的情况,门G7、G8被封锁,门G3、G4打开,从锁存器的状态决定与主锁存器,Q=Qm,Q'=Qm'。输入信号D被拒之门外。
- CLK=0时的情况,门G7、G8打开,门G3、G4被封锁,从锁存器保持原来的状态不变,D信号进入主锁存器。但是要特别注意,这是主锁存器只跟随而不锁存,即Qm跟随D的变化,D怎么变Qm也随之怎么变。
- CLK上升沿时刻情况,CLK上升沿到来时,将封锁门G7、G8,打开门G3、G4,主锁存器CLK上升时刻D的值即Qm=D,随后将该值送入从锁存器,时Q=D,Q'=D'。
- CLK上升沿过后情况,主锁存器锁存CLK上升沿时刻D的值显然将保持不变,从而从锁存器的状态当然也不会发生变化。
综上所述,可得 Qn+1 = D CLK上升沿时刻有效
边沿检测电路
y1 是上升沿检测输出, y2 是下降沿检测输出,y3 是双沿检测输出(异或门)
reg a_dly1 ;
always @ (posedge clk or negedge rst_n ) begin
if (rst_n == 1'b0)
a_dly1 <= 1'b0 ;
else
a_dly1 <= a ;
end
assign y1 = a & ( ~a_dly1 ) ;
assign y2 = ~a & a_dly1 ;
assign y3 = a ^ a_dly1 ;
同步复位与异步复位
同步复位
always @ (posedge clk) begin
if (rst_n == 1'b0)
y <= 1'b0 ;
else
y <= b ;
end
同步复位的优点如下:
a、有利于仿真器的仿真;
b、可以使所设计的系统成为 100%的同步时序电路,有利于时序分析,而且可综合出较高的 Fmax;
c、由于只在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的复位毛刺。
同步复位也有一些缺点, 缺点如下:
a、复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。同时还要考虑诸如
时钟偏移、组合逻辑路径延时、复位延时等因素(所以复位信号有时需要脉冲展宽,用以保证时钟有效期间
有足够的复位宽度);
b、由于大多数的逻辑器件的目标库内的 DFF 都只有异步复位端口,所以,倘若采用同步复位的话,综
合器就会在寄存器的数据输入端口插入组合逻辑,这样就会一方面额外增加 FPGA 内部的逻辑资源,另一
方面也增加了相应的组合逻辑门时延。
异步复位
always @ (posedge clk or negedge rst_n) begin
if (rst_n == 1'b0)
y <= 1'b0 ;
else
y <= b ;
end
优点:
a、大多数目标器件库的 DFF 都有异步复位端口,那么该触发器的复位端口就不需要额外的组合逻辑,
这样就可以节省资源;
b、设计相对简单;
c、异步复位信号产生和响应都很方便(电路在任何情况下都能复位而不管是否有时钟出现)。
异步复位也有一些缺点, 缺点如下:
a、最大的问题在于它属于异步逻辑,问题出现在复位释放时,而不是有效时,如果复位释放接近时钟
有效沿,则触发器的输出可能进入亚稳态(此时 clk 检测到的 rst_n 的状态就会是一个亚稳态,即是 0 是 1
是不确定的),从而导致复位失败。
b、可能因为噪声或者毛刺造成虚假复位信号(比如系统正常工作时突然复位)(注意:时钟端口、清
零和置位端口对毛刺信号十分敏感,任何一点毛刺都可能会使系统出错,因此判断逻辑电路中是否存在冒
险以及如何避免冒险是设计人员必须要考虑的问题);
c、静态定时分析比较困难,静态时序分析一般是针对同步设计的,都是基于时钟周期来分析时序的。
d、对于 DFT(DesignForTest 可测性设计) 设计,如果复位信号不是直接来自于 I/O 引脚,在 DFT 扫描
和测试时,复位信号必须被禁止,因此需要额外的同步电路。