0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

多位宽数据通过握手方式跨时钟域

FPGA技术驿站 来源:FPGA技术驿站 作者:FPGA技术驿站 2023-05-06 09:22 次阅读

对于多位宽数据,我们可以采用握手方式实现跨时钟域操作。该方式可直接使用xpm_cdc_handshake实现,如下图所示。xpm_cdc_handshake提供了6个参数

其中DEST_EXT_HSK用于决定握手信号是内部生成还是来自于该模块的外部;DEST_SYNC_FF决定了目的端控制信号对应的级联触发器个数;INIT_SYNC_FF决定了仿真时是否使用触发器的初始值;SIM_ASSERT_CHK用于判定是否检查仿真过程中可能的潜在问题;SRC_SYNC_FF决定了源端控制信号对应的级联触发器个数;WIDTH决定了传输数据的位宽。

8b508748-eb83-11ed-90ce-dac502259ad0.png

假定DEST_EXT_HSK为0(握手信号由内部生成),DEST_SYNC_FF和SRC_SYNC_FF均为2,WIDTH为4,综合后的电路结果如下图所示。可以看到设计使用了xpm_cdc_single,用于实现控制信号src_send的跨时钟域操作,这也就意味着src_send为高有效时要确保可以被接收端时钟稳定地采样到至少两次。

同时也不难理解SRC_SYNC_FF决定了src_send从发送时钟域到接收时钟域所需的级联触发器个数。下面第二张图片就显示了SRC_SYNC_FF为4时的电路。下面第三章图显示了DEST_SYNC_FF为4时的电路。

8b61df66-eb83-11ed-90ce-dac502259ad0.png8b7baf68-eb83-11ed-90ce-dac502259ad0.png8b9283be-eb83-11ed-90ce-dac502259ad0.png

我们单独把控制信号src_send提取出来,看看src_send是如何从发送时钟域到接收时钟域然后又回到发送时钟域生成src_rcv信号,如下图所示。图中淡紫色为接收时钟,浅蓝色为发送时钟,src_send从输入到最终产生src_rcv信号共经历了6个触发器,两次跨时钟域操作。src_send为高时,表明发送端有待发送数据,src_rcv为高时表明接收端已接收到数据,意味着跨时钟域操作完成。

8ba83308-eb83-11ed-90ce-dac502259ad0.png

从约束层面看,该模块使用了set_false_path,set_max_delay和set_bus_skew三种约束,如下图所示。但其实set_max_delay和set_bus_skew的延迟值都很大,所以可以认为与set_max_delay等效。

8bc07bc0-eb83-11ed-90ce-dac502259ad0.png

从仿真角度看,我们先看从慢时钟域到快时钟域,如下图所示。这里需要注意的是dest_req输出脉宽为一个接收时钟域脉宽,故该信号可用于最终数据(跨时钟域之后)的有效标记信号。

8be8cf6c-eb83-11ed-90ce-dac502259ad0.png

同样,该模块也支持从快时钟域到慢时钟域的跨时钟域的操作,如下图所示。

8bf52faa-eb83-11ed-90ce-dac502259ad0.png

既然是握手方式,那么就意味着每发送一个数据,就要发送一个与之同步的有效标记信号(src_send),当接收端接收到该信号时,开始处理,接收完毕发送src_rcv给发送端,表明数据被接收到。这样看来,握手方式因为“握手”的存在而不能连续发送数据,如下图所示,可以看到连续发送造成数据丢失。

8c034dce-eb83-11ed-90ce-dac502259ad0.png

从综合后的仿真来看,进一步理解“握手”,如下图所示,我们将数据路径上发送端和接收端触发器的使能信号添加到波形窗口里。其中p_0_in为发送端使能信号,对应的输出数据为src_hsdata_ff,dest_hsdata_en为接收端使能信号。

8c15f29e-eb83-11ed-90ce-dac502259ad0.png

如果参数DEST_EXT_HSK为1,表明外部提供接收应答信号,综合结果如下图所示。图中蓝色高亮为信号dest_ack,该信号经跨时钟域处理输出src_rcv给接收端,这正是与内部产生握手信号电路的区别。

8c27c32a-eb83-11ed-90ce-dac502259ad0.png

综上所述,可以看到“握手”方式需要发送端和接收端通过握手信号src_send和src_rcv或dest_ack来表明发送端有数据等待发送或接收端已接收到数据,“握手”一来一回就意味着发送端不能每个时钟周期都发送数据,发送数据率必然低于时钟频率。同时,握手方式也无法对待发送数据进行缓存。好处是这种方式仅仅消耗触发器和查找表资源,资源用量比较少,电路比较简单。


