在 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;
有没有办法在堪萨斯熔岩中做类似的事情?当然,您可以分别使用类似
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
两次写出条件的方法,因为在我的真实代码中,我将更改大量内部寄存器并分配给许多分支中的大量输出信号(并且,理想情况下,我什至不会分配所有分支的所有输出;相反,我会有一些默认分配)。