I've been having a common reoccurring issue when I write VHDL code. I end up writing code similar to this (as an example):
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;
Assume V_F is connected to an internal register or something similar. I feel like this is extremely repetitive, and I can't seem to figure out a better way. Is there a more concise way similar to something like:
VX <= V_F(RS1);