#学习记录#
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. 电子工业出版社.