【问题标题】:Signal assignment in a clocked process happening instantly时钟过程中的信号分配立即发生
【发布时间】:2018-08-17 09:00:11
【问题描述】:

所以我有一个足够简单的时钟进程,将一个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

【问题讨论】:

标签: vhdl


【解决方案1】:

我的问题是,在 clk 的上升沿,放入 capture_data 的值可以被其他进程读取在同一上升沿

(重点是我的)
显示的波形没有该行为。为了表明您需要添加另一个信号,该信号源自 captured_data,使用相同的时钟。

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

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

为什么值会立即出现

正如我上面写的:在对信号进行采样后,它们被分配。立即地。在模拟中不存在明显的延迟。 (有关详细信息,请查看“VHDL 增量时间”。) 任何源自captured_data 的组合信号也将无延迟出现,因为在理想模拟中没有延迟。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 2015-04-11
    • 2012-12-01
    • 2012-01-30
    • 1970-01-01
    • 2014-03-27
    相关资源
    最近更新 更多