首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >跨时钟域的方法--MCP方式个人理解

跨时钟域的方法--MCP方式个人理解

作者头像
数字IC小站
发布于 2022-08-26 10:34:25
发布于 2022-08-26 10:34:25
4760
举报
文章被收录于专栏:数字IC小站数字IC小站

本文重点参考了文章 《Clock Domain Crossing (CDC) Design & Verification Techniques Using SystemVerilog》

多周期路径法

在上期的文章跨时钟域的方法--多周期路径中,图中标红和的方框部分会将脉冲信号转换为电平信号。

在不出现下一次高脉冲信号之前,电平信号会保持不变,当然可能是保持在高电平,也可能是保持在低电平,电平不变的情况下,使用三级触发器同步就可以使得数据最大可能避免亚稳态并得到一个脉冲信号,然后将这个电平信号通过b_ack传递回原时钟域,作为握手确认信号,只有当原时钟域接收到该电平信号并产生脉冲信号以后,才允许进入下一次的信号传输,因此在源时钟域需要有一个状态机控制这两种状态之间的切换,这个状态机的状态很简单,只有两种状态。代码如下。

上述电路因为在传递过程中的多个时钟周期内,信号都被保持不变,因此理论上是不存在亚稳态现象的,是可以保持正常传输的。

但是上述电路只需数据及信号已经发送到目标域,就可以开始下一次的数据传输,但是在实际过程中,目标域可能还需要更多的时钟周期对数据进行传递与接收,因此上述电路可能就不会很适应,因此需要在目标域增加一个状态机,确认当目标域已经完成接收后再响应下次的数据传输,在理解了上图的前提下,下图就比较好理解了。

对于图22中的示例,接收时钟域有一个小的WAIT-READY、1状态的FSM,当输入到数据寄存器的数据是有效的时,它向接收逻辑发送一个有效的信号(bvalid)。在接收逻辑通过bload信号确认应该加载数据之前,数据实际上不会加载。没有反馈到发送时钟域,直到数据已加载,然后b_ack信号被发送回源时钟域。状态机的代码如下:

至此,MCP的方法就差不多讲完了。

至于使用异步FIFO,格雷码等,在以前的文章中讲述过,链接如下:

异步FIFO设计

Clifford论文系列--多异步时钟设计的综合及脚本技术(1)

Clifford论文系列--多异步时钟设计的综合及脚本技术(2)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数字IC小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档