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

Subversion Repositories core_arm

[/] [core_arm/] [trunk/] [vhdl/] [tech/] [tech_map.vhd] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 tarookumic
 
2
 
3
 
4
 
5
----------------------------------------------------------------------------
6
--  This file is a part of the LEON VHDL model
7
--  Copyright (C) 1999  European Space Agency (ESA)
8
--
9
--  This library is free software; you can redistribute it and/or
10
--  modify it under the terms of the GNU Lesser General Public
11
--  License as published by the Free Software Foundation; either
12
--  version 2 of the License, or (at your option) any later version.
13
--
14
--  See the file COPYING.LGPL for the full details of the license.
15
 
16
 
17
-----------------------------------------------------------------------------
18
-- Package:     tech_map
19
-- File:        tech_map.vhd
20
-- Author:      Jiri Gaisler - ESA/ESTEC
21
-- Description: Technology mapping of cache-rams, regfiles, pads and multiplier
22
------------------------------------------------------------------------------
23
 
24
LIBRARY ieee;
25
use IEEE.std_logic_1164.all;
26
use work.leon_iface.all;
27
package tech_map is
28
 
29
-- IU three-port regfile
30
  component regfile_iu
31
  generic (
32
    rftype : integer := 1;
33
    abits : integer := 8; dbits : integer := 32; words : integer := 128
34
  );
35
  port (
36
    rst      : in std_logic;
37
    clk      : in clk_type;
38
    clkn     : in clk_type;
39
    rfi      : in rf_in_type;
40
    rfo      : out rf_out_type);
41
  end component;
42
 
43
-- CP three-port
44
  component regfile_cp
45
  generic (
46
    abits : integer := 4; dbits : integer := 32; words : integer := 16
47
  );
48
  port (
49
    rst      : in std_logic;
50
    clk      : in clk_type;
51
    rfi      : in rf_cp_in_type;
52
    rfo      : out rf_cp_out_type);
53
  end component;
54
 
55
-- single-port sync ram
56
  component syncram
57
  generic ( abits : integer := 10; dbits : integer := 8);
58
  port (
59
    address  : in std_logic_vector((abits -1) downto 0);
60
    clk      : in clk_type;
61
    datain   : in std_logic_vector((dbits -1) downto 0);
62
    dataout  : out std_logic_vector((dbits -1) downto 0);
63
    enable   : in std_logic;
64
    write    : in std_logic
65
  );
66
  end component;
67
 
68
-- dual-port sync ram
69
  component dpsyncram
70
  generic ( abits : integer := 10; dbits : integer := 8);
71
  port (
72
    address1 : in std_logic_vector((abits -1) downto 0);
73
    clk      : in clk_type;
74
    datain1  : in std_logic_vector((dbits -1) downto 0);
75
    dataout1 : out std_logic_vector((dbits -1) downto 0);
76
    enable1  : in std_logic;
77
    write1   : in std_logic;
78
    address2 : in std_logic_vector((abits -1) downto 0);
79
    datain2  : in std_logic_vector((dbits -1) downto 0);
80
    dataout2 : out std_logic_vector((dbits -1) downto 0);
81
    enable2  : in std_logic;
82
    write2   : in std_logic
83
  );
84
  end component;
85
 
86
-- sync prom (used for boot-prom option)
87
  component bprom
88
  port (
89
    clk       : in std_logic;
90
    cs        : in std_logic;
91
    addr      : in std_logic_vector(31 downto 0);
92
    data      : out std_logic_vector(31 downto 0)
93
  );
94
  end component;
95
 
96
-- signed multipler
97
 
98
component hw_smult
99
  generic ( abits : integer := 10; bbits : integer := 8 );
100
  port (
101
    clk  : in  clk_type;
102
    holdn: in  std_logic;
103
    a    : in  std_logic_vector(abits-1 downto 0);
104
    b    : in  std_logic_vector(bbits-1 downto 0);
105
    c    : out std_logic_vector(abits+bbits-1 downto 0)
106
  );
107
end component;
108
 
109
component clkgen
110
port (
111
    clkin   : in  std_logic;
112
    pciclkin: in  std_logic;
113
    clk     : out std_logic;                    -- main clock
114
    clkn    : out std_logic;                    -- inverted main clock
115
    sdclk   : out std_logic;                    -- SDRAM clock
116
    pciclk  : out std_logic;                    -- PCI clock
117
    cgi     : in clkgen_in_type;
118
    cgo     : out clkgen_out_type
119
);
120
end component;
121
 
122
-- pads
123
 
124
  component inpad port (pad : in std_logic; q : out std_logic); end component;
125
  component smpad port (pad : in std_logic; q : out std_logic); end component;
126
  component outpad
127
    generic (drive : integer := 1);
128
    port (d : in std_logic; pad : out std_logic);
129
  end component;
130
  component toutpadu
131
    generic (drive : integer := 1);
132
    port (d : in std_logic; pad : out std_logic);
133
  end component;
134
  component odpad
135
    generic (drive : integer := 1);
136
    port (d : in std_logic; pad : out std_logic);
137
  end component;
138
  component iodpad
139
    generic (drive : integer := 1);
140
    port ( d : in std_logic; q : out std_logic; pad : inout std_logic);
141
  end component;
142
  component iopad
143
    generic (drive : integer := 1);
144
    port ( d, en : in  std_logic; q : out std_logic; pad : inout std_logic);
145
  end component;
146
  component smiopad
147
    generic (drive : integer := 1);
148
    port ( d, en : in  std_logic; q : out std_logic; pad : inout std_logic);
149
  end component;
150
  component pciinpad port (pad : in std_logic; q : out std_logic); end component;
151
  component pcioutpad port (d : in std_logic; pad : out std_logic); end component;
152
  component pcitoutpad port (d, en : in std_logic; pad : out std_logic); end component;
153
  component pciiopad
154
    port ( d, en : in  std_logic; q : out std_logic; pad : inout std_logic);
155
  end component;
156
  component pciiodpad
157
    port ( d : in  std_logic; q : out std_logic; pad : inout std_logic);
158
  end component;
159
end tech_map;
160
 
