跨时钟操作

本文介绍了在不同时钟域之间同步信号的三种主要方法:电平同步、边沿检测和脉冲同步。电平同步适用于信号在新时钟域保持至少两个周期的情况;边沿检测要求输入脉冲宽度大于同步器时钟周期的两倍;脉冲同步涉及复杂的处理,以确保慢时钟能正确采样信号。提供了相关代码实现和参考资料。
摘要由CSDN通过智能技术生成

目录

1 电平同步

2. 边沿检测

3 脉冲同步


跨时钟的操作的重要性这里就不需要在赘述了,推荐一个比较经典的文章就是 《跨越鸿沟 同步世界中的异步信号》,建议这个文章和此博文搭配起来看。

https://wenku.baidu.com/view/3b84da0f844769eae009ed5e.html

https://reborn.blog.csdn.net/article/details/101280171

为了使同步工作能正常进行,从某个时钟域传来的信号应先通过原时钟域上的一个触发器,然后不经过两个时钟域间的任何组合逻辑,直接进度同步器的第一个触发器中。

 主要讲跨时钟域时候,1bit信号的三种同步方式。同步器类型基本上有三种:电平、边沿检测和脉冲。

1 电平同步

电平同步方式:主要使用在跨时钟域的信号在新时钟域中要保持高电平或低电平两个时钟周期以上。 从慢时钟跨越到快时钟 和从 快时钟跨越到慢时钟,对电平同步来讲,不影响。

module dianping_sys
(
 input        I_clk_1,
 input        I_clk_2,
 input        I_dat_in,
 
 output  reg  O_dat_out
 );

reg    S_dat_in_1d = 1'b0;
reg    S_dat_in_2d = 1'b0;
reg    S_dat_in_3d = 1'b0;

always @ (posedge I_clk_1)
begin
    S_dat_in_1d <= I_dat_in;
end

always @ (posedge I_clk_1)
begin
   S_dat_in_2d <= S_dat_in_1d;
	 S_dat_in_3d <= S_dat_in_2d;
	 O_dat_out   <= S_dat_in_3d;
end

endmodule
module dianping_sys_tb;

	// Inputs
	reg I_clk_1;
	reg I_clk_2;
	reg I_dat_in;

	// Outputs
	wire O_dat_out;

	// Instantiate the Unit Under Test (UUT)
	dianping_sys uut (
		.I_clk_1(I_clk_1), 
		.I_clk_2(I_clk_2), 
		.I_dat_in(I_dat_in), 
		.O_dat_out(O_dat_out)
	);
//   always # 5 I_clk_1 = ~ I_clk_1;
//	always # 15 I_clk_2= ~ I_clk_2;
   always # 15 I_clk_1 = ~ I_clk_1;
	always # 5 I_clk_2= ~ I
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值