脉冲同步器(快到慢)

请添加图片描述

  • 电路图原理:
    请添加图片描述
  • 因为题目中说clka时钟脉冲之间间隔很大,无须考虑脉冲间隔大小问题,所以不需要考虑反馈的问题。
  • 将sig_a转换为latch信号,(原高频脉冲无法被低频采样信号正确采集)
  • 打两拍同步到clkb时钟域上。
  • 获取上升下降沿,使用异或逻辑。
  • 其中快时钟下的单比特脉冲信号,慢时钟域如果直接采可能采不到或者有亚稳态。所以快时钟下的单比特脉冲信号需要展宽成电平信号,那么慢时钟就可以采到。但第一次展宽成电平信号后,下一次快脉冲要怎么办,此时已经高电平啦,所以就需要对于有效脉冲信号,每次电平信号就是翻转动作,同步到慢时钟域也是翻转动作,那么其做双边沿即可。
`timescale 100ps/100ps

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

	output  		 	sig_b
);

reg clka_sig;

always @(posedge clka or negedge rst_n)
begin 
	if(!rst_n) begin 
		clka_sig	<=	1'b0;
	end else if(sig_a) begin 
		clka_sig	<=	~clka_sig;
	end else if (!sig_a)begin 
		clka_sig	<=	clka_sig;
	end 
end 

reg [1:0] sync_clkb_sig;
always @(posedge clkb or negedge rst_n)
begin 
	if(!rst_n) begin 
		sync_clkb_sig	<=	2'b00;
	end else begin 
		sync_clkb_sig	<=	{sync_clkb_sig[0],clka_sig};
	end
end 

reg clkb_sig_d;
always @(posedge clkb or negedge rst_n)
begin 
	if(!rst_n) begin 
		clkb_sig_d	<=	1'b0;
	end else begin 
		clkb_sig_d	<=	sync_clkb_sig[1];
	end 
end 
wire clkb_sig_edge = sync_clkb_sig[1] ^ clkb_sig_d;
assign sig_b = clkb_sig_edge;

endmodule
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值