重置VHDL寄存器中的值并停止进一步写入

时间:2013-12-16 13:48:10

标签: vhdl

我有简单的寄存器并从5个状态机获取单个位值(全部一次)。这些值作为 std_logic_vector 存储在寄存器中,并且必须作为另一个模块的输入。一旦在另一个模块中处理该寄存器的输出,寄存器中的索引发生了变化(e,g 0到1),该索引处的值应该重置(e,g 1到0),它应该不再为该特定索引输入(但是来自状态机的常量输入)。有什么建议,应该怎么做?

注册码为:

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;

1 个答案:

答案 0 :(得分:1)

我不完全确定你在问什么,但在我看来你想要的东西是:

  • 将您的reg_out初始化为所有
  • 然后在时钟进程中执行for循环迭代所有输入位并清除输入中设置的位

像这样:

reg_out <= reg_in;
for i in reg_in'range loop
    if reg_in(i) = '1' then
        masked_bits(i) := '1';
    end if;
    if masked_bits(i) = '1' then
        reg_out(i) <= '0';
    end if;
end loop;