这个就是需要对a 进行打一拍last_a<=a; 需要理解的点是打一拍的last_a是落后a一个时钟周期的,也就是对当前时刻使用a时候,此时的last_a是a的上一时刻的值。
`timescale 1ns/1ns
module edge_detect(
input clk,
input rst_n,
input a,
output reg rise,
output reg down
);
reg last_a;
always @(posedge clk,negedge rst_n)begin
if(!rst_n)
last_a<=0;
else last_a<=a;
end
always @(posedge clk,negedge rst_n)begin
if(!rst_n)begin
rise<=0;
down<=0;
end
else if(a==1 && last_a==0)begin
rise<=1;
down<=0;
end
else if(a==0 &&last_a==1)begin
down<=1;
rise<=0;
end
else begin
rise<=0;
down<=0;
end
end
endmodule