1 实现信号边沿检测功能,输出一个周期宽度的脉冲信号。
Verilog代码:
module edge_detect(
input clk,
input rst,
input din,
output dout1, //上升沿
output dout2, //上升沿
output dout3 //上升沿
);
reg [1:0] res;
always@(posedge clk or negedge rst) begin
if(!rst)
res <= 2'b00;
else
res <= {res[0], din};
end
assign dout1 = (~res[1]) && res[0];
assign dout2 = res[1] && (~res[0]);
assign dout3 = res[1] ^ res[0];
endmodule
testbench仿真文件:
module edge_detect_tb();
reg clk;
reg rst;
reg din;
wire pos_edge;
wire neg_edge;
wire data_edge;
initial begin
clk = 0;
rst = 0;
din = 0;
#15 rst = 1;
#20 din = 1;
#20 din = 0;
end
initial begin
forever #3 clk = ~clk;
end
edge_detect onedetect(
.clk(clk),
.rst(rst),
.din(din),
.dout1(pos_edge),
.dout2(neg_edge),
.dout3(data_edge)
);
endmodule
仿真波形: