题解 | #多bit MUX同步器#

参考该题题解区:画的真好,结构清晰明了多bit MUX同步器_牛客题霸_牛客网 (nowcoder.com)


正确代码:
注意点1:主要是将data_en使能信号先进行reg保存,再打两拍进行跨时钟域传输
注意点2:areg_data <= ~data_en ? data_in : areg_data;是错误的,直接areg_data <= data_in;即可。
`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] areg_data;
    reg areg_en, breg_en1,breg_en2;
    
    always @(posedge clk_a, negedge arstn) begin
        if(!arstn) begin
//             data_in <= 4'b0;
            areg_data <= 4'b0;
            areg_en <= 1'b0;
        end
        else begin
//             areg_data <= ~data_en ? data_in : areg_data;
            areg_data <= data_in;
            areg_en <= data_en;
        end
    end
    
    always @(posedge clk_b, negedge brstn) begin
        if(!brstn) begin
            breg_en1 <= 1'b0;
            breg_en2 <= 1'b0;
        end
        else begin
            breg_en1 <= areg_en;
            breg_en2 <= breg_en1;
        end
    end
    
    always @(posedge clk_b, negedge brstn) begin
        if(!brstn) begin
            dataout <= 4'b0;
        end
        else
            dataout <= breg_en2 ?  areg_data : dataout;
    end    
endmodule


全部评论

相关推荐

点赞 评论 收藏
分享
06-25 16:25
梧州学院 Java
愿汐_:项目介绍那么长,然而你做了啥就一句话?
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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