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

Subversion Repositories minimips_superscalar

[/] [minimips_superscalar/] [trunk/] [bench/] [ram.vhd] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 mcafruni
-------------------------------------------------------------------------------
2
--                                                                           --
3
--                                                                           --
4
-- miniMIPS Superscalar Processor : testbench                                --
5
-- based on miniMIPS Processor                                               --
6
--                                                                           --
7
--                                                                           --
8
-- Author : Miguel Cafruni                                                   --
9
-- miguel_cafruni@hotmail.com                                                --
10
--                                                           December 2018   --
11
-------------------------------------------------------------------------------
12
 
13
-- If you encountered any problem, please contact :
14
--
15
--   lmouton@enserg.fr  (2003 version)
16
--   oschneid@enserg.fr (2003 version)
17
--   shangoue@enserg.fr (2003 version)
18
--   miguel_cafruni@hotmail.com (Superscalar version 2018)
19
 
20
library ieee;
21
use ieee.std_logic_1164.all;
22
use ieee.numeric_std.all;
23
 
24
library work;
25
use work.pack_mips.all;
26
 
27
entity ram is
28
   generic (mem_size : natural := 256;  -- Size of the memory in words
29
            latency : time := 0 ns);
30
   port(
31
       req         : in std_logic;
32
       adr         : in bus32;
33
       data_inout  : inout bus32;
34
       r_w         : in std_logic;
35
       ready       : out std_logic;
36
 
37
       req2         : in std_logic;
38
       adr2         : in bus32;
39
       data_inout2  : inout bus32;
40
       r_w2         : in std_logic;
41
       ready2       : out std_logic
42
   );
43
end;
44
 
45
 
46
architecture bench of ram is
47
    type storage_array is array(natural range 1024 to 1024+4*mem_size - 1) of bus8;
48
    signal storage : storage_array; -- The memory
49
begin
50
 
51
    process(adr, data_inout, r_w, adr2, data_inout2, r_w2)
52
        variable inadr : integer;
53
        variable i : natural;
54
        variable inadr2 : integer;
55
        variable j : natural;
56
    begin
57
        inadr := to_integer(unsigned(adr));
58
 
59
        if (inadr>=storage'low) and (inadr<=storage'high) then
60
 
61
            ready <= '0', '1' after latency;
62
            if req = '1' then
63
                if r_w /= '1' then  -- Reading in memory
64
                    for i in 0 to 3 loop
65
                        data_inout(8*(i+1)-1 downto 8*i) <= storage(inadr+(3-i)) after latency;
66
                    end loop;
67
                else
68
                    for i in 0 to 3 loop
69
                        storage(inadr+(3-i)) <= data_inout(8*(i+1)-1 downto 8*i) after latency;
70
                    end loop;
71
                    data_inout <= (others => 'Z');
72
                end if;
73
            else
74
                data_inout <= (others => 'Z');
75
            end if;
76
        else
77
            data_inout <= (others => 'Z');
78
            ready <= 'L';
79
        end if;
80
 
81
        inadr2 := to_integer(unsigned(adr2));
82
 
83
        if (inadr2>=storage'low) and (inadr2<=storage'high) then
84
 
85
            ready2 <= '0', '1' after latency;
86
            if req2 = '1' then
87
                if r_w2 /= '1' then  -- Reading in memory
88
                    for j in 0 to 3 loop
89
                        data_inout2(8*(j+1)-1 downto 8*j) <= storage(inadr2+(3-j)) after latency;
90
                    end loop;
91
                else
92
                    for j in 0 to 3 loop
93
                        storage(inadr2+(3-j)) <= data_inout2(8*(j+1)-1 downto 8*j) after latency; --report "Valor j = " & integer'image(j);-- 04/09/18
94
                    end loop;
95
                    data_inout2 <= (others => 'Z');
96
                end if;
97
            else
98
                data_inout2 <= (others => 'Z');
99
            end if;
100
        else
101
            data_inout2 <= (others => 'Z');
102
            ready2 <= 'L';
103
        end if;
104
    end process;
105
 
106
end bench;

powered by: WebSVN 2.1.0

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