记录学习FPGA的点点滴滴
//首先是代码
module check_down(
input clk,
input gate,//测试信号
input rst_n,
output sign
);
reg d0;
reg d1;
always @(posedge clk or negedge rst_n)begin
if(!rst_n) begin
d0 <= 1'b0;
d1 <= 1'b0;
end
else begin
d0 <= gate;
d1 <= d0;
end
end
assign sign=d1&(~d0);
endmodule在这里插入代码片
然后是仿真代码
`timescale 1 ns/ 1 ns
module tb_check_down();
reg clk;
reg rst_n;
reg gate;
wire sign;
check_down u1(.clk(clk),.rst_n(rst_n),
.gate(gate),.sign(sign));
initial begin
clk<=1'b0;
rst_n<=1'b0;
gate<=1'b1;
#100 rst_n<=1'b1;
#200 gate<=1'b0;
end
always #10 clk<=~clk;
endmodule
原理较简单,在此就不赘述了。
最后是仿真波形
很显然,当测试信号gate下降沿到来时,sign在下个时钟周期变为高电平,检测成功。