题解 | 简单方法实现 #脉冲同步器(快到慢)#

脉冲同步器(快到慢)

https://www.nowcoder.com/practice/9f7c92635b5f49579e8e38fd8c8450d7

因为看到其他答案写的都比较复杂。所以这次将我完成比较简单的题解写一下。

完成这道题只需要注意两点。

(1)由300m快时钟到100m慢时钟同步,就只需要将sig_a单脉冲展宽为100m时钟的单脉冲就行。也就是将sig_a单脉冲扩充3倍,就是100m时钟里的单脉冲。

(2)扩充后的信号经过打两拍输出。就是最终需要的输出信号。

`timescale 100ps/100ps

module pulse_detect(
	input 				clka	, 
	input 				clkb	,   
	input 				rst_n		,
	input				sig_a		,

	output  		 	sig_b
);
reg [1:0] sig_a_cnt;
reg sig_a_syn;
reg sig_a_syn_reg0;
reg sig_a_syn_reg1;
wire sig_a_end;
assign sig_a_end = sig_a_cnt == 3 - 1;
always@(posedge clka or negedge rst_n)
begin
	if(!rst_n)
		sig_a_syn <= 0;
	else if(sig_a)
		sig_a_syn <= 1;
	else if(sig_a_end)
		sig_a_syn <= 0;
end

always@(posedge clka or negedge rst_n)
begin
	if(!rst_n)
		sig_a_cnt <= 0;
	else if(sig_a_cnt == 3 - 1)
		sig_a_cnt <= 0;
	else if(sig_a_syn)
		sig_a_cnt <= sig_a_cnt + 1;
end
always@(posedge clkb or negedge rst_n)
begin
	if(!rst_n)begin
		sig_a_syn_reg0 <= 0;
		sig_a_syn_reg1 <= 0;
	end
	else begin
		sig_a_syn_reg0 <= sig_a_syn;
		sig_a_syn_reg1 <= sig_a_syn_reg0;
	end
end
assign sig_b = sig_a_syn_reg1;

endmodule

#fpga岗面经##数字电路设计##23届找工作求助阵地##我的实习求职记录##实习,投递多份简历没人回复怎么办#
全部评论

相关推荐

10-30 10:16
南京大学 Java
龚至诚:给南大✌️跪了
点赞 评论 收藏
分享
无敌虾孝子:喜欢爸爸还是喜欢妈妈
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务