Verilog 事件/边沿检测

#学习记录#

1  事件/边沿检测

  事件检测或者边沿检测在芯片设计中会经常遇到。当信号发生变化时我们需要检测这种变化,以此触发电路的相应操作。如果输入信号来自同一个时钟域,我们不需要对其进行同步化处理,如果信号来自于不同的时钟域,首先要进行信号的同步然后进行边沿检测。

2  同步信号检测

2.1  同步上升沿检测

  上升沿检测如图1、图2所示:

图1  同步上升沿检测电路图

图2  同步上升沿检测波形图

  verilog描述:

input sig_a;
reg   sig_a_d1;
wire  sig_a_risedge;
always@(posedge clk or negedge rstb)begin
    if(!rstb)
        sig_a_d1<=1'b0;
    else
        sig_a_d1<=sig_a;
end
assign sig_a_risedge = sig_a & !sig_a_d1;

2.2  同步下降沿检测

  下降沿检测如图3、图4所示:

图3  同步下降沿检测电路图

图4  同步下降沿检测波形图

  verilog描述:

input  sig_a;
reg    sig_a_d1;
wire   sig_a_faledge;
always@(posedge clk or negedge rstb)begin
    if(!rstb)
        sig_a_d1<=1'b0;
    else
        sig_a_d1<=sig_a;
end
assign sig_a_faledge = !sig_a & sig_a_d1;

 2.3  同步上升/下降沿检测

  上升/下降沿检测如图5、图6所示:

图5  同步上升/下降沿检测电路

图6  同步上升/下降沿检测波形图

  verilog描述:

input  sig_a;
reg    sig_a_d1;
wire   sig_a_anyedge;
always@(posedge clk or negedge rstb)begin
    if(!rstb)
        sig_a_d1 <= 1'b0;
    else
        sig_a_d1 <= sig_a;
end
assign sig_a_anyedge = (sig_a & !sig_a_d1)|(!sig_a & sig_a_d1);
//same as sig_a^sig_a_d1;

3  异步信号检测

3.1  异步上升沿检测

  异步输入上升沿检测如图7、图8所示:

图7  异步输入上升沿检测电路

图8  异步上升沿检测波形

  verilog描述:

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 or 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
        

参考文献

[1]  Verilog高级数字系统设计技术与实例分析. Kishore Mishra. 电子工业出版社.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值