[RTLLM-p046] Miscellaneous/Others/synchronizer 的題解


記住 在沒有思路時使用題解,不要從它複製貼上程式碼。請尊重題目和題解的作者。
在真正解決題目之前提交題解的程式碼是可以封禁的罪行。

作者: m1145505

module synchronizer(
    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_reg;
always@(posedge clk_a or negedge arstn)
begin
    if(!arstn)  data_reg <= 0;
        else    data_reg <= data_in;
end
reg en_data_reg;    
always@(posedge clk_a or negedge arstn)
begin
    if(!brstn)  en_data_reg <= 0;
        else    en_data_reg <= data_en;   
end

reg en_clap_one;    //1
reg en_clap_two;    //2
always@(posedge clk_b or negedge brstn)
begin
    if(!brstn)  en_clap_one <= 0;
        else    en_clap_one <= en_data_reg; 
end
always@(posedge clk_b or negedge brstn)
begin
    if(!brstn)  en_clap_two <= 0;
        else    en_clap_two <= en_clap_one;
end

always@(posedge clk_b or negedge brstn)
begin
    if(!brstn)  dataout <= 0;
        else    dataout <= (en_clap_two) ? data_reg : dataout;
end

endmodule

評論

目前沒有評論。