【牛客】VL69 脉冲同步器(快到慢)

描述

    sig_a 是 clka(300M)时钟域的一个单时钟脉冲信号(高电平持续一个时钟clka周期),请设计脉冲同步电路,将sig_a信号同步到时钟域 clkb(100M)中,产生sig_b单时钟脉冲信号(高电平持续一个时钟clkb周期)输出。请用 Verilog 代码描述。
    clka时钟域脉冲之间的间隔很大,无需考虑脉冲间隔太小的问题。
    电路的接口如下图所示:

在这里插入图片描述

输入描述:

input                 clka    , 
input                 clkb    ,   
input                 rst_n   ,
input                 sig_a   ,

输出描述:

output               sig_b
`timescale 100ps/100ps

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

	output  		 	sig_b
);
    
	reg sig_a_r = 1'b0;
	reg sig_a_pulse_r = 1'b0;
	
	reg sig_a_pulse_clkb_r    = 1'b0, 
		sig_a_pulse_clkb_d1_r = 1'b0,
		sig_a_pulse_clkb_d2_r = 1'b0;

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

	always @(posedge clka, negedge rst_n) begin
		if (~rst_n) begin
			sig_a_pulse_r <= 1'b0;
		end else begin
			if (~sig_a_r & sig_a) begin        					 // 仅同步sig_a上升沿
				sig_a_pulse_r <= ~sig_a_pulse_r;
			end
		end
	end
	
	always @(posedge clkb, negedge rst_n) begin
		if (~rst_n) begin
			sig_a_pulse_clkb_r    <= 1'b0;
			sig_a_pulse_clkb_d1_r <= 1'b0;
			sig_a_pulse_clkb_d2_r <= 1'b0;
		end else begin
			sig_a_pulse_clkb_r    <= sig_a_pulse_r;
			sig_a_pulse_clkb_d1_r <= sig_a_pulse_clkb_r;
			sig_a_pulse_clkb_d2_r <= sig_a_pulse_clkb_d1_r;
		end
	end

	assign sig_b = sig_a_pulse_clkb_d1_r ^ sig_a_pulse_clkb_d2_r;

endmodule
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wjh776a68

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值