161
-- syncronous ram
162
 
163
LIBRARY ieee;
164
use IEEE.std_logic_1164.all;
165
use work.leon_target.all;
166
use work.leon_config.all;
167
use work.leon_iface.all;
168
use work.tech_atc25.all;
169
use work.tech_atc18.all;
170
use work.tech_atc35.all;
171
use work.tech_fs90.all;
172
use work.tech_umc18.all;
173
use work.tech_generic.all;
174
use work.tech_virtex.all;
175
use work.tech_virtex2.all;
176
use work.tech_tsmc25.all;
177
use work.tech_proasic.all;
178
use work.tech_axcel.all;
179
 
180
entity syncram is
181
  generic ( abits : integer := 8; dbits : integer := 32);
182
  port (
183
    address : in std_logic_vector (abits -1 downto 0);
184
    clk     : in clk_type;
185
    datain  : in std_logic_vector (dbits -1 downto 0);
186
    dataout : out std_logic_vector (dbits -1 downto 0);
187
    enable  : in std_logic;
188
    write   : in std_logic
189
  );
190
end;
191
 
192
architecture behav of syncram is
193
begin
194
 
195
  inf : if INFER_RAM generate
196
    u0 : generic_syncram generic map (abits => abits, dbits => dbits)
197
         port map (address, clk , datain, dataout, enable, write);
198
  end generate;
199
 
200
  hb : if (not INFER_RAM) generate
201
    at1 : if TARGET_TECH = atc18 generate
202
      u0 : atc18_syncram generic map (abits => abits, dbits => dbits)
203
         port map (address, clk, datain, dataout, enable, write);
204
    end generate;
205
    at2 : if TARGET_TECH = atc25 generate
206
      u0 : atc25_syncram generic map (abits => abits, dbits => dbits)
207
         port map (address, clk, datain, dataout, enable, write);
208
    end generate;
209
    at3 : if TARGET_TECH = atc35 generate
210
      u0 : atc35_syncram generic map (abits => abits, dbits => dbits)
211
         port map (address, clk , datain, dataout, enable, write);
212
    end generate;
213
    fs9 : if TARGET_TECH = fs90 generate
214
      u0 : fs90_syncram generic map (abits => abits, dbits => dbits)
215
         port map (address, clk , datain, dataout, enable, write);
216
    end generate;
217
    umc1 : if TARGET_TECH = umc18 generate
218
      u0 : umc18_syncram generic map (abits => abits, dbits => dbits)
219
         port map (address, clk , datain, dataout, enable, write);
220
    end generate;
221
    xcv : if TARGET_TECH = virtex generate
222
      u0 : virtex_syncram generic map (abits => abits, dbits => dbits)
223
           port map (address, clk , datain, dataout, enable, write);
224
    end generate;
225
    xc2v : if TARGET_TECH = virtex2 generate
226
      u0 : virtex2_syncram generic map (abits => abits, dbits => dbits)
227
           port map (address, clk , datain, dataout, enable, write);
228
    end generate;
229
    sim : if TARGET_TECH = gen generate
230
      u0 : generic_syncram generic map (abits => abits, dbits => dbits)
231
           port map (address, clk , datain, dataout, enable, write);
232
    end generate;
233
    tsmc : if TARGET_TECH = tsmc25 generate
234
      u0 : tsmc25_syncram generic map (abits => abits, dbits => dbits)
235
           port map (address, clk , datain, dataout, enable, write);
236
    end generate;
237
    proa : if TARGET_TECH = proasic generate
238
      u0 : proasic_syncram generic map (abits => abits, dbits => dbits)
239
           port map (address, clk , datain, dataout, enable, write);
240
    end generate;
241
    axc : if TARGET_TECH = axcel generate
242
      u0 : axcel_syncram generic map (abits => abits, dbits => dbits)
243
           port map (address, clk , datain, dataout, enable, write);
244
    end generate;
245
  end generate;
246
end;
247
 
248
-- syncronous dual-port ram
249
 
250
LIBRARY ieee;
251
use IEEE.std_logic_1164.all;
252
use work.leon_target.all;
253
use work.leon_config.all;
254
use work.leon_iface.all;
255
use work.tech_generic.all;
256
use work.tech_atc18.all;
257
use work.tech_atc25.all;
258
use work.tech_virtex.all;
259
use work.tech_virtex2.all;
260
use work.tech_tsmc25.all;
261
 
262
entity dpsyncram is
263
  generic ( abits : integer := 8; dbits : integer := 32);
264
  port (
265
    address1 : in std_logic_vector((abits -1) downto 0);
266
    clk      : in clk_type;
267
    datain1  : in std_logic_vector((dbits -1) downto 0);
268
    dataout1 : out std_logic_vector((dbits -1) downto 0);
269
    enable1  : in std_logic;
270
    write1   : in std_logic;
271
    address2 : in std_logic_vector((abits -1) downto 0);
272
    datain2  : in std_logic_vector((dbits -1) downto 0);
273
    dataout2 : out std_logic_vector((dbits -1) downto 0);
274
    enable2  : in std_logic;
275
    write2   : in std_logic
276
  );
277
end;
278
 
279
architecture behav of dpsyncram is
280
begin
281
 
282
-- pragma translate_off
283
  inf : if INFER_RAM generate
284
    x : process(clk)
285
    begin
286
      assert false
287
        report "infering of dual-port rams not supported!"
288
      severity error;
289
    end process;
290
  end generate;
291
-- pragma translate_on
292
 
293
  hb : if (not INFER_RAM) generate
294
    atc1 : if TARGET_TECH = atc18 generate
295
      u0 : atc18_dpram generic map (abits => abits, dbits => dbits)
296
           port map (address1, clk, datain1, dataout1, enable1, write1,
297
                     address2, datain2, dataout2, enable2, write2);
298
    end generate;
299
    atc2 : if TARGET_TECH = atc25 generate
300
      u0 : atc25_dpram generic map (abits => abits, dbits => dbits)
301
           port map (address1, clk, datain1, dataout1, enable1, write1,
302
                     address2, datain2, dataout2, enable2, write2);
303
    end generate;
