分配输出信号并从RTL块中的同一分支更改寄存器值

时间:2015-08-21 11:32:05

标签: vhdl lava

在VHDL中,我可以编写类似这样的内容来更改存储在寄存器COUNTER中的值,并将其分配给来自条件的同一分支的输出信号:

entity AssignTest is
  port (CLK: in std_logic; 
        OUTPUT: out std_logic_vector(1 downto 0));
end AssignTest;

architecture Behavioral of AssignTest is
  signal CLK: std_logic := '0';
  signal COUNTER: std_logic_vector (3 downto 0) := (others => '0');
begin
  process (CLK)
  begin
    if rising_edge(CLK) then
      OUTPUT <= "10";
      if COUNTER = "1001" then
        COUNTER <= "0000";
        OUTPUT <= "11";
      else       
        COUNTER <= std_logic_vector(unsigned(COUNTER) + 1);
      end if;
    end if;
  end process;
end Behavioral;

Kansas Lava有没有办法做类似的事情?当然,你可以单独使用

之类的东西
runRTL $ do
  counter <- newReg (0 :: U4)
  CASE [ IF (reg counter .==. 9) $ counter := 0
       , OTHERWISE $ counter := reg counter + 1
       ]
  return $ mux (reg counter .==. 9) (2, 3)

然而,我正在寻找一种不必两次写出reg counter .==. 9条件的方法,因为在我的实际代码中,我将改变大量内部寄存器并分配大量输出信号在许多分支中(理想情况下,我甚至不会分配所有分支的所有输出;相反,我会有一些默认分配)。

0 个答案:

没有答案