OpenCores
URL https://opencores.org/ocsvn/igor/igor/trunk

Subversion Repositories igor

[/] [igor/] [trunk/] [processor/] [pl/] [inst_mem.vhd] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 atypic
--------------------------------------------------------------------------------
2
-- Desc: Asynch ROM
3
-- Author: Odd Rune
4
--------------------------------------------------------------------------------
5
 
6
library ieee;
7
 
8
use ieee.std_logic_1164.all;
9
use ieee.std_logic_unsigned.all;
10
use std.textio.all;
11
use ieee.numeric_std.all;
12
 
13
-- use work.whisk.all;
14
 
15
entity preload_mem is
16
    generic ( memsize, addrbits, databits  : integer;
17
              initfile : string);
18
        port (
19
                clk : in std_logic;
20
                addr : in std_logic_vector(addrbits - 1 downto 0);
21
                dout : out std_logic_vector(databits - 1 downto 0);
22
                din : in std_logic_vector(databits - 1 downto 0);
23
                we : in std_logic
24
        );
25
end entity preload_mem;
26
 
27
architecture behav of preload_mem is
28
type rom_type is array(0 to memsize) of bit_vector(databits - 1
29
downto 0);
30
 
31
 
32
impure function init_rom(filename : in string) return rom_type is
33
        file romfile : text is in filename;
34
        variable li : line;
35
        variable ROM : rom_type;
36
        begin
37
                for i in rom_type'range loop
38
                        readline(romfile, li);
39
                        read(li, ROM(i));
40
                end loop;
41
        return ROM;
42
end function;
43
 
44
signal ROM : rom_type := init_rom(initfile);
45
signal read_reg : std_logic_vector(addrbits - 1 downto 0);
46
begin
47
        process(clk,addr)
48
        begin
49
                if rising_edge(clk) then
50
                        if we = '1' then
51
                                ROM(to_integer(unsigned(addr))) <= to_bitvector(din);
52
                        end if;
53
                        read_reg <= addr;
54
                end if;
55
        end process;
56
        dout <= to_stdlogicvector(ROM(to_integer(unsigned(read_reg))));
57
end architecture behav;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.