304
    xcv : if TARGET_TECH = virtex generate
305
      u0 : virtex_dpram generic map (abits => abits, dbits => dbits)
306
           port map (address1, clk, datain1, dataout1, enable1, write1,
307
                     address2, clk, datain2, dataout2, enable2, write2);
308
    end generate;
309
    xc2v : if TARGET_TECH = virtex2 generate
310
      u0 : virtex2_dpram generic map (abits => abits, dbits => dbits)
311
           port map (address1, clk, datain1, dataout1, enable1, write1,
312
                     address2, clk, datain2, dataout2, enable2, write2);
313
    end generate;
314
    tsmc : if TARGET_TECH = tsmc25 generate
315
      u0 : tsmc25_dpram generic map (abits => abits, dbits => dbits)
316
           port map (address1, clk, datain1, dataout1, enable1, write1,
317
                     address2, datain2, dataout2, enable2, write2);
318
    end generate;
319
 
320
-- pragma translate_off
321
    notech : if ((TARGET_TECH /= virtex) and (TARGET_TECH /= atc25) and
322
                 (TARGET_TECH /= virtex2) and
323
                 (TARGET_TECH /= atc18) and (TARGET_TECH /= tsmc25)) generate
324
      x : process(clk)
325
      begin
326
        assert false
327
          report "dual-port rams not supported for this technology!"
328
        severity error;
329
      end process;
330
    end generate;
331
-- pragma translate_on
332
  end generate;
333
end;
334
 
335
-- IU regfile
336
 
337
LIBRARY ieee;
338
use IEEE.std_logic_1164.all;
339
use work.leon_target.all;
340
use work.leon_config.all;
341
use work.leon_iface.all;
342
use work.tech_atc18.all;
343
use work.tech_atc25.all;
344
use work.tech_atc35.all;
345
use work.tech_fs90.all;
346
use work.tech_umc18.all;
347
use work.tech_generic.all;
348
use work.tech_virtex.all;
349
use work.tech_virtex2.all;
350
use work.tech_tsmc25.all;
351
use work.tech_proasic.all;
352
use work.tech_axcel.all;
353
 
354
entity regfile_iu is
355
  generic (
356
    rftype : integer := 1;
357
    abits : integer := 8; dbits : integer := 32; words : integer := 128
358
  );
359
  port (
360
    rst      : in std_logic;
361
    clk      : in clk_type;
362
    clkn     : in clk_type;
363
    rfi      : in rf_in_type;
364
    rfo      : out rf_out_type);
365
end;
366
 
367
architecture rtl of regfile_iu is
368
signal vcc : std_logic;
369
begin
370
 
371
  vcc <= '1';
372
 
373
  inf : if INFER_REGF generate
374
    u0 : generic_regfile_iu generic map (rftype, abits, dbits, words)
375
 
376
         port map (rst, clk, clkn, rfi, rfo);
377
 
378
  end generate;
379
 
380
  ninf : if not INFER_REGF generate
381
    atm1 : if TARGET_TECH = atc18 generate
382
      u0 : atc18_regfile_iu generic map (rftype, abits, dbits, words)
383
           port map (rst, clk, clkn, rfi, rfo);
384
    end generate;
385
    atm2 : if TARGET_TECH = atc25 generate
386
      u0 : atc25_regfile_iu generic map (rftype, abits, dbits, words)
387
           port map (rst, clk, clkn, rfi, rfo);
388
    end generate;
389
    atm3 : if TARGET_TECH = atc35 generate
390
      u0 : atc35_regfile generic map (abits, dbits, words)
391
           port map (rst, clk, clkn, rfi, rfo);
392
    end generate;
393
    umc0 : if TARGET_TECH = fs90 generate
394
      u0 : fs90_regfile generic map (abits, dbits, words)
395
           port map (rst, clk, clkn, rfi, rfo);
396
    end generate;
397
    umc1 : if TARGET_TECH = umc18 generate
398
      u0 : umc18_regfile generic map (abits, dbits, words)
399
           port map (rst, clk, clkn, rfi, rfo);
400
    end generate;
401
    xcv : if TARGET_TECH = virtex generate
402
      u0 : virtex_regfile generic map (rftype, abits, dbits, words)
403
           port map (rst, clk , clkn , rfi, rfo);
404
    end generate;
405
    xc2v : if TARGET_TECH = virtex2 generate
406
      u0 : virtex2_regfile generic map (rftype, abits, dbits, words)
407
           port map (rst, clk , clkn , rfi, rfo);
408
    end generate;
409
    sim : if TARGET_TECH = gen generate
410
      u0 : generic_regfile_iu generic map (rftype, abits, dbits, words)
411
         port map (rst, clk , clkn , rfi, rfo);
412
    end generate;
413
    tsmc : if TARGET_TECH = tsmc25 generate
414
      u0 : tsmc25_regfile_iu generic map (abits, dbits, words)
415
         port map (rst, clk , clkn , rfi, rfo);
416
    end generate;
417
    proa : if TARGET_TECH = proasic generate
418
      u0 : proasic_regfile_iu generic map (rftype, abits, dbits, words)
419
           port map (rst, clk , clkn , rfi, rfo);
420
    end generate;
421
    axc : if TARGET_TECH = axcel generate
422
      u0 : axcel_regfile_iu generic map (rftype, abits, dbits, words)
423
           port map (rst, clk , clkn , rfi, rfo);
424
    end generate;
425
  end generate;
426
end;
427
 
428
-- Parallel FPU/CP regfile
429
 
430
LIBRARY ieee;
431
use IEEE.std_logic_1164.all;
432
use work.leon_target.all;
433
use work.leon_config.all;
434
use work.leon_iface.all;
435
use work.tech_atc18.all;
436
use work.tech_atc25.all;
437
use work.tech_atc35.all;
438
use work.tech_fs90.all;
439
use work.tech_umc18.all;
440
use work.tech_generic.all;
441
use work.tech_virtex.all;
442
use work.tech_virtex2.all;
443
use work.tech_tsmc25.all;
444
use work.tech_proasic.all;
445
use work.tech_axcel.all;
446
 
