edge_check.v
module edge_check(
input clk,
input in,
output neg_edge,
output pos_edge,
output out_signal
);
reg r1=1'd0;
reg r2=1'd0;
reg r3=1'd0;
assign neg_edge=(~r1)&r2;
assign pos_edge=r1&(~r2);
assign out_signal=r3;
always@(posedge clk)
begin
r1<=in;
r2<=r1;
end
always@(posedge clk)
begin
if(pos_edge==1'd1)
r3<=1'd1;
else
r3<=1'd0;
end
endmodule
tb.v
`timescale 1ns/1ns
module tb;
//被测模块的输入信号必须在tb中必须是reg型
reg clk;
reg in;
wire neg_edge;
wire pos_edge;
wire out_signal;
edge_check u1(
.clk(clk),
.in(in),
.neg_edge(neg_edge),
.pos_edge(pos_edge),
.out_signal(out_signal)
);
//产生时钟激励
initial clk = 1;
always #10 clk = ~clk;
//输入激励
initial begin
in=0;
#10;
in = 1;
#20
in=0;
#20;
in=1;
#20;
in=0;
#20;
in=1;
#20;
in=0;
$stop;
end
endmodule
仿真波形: