37 lines
1.0 KiB
VHDL
37 lines
1.0 KiB
VHDL
|
library ieee;
|
||
|
use std.textio.all;
|
||
|
use ieee.std_logic_textio.all;
|
||
|
|
||
|
ARCHITECTURE hex OF instrMemory IS
|
||
|
|
||
|
-- Instructions type
|
||
|
type t_instrBank is array (0 to (2**g_memoryNbBits)-1) of
|
||
|
std_ulogic_vector(g_dataWidth-1 downto 0);
|
||
|
|
||
|
-- Define function to create initvalue signal
|
||
|
impure function ReadRamContentFromFile(ramContentFilenAme : in string) return t_instrBank is
|
||
|
FILE ramContentFile : text is in ramContentFilenAme;
|
||
|
variable ramContentFileLine : line;
|
||
|
variable ramContent : t_instrBank;
|
||
|
begin
|
||
|
for i in t_instrBank'range loop
|
||
|
readline(ramContentFile, ramContentFileLine);
|
||
|
HREAD(ramContentFileLine, ramContent(i));
|
||
|
end loop;
|
||
|
return ramContent;
|
||
|
end function;
|
||
|
|
||
|
-- Program
|
||
|
constant larr_instr : t_instrBank := ReadRamContentFromFile(g_programFile);
|
||
|
|
||
|
BEGIN
|
||
|
|
||
|
-- Comb. read
|
||
|
process(PC)
|
||
|
begin
|
||
|
-- skip the two last bits (since we do only +4)
|
||
|
instruction <= larr_instr(to_integer(PC(g_memoryNbBits+1 downto 2))) after g_tMemRd;
|
||
|
end process;
|
||
|
|
||
|
END ARCHITECTURE hex;
|