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

Subversion Repositories core_arm

[/] [core_arm/] [trunk/] [vhdl/] [tbench/] [tbench_gen.vhd] - Blame information for rev 2

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 tarookumic
-- $(lic)
2
-- $(help_generic)
3
-- $(help_local)
4
 
5
library ieee;
6
use ieee.std_logic_1164.all;
7
 
8
-- todo: remove
9
use work.leon_config.all;
10
 
11
use work.debug.all;
12
use work.core_comp.all;
13
use work.tbench_comp.all;
14
use work.tbenchmem_comp.all;
15
use STD.TEXTIO.all;
16
 
17
entity tbench_gen is
18
  generic (
19
    msg1      : string := "32 kbyte 32-bit rom, 0-ws";
20
    msg2      : string := "2x128 kbyte 32-bit ram, 0-ws";
21
    pcihost   : boolean := false;       -- be PCI host
22
    DISASS    : integer := 0;            -- enable disassembly to stdout
23
    clkperiod : integer := 20;          -- system clock period
24
    romfile   : string := "soft/tbenchsoft/armrom.dat";  -- rom contents
25
    ramfile   : string := "soft/tbenchsoft/armram.dat";  -- ram contents
26
    sdramfile : string := "soft/tbenchsoft/sdram.dat";  -- sdram contents
27
    romwidth  : integer := 32;          -- rom data width (8/32)
28
    romdepth  : integer := 13;          -- rom address depth
29
    romtacc   : integer := 10;          -- rom access time (ns)
30
    ramwidth  : integer := 32;          -- ram data width (8/16/32)
31
    ramdepth  : integer := 15;          -- ram address depth
32
    rambanks  : integer := 2;           -- number of ram banks
33
    bytewrite : boolean := true;        -- individual byte write strobes
34
    ramtacc   : integer := 10           -- ram access time (ns)
35
  );
36
  port (
37
    i       : in  tbench_gen_typ_in;
38
    o       : out tbench_gen_typ_out
39
    );
40
end tbench_gen;
41
 
42
architecture behav of tbench_gen is
43
 
44
  signal clk : std_logic := '0';
45
  signal Rst    : std_logic := '0';                      -- Reset
46
  constant ct : integer := clkperiod/2;
47
 
48
  signal address  : std_logic_vector(27 downto 0);
49
  signal data     : std_logic_vector(31 downto 0);
50
 
51
  signal ramsn    : std_logic_vector(4 downto 0);
52
  signal ramoen   : std_logic_vector(4 downto 0);
53
  signal rwen     : std_logic_vector(3 downto 0);
54
  signal rwenx    : std_logic_vector(3 downto 0);
55
  signal romsn    : std_logic_vector(1 downto 0);
56
  signal iosn     : std_logic;
57
  signal oen      : std_logic;
58
  signal read     : std_logic;
59
  signal writen   : std_logic;
60
  signal brdyn    : std_logic;
61
  signal bexcn    : std_logic;
62
  signal wdog     : std_logic;
63
  signal dsuen, dsutx, dsurx, dsubre, dsuact : std_logic;
64
  signal test     : std_logic;
65
  signal error    : std_logic;
66
  signal pio    : std_logic_vector(15 downto 0);
67
  signal GND      : std_logic := '0';
68
  signal VCC      : std_logic := '1';
69
  signal NC       : std_logic := 'Z';
70
  signal clk2     : std_logic := '1';
71
 
72
  signal sdcke    : std_logic_vector ( 1 downto 0);  -- clk en
73
  signal sdcsn    : std_logic_vector ( 1 downto 0);  -- chip sel
74
  signal sdwen    : std_logic;                       -- write en
75
  signal sdrasn   : std_logic;                       -- row addr stb
76
  signal sdcasn   : std_logic;                       -- col addr stb
77
  signal sddqm    : std_logic_vector ( 3 downto 0);  -- data i/o mask
78
  signal sdclk    : std_logic;
79
  signal plllock    : std_logic;
80
 
81
  signal emdio   : std_logic;
82
  signal etx_clk : std_logic := '0';
83
  signal erx_clk : std_logic := '0';
84
  signal erxd    : std_logic_vector(3 downto 0);
85
  signal erx_dv  : std_logic;
86
  signal erx_er  : std_logic;
87
  signal erx_col : std_logic;
88
  signal erx_crs : std_logic;
89
  signal etxd    : std_logic_vector(3 downto 0);
90
  signal etx_en  : std_logic;
91
  signal etx_er  : std_logic;
92
  signal emdc    : std_logic;
93
  signal emddis  : std_logic;
94
  signal epwrdwn : std_logic;
95
  signal ereset  : std_logic;
96
  signal esleep  : std_logic;
97
  signal epause  : std_logic;
98
 
99
begin
100
 
101
  clk <= not clk after ct * 1 ns;
102
  rst <= '0', '1' after clkperiod*10 * 1 ns;
103
 
104
  -- boot message
105
  bootmsg : process(rst)
106
  begin
107
    if rst'event and (rst = '1') then --'
108
      print("Core generic testbench ");
109
      print(msg1); print(msg2); print("");
110
    end if;
111
  end process;
112
 
113
  -------------------------------------------------------------------------------
114
  -- processor 
115
    c0 : core port map (rst, clk, sdclk, plllock,
116
                        error, address, data,
117
                        ramsn, ramoen, rwenx, romsn, iosn, oen, read, writen, brdyn,
118
                        bexcn, sdcke, sdcsn, sdwen, sdrasn, sdcasn, sddqm, sdclk,
119
                        pio, wdog, dsuen, dsutx, dsurx, dsubre, dsuact, test);
120
 
121
 
122
  -------------------------------------------------------------------------------
123
  -- 8-bit ram
124
  ram8d : if ramwidth = 8 generate
125
    ram0 : iram
126
      generic map (index => 0, abits => ramdepth, echk => 2, tacc => ramtacc,
127
                   fname => ramfile)
128
      port map (A => address(ramdepth-1 downto 0), D => data(31 downto 24),
129
                CE1 => ramsn(0), WE => rwen(0), OE => ramoen(0));
130
  end generate;
131
 
132
  -- 16-bit ram
133
  ram16d : if ramwidth = 16 generate
134
    rambnk : for i in 0 to rambanks-1 generate
135
      ramarr : for j in 0 to 1 generate
136
        ram0 : iram
137
          generic map (index => j, abits => ramdepth, echk => 4,
138
                       tacc => ramtacc, fname => ramfile)
139
          port map (A => address(ramdepth downto 1), D => data((31 - j*8) downto (24-j*8)),
140
                    CE1 => ramsn(i), WE => rwen(j), OE => ramoen(i));
141
      end generate;
142
    end generate;
143
  end generate;
144
 
145
  -- 32-bit ram
146
  ram32d : if ramwidth = 32 generate
147
    rambnk : for i in 0 to rambanks-1 generate
148
      ramarr : for j in 0 to 3 generate
149
        ram0 : iram
150
          generic map (index => j, abits => ramdepth, echk => 0,
151
                       tacc => ramtacc, fname => ramfile)
152
          port map (A => address(ramdepth+1 downto 2), D => data((31 - j*8) downto (24-j*8)),
153
                    CE1 => ramsn(i), WE => rwen(j), OE => ramoen(i));
154
      end generate;
155
    end generate;
156
  end generate;
157
 
158
  -------------------------------------------------------------------------------
159
  -- 8-bit rom 
160
  rom8d : if romwidth = 8 generate
161
    pio(1 downto 0) <= "LL";       -- 8-bit data bus
162
    rom0 : iram
163
      generic map (index => 0, abits => romdepth, echk => 2, tacc => romtacc, fname => romfile)
164
        port map (A => address(romdepth-1 downto 0), D => data(31 downto 24),
165
                  CE1 => romsn(0), WE => VCC, OE => oen);
166
  end generate;
167
 
168
  -- 16-bit rom 
169
  rom16d : if romwidth = 16 generate
170
    pio(1 downto 0) <= "LH";       -- 16-bit data bus
171
    romarr : for i in 0 to 1 generate
172
      rom0 : iram
173
        generic map (index => i, abits => romdepth, echk => 4, tacc => romtacc,
174
                     fname => romfile)
175
        port map (A => address(romdepth downto 1), D => data((31 - i*8) downto (24-i*8)),
176
                  CE1 => romsn(0), WE => VCC, OE => oen);
177
    end generate;
178
  end generate;
179
 
180
  -- 32-bit rom 
181
  rom32d : if romwidth = 32 generate
182
    pio(1 downto 0) <= "HH";       -- 32-bit data bus
183
    romarr : for i in 0 to 3 generate
184
      rom0 : iram
185
        generic map (index => i, abits => romdepth, echk => 0, tacc => romtacc,
186
                     fname => romfile)
187
        port map (A => address(romdepth+1 downto 2), D => data((31 - i*8) downto (24-i*8)),
188
                  CE1 => romsn(0), WE => VCC, OE => oen);
189
    end generate;
190
  end generate;
191
 
192
  -------------------------------------------------------------------------------
193
  -- optional sdram
194
  sdram : if SDRAMEN generate
195
    u0: mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
196
        PORT MAP(
197
            Dq => data(31 downto 16), Addr => address(14 downto 2),
198
            Ba => address(16 downto 15), Clk => sdclk, Cke => sdcke(0),
199
            Cs_n => sdcsn(0), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
200
            Dqm => sddqm(3 downto 2));
201
    u1: mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
202
        PORT MAP(
203
            Dq => data(15 downto 0), Addr => address(14 downto 2),
204
            Ba => address(16 downto 15), Clk => sdclk, Cke => sdcke(0),
205
            Cs_n => sdcsn(0), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
206
            Dqm => sddqm(1 downto 0));
207
    u2: mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
208
        PORT MAP(
209
            Dq => data(31 downto 16), Addr => address(14 downto 2),
210
            Ba => address(16 downto 15), Clk => sdclk, Cke => sdcke(0),
211
            Cs_n => sdcsn(1), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
212
            Dqm => sddqm(3 downto 2));
213
    u3: mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
214
        PORT MAP(
215
            Dq => data(15 downto 0), Addr => address(14 downto 2),
216
            Ba => address(16 downto 15), Clk => sdclk, Cke => sdcke(0),
217
            Cs_n => sdcsn(1), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
218
            Dqm => sddqm(1 downto 0));
219
  end generate;
220
 
221
  -------------------------------------------------------------------------------
222
  -- write strobes
223
  rwen <= rwenx when bytewrite else (rwenx(0) & rwenx(0) & rwenx(0) & rwenx(0));
224
 
225
end behav;
226
 
227
 
228
 
229
 

powered by: WebSVN 2.1.0

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