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
    +关注

    关注

    1603

    文章

    21331

    浏览量

    593582
  • 时钟
    +关注

    关注

    10

    文章

    1480

    浏览量

    130325
  • 触发器
    +关注

    关注

    14

    文章

    1694

    浏览量

    60434
  • SRC
    SRC
    +关注

    关注

    0

    文章

    60

    浏览量

    17805
  • 时钟域
    +关注

    关注

    0

    文章

    49

    浏览量

    9455

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

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

收藏 人收藏

    评论

    相关推荐

    quartus仿真双口RAM 实现时钟通信

    双口RAM如何实现时钟通信啊?怎么在quartus ii仿真???
    发表于 05-02 21:51

    时钟时钟约束介绍

    ->Core Cock Setup:pll_c0为(Latch Clock) 这两个是时钟时钟,于是根据文中总结:对于
    发表于 07-03 11:59

    同步从一个时钟到另一个时钟多位信号怎么实现?

    你好,我在Viv 2016.4上使用AC701板。我需要同步从一个时钟到另一个时钟多位信号(33位)。对我来说,这个
    发表于 08-17 07:48

    时钟为什么要双寄存器同步

    出现了题目中的时钟的同步问题?怎么办?十年不变的老难题。为了获取稳定可靠的异步时钟送来的信号,一种经典的处理
    发表于 08-20 11:32

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

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

    探寻FPGA中三种时钟处理方法

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

    三种时钟处理的方法

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

    三种FPGA界最常用的时钟处理法式

    时钟处理方法如下:打两拍;异步双口RAM;格雷码转换。01方法一:打两拍大家很清楚,处理时钟数据
    发表于 02-21 07:00

    FPGA初学者的必修课:FPGA时钟处理3大方法

    时钟处理方法如下:打两拍;异步双口RAM;格雷码转换。01方法一:打两拍大家很清楚,处理时钟数据
    发表于 03-04 09:22

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

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

    如何处理好时钟间的数据

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

    FPGA时钟处理简介

    (10)FPGA时钟处理1.1 目录1)目录2)FPGA简介3)Verilog HDL简介4)FPGA时钟
    发表于 02-23 07:47

    讨论时钟时可能出现的三个主要问题及其解决方案

    域中添加同步器来避免亚稳态问题。同步器允许振荡在足够的时间稳定下来,并确保在目标时钟获得稳定的输出。一个常用的同步器是一个级联触发器,如下图所示。该结构主要用于设计中的控制信号和单比特数据信号。
    发表于 06-23 15:34

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

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

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

    FIFO是实现多位数据的异步跨时钟域操作的常用方法,相比于握手方式,FIFO一方面允许发送端在每个时钟
    的头像 发表于 05-11 14:01 1856次阅读
    跨<b class='flag-5'>时钟</b>域电路设计:<b class='flag-5'>多位</b>宽<b class='flag-5'>数据通过</b>FIFO跨<b class='flag-5'>时钟</b>域