题解 | #多bit MUX同步器#

`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 en_temp;
reg en_1,en_2;
reg [3:0] data_temp;

always @(posedge clk_a or negedge arstn) begin
	if(!arstn) begin
		data_temp <= 4'b0;
	end
	else if(data_en) begin
		data_temp <= data_in;
	end
end

always @(posedge clk_a or negedge arstn) begin
	if(!arstn) begin
		en_temp <= 1'b0;
	end
	else begin
		en_temp <= data_en;
	end
end

always @(posedge clk_b or negedge brstn) begin
	if(!brstn) begin
		en_1 <= 1'b0;
	end
	else begin
		en_1 <= en_temp;
	end
end

always @(posedge clk_b or negedge brstn) begin
	if(!brstn) begin
		en_2 <= 1'b0;
	end
	else begin
		en_2 <= en_1;
	end
end

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

endmodule

全部评论

相关推荐

11-27 17:35
已编辑
蚌埠坦克学院 C++
深信服 后台开发 n×12
点赞 评论 收藏
分享
铁锈不腻玩家:下面那个袁先生删了,问他怎么回事,头像都换不明白
点赞 评论 收藏
分享
shtdbb_:还不错,没有让你做了笔试再挂你
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务