题解 | #多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