源码:
module CSY(
input clk,
input rst_n,
input in,
output out_pos,
output out_neg
);
reg in_s1;
always@(posedge clk)
begin
if(~rst_n)
in_s1<=0;
else
in_s1<=in;
end
assign out_pos=in&~in_s1;
assign out_neg=~in&in_s1;
endmodule
激励:
`timescale 1ns/1ns
module CSY_tb();
reg clk;
reg rst_n;
reg in;
initial
begin
rst_n=0;
100 rst_n=1;
#1000 $stop;
end
initial
begin
clk=0;
end
initial
begin
in=0;
#100 in=1;
#100 in=0;
#100 in=1;
end
always #10 clk<=~clk;
CSY CSY_out(
.clk(clk),
.rst_n(rst_n),
.in(in),
.out_pos(),
.out_neg()
);
endmodule
沿检测的原理:先将输入进来的信号延迟,然后在用in&(in_s1)与(in)&in_s1两个语句检测沿。(当in进来时,它在clk的上升沿开始,然后in_s1延迟一拍在clk的下一个上升沿开始,然后在判断in的上升沿时,将in_s1取反与上in,则pos为高电平。相反,则neg为高电平。)