数字IC前端学习笔记:信号同步和边沿检测

相关文章

数字IC前端学习笔记:LSFR(线性反馈移位寄存器)

数字IC前端学习笔记:跨时钟域信号同步

数字IC前端学习笔记:锁存器Latch的综合

数字IC前端学习笔记:FIFO的Verilog实现(一)

数字IC前端学习笔记:格雷码(含Verilog实现的二进制格雷码转换器)


  1. 同步信号的沿检测

同步信号表示信号只在时钟沿到来时改变,因此直接利用D触发器和与门即可构造一个边沿检测装置,即在输入信号上升沿到来时,输出一个周期的高电平信号。以下为同步信号上升沿检测,下降沿检测即为将输入信号取反后进行上升沿检测。

input sig_a;

reg sig_a_d1;
wire sig_a_risedge;

always@(posedge clk,negedge rstb)
begin
    if(!rst)
        sig_a_d1=1'b0;
    else
        sig_a_d1=sig_a;
end

assign sig_a_risedge=sig_a&!sig_a_d1;

  1. 异步信号的沿检测

此处的异步信号,指按键或跨时钟域等原因导致的输入信号与时钟不同步,如果不进行同步化,可能会出现亚稳态。

信号的同步化分为两种情况,取决于异步输入信号脉冲宽度和目标时钟域周期,如果异步输入信号宽度大些(如从慢时钟域到快时钟域的同步)

,此时的同步装置由异步输入后的多级移位寄存器构成(一般为两级以上才能保证消除亚稳态),如下图(a)。如果异步输入信号宽度小些(如如从快时钟域到慢时钟域的同步),此时的同步装置需要额外的寄存器资源,如下图(b)。

数字IC前端学习笔记:信号同步和边沿检测_第1张图片

因此,对于宽脉冲异步信号的边沿检测首先要将其同步化,接着使用同步边沿检测检测。对于窄脉冲异步信号,直接使用同步装置即可在输出端得到一个时钟周期的高电平。以下为宽脉冲异步信号上升沿检测,下降沿检测即为将输入信号取反后进行上升沿检测。

input sig_a;
input clkb;
input rstb;

reg sig_a_d1,sig_a_d2,sig_a_d3;
wire sig_a_posedge;

assign sig_a_posedge=sig_a_d2&!sig_a_d3;

always@(posedge clkb,negedge rstb)
begin
    if(!rstb)
    begin
        sig_a_d1<=1'b0;
        sig_a_d2<=1'b0;
        sig_a_d3<=1'b0;
    end
    else
    begin
        sig_a_d1<=sig_a;
        sig_a_d2<=sig_a_d1;
        sig_a_d3<=sig_a_d2;
    end
end

以上内容来源于《Verilog HDL高级数字设计(第二版)》和《Verilog高级数字系统设计技术和实例分析》

你可能感兴趣的:(数字IC,前端,fpga开发)