447
entity regfile_cp is
448
  generic (
449
    abits : integer := 4; dbits : integer := 32; words : integer := 16
450
  );
451
  port (
452
    rst      : in std_logic;
453
    clk      : in clk_type;
454
    rfi      : in rf_cp_in_type;
455
    rfo      : out rf_cp_out_type);
456
end;
457
 
458
architecture rtl of regfile_cp is
459
signal vcc : std_logic;
460
begin
461
 
462
  vcc <= '1';
463
 
464
  inf : if INFER_REGF generate
465
    u0 : generic_regfile_cp generic map (abits, dbits, words)
466
 
467
         port map (rst, clk, rfi, rfo);
468
 
469
  end generate;
470
 
471
  ninf : if not INFER_REGF generate
472
    atm1 : if TARGET_TECH = atc18 generate
473
      u0 : atc18_regfile_cp generic map (abits, dbits, words)
474
           port map (rst, clk, rfi, rfo);
475
    end generate;
476
    atm2 : if TARGET_TECH = atc25 generate
477
      u0 : atc25_regfile_cp generic map (abits, dbits, words)
478
           port map (rst, clk, rfi, rfo);
479
    end generate;
480
    atm3 : if TARGET_TECH = atc35 generate
481
      u0 : atc35_regfile_cp generic map (abits, dbits, words)
482
           port map (rst, clk, rfi, rfo);
483
    end generate;
484
--    umc0 : if TARGET_TECH = fs90 generate 
485
--      u0 : fs90_regfile_cp generic map (abits, dbits, words)
486
--         port map (rst, clk, rfi, rfo);
487
--    end generate;
488
--    umc1 : if TARGET_TECH = umc18 generate 
489
--      u0 : umc18_regfile_cp generic map (abits, dbits, words)
490
--         port map (rst, clk, rfi, rfo);
491
--    end generate;
492
    xcv : if TARGET_TECH = virtex generate
493
      u0 : virtex_regfile_cp generic map (abits, dbits, words)
494
           port map (rst, clk , rfi, rfo);
495
    end generate;
496
    xc2v : if TARGET_TECH = virtex2 generate
497
      u0 : virtex2_regfile_cp generic map (abits, dbits, words)
498
           port map (rst, clk , rfi, rfo);
499
    end generate;
500
    tsmc : if TARGET_TECH = tsmc25 generate
501
      u0 : tsmc25_regfile_cp generic map (abits, dbits, words)
502
           port map (rst, clk , rfi, rfo);
503
    end generate;
504
    sim : if TARGET_TECH = gen generate
505
      u0 : generic_regfile_cp generic map (abits, dbits, words)
506
         port map (rst, clk , rfi, rfo);
507
    end generate;
508
    proa : if TARGET_TECH = proasic generate
509
      u0 : proasic_regfile_cp generic map (abits, dbits, words)
510
           port map (rst, clk , rfi, rfo);
511
    end generate;
512
    axc : if TARGET_TECH = axcel generate
513
      u0 : axcel_regfile_cp generic map (abits, dbits, words)
514
           port map (rst, clk , rfi, rfo);
515
    end generate;
516
  end generate;
517
end;
518
 
519
-- boot-prom
520
 
521
LIBRARY ieee;
522
use IEEE.std_logic_1164.all;
523
use work.leon_target.all;
524
use work.leon_config.all;
525
use work.tech_atc35.all;
526
use work.tech_generic.all;
527
use work.tech_virtex.all;
528
 
529
entity bprom is
530
  port (
531
    clk       : in std_logic;
532
    cs        : in std_logic;
533
    addr      : in std_logic_vector(31 downto 0);
534
    data      : out std_logic_vector(31 downto 0)
535
  );
536
end;
537
 
538
architecture rtl of bprom is
539
component gen_bprom
540
  port (
541
    clk : in std_logic;
542
    csn : in std_logic;
543
    addr : in std_logic_vector (29 downto 0);
544
    data : out std_logic_vector (31 downto 0));
545
end component;
546
begin
547
 
548
  b0: if INFER_ROM generate
549
    u0 : gen_bprom port map (clk, cs, addr(31 downto 2), data);
550
  end generate;
551
 
552
  b1: if (not INFER_ROM) and ((TARGET_TECH = virtex) or (TARGET_TECH = virtex2)) generate
553
    u0 : virtex_bprom port map (clk, addr(31 downto 2), data);
554
  end generate;
555
 
556
end;
557
 
558
-- multiplier 
559
 
560
library ieee;
561
use ieee.std_logic_1164.all;
562
use work.leon_target.all;
563
use work.leon_config.all;
564
use work.leon_iface.all;
565
use work.multlib.all;
566
use work.tech_generic.all;
567
 
568
entity hw_smult is
569
  generic ( abits : integer := 10; bbits : integer := 8 );
570
  port (
571
    clk  : in  clk_type;
572
    holdn: in  std_logic;
573
    a    : in  std_logic_vector(abits-1 downto 0);
574
    b    : in  std_logic_vector(bbits-1 downto 0);
575
    c    : out std_logic_vector(abits+bbits-1 downto 0)
576
  );
577
end;
578
 
579
architecture rtl of hw_smult is
580
begin
581
 
582
  inf : if INFER_MULT generate
583
    u0 : generic_smult
584
         generic map (abits => abits, bbits => bbits)
585
         port map (a, b, c);
586
  end generate;
587
 
588
  mg : if not INFER_MULT generate
589
    m1717 : if (abits = 17) and (bbits = 17) generate
590
      u0 : mul_17_17 port map (clk, holdn, a, b, c);
591
    end generate;
592
    m339 : if (abits = 33) and (bbits = 9) generate
593
      u0 : mul_33_9 port map (a, b, c);
594
    end generate;
595
    m3317 : if (abits = 33) and (bbits = 17) generate
596
      u0 : mul_33_17 port map (a, b, c);
597
    end generate;
598
    m3333 : if (abits = 33) and (bbits = 33) generate
599
      u0 : mul_33_33 port map (a, b, c);
600
    end generate;
601
  end generate;
602
end;
603
 
604
-- input pad
605
 
