VL24 边沿检测时遇到的问题

不可以使用边缘检测来判定rise和down的状态,会出现以下问题。

`timescale 1ns/1ns
module edge_detect(
	input clk,
	input rst_n,
	input a,
	
	output reg rise,
	output reg down
);
reg rise_ray,down_ray;
always@(posedge clk or negedge rst_n)begin
    if (~rst_n) begin
        rise <= 0;
        down <= 0;
        down_ray <= 0;
        rise_ray <= 0;
    end
    else begin
        if (rise_ray) begin 
                rise <= 1;
                rise_ray <= 0;
            end
        if (down_ray) begin
                down <= 1;
                down_ray <= 0;
            end
        if (down_ray==0&down==1) down <= 0;
        if (rise_ray==0&rise==1) rise <= 0;
    end
end
always@(posedge a)begin
    rise_ray <= 1;
end
always@(negedge a)begin
    down_ray <= 1;
end
endmodule

输出结果:

出现的问题:

可以发现当a信号从X态转为1或0时,边沿检测会额外检测到一次变化,使rise和down额外跳转一次。

#在线编程#
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务