synth/first/regfile.vhdl

53 lines
1.4 KiB
VHDL
Raw Normal View History

2021-02-17 21:20:30 +00:00
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;