Vhdl 在实体之间传递时钟

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

我的疑问是如何在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, 
             ...
    );

在这种情况下,在模拟中,两个组件之间的信号存在delta循环问题。这个问题是否也会影响在FPGA上实现的设计

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

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

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


一种可能的修复方法是从
comp_1
输出生成的时钟而不使用它,然后在
comp_1
上输入一个额外的
clk_in
,类似于
comp_2
上的
clk_in
,然后在
comp_1
内部使用该时钟。然后,在
comp_1
comp_2
上的时钟使用将类似,消除了时钟上的增量延迟问题。

听起来您可能在时钟上有一个延迟,这是VHDL中的一个功能,但它可能看起来好像时钟和数据不同步

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

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


一种可能的修复方法是从
comp_1
输出生成的时钟而不使用它,然后在
comp_1
上输入一个额外的
clk_in
,类似于
comp_2
上的
clk_in
,然后在
comp_1
内部使用该时钟。然后,在
comp_1
comp_2
上的时钟使用将类似,消除了时钟上的增量延迟问题。

正如Morten还指出的,一些源代码可能有助于使您的问题更精确

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

正如Morten指出的,一些源代码可以帮助您更准确地回答问题

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

请添加一个代码示例,说明问题;因此,您也有可能自己发现解决方案;因此,您也有机会自己发现解决方案。感谢您的明确解释和建议!感谢您的明确解释和建议!