606
library IEEE;
607
use IEEE.std_logic_1164.all;
608
use work.leon_target.all;
609
use work.leon_config.all;
610
use work.tech_atc18.all;
611
use work.tech_atc25.all;
612
use work.tech_atc35.all;
613
use work.tech_fs90.all;
614
use work.tech_umc18.all;
615
use work.tech_generic.all;
616
use work.tech_tsmc25.all;
617
 
618
entity inpad is port (pad : in std_logic; q : out std_logic); end;
619
architecture rtl of inpad is
620
begin
621
  inf : if INFER_PADS or (TARGET_TECH = gen) or
622
          (TARGET_TECH = virtex) or (TARGET_TECH = proasic) or
623
          (TARGET_TECH = virtex2) or (TARGET_TECH = axcel) generate
624
    ginpad0 : geninpad port map (q => q, pad => pad);
625
  end generate;
626
  ninf : if not INFER_PADS generate
627
    ip0 : if TARGET_TECH = atc18 generate
628
      ipx : atc18_inpad port map (q => q, pad => pad);
629
    end generate;
630
    ip1 : if TARGET_TECH = atc25 generate
631
      ipx : atc25_inpad port map (q => q, pad => pad);
632
    end generate;
633
    ip2 : if TARGET_TECH = atc35 generate
634
      ipx : atc35_inpad port map (q => q, pad => pad);
635
    end generate;
636
    ip3 : if TARGET_TECH = fs90 generate
637
      ipx : fs90_inpad port map (q => q, pad => pad);
638
    end generate;
639
    ip4 : if TARGET_TECH = umc18 generate
640
      ipx : umc18_inpad port map (q => q, pad => pad);
641
    end generate;
642
    ip5 : if TARGET_TECH = tsmc25 generate
643
      ipx : tsmc25_inpad port map (q => q, pad => pad);
644
    end generate;
645
  end generate;
646
end;
647
 
648
-- input schmitt pad
649
 
650
library IEEE;
651
use IEEE.std_logic_1164.all;
652
use work.leon_target.all;
653
use work.leon_config.all;
654
use work.tech_atc18.all;
655
use work.tech_atc25.all;
656
use work.tech_atc35.all;
657
use work.tech_fs90.all;
658
use work.tech_umc18.all;
659
use work.tech_generic.all;
660
use work.tech_tsmc25.all;
661
 
662
entity smpad is port (pad : in std_logic; q : out std_logic); end;
663
architecture rtl of smpad is
664
begin
665
  inf : if INFER_PADS or (TARGET_TECH = gen) or
666
          (TARGET_TECH = virtex) or (TARGET_TECH = proasic) or
667
          (TARGET_TECH = virtex2) or (TARGET_TECH = axcel) generate
668
    gsmpad0 : gensmpad port map (pad => pad, q => q);
669
  end generate;
670
  ninf : if not INFER_PADS generate
671
    sm0 : if TARGET_TECH = atc18 generate
672
      smx : atc18_smpad port map (q => q, pad => pad);
673
    end generate;
674
    sm1 : if TARGET_TECH = atc25 generate
675
      smx : atc25_smpad port map (q => q, pad => pad);
676
    end generate;
677
    sm2 : if TARGET_TECH = atc35 generate
678
      smx : atc35_smpad port map (q => q, pad => pad);
679
    end generate;
680
    sm3 : if TARGET_TECH = fs90 generate
681
      smx : fs90_smpad port map (q => q, pad => pad);
682
    end generate;
683
    sm4 : if TARGET_TECH = umc18 generate
684
      smx : umc18_smpad port map (q => q, pad => pad);
685
    end generate;
686
    sm5 : if TARGET_TECH = tsmc25 generate
687
      smx : tsmc25_smpad port map (q => q, pad => pad);
688
    end generate;
689
  end generate;
690
end;
691
 
692
-- output pads
693
 
694
library IEEE;
695
use IEEE.std_logic_1164.all;
696
use work.leon_target.all;
697
use work.leon_config.all;
698
use work.tech_atc25.all;
699
use work.tech_atc35.all;
700
use work.tech_fs90.all;
701
use work.tech_umc18.all;
702
use work.tech_generic.all;
703
use work.tech_tsmc25.all;
704
 
705
entity outpad is
706
  generic (drive : integer := 1);
707
  port (d : in std_logic; pad : out std_logic);
708
end;
709
architecture rtl of outpad is
710
begin
711
  inf : if INFER_PADS or (TARGET_TECH = gen) or
712
          (TARGET_TECH = virtex) or (TARGET_TECH = proasic) or
713
          (TARGET_TECH = virtex2) or (TARGET_TECH = axcel) generate
714
    goutpad0 : genoutpad port map (d => d, pad => pad);
715
  end generate;
716
  ninf : if not INFER_PADS generate
717
    op1 : if (TARGET_TECH = atc25) or (TARGET_TECH = atc18) generate
718
      opx : atc25_outpad generic map (drive) port map (d => d, pad => pad);
719
    end generate;
720
    op2 : if TARGET_TECH = atc35 generate
721
      opx : atc35_outpad generic map (drive) port map (d => d, pad => pad);
722
    end generate;
723
    op3 : if TARGET_TECH = fs90 generate
724
      opx : fs90_outpad generic map (drive) port map (d => d, pad => pad);
725
    end generate;
726
    op4 : if TARGET_TECH = umc18 generate
727
      opx : umc18_outpad generic map (drive) port map (d => d, pad => pad);
728
    end generate;
729
    op5 : if TARGET_TECH = tsmc25 generate
730
      opx : tsmc25_outpad generic map (drive) port map (d => d, pad => pad);
731
    end generate;
732
  end generate;
733
end;
734
 
735
-- tri-state output pads with pull-up
736
 
737
library IEEE;
738
use IEEE.std_logic_1164.all;
739
use work.leon_target.all;
740
use work.leon_config.all;
741
use work.tech_atc25.all;
742
use work.tech_atc35.all;
743
use work.tech_fs90.all;
744
use work.tech_umc18.all;
745
use work.tech_generic.all;
746
use work.tech_tsmc25.all;
747
 
748
entity toutpadu is
749
  generic (drive : integer := 1);
