题解 | #边沿检测#

边沿检测

http://www.nowcoder.com/practice/fed4247d5ef64ac68c20283ebace11f4

alt

`timescale 1ns/1ns
module edge_detect(
	input clk,
	input rst_n,
	input a,
	
	output wire rise,
	output wire down
);
	
    reg b,c;
    always@(posedge clk or negedge rst_n) begin
        if(!rst_n) begin b<=0;c<=0;end
        else begin
            b<=a;
            c<=b;
        end
    end
    
    assign rise = ((b && ~c)===1) ? 1:0;
    assign down = ((~b && c)===1) ? 1:0;//因为a有一开始的未知态,所以用全等于
endmodule
// `timescale 1ns/1ns
// module edge_detect(
//     input clk,
//     input rst_n,
//     input a,
     
//     output reg rise,
//     output reg down
// );
//     reg a_before;
//     always@(posedge clk or negedge rst_n) begin
//         if(!rst_n) begin
//             a_before<=0;
//             rise<=0;
//             down<=0;
//         end
//         else a_before<=a;
//         rise <= ((a & ~a_before)===1)?1:0;
//         down <= ((~a & a_before)===1)?1:0;//因为a有一开始的未知态,所以用全等于
//     end
// endmodule
全部评论
方案一是锁存一次、方案二是锁存2次 相应的电路图如图所示
点赞 回复 分享
发布于 2022-04-10 16:53

相关推荐

11-24 19:04
已编辑
湖南工商大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务