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

Subversion Repositories minimips_superscalar

[/] [minimips_superscalar/] [tags/] [P0/] [bench/] [bench_minimips.vhd] - Blame information for rev 18

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 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
 
21
library IEEE;
22
use IEEE.std_logic_1164.all;
23
 
24
library std;
25
use std.textio.all;
26
 
27
library work;
28
use work.pack_mips.all;
29
 
30
entity sim_minimips is
31
end;
32
 
33
architecture bench of sim_minimips is
34
 
35
  component minimips is
36
  port (
37
      clock    : in std_logic;
38
      clock2   : in std_logic;
39
      reset    : in std_logic;
40
 
41
      ram_req  : out std_logic;
42
      ram_adr  : out bus32;
43
      ram_r_w  : out std_logic;
44
      ram_data : inout bus32;
45
      ram_ack  : in std_logic;
46
 
47
      ram_req2  : out std_logic;
48
      ram_adr2  : out bus32;
49
      ram_r_w2  : out std_logic;
50
      ram_data2 : inout bus32;
51
      ram_ack2  : in std_logic;
52
 
53
      it_mat   : in std_logic
54
  );
55
  end component;
56
 
57
 
58
  component ram is
59
    generic (mem_size : natural := 256;
60
             latency : time := 10 ns);
61
    port(
62
        req        : in std_logic;
63
        adr        : in bus32;
64
        data_inout : inout bus32;
65
        r_w        : in std_logic;
66
        ready      : out std_logic;
67
 
68
        req2        : in std_logic;
69
        adr2        : in bus32;
70
        data_inout2 : inout bus32;
71
        r_w2        : in std_logic;
72
        ready2      : out std_logic
73
  );
74
  end component;
75
 
76
  component rom is
77
  generic (mem_size : natural := 256;
78
           start : natural := 0;
79
           latency : time := 10 ns);
80
  port(
81
          adr : in bus32;
82
          donnee : out bus32;
83
          ack : out std_logic;
84
 
85
          adr2 : in bus32;
86
          donnee2 : out bus32;
87
          ack2 : out std_logic;
88
 
89
          load : in std_logic;
90
          fname : in string
91
  );
92
  end component;
93
 
94
  signal clock : std_logic := '0';
95
  signal clock2 : std_logic := '0';
96
  signal reset : std_logic;
97
 
98
  signal it_mat : std_logic := '0';
99
 
100
  -- Connexion with the code memory
101
  signal load : std_logic;
102
  signal fichier : string(1 to 7);
103
 
104
  -- Connexion with the Ram
105
  signal ram_req : std_logic;
106
  signal ram_adr : bus32;
107
  signal ram_r_w : std_logic;
108
  signal ram_data : bus32;
109
  signal ram_rdy : std_logic;
110
 
111
  signal ram_req2 : std_logic;
112
  signal ram_adr2 : bus32;
113
  signal ram_r_w2 : std_logic;
114
  signal ram_data2 : bus32;
115
  signal ram_rdy2 : std_logic;
116
 
117
begin
118
 
119
    U_minimips : minimips port map (
120
        clock => clock,
121 18 mcafruni
             clock2 => clock2,
122 4 mcafruni
        reset => reset,
123
        ram_req => ram_req,
124
        ram_adr => ram_adr,
125
        ram_r_w => ram_r_w,
126
        ram_data => ram_data,
127
        ram_ack => ram_rdy,
128
 
129
        ram_req2 => ram_req2,
130
        ram_adr2 => ram_adr2,
131
        ram_r_w2 => ram_r_w2,
132
        ram_data2 => ram_data2,
133
        ram_ack2 => ram_rdy2,
134
 
135
        it_mat => it_mat
136
    );
137
 
138
    U_ram : ram port map (
139
        req => ram_req,
140
        adr => ram_adr,
141
        data_inout => ram_data,
142
        r_w => ram_r_w,
143
        ready => ram_rdy,
144
 
145
        req2 => ram_req2,
146
        adr2 => ram_adr2,
147
        data_inout2 => ram_data2,
148
        r_w2 => ram_r_w2,
149
        ready2 => ram_rdy2
150
    );
151
 
152
    U_rom : rom port map (
153
        adr => ram_adr,
154
        donnee => ram_data,
155
        ack => ram_rdy,
156
 
157
        adr2 => ram_adr2,
158
        donnee2 => ram_data2,
159
        ack2 => ram_rdy2,
160
 
161
        load => load,
162
        fname => fichier
163
    );
164
 
165
    clock <= not clock after 10 ns;
166
    clock2 <= not clock2 after 10 ns;
167
    reset <= '0', '1' after 5 ns, '0' after 25 ns;
168
    ram_data <= (others => 'L');
169
    ram_data2 <= (others => 'L');
170
    process
171
        variable command : line;
172
        variable nomfichier : string(1 to 3);
173
    begin
174
        --write (output, "Enter the filename : ");
175
        --readline(input, command);
176
        --read(command, nomfichier);
177
 
178
        fichier <= "msx.bin";
179
 
180
        load <= '1';
181
        --wait;
182
    end process;
183
 
184
    -- Memory Mapping --
185
    -- 0000 - 00FF      ROM
186
 
187
    process (ram_adr, ram_r_w, ram_data)
188
    begin -- Emulation of an I/O controller
189
        ram_data <= (others => 'Z');
190
 
191
        case ram_adr is
192
            when X"00001000" => -- declenche une lecture avec interruption
193
                                it_mat <= '1' after 1000 ns;
194
                                ram_rdy <= '1' after 5 ns;
195
            when X"00001001" => -- fournit la donnee et lache l'it
196
                                it_mat <= '0';
197
                                ram_data <= X"FFFFFFFF";
198
                                ram_rdy <= '1' after 5 ns;
199
            when others      => ram_rdy <= 'L';
200
        end case;
201
    end process;
202
 
203
end bench;

powered by: WebSVN 2.1.0

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