CDC不考虑时钟关系可以吗?
#心得
CDC不考虑时钟关系的做法
读书的时候,书上关于CDC的这块内容,总是分快到慢或者慢到快等情况讨论。然而,在实际设计中,这个时钟关系可能不是很明确的,因为存在DVFS,AVS等机制的影响,或者在设计初期,对于时钟关系本身就是不明确。那么这种情况下,CDC部分怎么实现呢?
01
信号宽度较宽的单bit信号
很简单,直接打两到三拍即可。
02
单周期的单bit信号(脉冲信号)
首先我们把需要同步的单比特信号在源时钟域扩展为电平信号,然后将扩展后的高电平信号经过目的时钟域打两拍进行同步,再使用同步后的电平信号产生一个脉冲信号。
如下图所示:
这个方式的短板在于必须保证pulse之间的间隔性,不能够太密集。要保证目的端能踩到电平边沿。
如果像下面这个图,就是过于密集。
对于过于密集的pulse信号,则需要使用其他方式,比如使用握手或者异步FIFO等。而握手在本质上也是限制了发送pulse的频率,只是能够确保数据不发生丢失。
03
多bit的数据传输
数据传输可以使用握手或者FIFO作为中间载体。这个使用很广泛,前面的文章中也讲述过。
Clifford论文系列--多异步时钟设计的综合及脚本技术(1)
但是使用FIFO,在很多设计上是消耗过大的,因此也存在另外一些方式,比如MCP,这个本质上也是一种握手机制+pulse转level的形式,这个具体细节可以查看文章跨时钟域的方法--多周期路径和跨时钟域的方法--MCP方式个人理解 。
这个方式的好处仍然在于不需要考虑时钟之间的快慢关系,但是存在的问题在于不能接受数据快速变化,换句话说,两次有效数据之间的间隔必须保证在至少6个cycle以上(基于打两拍的前提下)。
本质原因是状态机只要收到反馈信号以后才能把下一次的有效数据发送出去。
如果数据过于密集,还是得采用FIFO等。
以上只是设计常用方式,理解有限,有错误烦请通知更正。
相关文章
- 大佬们,我分完箱体了,我想统计每个箱体的accept_sum分别的和,可以怎么搞哇?
- 专业的软件安装包可以这样做!
- Rstudio改名Posit了,如果改名为PRstudio可以叫:“怕死秃头工作站”了
- Java 50个细节,可以提高程序性能
- 微信小程序可以自己开发吗?无代码制作小程序教程!
- 泡脚还是泡塑料袋?专家:这样操作可以不学
- 现在一行命令就可以快速删除系统预装的微软小娜并且也可以重新安装
- 外媒:华为的 Linux 发行版 openEuler 可以使用了!
- EA提交新专利 玩家可以使用语音来指挥NPC队友
- 如何利用MYSQL进行空间扩展?一些简单的方法可以有效地将MYSQL的空间利用最大化。本文探讨了关于MYSQL空间扩展的重要方面。(mysql空间扩展)
- Oracle 是否可以关闭事务(oracle关闭事务吗)
- C盘Oracle文件删是可以,但须小心(c盘oracle能删吗)
- 在Oracle数据库中可以使用IF吗(oracle中能用if吗)
- 分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]