脉冲同步电路(慢时钟域到快时钟域)

module代码

`timescale 1ns / 1ps
module pulse_sync_02(
			input clk1,			//快时钟
			input clk2,			//慢时钟
			input rst_n,
			input pulse_in,		
			output pulse_out);
			
			wire toggle_pulse;
			reg pulse_01;
			reg pulse_buf_1,pulse_buf_2;
			
			assign toggle_pulse = (pulse_in)? (~pulse_01):pulse_01;
			
			always @ (posedge clk1 or negedge rst_n)
				begin
					if (!rst_n)
						pulse_01 <= 1'b0;
					else	
						pulse_01 <= toggle_pulse;						
				end
			
			always @ (posedge clk2 or negedge rst_n)
				begin
					if (!rst_n)
						begin
							pulse_buf_1 <= 1'b0;
							pulse_buf_2 <= 1'b0;
						end	
					else
						begin
							pulse_buf_1 <= toggle_pulse;
							pulse_buf_2 <= pulse_buf_1;
						end
				end
			
				assign pulse_out = pulse_buf_2 ^ pulse_buf_1;
endmodule

测试代码

`timescale 1ns / 1ps


module sim_pulse_sync_02;

        reg clk1;
        reg clk2;
        reg rst_n;
        reg pulse_in;
        wire pulse_out;
        
pulse_sync_02 m0(
			.clk1(clk1),			
			.clk2(clk2),			
			.rst_n(rst_n),
			.pulse_in(pulse_in),		
			.pulse_out(pulse_out));
			
		initial
		  begin
		      clk1 = 1'b0;
		      clk2 = 1'b0;
		      rst_n = 1'b1;
		      pulse_in = 1'b0;
		      #20 rst_n = 1'b0;
		      #40 rst_n = 1'b1;
		      #10 pulse_in = 1'b1;
		      #20 pulse_in = 1'b0;
		      #80 pulse_in = 1'b1;
		      #20 pulse_in = 1'b0;
		  end
		  
		  always #10 clk1 = ~clk1;
		  always #20 clk2 = ~clk2;
endmodule

仿真结果在这里插入图片描述
生成RTL结构
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值