题解 | #脉冲同步器(快到慢)#

脉冲同步器(快到慢)

http://www.nowcoder.com/practice/9f7c92635b5f49579e8e38fd8c8450d7

`timescale 100ps/100ps

module pulse_detect(input                 clka    ,
                    input                 clkb    ,
                    input                 rst_n        ,
                    input                sig_a        ,
                    output              sig_b);
    reg [3:0] ff;
    //pulse to level transition,use 1 ff;
    always@(posedge clka or negedge rst_n) begin
        if (!rst_n)
            ff[0] <= 0;
        else
            ff[0] <= sig_a?~ff[0]:ff[0];
    end
    //2-level synchronizer
    always@(posedge clkb or negedge rst_n) begin
        if (!rst_n)
            ff[2:1] <= 0;
        else
            ff[2:1] <= {ff[1],ff[0]};
    end
    //level transition to pulse
    always@(posedge clkb or negedge rst_n) begin
        if (!rst_n)
            ff[3] <= 0;
        else
            ff[3] <= ff[2];
    end
    //whatever 1-0 or 0-1
    assign sig_b = ff[3]^ff[2];
    
endmodule

全部评论

相关推荐

点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 13:47
机械打工仔:你自己匿名可以,这么好的公司就别给它匿名了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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