750
  port (d, en : in std_logic; pad : out std_logic);
751
end;
752
architecture rtl of toutpadu is
753
begin
754
  inf : if INFER_PADS or (TARGET_TECH = gen) or
755
          (TARGET_TECH = virtex) or (TARGET_TECH = proasic) or
756
          (TARGET_TECH = virtex2) or (TARGET_TECH = axcel) generate
757
    giop0 : gentoutpadu port map (d => d, en => en, pad => pad);
758
  end generate;
759
  ninf : if not INFER_PADS generate
760
    atc25t : if (TARGET_TECH = atc25) or (TARGET_TECH = atc18) generate
761
      p0 : atc25_toutpadu generic map (drive) port map (d => d, en => en, pad => pad);
762
    end generate;
763
    atc35t : if TARGET_TECH = atc35 generate
764
      p0 : atc35_toutpadu generic map (drive) port map (d => d, en => en, pad => pad);
765
    end generate;
766
    fs90t : if TARGET_TECH = fs90 generate
767
      p0 : fs90_toutpadu generic map (drive) port map (d => d, en => en, pad => pad);
768
    end generate;
769
    umc18t : if TARGET_TECH = umc18 generate
770
      p0 : umc18_toutpadu generic map (drive) port map (d => d, en => en, pad => pad);
771
    end generate;
772
    tsmc25t : if TARGET_TECH = tsmc25 generate
773
      p0 : tsmc25_toutpadu generic map (drive) port map (d => d, en => en, pad => pad);
774
    end generate;
775
  end generate;
776
end;
777
 
778
-- bidirectional pad
779
 
780
library IEEE;
781
use IEEE.std_logic_1164.all;
782
use work.leon_target.all;
783
use work.leon_config.all;
784
use work.tech_atc25.all;
785
use work.tech_atc35.all;
786
use work.tech_fs90.all;
787
use work.tech_umc18.all;
788
use work.tech_generic.all;
789
use work.tech_tsmc25.all;
790
 
791
entity iopad is
792
  generic (drive : integer := 1);
793
  port (
794
    d     : in  std_logic;
795
    en    : in  std_logic;
796
    q     : out std_logic;
797
    pad   : inout std_logic
798
  );
799
end;
800
 
801
architecture rtl of iopad is
802
begin
803
  inf : if INFER_PADS or (TARGET_TECH = gen) or
804
          (TARGET_TECH = virtex) or (TARGET_TECH = proasic) or
805
          (TARGET_TECH = virtex2) or (TARGET_TECH = axcel) generate
806
    giop0 : geniopad port map (d => d, en => en, q => q, pad => pad);
807
  end generate;
808
  ninf : if not INFER_PADS generate
809
    atc25t : if (TARGET_TECH = atc25) or (TARGET_TECH = atc18) generate
810
      p0 : atc25_iopad generic map (drive) port map (d => d, en => en, q => q, pad => pad);
811
    end generate;
812
    atc35t : if TARGET_TECH = atc35 generate
813
      po : atc35_iopad generic map (drive) port map (d => d, en => en, q => q, pad => pad);
814
    end generate;
815
    fs90t : if TARGET_TECH = fs90 generate
816
      po : fs90_iopad generic map (drive) port map (d => d, en => en, q => q, pad => pad);
817
    end generate;
818
    umc18t : if TARGET_TECH = umc18 generate
819
      po : umc18_iopad generic map (drive) port map (d => d, en => en, q => q, pad => pad);
820
    end generate;
821
    tsmc25t : if TARGET_TECH = tsmc25 generate
822
      po : tsmc25_iopad generic map (drive) port map (d => d, en => en, q => q, pad => pad);
823
    end generate;
824
  end generate;
825
end;
826
 
827
-- bidirectional pad with schmitt trigger for I/O ports
828
-- (if available)
829
 
830
library IEEE;
831
use IEEE.std_logic_1164.all;
832
use work.leon_target.all;
833
use work.leon_config.all;
834
use work.tech_atc25.all;
835
use work.tech_atc35.all;
836
use work.tech_fs90.all;
837
use work.tech_umc18.all;
838
use work.tech_generic.all;
839
use work.tech_tsmc25.all;
840
 
841
entity smiopad is
842
  generic (drive : integer := 1);
843
  port (
844
    d     : in  std_logic;
845
    en    : in  std_logic;
846
    q     : out std_logic;
847
    pad   : inout std_logic
848
  );
849
end;
850
 
851
architecture rtl of smiopad is
852
begin
853
  inf : if INFER_PADS or (TARGET_TECH = gen) or
854
          (TARGET_TECH = virtex) or (TARGET_TECH = proasic) or
855
          (TARGET_TECH = virtex2) or (TARGET_TECH = axcel) generate
856
    giop0 : geniopad port map (d => d, en => en, q => q, pad => pad);
857
  end generate;
858
  ninf : if not INFER_PADS generate
859
    smiop1 : if (TARGET_TECH = atc25) or (TARGET_TECH = atc18) generate
860
      p0 : atc25_iopad generic map (drive) port map (d => d, en => en, q => q, pad => pad);
861
    end generate;
862
    smiop2 : if TARGET_TECH = atc35 generate
863
      p0 : atc35_iopad generic map (drive) port map (d => d, en => en, q => q, pad => pad);
864
    end generate;
865
    smiop3 : if TARGET_TECH = fs90 generate
866
      p0 : fs90_smiopad generic map (drive) port map (d => d, en => en, q => q, pad => pad);
867
    end generate;
868
    smiop4 : if TARGET_TECH = umc18 generate
869
      p0 : umc18_smiopad generic map (drive) port map (d => d, en => en, q => q, pad => pad);
870
    end generate;
871
    smiop5 : if TARGET_TECH = tsmc25 generate
872
      p0 : tsmc25_smiopad generic map (drive) port map (d => d, en => en, q => q, pad => pad);
873
    end generate;
874
  end generate;
875
end;
876
 
877
-- open-drain pad
878
 
