延迟VHDL寄存器

时间:2013-12-10 17:00:47

标签: vhdl

我有一个简单的寄存器,它将值存储为std_logic_vector。在模拟行为中,输出延迟1个周期。这背后的原因是什么?这是因为clock'event的行为吗?如何解决这个问题?

以下是代码:

entity fault_reg is
port (
  clk       : in  std_logic;
  rst       : in  std_logic;
  reg_in    : in  std_logic_vector(NUM_PORTS - 1 downto 0);
  reg_out   : out std_logic_vector(NUM_PORTS - 1 downto 0));
end fault_reg;

architecture Behavioral of fault_reg is
begin
reg_impl : process(clk, rst)
    begin
        if rst = '1' then
          reg_out <= (others => '0');
        elsif clk'event and clk='1' then
              reg_out <= reg_in;
        end if;
    end process reg_impl;
end Behavioral;

这是波形: enter image description here

1 个答案:

答案 0 :(得分:4)

您编写的流程是同步流程,它对clkrst信号敏感;当clkrst发生变化时,此过程仅“唤醒”以评估/更新输出。因此,即使reg_in可能发生变化,reg_out也只会在下一个上升时钟边沿(clk'event and clk='1')更新,或者置位复位(rst = '1')。

时间表如下所示:

  1. 时钟上升。
  2. 事件#1之后
  3. reg_in很快就会发生变化。
  4. 时钟上升。
  5. reg_out在事件#3之后很快更改,事件#3中出现reg_in的值,这是在事件#2中更改为的值。