我有一个简单的寄存器,它将值存储为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;
这是波形:
答案 0 :(得分:4)
您编写的流程是同步流程,它对clk
和rst
信号敏感;当clk
或rst
发生变化时,此过程仅“唤醒”以评估/更新输出。因此,即使reg_in
可能发生变化,reg_out
也只会在下一个上升时钟边沿(clk'event and clk='1'
)更新,或者置位复位(rst = '1'
)。
时间表如下所示:
reg_in
很快就会发生变化。reg_out
在事件#3之后很快更改,事件#3中出现reg_in
的值,这是在事件#2中更改为的值。