【问题标题】:Passing clock between entities在实体之间传递时钟
【发布时间】:2015-11-24 16:21:56
【问题描述】:

我的疑问是如何在 VHDL 中处于同一层级的两个实体之间传递时钟。 我拥有的是一个实体“包装器”,其中实例化了两个组件“comp_1”和“comp_2”。 comp_1 有一个输出端口(比方说“clk_out”),它是它的时钟,也必须是 comp_2 的时钟。现在,如果我使用“包装器”中的信号将时钟从 comp_1 传递到 comp_2,这会导致仿真中出现功能错误(至少在 Modelsim 中),因为这两种设计被认为是不同步的(对吗?)。这是否也会导致综合错误(使用 Xilinx)?如何在不改变所有结构的情况下避免该问题?

architecture bhv of my_wrap is
    signal tmp_clk : std_logic;
begin

comp_1_i : comp_1
    port map(out_clk => tmp_clk,  
             ...
    );

compo_2_i : comp_2
    port map(in_clk => tmp_clk, 
             ...
    );

在这种情况下,在模拟中,两个组件之间的信号存在增量周期问题。这个问题也会影响在 FPGA 上实现的设计吗?

【问题讨论】:

  • 请添加显示问题的代码示例;这也让您很有可能自己发现解决方案。

标签: vhdl clock xilinx modelsim


【解决方案1】:

听起来你可能在时钟上有一个delta cycle delay,这是 VHDL 中的一个功能,但它可能看起来好像时钟和数据不同步。

这仅在仿真中显示,但它是通用 VHDL,因此不是 ModelSim 特定的。综合后(在硬件中),内部延迟给出了类似的行为。请注意,ModelSim 具有显示增量延迟的功能(“扩展时间增量模式”)。

没有代码,我猜comp_1 中生成的时钟除了在clk_out 上输出之外,还用于输出生成。根据实现的不同,它可能会导致时钟和数据之间存在增量周期延迟差异,这可能看起来不同步,但实际上是增量周期问题。

一种可能的解决方法是在不使用comp_1 的情况下输出生成的时钟,然后在comp_1 上进行额外的clk_in 输入,类似于comp_2 上的clk_in,然后使用该时钟内部在comp_1。然后comp_1comp_2 上的时钟使用将相似,从而消除了时钟增量延迟的问题。

【讨论】:

  • 感谢您的清晰解释和建议!
【解决方案2】:

正如 Morten 还指出的那样,一些源代码可以帮助您更准确地提出问题。

将一个组件的时钟输出信号连接到另一个组件的时钟输入信号没有任何问题。在您的情况下可能存在的问题是您生成时钟信号的方式。 根据您的用例,您有不同的选择。 如果您的目标是 FPGA,您应该使用给定供应商提供的时钟发生器 IP。

【讨论】:

    猜你喜欢
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多