理解一个简单的VHDL过程

时间:2014-04-29 05:18:04

标签: vhdl

这里有一些VHDL代码,用于读取和写入我想要了解的内存地址。基本思想是,如果我们有一个上升的时钟边沿并且写入被启用(we = '1'),那么我们修改名为ram的数组并在其中存储data。然后我们将刚刚读取的地址分配给addr_reg,然后在流程之外我们将地址ram的{​​{1}}内容分配给addr_reg以便读取输出。< / p>

q

在这种情况下,过程&#34;更慢&#34;比硬编码的行process(clk) begin if(rising_edge(clk)) then if(we = '1') then ram(addr) <= data; end if; -- Register the address for reading addr_reg <= addr; end if; end process; q <= ram(addr_reg); ?换句话说,我们是否在q <= ram(addr_reg);读取前一个值,同时向addr_reg写入一个新值,以便在下一个时钟边沿读取该值?或者是在过程中分配addr后触发的硬编码行q <= ram(addr_reg);,因此我们正在阅读我们刚刚编写的值,即addr_reg

要获得完整的答案,我正在寻找有关此代码的时钟事件时间表的详细说明。

1 个答案:

答案 0 :(得分:1)

rising_edge(clk)上,ramaddr_reg都会使用新内容进行更新。此更新内容的效果在clk的上升沿(组合q <= ram(addr_reg))之后(一个增量周期)可见,它将立即显示新值。

所以你正在阅读我们刚写的价值,即数据。这种情况的信号如下所示。

enter image description here