在实体之间传递时钟

时间:2015-11-24 16:21:56

标签: vhdl clock xilinx modelsim

我怀疑如何在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上实现的设计?

2 个答案:

答案 0 :(得分:3)

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

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

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

可能的解决方法是从comp_1输出生成的时钟,而不使用它,然后在clk_in上输入comp_1,与clk_in上的comp_2类似{1}},然后在comp_1内部使用该时钟。然后,comp_1comp_2上的时钟使用情况类似,从而消除了时钟上的延迟延迟问题。

答案 1 :(得分:1)

正如Morten所指出的,一些源代码可以帮助您提高问题的准确性。

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