跨时钟域处理所用到的同步器
来源:互联网 发布:上海大学 乐乎 编辑:程序博客网 时间:2024/05/10 20:57
本知识来自《Verilog编程艺术》作者:魏家明 一书
同步器基本上分为三种:电平同步、边沿检测和脉冲检测
电平同步:
简单的电平同步有两个触发器串联而成,中间没有其他组合电路。这种设计可以保证后面触发器使用前面触发器的输出时,前面触发器已经退出亚稳态,并且输出已经稳定。设计中要注意将两个触发器放得尽可能近,以确保二者之间有最小的时钟偏差。
为了使同步能正常进行,从原时钟域传来的信号应先通过原时钟域上的一个触发器,然后直接进入同步器的第一级触发器中(不能经过两个时钟域间的任何组合逻辑)。这一要求非常重要,因为同步器的第一级触发器对组合逻辑所产生的毛刺非常敏感。如果一个足够长的毛刺正好满足建立/保持时间的要求,那么同步器的第一级触发器将会将其放行,就给新时钟域的后续逻辑送出一个虚假信号。
脉冲同步:
脉冲同步检测同步器的输入信号是一个单时钟宽度脉冲,它触发原时钟域中的一个翻转电路。每当翻转电路接收到一个脉冲时,它就会在高、低电平间进行转换,然后通过电平同步器输出的信号到达异或门的一个输入端,而这个输出的信号再经过一个时钟周期的延迟进入异或门的另一端,翻转电路每转换一次状态,这个同步器的输出端就产生一个单时钟宽度的脉冲。
脉冲同步的基本功能是从某个时钟域取出一个单时钟宽脉冲,然后在新的时钟域中建立另一个单时钟宽度的脉冲。脉冲同步的限制,即输入脉冲之间的最小间隔必须等于两个同步器时钟周期。如果输入脉冲相互过近,则新时钟域中的输出脉冲也紧密相邻,结果是输出脉冲宽度比一个时钟周期宽。当输入脉冲时钟大于两个同步器时钟周期时,这个问题更加严重。这种情况下,如果输入脉冲相邻太近,则同步器就不能检测到每个脉冲。
同步多位数据:
有时候需要将多位数据从一个时钟域传送到另一个时钟域,然后再使用。此时不能使用多位电平同步器直接同步多位数据,然后就直接使用这些位的同步结果,因为这样根本就起不到同步作用,这些多位数据在新时钟域里可能不是在同一个时钟沿更改的。我们也不能使用脉冲同步器同步多位控制位,因为同步后的多位控制位可能根本就是错乱的。
同步多位数据应该按照下面的步骤进行:
1、确保in_data在传送期间不会发生改变,所以尽量采用寄存器输出。
2、使用脉冲检测同步器,传送in_clk域的脉冲in_pulse到out_clk域的out_pulse,通知多位数据in_data已准备好。
3、在out_clk域检测到out_pulse之后,才把in_data直接锁存到out_data中。
- 跨时钟域处理所用到的同步器
- 异步时钟域的亚稳态问题和同步器(四)
- 异步时钟脉冲同步器的设计
- 跨时钟域的处理
- 跨时钟域处理
- 跨时钟域处理
- 跨时钟域处理
- FPGA跨时钟域的处理方法
- FPGA跨时钟域的处理方法
- FPGA跨时钟域的处理方法
- abap 所用到的tcode
- web所用到的技术
- 如何处理跨时钟域
- 跨时钟域处理-flag
- 跨时钟域信号处理
- 跨时钟域FIFO的老话题:快时钟域的地址信息如何同步到慢时钟域?
- FPGA跨时钟域处理的三大方法
- 我所用到的有用的网址!!!
- 你out了吗?来SAIF享受终身学习计划!
- 聚类分析之初步理解
- LeetCode OJ 之 Roman to Integer(罗马数字转十进制)
- GDB在调试Zend引擎时的几个重要的用法
- 判断一个字符串中的字符是否都在另一个中出现
- 跨时钟域处理所用到的同步器
- jQuery左侧二级菜单树
- 【Python系列】02-安装Python及环境设置
- android local socket 通信
- 基于xmpp openfire smack开发之openfire介绍和部署[1]
- Control Events 不常用事件
- paypal开发者账户申请步骤(最新最实用)
- Dongle烧写模块重构(九)-Makefile的简化修改及工程模块的独立
- ARM Linux内核驱动异常定位调试--反汇编arm-linux-objdump