library IEEE; use IEEE.STD_LOGIC_1164.ALL; use ieee.numeric_std.all; entity regfile is Port ( outregna: in std_logic_vector(3 downto 0); outregda: out std_logic_vector(15 downto 0); outregnb: in std_logic_vector(3 downto 0); outregdb: out std_logic_vector(15 downto 0); inregn: in std_logic_vector(3 downto 0); inregd: in std_logic_vector(15 downto 0); inwe: in std_logic; rst : in STD_LOGIC; clk : in STD_LOGIC ); end regfile; architecture Behavioral of regfile is component reg is Port ( d : in STD_LOGIC_VECTOR (15 downto 0); q : out STD_LOGIC_VECTOR (15 downto 0); rst : in STD_LOGIC; clk : in STD_LOGIC); end component; type regbank is array(0 to 15) of std_logic_vector(15 downto 0); signal regd: regbank; signal regq: regbank; begin regs: for i in 0 to 15 generate regx: reg port map(d => regd(i), q => regq(i), rst => rst, clk => clk); end generate; outregda <= regq(to_integer(unsigned(outregna))); outregdb <= regq(to_integer(unsigned(outregnb))); process(inregn, inregd, regq, inwe) begin for i in 0 to 15 loop regd(i) <= regq(i); if inwe = '1' then regd(to_integer(unsigned(inregn))) <= inregd; end if; end loop; end process; end Behavioral;