题解 | #多bit MUX同步器#

多bit MUX同步器

https://www.nowcoder.com/practice/30e355a04a454e16811112cb82af591e

dataout
`timescale 1ns/1ns

module mux(
    input               clk_a   , 
    input               clk_b   ,   
    input               arstn   ,
    input               brstn   ,
    input       [3:0]   data_in ,
    input               data_en ,

    output reg  [3:0]   dataout
);

reg [3:0] data_d_clka;
reg en_d_clka;
reg en_d_clkb_d1;
reg en_d_clkb_d2;

//save data in clka domain
always@(posedge clk_a or negedge arstn)
    if(!arstn)  data_d_clka <= 1'b0;
    else if(data_d_clka ^data_in)   data_d_clka <= data_in;


//save en in clka domain
always@(posedge clk_a or negedge arstn)
    if(!arstn)  en_d_clka <= 1'b0;
    else if(en_d_clka ^data_en) en_d_clka <= data_en;

//en cross-domain
always@(posedge clk_b or negedge brstn)
    if(!brstn)  en_d_clkb_d1 <= 1'b0;
    else if(en_d_clkb_d1 ^en_d_clka)    en_d_clkb_d1 <= en_d_clka;

always@(posedge clk_b or negedge brstn)
    if(!brstn)  en_d_clkb_d2 <= 1'b0;
    else if(en_d_clkb_d2 ^en_d_clkb_d1) en_d_clkb_d2 <= en_d_clkb_d1;

always@(posedge clk_b or negedge brstn) begin
    if(!brstn)  dataout <= 4'b0;
    else if(en_d_clkb_d2) dataout <= data_d_clka;
end

endmodule
全部评论

相关推荐

双非阴暗爬行:我来看看笑死我了,这名字取得好想笑(没有不好的意思)
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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