gpt4 book ai didi

vhdl - 在自动生成的赛灵思包装器 VHDL 文件中发现 ODDR2 用法

转载 作者:行者123 更新时间:2023-12-02 05:23:10 63 4
gpt4 key购买 nike

我正在使用 TEMAC IP 内核生成 1gb 以太网 MAC,并遇到了一段有趣的代码:

-- DDr logic is used for this purpose to ensure that clock routing/timing to the pin is
-- balanced as part of the clock tree
not_rx_clk_int <= not (rx_clk_int);

rx_clk_ddr : ODDR2
port map (
Q => rx_clk,
C0 => rx_clk_int
C1 => not_rx_clk_int,
CE => '1',
D0 => '1',
D1 => '0',
R => reset,
S => '0'
);

因此,根据我的理解,这里发生的事情是,通过将每个时钟用作多路复用器的选择线输入,两个相位相差 180 度的时钟正在生成一个"new"时钟。 (请参阅下面从第 64 页 in this document 中截取的非常有用的图表!)

figure 2.11 from page 64

C0 is '1'然后Q <= D0这给出了 rx_clk <= '1' , 如果 C1 is '1'然后Q <= D1这给出了 rx_clk <= '0' .在重置期间,两个触发器都重置为 rx_clk <= '0' while reset = '1'


所以我有几个问题:

  1. 以这种方式生成的两个时钟(not_rx_clk_intrx_clk_int)是否会精确地异相 180 度? (通过这种方式,我的意思是 not_rx_clk_int <= not (rx_clk_int) )。我假设不是由于增量时间?这意味着什么?
  2. 首先使用 ODDR2 有什么好处(为什么 rx_clk <= rx_clk_int 不够用)? (这导致……)
  3. 时钟作为时钟树的一部分“平衡”是什么意思? (第 59 页简要提到时钟树 here. )
  4. 不是 rx_clk在重置期间被门控?这不是很糟糕吗?
  5. 这是使用 ODDR2 和/或执行此操作的“标准”方式吗?有更好的选择吗? (因此,我是否应该将其添加到我有用的 VHDL 点点滴滴的武器库中?)

随时建议推荐阅读和/或其他资源。我不想在不知道这里到底发生了什么的情况下盲目地将这段代码复制/粘贴到我的项目中。

最佳答案

1) Are the two clocks (not_rx_clk_int and rx_clk_int) going to be precisely 180 degrees out of phase when generated in this way? (by this way, I mean not_rx_clk_int <= not (rx_clk_int)). I assume not due to delta time? What are the implications of this?

是的,它们会非常精确地分阶段。

Delta 延迟在这里不是问题。它们仅适用于 HDL 模拟,代替未知的“真实”延迟。我希望 Xilinx 的模型正确,以便两个边沿在同一个增量周期内发生变化! IE。他们会做类似的事情:

not_rx_clk <= not (rx_clk_int);
rx_clk <= rx_clk_int;

匹配增量。

2) What is the benefit of using the ODDR2 in the first place (why isn't rx_clk <= rx_clk_int adequate)? (Which leads to...)

它确保延迟相对于您无疑已与此时钟同步的其他 IO 是可预测的。如果您只是将时钟信号从引脚中驱动出来,它必须离开时钟分配网络,通过一些路由,然后到达引脚(因为时钟网络没有直接路径到达 IO 引脚。那是延迟是不可预测的,并且可能因编译而异。

3) What does it mean for a clock to be "balanced" as part of the clock tree? (clock tree mentioned briefly on page 59 [here.][3])

据我了解,这意味着时钟树确保时钟到达每个目的地的距离(大约)相同。

4) Isn't rx_clk being gated during reset? Isn't this bad?

是的,它正在被打开和关闭(我不太愿意使用“门控”这个词,因为它意味着一个特定的东西——通过与门输入——但事实并非如此)。只有你能说这是否重要 - 这取决于它的去向。

5) Is this the "standard" way of using a ODDR2 and/or performing this operation? Are there better options? (and hence, should I add this to my arsenal of useful VHDL bits and pieces? )

三问合一,偷偷摸摸:)

  • 是的,它是 (a) 使用 ODDR2 的标准方式(当然,另一种标准用法是用于实际的 DDR 数据)。
  • 不,我不知道有什么更好的方法来简单地打发时间。
  • 是的,将其添加到您的武器库中。

关于vhdl - 在自动生成的赛灵思包装器 VHDL 文件中发现 ODDR2 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13557755/

63 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com