879
library IEEE;
880
use IEEE.std_logic_1164.all;
881
use work.leon_target.all;
882
use work.leon_config.all;
883
use work.tech_atc25.all;
884
use work.tech_atc35.all;
885
use work.tech_fs90.all;
886
use work.tech_umc18.all;
887
use work.tech_generic.all;
888
use work.tech_tsmc25.all;
889
 
890
entity odpad is
891
  generic (drive : integer := 1);
892
  port (d : in std_logic; pad : out std_logic);
893
end;
894
architecture rtl of odpad is
895
begin
896
  inf : if INFER_PADS or (TARGET_TECH = gen) or
897
          (TARGET_TECH = virtex) or (TARGET_TECH = proasic) or
898
          (TARGET_TECH = virtex2) or (TARGET_TECH = axcel) generate
899
    godpad0 : genodpad port map (d => d, pad => pad);
900
  end generate;
901
  ninf : if not INFER_PADS generate
902
    odp1 : if (TARGET_TECH = atc25) or (TARGET_TECH = atc18) generate
903
      p0 : atc25_odpad generic map (drive) port map (d => d, pad => pad);
904
    end generate;
905
    odp2 : if TARGET_TECH = atc35 generate
906
      p0 : atc35_odpad generic map (drive) port map (d => d, pad => pad);
907
    end generate;
908
    odp3 : if TARGET_TECH = fs90 generate
909
      p0 : fs90_odpad generic map (drive) port map (d => d, pad => pad);
910
    end generate;
911
    odp4 : if TARGET_TECH = umc18 generate
912
      p0 : umc18_odpad generic map (drive) port map (d => d, pad => pad);
913
    end generate;
914
    odp5 : if TARGET_TECH = tsmc25 generate
915
      p0 : tsmc25_odpad generic map (drive) port map (d => d, pad => pad);
916
    end generate;
917
  end generate;
918
end;
919
 
920
-- bi-directional open-drain
921
library IEEE;
922
use IEEE.std_logic_1164.all;
923
use work.leon_target.all;
924
use work.leon_config.all;
925
use work.tech_atc25.all;
926
use work.tech_atc35.all;
927
use work.tech_fs90.all;
928
use work.tech_umc18.all;
929
use work.tech_generic.all;
930
use work.tech_tsmc25.all;
931
 
932
entity iodpad is
933
  generic (drive : integer := 1);
934
  port ( d : in  std_logic; q : out std_logic; pad : inout std_logic);
935
end;
936
 
937
architecture rtl of iodpad is
938
begin
939
  inf : if INFER_PADS or (TARGET_TECH = gen) or
940
          (TARGET_TECH = virtex) or (TARGET_TECH = proasic) or
941
          (TARGET_TECH = virtex2) or (TARGET_TECH = axcel) generate
942
    giodp0 : geniodpad port map (d => d, q => q, pad => pad);
943
  end generate;
944
  ninf : if not INFER_PADS generate
945
    iodp1 : if (TARGET_TECH = atc25) or (TARGET_TECH = atc18) generate
946
      p0 : atc25_iodpad generic map (drive) port map (d => d, q => q, pad => pad);
947
    end generate;
948
    iodp2 : if TARGET_TECH = atc35 generate
949
      p0 : atc35_iodpad generic map (drive) port map (d => d, q => q, pad => pad);
950
    end generate;
951
    iodp3 : if TARGET_TECH = fs90 generate
952
      p0 : fs90_iodpad generic map (drive) port map (d => d, q => q, pad => pad);
953
    end generate;
954
    iodp4 : if TARGET_TECH = umc18 generate
955
      p0 : umc18_iodpad generic map (drive) port map (d => d, q => q, pad => pad);
956
    end generate;
957
    iodp5 : if TARGET_TECH = tsmc25 generate
958
      p0 : tsmc25_iodpad generic map (drive) port map (d => d, q => q, pad => pad);
959
    end generate;
960
  end generate;
961
end;
962
 
963
-- PCI input pad
964
 
965
library IEEE;
966
use IEEE.std_logic_1164.all;
967
use work.leon_target.all;
968
use work.leon_config.all;
969
use work.tech_virtex.all;
970
use work.tech_generic.all;
971
use work.tech_map.all;
972
entity pciinpad is port (pad : in std_logic; q : out std_logic); end;
973
architecture rtl of pciinpad is
974
begin
975
  inf : if INFER_PCI_PADS or ((TARGET_TECH /= virtex) and (TARGET_TECH /= virtex2))
976
  generate
977
    ginpad0 : geninpad port map (q => q, pad => pad);
978
  end generate;
979
  ninf : if not INFER_PCI_PADS generate
980
    xcv : if (TARGET_TECH = virtex) or (TARGET_TECH = virtex2) generate
981
      p0 : virtex_pciinpad port map (q => q, pad => pad);
982
    end generate;
983
  end generate;
984
end;
985
 
986
-- PCI output pad
987
 
988
library IEEE;
989
use IEEE.std_logic_1164.all;
990
use work.leon_target.all;
991
use work.leon_config.all;
992
use work.tech_virtex.all;
993
use work.tech_atc25.all;
994
use work.tech_generic.all;
995
 
996
entity pcioutpad is port (d : in std_logic; pad : out std_logic); end;
997
architecture rtl of pcioutpad is
998
begin
999
  inf : if INFER_PCI_PADS or ((TARGET_TECH /= atc25) and (TARGET_TECH /= atc18) and
1000
         (TARGET_TECH /= virtex) and (TARGET_TECH /= virtex2)) generate
1001
    goutpad0 : genoutpad port map (d => d, pad => pad);
1002
  end generate;
1003
  ninf : if not INFER_PCI_PADS generate
1004
    xcv : if (TARGET_TECH = virtex) or (TARGET_TECH = virtex2) generate
1005
      opx : virtex_pcioutpad port map (d => d, pad => pad);
1006
    end generate;
1007
    op1 : if (TARGET_TECH = atc25) or (TARGET_TECH = atc18) generate
1008
      opx : atc25_pcioutpad port map (d => d, pad => pad);
1009
    end generate;
1010
  end generate;
1011
end;
1012
 
