因此,我有一个足够简单的时钟处理过程,可以将一个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,并在下一个上升沿进行值分配。为什么值会立即显示而不是在以后循环显示?
可以在here上看到所有代码。
答案 0 :(得分:1)
我的问题是,在clk的上升沿上,其他进程在同一上升沿上会读取捕获到的数据中的值。
(强调是我的)
所示波形没有行为。为了表明您需要添加使用同一时钟从captured_data
派生的另一个信号。
我对顺序代码中的信号分配的理解是,在仿真中,它实际上发生在下一个触发时钟周期之后。
我不明白这种期望从何而来。时钟上升时,信号sdram_din
被采样。对于所有其他具有“ rising_edge(clk)”条件的信号也是如此。唯一认为特别的是,首先对所有值进行采样,并且在所有采样后 才是分配的值。
为什么该值会立即显示
如上所述,在对信号进行采样之后,便对其进行分配。立即。在仿真中,不存在明显的延迟。 (有关详细信息,请查询“ VHDL增量时间”。)
从captured_data
组合得出的任何信号也将无延迟地出现,因为在理想的模拟中没有延迟。