审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1629

    文章

    21729

    浏览量

    603010
  • 时钟
    +关注

    关注

    10

    文章

    1733

    浏览量

    131451
  • 触发器
    +关注

    关注

    14

    文章

    2000

    浏览量

    61132
  • SRC
    SRC
    +关注

    关注

    0

    文章

    60

    浏览量

    17983
  • 时钟域
    +关注

    关注

    0

    文章

    52

    浏览量

    9535

原文标题:跨时钟域电路设计(6):多位宽数据通过握手方式跨时钟域

文章出处:【微信号:Lauren_FPGA,微信公众号:FPGA技术驿站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何处理好FPGA设计中时钟问题?

    以手到擒来。这里介绍的三种方法时钟处理方法如下:打两拍;异步双口 RAM;格雷码转换。01方法一:打两拍大家很清楚,处理时钟
    发表于 09-22 10:24

    三种时钟处理的方法

    的三种方法时钟处理方法如下:  1. 打两拍;  2. 异步双口RAM;  3. 格雷码转换。  方法一:打两拍  大家很清楚,处理时钟
    发表于 01-08 16:55

    如何处理好FPGA设计中时钟间的数据

    时钟处理是FPGA设计中经常遇到的问题,而如何处理好时钟间的
    发表于 07-29 06:19

    如何处理好时钟间的数据

    时钟处理是什么意思?如何处理好时钟间的数据
    发表于 11-01 07:44

    看看Stream信号里是如何做时钟握手

    逻辑出身的农民工兄弟在面试时总难以避免“时钟”的拷问,在诸多时钟的方法里,
    发表于 07-07 17:25

    CDC单bit脉冲时钟的处理介绍

    单bit 脉冲时钟处理 简要概述: 在上一篇讲了总线全握手时钟处理,本文讲述单bit脉冲
    的头像 发表于 03-22 09:54 3509次阅读

    总线半握手时钟处理

    总线半握手时钟处理 简要概述: 在上一篇讲了单bit脉冲同步器时钟处理,本文讲述控制信号基
    的头像 发表于 04-04 12:32 2852次阅读
    总线半<b class='flag-5'>握手</b><b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>处理

    关于时钟的详细解答

    每一个做数字逻辑的都绕不开时钟处理,谈一谈SpinalHDL里用于时钟处理的一些手段方法
    的头像 发表于 04-27 10:52 4268次阅读
    关于<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>的详细解答

    单位信号如何时钟

    单位(Single bit)信号即该信号的位为1,通常控制信号居多。对于此类信号,如需时钟可直接使用xpm_cdc_single
    的头像 发表于 04-13 09:11 1314次阅读

    时钟电路设计:多位数据通过FIFO时钟

    FIFO是实现多位数据的异步时钟操作的常用方法,相比于
    的头像 发表于 05-11 14:01 3042次阅读
    <b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>电路设计:<b class='flag-5'>多位</b><b class='flag-5'>宽</b><b class='flag-5'>数据通过</b>FIFO<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>

    时钟电路设计总结

    时钟操作包括同步时钟操作和异步
    的头像 发表于 05-18 09:18 736次阅读
    <b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>电路设计总结

    FPGA时钟处理方法(一)

    时钟是FPGA设计中最容易出错的设计模块,而且一旦时钟出现问题,定位排查会非常困难,因为
    的头像 发表于 05-25 15:06 1986次阅读
    FPGA<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>处理方法(一)

    FPGA时钟处理方法(二)

    上一篇文章已经讲过了单bit时钟的处理方法,这次解说一下多bit的时钟方法。
    的头像 发表于 05-25 15:07 1022次阅读
    FPGA<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>处理方法(二)

    时钟电路设计:单位信号如何时钟

    单位(Single bit)信号即该信号的位为1,通常控制信号居多。对于此类信号,如需时钟可直接使用xpm_cdc_single,如
    的头像 发表于 08-16 09:53 1333次阅读
    <b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>电路设计:单位<b class='flag-5'>宽</b>信号如何<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>

    fpga时钟通信时,慢时钟如何读取快时钟发送过来的数据

    fpga时钟通信时,慢时钟如何读取快时钟发送过来的数据? 在FPGA设计中,通常需要
    的头像 发表于 10-18 15:23 1066次阅读