FPGA_跨时钟域.pdf

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
FPGA_跨时钟域

跨时钟域 4.1 4.1 44..11 跨时钟域处理(2200116600662200) 时钟对于FPGA就像我们的心脏,时刻控制着“跳动”的频率以及“血液”的 流速;时钟域好比通过心脏的血液血型,不同血型的血液会产生排斥作用。在设 计中建议时钟越少越好,好比于人有两个甚至更多的心脏,其内脏工作将会多么 混乱。 但是某些情况下多时钟又不可避免,比如从FPGA外部输入的数据,其自 带有个随路时钟,数据终归要在FPGA内部时钟域下处理,这来自外部的“血液” 如何处理才能与内部的“血液”融合呢?配对及转换工作则是必不可少的,这就引 入本节的主题:跨时钟域处理(ClockDomainCrossing): 跨时钟域处理需要两方面的工作:1、设计者处理;2、FPGA工具(Vivado) 处理。 1. 1. 11.. 设计者处理 首先讲解一下如果不进行跨时钟域处理,会出现什么问题呢?如图1所示路 径,QA 属于CLKA 时钟域的数据输出,另一个时钟CLKB 去捕获节点REGA 的输出QA,假定CLKA与CLKB 是异步时钟,它们之间的相位并不固定,因此 捕获过程中可能会出现建立冲突(setupviolation)和保持冲突(holdviolation), 如图2所示,左右分别为发生建立冲突和保持冲突的情况。 图1 图2 当冲突出现时(我感觉整个人都不好了),会发生什么事情呢?在发生建立 冲突或者保持冲突,捕获节点(REGB)会处于一个不定的状态,正常的状态是 高电平或者低电平,而此时的状态停留在高电平和低电平的中间,无效的电平X, 称这个状态为亚稳态。 如图3所示,捕获节点输出保持在亚稳态,可能在整个时钟周期内都保持在 亚稳态,由于不正确的状态,其后连接的逻辑在功能实现上就会出现问题,比如 一个判断信号上升沿的逻辑,通常判断D==HIGH D_PREV==LOW(D为 信号当前电平状态,D_PREV为信号上个时钟的电平状态)是否成立,而发生亚 稳态时则D_PREV== X,这个上升沿将会错过。因此,加入跨时钟域处理设计 是必须的。 图3 对于单比特信号的跨时钟域处理,常用的方法是“打两拍”,即在捕获时钟 域中加入两个寄存器进行时钟转换,如图4所示,加入REGB1和REGB2,虽然 REGB1处于亚稳态状态。 但是REGB2的输出QB2能稳定在正常的电平上,由于REGB1和REGB2 之间没有多余的逻辑,REGB1能有充裕的时间稳定状态,此情况下REGB2能完 美地隐藏REGB1的亚稳态。在捕获时钟的频率比较高的情况下,如果一个REG B2还未能隐藏亚稳态,拍数也可以增加三个或者更多,当然一般情况下,两拍 足矣。 图4 对于多比特总线数据的跨时钟域处理,能否也使用“打两拍”的方法呢? 答案见图5,虽然REGB2的输出是稳定的,稳定在哪一个电平是不确定的,不 过会在当前时钟或者下一个时钟输出正确电平,即偏差在一个时钟周期,也就是 说不能保证所有比特位的状态一致,也是这个原因,导致传输多比特总线数据时 各比特位不同步,常用的解决方法是加入FIFO 隔离,如图6所示,FIFO 能有效 地隔离两个时钟域,避免亚稳态的发生。 图5 图6 2.FPGA Vivado 2.FPGA Vivado 22..FFPPGGAA工具(VViivvaaddoo)处理 Vivado采用XDC对时序进行约束,默认情况下,会分析所有时钟的路径, 当然也包括跨时钟域的路径。 设计经过综合实现后,在Implementation中点击ReportClockInteraction(见 图7),得到设计中所有时钟的交互情况,如图8所示,共有两个时钟:CLK_REG 和C

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档