module rise_fail
(
input wire clk ,
input wire rst_n ,
input wire A ,
output reg A_rise,
output reg A_fail
);
reg A_r1;
reg A_r2;
reg A_r3;
//三级打拍处理,消除亚稳态
always@(posedge clk,negedge rst_n )
begin
if(~rst_n)
A_r1 <= 0;
else
A_r1 <= A;
end
always@(posedge clk,negedge rst_n )
begin
if(~rst_n)
A_r2 <= 0;
else
A_r2 <= A_r1;
end
always@(posedge clk,negedge rst_n )
begin
if(~rst_n)
A_r3 <= 0;
else
A_r3 <= A_r2;
end
//上升沿检测
always@(posedge clk,negedge rst_n )
begin
if(~rst_n)
A_rise <= 0; //上升沿标志
else if(A_r2==1 && A_r3==0) //(A_r2 && ~A_r3) //上升沿条件
A_rise <= 1; //A_rise <= A_r2 & ~A_r3;
else
A_rise <= 0;
end
//下降沿检测
always@(posedge clk,negedge rst_n )
begin
if(~rst_n) //
A_fail <= 0;
else if(A_r2==0 && A_r3==1) //下降沿条件
A_fail = 1;
else
A_fail <= 0;
end
endmodule
以下是时序图

&spm=1001.2101.3001.5002&articleId=161626412&d=1&t=3&u=180fa61c11ef4886a5596161a389850b)
1万+

被折叠的 条评论
为什么被折叠?



