我有简单的寄存器并从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;
答案 0 :(得分:1)
我不完全确定你在问什么,但在我看来你想要的东西是:
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;