完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
好吧,我还是真的不明白Virtex-7上的时钟,但是我觉得我还在继续,直到遇到以下情况。
我正在使用Vivado 2015.2并成功构建我的比特流,尽管尚未将其加载到任何硬件中。 现在我估计Vivado 2017.1并且我的比特流不会构建。 罪魁祸首是连接在PLL输出和需要差分时钟的示例代码之间的OBUFDS。 Vivado 2015.2还可以,但Vivado 2017.1 [正确地说?]抱怨O引脚不是FPGA输出引脚。 更具体地说,我正在使用一些Xilinx示例代码来执行ISERDES。 此代码需要来自FPGA输入引脚的差分时钟。 但是,我没有正确的频率进入引脚,必须使用PLL来产生正确的频率。 因此,我试图从PLL驱动该示例差分时钟输入。 因此,我把OBUFDS放在它们之间。 好吧,我在一篇论坛帖子中读到这是一个坏主意。 我现在也发现Vivado 2017.1无论如何它可能是一个非连接的情况。 我迷茫和迷茫。 在示例ISERDES代码中,代码在传入的p和n时钟上做了一些*单独的*延迟。 因此,如果我要进入示例ISERDES代码并尝试将其转换为单端时钟,我将不得不删除或以其他方式更改此延迟方法。 由于我完全不明白,我不想这样做。 相反,我想提供它想要的差分时钟。 我怎样才能做到这一点? 我可以用MMCM替换PLL,然后获得适合驱动这个ISERDES代码的差分时钟输出吗? 或者我以不同的方式做到这一点? 谢谢, 赫尔穆特 |
|
相关推荐
14个回答
|
|
你很注重XAPP585。
它完全不适用于您的情况。 XAPP585存在的唯一原因是处理(异常)情况,其中您有一个没有位时钟的同步输入接口(如HDMI的情况)。 忽略XAPP585。 3)有时我在较高级别的陈述上有点精神密集,需要澄清。 当你写“使用BUFIO使用位时钟”时,你的意思是简单地用BUFIO缓冲我的位时钟,然后将其提供给PLL或MMCM吗? 同样,忽略MMCM / PLL - 您不需要一个。 在XAPP585中,它仅用于将字时钟乘以给出位时钟。 你已经有位时钟,你不需要MMCM。 您可以将BUFIO的时钟I / O驱动到ISERDES的CLK引脚 您将BUFR的时钟I / O驱动到ISERDES的CLKDIV引脚和相关逻辑。 (见UG471,图3-6) 4)更重要的事实是,我已经向你描述的黑匣子外面的黑匣子里有事实。 我的数据真的是11位。 我确实是正确的,我不能做超过1:7的奇数的ISERDES吗? 我正在做的是接收数据AS,因为它是7位。 我将其中的三个连接成一个21位字,我更新每个收据。 然后我保留两个位位置计数器,一个用于插入7位,一个用于在每次两个位差支持11位时删除11位。 我猜它实际上是一个按位FIFO。 这样就完成了位宽变化和字同步。 这段代码已经很好了。 (是的,我只能透露这么多专有系统。我相信/希望你理解。有一个字时钟,一个11位字时钟。这对1:7 ISERDES来说没用。但是,我喂它 就像数据线一样。我看看它。因为它是一个固定的字时钟,我应该得到一个固定的11位结果IFF我的同步是正确的。我调整我的位计数器来做到这一点,然后我知道我的所有数据 也是对的。) 您可以在单个数据速率中执行的最大反序列化为8:1。 如果你需要11:1,那么你需要做一些像你上面描述的那样; 虽然,它可以用8:1而不是7:1来完成,而且真的只需要一个简单的“爬行” - 每个时钟将您的8个新位连接到您保留的位数(最多10个 - 从0开始) - 如果你有少于11位可用保存它们并且没有任何东西 - 如果你有11位或更多位,则输出11,并保存余数(左移位的连接位数为11) 这样(在1/8时钟上)你得到11位,但不是每个时钟(实际上是11个时钟中的8个)。 如果要将其移动到以比特率1/11运行的时钟,则需要将FIFO时钟交叉到该域中。 当然,如果比特率足够慢(只是BUFIO / BUFR / IOB) - BUFIO / BUFR / IOB和静态IDELAY - 具有校准状态机的BUFIO / BUFR / IOB和动态IDELAY 这取决于输入接口(以及设备和speedgrade)的时序特性。 Avrum 在原帖中查看解决方案 |
|
|
|
H,
也许这会有所帮助:FPGA内部的所有时钟路径都是单端的。 具有时钟功能的IO引脚具有受控延迟,并支持专用输入时钟缓冲器。 支持差分输入(和输出)的IO标准是LVDS(以及其他差分标准)。 P引脚名称用于所有约束,以在需要时识别路径。 这些工具尽其所能,并且有时会发出警告,警告后续版本会更改为错误,因为用户抱怨“不要让我这样做!” 当他们意识到他们遇到了麻烦。 时钟输出不存在:我们使用术语时钟转发,它使用DDR IOB DFF以获得最佳时序。 输出可以是单端或差分。 差分信号的内部使用通常对用户是隐藏的(如果使用的话 - 您不需要知道,我们也不会给您选择)。 Austin Lesea主要工程师Xilinx San Jose |
|
|
|
因此,首先,您不能在FPGA内部使用OBUF *的输出 - O直接进入引脚而不是其他地方。
如果这是在2015.2(并且我不知道如何可能),那么这是一个错误。 那么,让我们看看这个需要差分时钟的“示例”代码。 想要什么? 正如@austin所说,没有内部(用户可见)差分时钟。 差分信号存在的唯一位置是FPGA的引脚 - 输入IBUFDS或输出OBUFDS。 这些缓冲器将差分外部信号转换为单端内部信号(除少数例外)。 那么,为什么使用ISERDES的示例代码需要差分时钟。 很可能因为它希望连接到LVDS输入引脚; 差分时钟引脚转到IBUFDS,产生ISERDES实际使用的单端时钟。 但即使这样太简单了 - 要进入ISERDES时钟输入,时钟需要在专用时钟网络上。 虽然有许多合法的时钟拓扑结构,但它可能将BUFIO用于I / O时钟网络(以及用于ISERDES的低速时钟和接口其余部分的BUFR)。 如果您的时钟频率不合适,那么这个示例代码对您的应用来说是完全错误的,您需要一个新的,如果您需要乘以时钟频率,那么您需要PLL或MMCM(如您所知), 但你不能用PLL的输出驱动BUFIO(虽然它在结构上是合法的,但不打算以这种方式使用)。 所以,很可能你需要一个不同的时钟结构 - 可能是一个使用BUFG或BUFH(带内部反馈) - 而不是你的示例设计中(可能)使用的BUFIO / BUFR机制。 在示例ISERDES代码中,代码在传入的p和n时钟上做了一些*单独的*延迟。 你要么误解这个,要么说得不好。 当你的意思是它正在做单独的“延迟”时你的意思是约束(即set_input_delay)或实际的延迟元素(IDELAY)。 如果你的意思是IDELAY,那么这是不可能的; IDELAY位于IBUFDS之后,因此信号在到达IDELAY时已经是单端的。 如果你在谈论时序约束(set_input_delays),那么它不应该 - 你应该只限制差分信号的_p输入。 由于我完全不明白,我不想这样做。 你可能没有选择。 对于复杂的输入接口,您需要设计适合该任务的时钟机制。 Xilinx提供多种不同的时钟机制的全部原因是输入接口没有“一刀切”的解决方案。 您需要了解时钟结构的功能,并使用满足您需求的功能。 对不起 - 没有简单的解决方案...... 也许如果你描述你需要这个界面做什么我们可以帮助你更多,但不知道你想要完成什么(不是你想要做什么),我们真的不能说更多...... Avrum |
|
|
|
非常感谢Austin和Avrum的概述和详细解答。
以后我可能会更准确地提供有关我的输入和所需输出的详细信息,我可以这样做。 但是现在,我会根据你的建议跳到结束游戏,并问我是否正确地弄清楚我需要做什么。 示例代码与XAPP585相关联。 由于xilinx需要注册才能下载,我不想在这里发布所有内容供全世界查看。 您可以在xilinx.com上搜索“XAPP585”找到完整的代码,然后下载zip。 我正在使用Verilog。 让我们从那个pdf看图2。 注意我正在使用verilog,所以它是n_x_serdes_1_to_7_mmcm_idelay_sdr.v源文件。 我没有“LVDS CLOCK P”或“LVDS CLOCK N”输入。 所以我需要删除它们,这意味着我删除了相关的缓冲区(橙色的三角形)。 相反,我从一个单独的源合成一个时钟(在这篇文章中还没有提到),然后我在上下文中查看我最终得到的数据,以使自己同步。 一旦我完成了这个,我的合成时钟就像删除的LVDS CLOCK一样好。 模块serdes_1_to_7_mmcm_idelay_sdr接收clkin_p和clkin_n,它们确实是来自输入引脚。 该模块通过单个IBUFGDS_DIFF_OUT将这些模块连接到两个IDELAYE2模块。 两个IDELAYE2(我想单个IBUFGDS_DIFF_OUT)必须最终属于clkin_p和clkin_n来自的同一个引脚对吗? 如果这是真的,如果我没有那个引脚,那么我从设计中删除这个引脚意味着我还必须删除这三个模块。 这意味着我必须通过删除它们来清除IDELAYE2模块。 我看到两个IDELAYE2模块的输出使用如下。 正时钟路径来自IDELAYE2并进入MMCM。 (PLL选项看起来不会使用未定义的信号“rx_clk_from_serdes”进行编译。)负时钟路径来自IDELAYE2并转到一个ISERDESE2。 因此,假设我必须删除两个IDELAYE2(和IBUFDS_DIFF_OUT),这意味着我必须自己提供一个ISERDESE2。 但这不是与引脚相关的吗? ISERDESE2也必须消失,或者我可以自己从引脚外驱动它。 如果我能保持橙色的ISERDES,也许使用一个未使用或未充分使用的引脚附近的那个,那么那将是很好的。 这意味着我喂它和MMCM。 我想我可以用相同的相位单端时钟为它们提供它们,即使它们目前处于相反的阶段。 (仔细观察,这仍然导致我遇到黄色Calibration& bitslip状态机的问题。) 但是,如果我必须删除橙色ISERDES,那么我也必须中性黄色校准& bitslip状态机? 我宁愿保留它们,即使我相信我处于一个充分受控的环境中,我可能不需要它们。 在如何做事的这个分支上,我突然再次担心弄乱这一部分。 哦,所以,最后,似乎我别无选择,只能用黄色校准& bitslip状态机。 我宁愿不必了解它是如何工作的。 你同意我别无选择吗? ===========详细说明============ 那么我为什么要这么做呢? 我有两条线进入FPGA。 一个是串行数据。 另一个是时钟。 我使用1到7 ISERDES将7个输入数据位转换为单个7位数据字。 根据定义,我得到的位时钟与位同步。 但是,1:7 ISERDES示例不使用这样的位时钟。 相反,它使用的字时钟是我位时钟频率的1/7。 因此,我必须使用PLL从我的位时钟生成字时钟。 还要注意,没有外部字时钟,我不知道数据MSbit或LSbit是时间吗? 我必须从上下文看数据才能弄清楚这一点。 一旦我搞清楚了,发现我生成的字时钟是偏移的,我就能很容易地从ISERDES中获取输出并将其移动(螺旋旋转)适当的数量,直接解决ISERDES输出数据中的问题 本身。 所以我已经将所有这些都用于模拟,但是假设我可以将我的PLL输出转换为进入橙色IDELAY的差分输入。 但如果我不能这样做...... 再次感谢, 赫尔穆特 |
|
|
|
H,
如您所知,您必须深入了解并进行修改。 MMCM能够轻松提供clock_180。 IBUFGS_DSOUT还提供clock_180作为clock_n信号路径。 太糟糕了,这个内置到示例中,因为您确实需要使用自己的时钟和clock_180信号。 不要将时钟缓冲器视为提供差分信号,而是提供相位匹配时钟和clock_180。 Austin Lesea主要工程师Xilinx San Jose |
|
|
|
我非常怀疑这会起作用......
XAPP585用于源同步输入接口上的动态校准方案,该接口对静态捕获运行“太快” - 这通常意味着速率高于500Mbps(如果源具有不良输出特性,则速度更慢)。 整个动态校准方案基于以下事实:由PLL / MMCM生成并由时钟树分配的时钟在其中具有太多的变化以捕获数据。 因此,该设计使用ISERDES / IDELAY,由PLL / MMCM时钟提供时钟,对输入时钟进行采样,以便比使用带反馈的传统MMCM / PLL更精确地找到输入时钟的边沿。 它通过调整IDELAY的抽头设置,然后使用相同(中心对齐)或有意移位(边缘对齐)IDELAY值来捕获数据,因为传入时钟和传入数据之间存在已知的相位关系 。 一旦我完成了这个,我的合成时钟就像删除的LVDS CLOCK一样好。 如果我理解你要做的是什么,那么你正在尝试合成一个新的时钟,然后将它同步到LVDS时钟,然后允许动态校准系统(来自XAPP)获取你的数据。 因此(充其量)您在动态校准之上进行动态校准。 两个系统(你正在尝试做什么以及XAPP尝试做什么)基本上做同样的事情,除了你的时钟以X / P时钟频率的1 / N运行。 由于您尝试使用字时钟(比特率的时钟速率的1/7),您必须重新设计此系统以在一个动态校准步骤中完成整个过程 - 而不是在动态校准之上级联动态校准 。 这应该可以使用MMCM的“精细相移”而不是使用IDELAY来完成 - 在(HDMI字时钟)中取出“独立”时钟以产生正确频率的位时钟以及相位匹配字时钟(即同一MMCM的两个输出) - 在两个相同的缓冲区(BUFG或BUFH)上驱动时钟,以驱动所有ISERDES模块的CLK和CLKDIV(时钟和数据) - 使用时钟ISERDES返回的数据,使用MMCM的动态相移机制调整MMCM的时钟相位 - 如有必要,为数据使用一组90度异相时钟(如果接口是边对齐而不是源对齐) 最后,赛灵思为HDMI接收器提供了内核/示例设计 - 包括PHY和逻辑层。 有关HDMI的信息,请参见Xilinx IP页面。 Avrum |
|
|
|
感谢你们两位的快速回复。
我现在正在参加电话会议,但也想快速得到部分反馈。 奥斯汀:您是否建议我可以将我的PLL更改为MMCM,然后使用clock和clock_180替换示例中的正负时钟使用? 我意识到这个概念将根据Avrum的建议进行修改。 Avrum: 我不是在做HDMI。 我是不是意外地让你想到了,或者你是根据我的数据描述猜测的。 无论如何,我在概念中理解你在说什么。 我需要更密切地分析您的动态校准投诉,以真正地,本质地理解它。 然后,我可能还想看看你对HDMI示例的需求有多么不同。 我稍后会尝试写更多...... |
|
|
|
等等 - 我只是仔细阅读这个......
但是,1:7 ISERDES示例不使用这样的位时钟。 相反,它使用的字时钟是我位时钟频率的1/7。 因此,我必须使用PLL从我的位时钟生成字时钟。 你是说你只有一个时钟而不是一个字时钟? (我反过来解释它)。 这种情况(你有一个位时钟)是“更正常”的情况,而不是你只有一个字时钟,必须产生位时钟(这是HDMI的情况只提供1/7时钟,这是什么 XAPP是为了)。 当你有一个位时钟,那么你不需要PLL或MMCM - 你可以使用BUFIO使用位时钟捕获输入数据,并为ISERDES的CLKDIV产生1 / N时钟(N取决于你的 使用BUFR(可以进行整数时钟分频)的序列化以及数据是否是SDR或DDR相对于您的位时钟。 这称为“ChipSync”时钟,是ISERDES / BUFIO / BUFR存在的全部原因。 该系统的唯一要求是数据眼的宽度“足够大” - 取决于系列和speedgrade,这可能在1ns到2ns之间。 如果您的数据眼睛足够大,那么您不需要任何动态校准。 如果数据眼图太小,则需要动态校准。 然而,再次,这种校准机制不如XAPP所需的那么复杂。 在只有位时钟的所有情况下,您必须具有恢复成帧的机制。 这是通过桶形移位器或BITSLIP逻辑(实际上是相同的)在数字域(采样后)完成的。 除非有字时钟或其他帧信号可用,否则必须通过数据流的上下文确定正确的成帧。 Avrum |
|
|
|
Avrum,
谢谢。 我们越来越近了。 1)您是否知道使用ISERDES的任何优秀代码替代示例,如您所描述的那样,使用位时钟而不是字时钟? 我可能会转换到那个例子。 否则,我会按照我的计划削减XAPP585示例,尊重你对我所需要的建议。 2)我确实已经在数字逻辑中进行了同步一词,类似于你的建议。 3)有时我在较高级别的陈述上有点精神密集,需要澄清。 当你写“使用BUFIO使用位时钟”时,你的意思是简单地用BUFIO缓冲我的位时钟,然后将其提供给PLL或MMCM吗? 4)更重要的事实是,我已经向你描述的黑匣子外面的黑匣子里有事实。 我的数据真的是11位。 我确实是正确的,我不能做超过1:7的奇数的ISERDES吗? 我正在做的是接收数据AS,因为它是7位。 我将其中的三个连接成一个21位字,我更新每个收据。 然后我保留两个位位置计数器,一个用于插入7位,一个用于在每次两个位差支持11位时删除11位。 我猜它实际上是一个按位FIFO。 这样就完成了位宽变化和字同步。 这段代码已经很好了。 (是的,我只能透露这么多专有系统。我相信/希望你理解。有一个字时钟,一个11位字时钟。这对1:7 ISERDES来说没用。但是,我喂它 就像数据线一样。我看看它。因为它是一个固定的字时钟,我应该得到一个固定的11位结果IFF我的同步是正确的。我调整我的位计数器来做到这一点,然后我知道我的所有数据 也是对的。) 总而言之,这就是我所看到的。 我可以尝试适应不同的,更合适的模型。 或者我可以采取你的意思,并进一步删除我已经使用的示例代码... 我真诚地,真诚地,真诚地感谢你这么长时间坚持我。 |
|
|
|
...或者我可能从头开始构建新代码,仅使用现有的XAPP585作为粗略指导?
我的1:7 ISERDES的核心可能是如此简单,只需要BUFIO和ISERDES,还有其他什么? 然后我可以继续使用我的7:13代码。 |
|
|
|
......还有一个念头。
主板尚未设计。 这可能听起来很疯狂,但我可能会在外面专用一个无连接的FPGA引脚,但是用我的1/7时钟驱动它。 同时驱动它,我读回相同的引脚并几乎按原样使用XAPP585代码。 |
|
|
|
你很注重XAPP585。
它完全不适用于您的情况。 XAPP585存在的唯一原因是处理(异常)情况,其中您有一个没有位时钟的同步输入接口(如HDMI的情况)。 忽略XAPP585。 3)有时我在较高级别的陈述上有点精神密集,需要澄清。 当你写“使用BUFIO使用位时钟”时,你的意思是简单地用BUFIO缓冲我的位时钟,然后将其提供给PLL或MMCM吗? 同样,忽略MMCM / PLL - 您不需要一个。 在XAPP585中,它仅用于将字时钟乘以给出位时钟。 你已经有位时钟,你不需要MMCM。 您可以将BUFIO的时钟I / O驱动到ISERDES的CLK引脚 您将BUFR的时钟I / O驱动到ISERDES的CLKDIV引脚和相关逻辑。 (见UG471,图3-6) 4)更重要的事实是,我已经向你描述的黑匣子外面的黑匣子里有事实。 我的数据真的是11位。 我确实是正确的,我不能做超过1:7的奇数的ISERDES吗? 我正在做的是接收数据AS,因为它是7位。 我将其中的三个连接成一个21位字,我更新每个收据。 然后我保留两个位位置计数器,一个用于插入7位,一个用于在每次两个位差支持11位时删除11位。 我猜它实际上是一个按位FIFO。 这样就完成了位宽变化和字同步。 这段代码已经很好了。 (是的,我只能透露这么多专有系统。我相信/希望你理解。有一个字时钟,一个11位字时钟。这对1:7 ISERDES来说没用。但是,我喂它 就像数据线一样。我看看它。因为它是一个固定的字时钟,我应该得到一个固定的11位结果IFF我的同步是正确的。我调整我的位计数器来做到这一点,然后我知道我的所有数据 也是对的。) 您可以在单个数据速率中执行的最大反序列化为8:1。 如果你需要11:1,那么你需要做一些像你上面描述的那样; 虽然,它可以用8:1而不是7:1来完成,而且真的只需要一个简单的“爬行” - 每个时钟将您的8个新位连接到您保留的位数(最多10个 - 从0开始) - 如果你有少于11位可用保存它们并且没有任何东西 - 如果你有11位或更多位,则输出11,并保存余数(左移位的连接位数为11) 这样(在1/8时钟上)你得到11位,但不是每个时钟(实际上是11个时钟中的8个)。 如果要将其移动到以比特率1/11运行的时钟,则需要将FIFO时钟交叉到该域中。 当然,如果比特率足够慢(只是BUFIO / BUFR / IOB) - BUFIO / BUFR / IOB和静态IDELAY - 具有校准状态机的BUFIO / BUFR / IOB和动态IDELAY 这取决于输入接口(以及设备和speedgrade)的时序特性。 Avrum |
|
|
|
Avrum,
您对简单“抓取”的描述完全是我所实现的,包括棘轮输出节奏。 我想我的解释不够好。 我听说你使用8:1而不是7:1。 但是,它确实无关紧要,我已经有7:1的工作。 (我确实使用`定义,所以我可以毫不费力地将我的7:11转换为8:11。但是没有必要花费调试时间,所以我不会。) 关于ClockCapableI / O - > BUFIO - > ISERDES的CLK引脚加上ClockCapableI / O - > BUFR - > ISERDES的CLKDIV引脚......我相信CLK将是我的位时钟。 我相信CLKDIV将是我的字时钟。 我实际上只是偶然在ug471中找到了这个图,如图3-6所示。 这正是你所说的。 我看到“BUFR(/ X)”用除号而不是“/”。 当时我试图看看BUFR是否可以分裂。 这表明它确实如此。 所以*那*澄清了我要问的问题。 我之前不知道BUFR会分裂。 我将除以7(或8)。 (现在我意识到我需要更加关注这些原语的属性定义!) 您是否认为以下策略可能对我有用: 几乎从零开始编写无延迟解决方案,将您的建议与XAPP585的元素相结合(仅将元素与doc结合以剪切/粘贴模块实例化)。 出于DRC原因成功获得此生成比特流,然后像我一样继续在模拟器中开发。 这将允许我暂时解决这个问题并向老板展示进展。 将来,从产生信号的自定义硬件人员那里获取信息,以了解眼睛有多好以及路由是否会有明显的时间延迟。 (我终于在我的直觉中意识到这是关于什么的。在我的时钟速度下,可能会有路由延迟使眼睛蒙上阴影(当考虑多个信号重叠时),并且由于类似的问题,眼睛在开始时可能不会那么大。 自定义硬件生成信号。至少,我头脑中的这种心理模型似乎是合适的,我现在理解延迟的需要和功能。) 使用以上信息来确定是否需要构建静态或动态延迟。 随着时间的推移,也许我最终会得到完全从头开始的复杂代码。 |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
2384 浏览 7 评论
2800 浏览 4 评论
Spartan 3-AN时钟和VHDL让ISE合成时出现错误该怎么办?
2264 浏览 9 评论
3336 浏览 0 评论
如何在RTL或xilinx spartan fpga的约束文件中插入1.56ns延迟缓冲区?
2431 浏览 15 评论
有输入,但是LVDS_25的FPGA内部接收不到数据,为什么?
757浏览 1评论
请问vc707的电源线是如何连接的,我这边可能出现了缺失元件的情况导致无法供电
547浏览 1评论
求一块XILINX开发板KC705,VC707,KC105和KCU1500
369浏览 1评论
1965浏览 0评论
684浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 13:15 , Processed in 1.363493 second(s), Total 75, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号