1013
-- PCI tristate output pad
1014
library IEEE;
1015
use IEEE.std_logic_1164.all;
1016
use work.leon_target.all;
1017
use work.leon_config.all;
1018
use work.tech_virtex.all;
1019
use work.tech_atc25.all;
1020
use work.tech_generic.all;
1021
 
1022
entity pcitoutpad is port (d, en : in std_logic; pad : out std_logic); end;
1023
 
1024
architecture rtl of pcitoutpad is
1025
begin
1026
  inf : if INFER_PCI_PADS or ((TARGET_TECH /= atc25) and (TARGET_TECH /= atc18) and
1027
         (TARGET_TECH /= virtex) and (TARGET_TECH /= virtex2)) generate
1028
    giop0 : gentoutpadu port map (d => d, en => en, pad => pad);
1029
  end generate;
1030
  ninf : if not INFER_PCI_PADS generate
1031
    xcv : if (TARGET_TECH = virtex) or (TARGET_TECH = virtex2) generate
1032
      p0 : virtex_pcitoutpad port map (d => d, en => en, pad => pad);
1033
    end generate;
1034
    atc25t : if (TARGET_TECH = atc25) or (TARGET_TECH = atc18) generate
1035
      p0 : atc25_pcitoutpad port map (d => d, en => en, pad => pad);
1036
    end generate;
1037
  end generate;
1038
end;
1039
 
1040
-- bidirectional pad
1041
-- PCI bidir pad
1042
 
1043
library IEEE;
1044
use IEEE.std_logic_1164.all;
1045
use work.leon_target.all;
1046
use work.leon_config.all;
1047
use work.tech_virtex.all;
1048
use work.tech_atc25.all;
1049
use work.tech_generic.all;
1050
 
1051
entity pciiopad is
1052
  port (
1053
    d     : in  std_logic;
1054
    en    : in  std_logic;
1055
    q     : out std_logic;
1056
    pad   : inout std_logic
1057
  );
1058
end;
1059
 
1060
architecture rtl of pciiopad is
1061
begin
1062
  inf : if INFER_PCI_PADS or ((TARGET_TECH /= atc25) and (TARGET_TECH /= atc18) and
1063
         (TARGET_TECH /= virtex) and (TARGET_TECH /= virtex2)) generate
1064
    giop0 : geniopad port map (d => d, en => en, q => q, pad => pad);
1065
  end generate;
1066
  ninf : if not INFER_PCI_PADS generate
1067
    xcv : if (TARGET_TECH = virtex) or (TARGET_TECH = virtex2) generate
1068
      p0 : virtex_pciiopad port map (d => d, en => en, q => q, pad => pad);
1069
    end generate;
1070
    iop1 : if (TARGET_TECH = atc25) or (TARGET_TECH = atc18) generate
1071
      p0 : atc25_pciiopad port map (d => d, en => en, q => q, pad => pad);
1072
    end generate;
1073
  end generate;
1074
end;
1075
 
1076
-- PCI bi-directional open-drain
1077
library IEEE;
1078
use IEEE.std_logic_1164.all;
1079
use work.leon_target.all;
1080
use work.leon_config.all;
1081
use work.tech_virtex.all;
1082
use work.tech_atc25.all;
1083
use work.tech_generic.all;
1084
 
1085
entity pciiodpad is
1086
  port ( d : in  std_logic; q : out std_logic; pad : inout std_logic);
1087
end;
1088
 
1089
architecture rtl of pciiodpad is
1090
begin
1091
  inf : if INFER_PCI_PADS or ((TARGET_TECH /= atc25) and (TARGET_TECH /= atc18) and
1092
         (TARGET_TECH /= virtex) and (TARGET_TECH /= virtex2)) generate
1093
    giodp0 : geniodpad port map (d => d, q => q, pad => pad);
1094
  end generate;
1095
  ninf : if not INFER_PCI_PADS generate
1096
    xcv : if (TARGET_TECH = virtex) or (TARGET_TECH = virtex2) generate
1097
      p0 : virtex_pciiodpad port map (d => d, q => q, pad => pad);
1098
    end generate;
1099
    iodp1 : if (TARGET_TECH = atc25) or (TARGET_TECH = atc18) generate
1100
      p0 : atc25_pciiodpad port map (d => d, q => q, pad => pad);
1101
    end generate;
1102
  end generate;
1103
end;
1104
 
1105
library IEEE;
1106
use IEEE.std_logic_1164.all;
1107
use work.leon_target.all;
1108
use work.leon_iface.all;
1109
use work.leon_config.all;
1110
use work.tech_generic.all;
1111
use work.tech_virtex.all;
1112
use work.tech_virtex2.all;
1113
 
1114
entity clkgen is
1115
port (
1116
    clkin   : in  std_logic;
1117
    pciclkin: in  std_logic;
1118
    clk     : out std_logic;                    -- main clock
1119
    clkn    : out std_logic;                    -- inverted main clock
1120
    sdclk   : out std_logic;                    -- SDRAM clock
1121
    pciclk  : out std_logic;                    -- PCI clock
1122
    cgi     : in clkgen_in_type;
1123
    cgo     : out clkgen_out_type
1124
);
1125
end;
1126
 
1127
architecture rtl of clkgen is
1128
begin
1129
 
1130
  c0: if TARGET_CLK = gen generate
1131
    g0 : generic_clkgen
1132
    port map (clkin, pciclkin, clk, clkn, sdclk, pciclk, cgi, cgo);
1133
  end generate;
1134
  c1: if TARGET_CLK = virtex generate
1135
    v : virtex_clkgen
1136
    generic map (clk_mul => PLL_CLK_MUL, clk_div => PLL_CLK_DIV)
1137
    port map (clkin, pciclkin, clk, clkn, sdclk, pciclk, cgi, cgo);
1138
  end generate;
1139
  c2: if TARGET_CLK = virtex2 generate
1140
    v : virtex2_clkgen
1141
    generic map (clk_mul => PLL_CLK_MUL, clk_div => PLL_CLK_DIV)
1142
    port map (clkin, pciclkin, clk, clkn, sdclk, pciclk, cgi, cgo);
1143
  end generate;
1144
 
1145
end;

powered by: WebSVN 2.1.0

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