在做FPGA硬件编程时,经常会遇到需要检测的上升沿信号。实际举例如下所示:
1.模块运行时钟为clk
2.需要检测的上升沿信号为flag_in
比较规范的写法如下:
reg flag1;
reg flag2;
wire flag_out;
assign flag_out = (!flag2) && flag1;
always@(posedge clk)begin
if(rst==0)begin
flag1 <= 1'b0;
flag2 <= 1'b0;
end
else begin
flag1 <= flag_in;
flag2 <= flag1 ;
end
end
verilog代码如上图所示:
1.当flag一直为0没有变化时,flag_out为0;
2.当flag一直为1没有变化时,flag_out为0;
3.当flag先1后0,即下降沿时,在紧接着的一个时钟周期内,flag1为0,flag2为1,则此时flag_out为0;
4.当flag先0后1,即上升沿时,在紧接着的一个时钟周期内,flag1为1,flag2为0,则此时flag_out为1。
实现目标