He estado teniendo un problema recurrente común cuando escribo el código VHDL. Termino escribiendo un código similar a este (como ejemplo):
ENTITY registerfile IS
PORT(VX : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
RS1: IN STD_LOGIC_VECTOR(3 DOWNTO 0));
END registerfile;
ARCHITECTURE rtl OF registerfile IS
TYPE FeedbackSignal IS ARRAY(15 DOWNTO 0) OF STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL V_F : FeedbackSignal;
BEGIN
PROCESS(RS1, V_F)
BEGIN
CASE RS1 IS
WHEN "0000" =>
VX <= V_F(0);
WHEN "0001" =>
VX <= V_F(1);
WHEN "0010" =>
VX <= V_F(2);
WHEN "0011" =>
VX <= V_F(3);
WHEN "0100" =>
VX <= V_F(4);
WHEN "0101" =>
VX <= V_F(5);
WHEN "0110" =>
VX <= V_F(6);
WHEN "0111" =>
VX <= V_F(7);
WHEN "1000" =>
VX <= V_F(8);
WHEN "1001" =>
VX <= V_F(9);
WHEN "1010" =>
VX <= V_F(10);
WHEN "1011" =>
VX <= V_F(11);
WHEN "1100" =>
VX <= V_F(12);
WHEN "1101" =>
VX <= V_F(13);
WHEN "1110" =>
VX <= V_F(14);
WHEN "1111" =>
VX <= V_F(15);
WHEN OTHERS =>
VX <= (OTHERS => 'Z');
END CASE;
END PROCESS;
END rtl;
Suponga que V_F está conectado a un registro interno o algo similar. Siento que esto es extremadamente repetitivo, y parece que no puedo encontrar una mejor manera. ¿Hay una forma más concisa similar a algo como:
VX <= V_F(RS1);