45 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			VHDL
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			VHDL
		
	
	
	
	
	
USE std.textio.all;
 | 
						|
 | 
						|
ARCHITECTURE Spartan3E OF blockRAM IS
 | 
						|
 | 
						|
  subtype registerType is std_ulogic_vector(dataBitNb-1 downto 0);
 | 
						|
  type memoryType is array (0 to 2**addressBitNb-1) of registerType;
 | 
						|
 | 
						|
  -- Define function to create initvalue signal
 | 
						|
  impure function ReadRamContentFromFile(ramContentFileSpec : in string) return memoryType is
 | 
						|
    FILE     ramContentFile     : text open read_mode is ramContentFileSpec;
 | 
						|
    variable ramContentFileLine : line;
 | 
						|
    variable ramContent         : memoryType;
 | 
						|
    variable ramCurrentWord     : bit_vector(registerType'range);
 | 
						|
    variable index              : natural := 0; --241;
 | 
						|
  begin
 | 
						|
    for index in ramContent'range loop
 | 
						|
--    while not endfile(ramContentFile) loop
 | 
						|
      readline(ramContentFile, ramContentFileLine);
 | 
						|
      read(ramContentFileLine, ramCurrentWord);
 | 
						|
      ramContent(index) := std_ulogic_vector(to_stdlogicvector(ramCurrentWord));
 | 
						|
--      index := index + 1;
 | 
						|
    end loop;
 | 
						|
    return ramContent;
 | 
						|
  end function;
 | 
						|
 | 
						|
  shared variable memoryArray: memoryType := ReadRamContentFromFile(initFileSpec);
 | 
						|
 | 
						|
BEGIN
 | 
						|
 | 
						|
  portA: process(clock)
 | 
						|
  begin
 | 
						|
    if rising_edge(clock) then
 | 
						|
      if (en = '1') then
 | 
						|
        if (write = '1') then
 | 
						|
          memoryArray(to_integer(addr)) := dataIn;
 | 
						|
          dataOut <= dataIn;
 | 
						|
        else
 | 
						|
          dataOut <= memoryArray(to_integer(addr));
 | 
						|
        end if;
 | 
						|
      end if;
 | 
						|
    end if;
 | 
						|
  end process portA;
 | 
						|
 | 
						|
END ARCHITECTURE Spartan3E;
 |