时钟过程中的信号分配立即发生

时间:2018-08-17 09:00:11

标签: vhdl

因此,我有一个足够简单的时钟处理过程,可以将一个std_logic_vector的值分配给另一个。

capture_proc: process(clk) 
begin
    if rising_edge(clk) then
        captured_data <= sdram_din; 
    end if;
end process;

我的问题是,在clk的上升沿上,放入captured_data的值可由同一上升沿上的其他进程读取。

我对顺序代码中的信号分配的理解是,在仿真中它实际上发生在下一个触发时钟周期之后。如下所示,这不是我的情况。

在下面的模拟中,我在下降沿将sdram_din的值强制为0x0000,并在下一个上升沿进行值分配。为什么值会立即显示而不是在以后循环显示?

Waveform

可以在here上看到所有代码。

1 个答案:

答案 0 :(得分:1)

  

我的问题是,在clk的上升沿上,其他进程在同一上升沿上会读取捕获到的数据中的值。

(强调是我的)
所示波形没有行为。为了表明您需要添加使用同一时钟从captured_data派生的另一个信号。

  

我对顺序代码中的信号分配的理解是,在仿真中,它实际上发生在下一个触发时钟周期之后。

我不明白这种期望从何而来。时钟上升时,信号sdram_din被采样。对于所有其他具有“ rising_edge(clk)”条件的信号也是如此。唯一认为特别的是,首先对所有值进行采样,并且在所有采样后 才是分配的值。

  

为什么该值会立即显示

如上所述,在对信号进行采样之后,便对其进行分配。立即。在仿真中,不存在明显的延迟。 (有关详细信息,请查询“ VHDL增量时间”。) 从captured_data组合得出的任何信号也将无延迟地出现,因为在理想的模拟中没有延迟。