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

Subversion Repositories funbase_ip_library

[/] [funbase_ip_library/] [trunk/] [TUT/] [ip.hwp.communication/] [hibi/] [3.0/] [vhd/] [hibi_wrapper_r1.vhd] - Blame information for rev 145

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 145 lanttu
-------------------------------------------------------------------------------
2
-- File        : hibi_wrapper.vhdl
3
-- Description : A wrapper component to interconnect resources in
4
--               System-on-chips.
5
--               Interface revision r1 is the 'base' for all HIBI wrappers:
6
--                - separate IP interface for regular and hi-prior data
7
--                - IP writes/gets addr and data sequentially
8
--               Implementation can be chosen with generics.
9
-- Author      : Erno Salminen
10
-- Project     : Nocbench &  Funbase
11
-- Design      : 
12
-- Date        : 01.04.2011 (nased on HIBI v.2)
13
-- Modified    : 
14
--
15
-------------------------------------------------------------------------------
16
-- Funbase IP library Copyright (C) 2011 TUT Department of Computer Systems
17
--
18
-- This file is part of HIBI
19
--
20
-- This source file may be used and distributed without
21
-- restriction provided that this copyright statement is not
22
-- removed from the file and that any derivative work contains
23
-- the original copyright notice and the associated disclaimer.
24
--
25
-- This source file is free software; you can redistribute it
26
-- and/or modify it under the terms of the GNU Lesser General
27
-- Public License as published by the Free Software Foundation;
28
-- either version 2.1 of the License, or (at your option) any
29
-- later version.
30
--
31
-- This source is distributed in the hope that it will be
32
-- useful, but WITHOUT ANY WARRANTY; without even the implied
33
-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
34
-- PURPOSE.  See the GNU Lesser General Public License for more
35
-- details.
36
--
37
-- You should have received a copy of the GNU Lesser General
38
-- Public License along with this source; if not, download it
39
-- from http://www.opencores.org/lgpl.shtml
40
-------------------------------------------------------------------------------
41
 
42
library ieee;
43
use ieee.std_logic_1164.all;
44
use ieee.std_logic_arith.all;
45
use ieee.std_logic_unsigned.all;
46
use work.hibiv3_pkg.all;
47
 
48
 
49
 
50
entity hibi_wrapper_r1 is
51
  generic (
52
    -- Note: n_   = number of,
53
    --       lte  = less than or equal,
54
    --       gte  = greater than or equal 
55
 
56
    -- Structural settings.
57
    --  All widths are given in bits
58
    addr_width_g    : integer;
59
    data_width_g    : integer;
60
    comm_width_g    : integer;
61
    counter_width_g : integer;          -- gte (n_agents, max_send...) 
62
    debug_width_g   : integer := 0;     -- for special monitors
63
 
64
    --  All FIFO depths are given in words
65
    --  Allowed values 0,2,3... words.
66
    --  Prefix msg refers to hi-prior data
67
    rx_fifo_depth_g     : integer := 5;
68
    tx_fifo_depth_g     : integer := 5;
69
    rx_msg_fifo_depth_g : integer := 5;
70
    tx_msg_fifo_depth_g : integer := 5;
71
 
72
    --  Clocking and synchronization
73
    -- fifo_sel: 0 synch multiclk,        1 basic GALS,
74
    --           2 Gray FIFO (depth=2^n), 3 mixed clock pausible
75
    fifo_sel_g       : integer := 0;    -- use 0 for synchronous systems
76
    --  E.g. Synch_multiclk FIFOs must know the ratio of frequencies
77
    rel_agent_freq_g : integer := 1;
78
    rel_bus_freq_g   : integer := 1;
79
 
80
 
81
    -- Functional: addressing settings
82
    addr_g        : integer := 46;      -- unique for each wrapper
83
    inv_addr_en_g : integer := 0;       -- only for bridges
84
 
85
 
86
    -- Functional: arbitration
87
    --  arb_type=0 round-robin, 1 priority, 2 combined, 3 DAA.
88
    --  TDMA is enabled by setting n_time_slots > 0
89
    --  Ensure that all wrappers in a segment agree on arb_type,
90
    --  n_agents, and n_slots. Max_send can be wrapper-specific.
91
    arb_type_g     : integer := 0;      -- select 0-3
92
    n_agents_g     : integer := 4;      -- within one segment
93
    prior_g        : integer := 2;      -- lte n_agents
94
    max_send_g     : integer := 50;     -- in words, 0 means unlimited
95
    n_time_slots_g : integer := 0;      -- for TDMA
96
    keep_slot_g    : integer := 1;      -- for TDMA
97
 
98
    -- Func/Stuctural: (Run-time re)configuration memory
99
    id_g             : integer := 5;    -- used instead of addr in recfg
100
    id_width_g       : integer := 4;    -- gte(log2(id_g))
101
    cfg_re_g         : integer := 0;    -- enable reading config
102
    cfg_we_g         : integer := 0;    -- enable writing config
103
    n_extra_params_g : integer := 0;    -- app-specific registers
104
    n_cfg_pages_g    : integer := 1;    -- multiple pages allows fast reconfig
105
    --  Note that cfg memory initialization is done with separate
106
    --  package if you have many time slots or configuration pages
107
 
108
 
109
    -- NEW for HIBI v.3
110
    id_min_g        : integer := 0;  -- Only for bridges+cfg, zero for others!
111
    id_max_g        : integer := 0;  -- Only for bridges+cfg, zero for others!
112
    addr_limit_g    : integer := 0;     -- Uppermost addr of a wrapper/bridge
113
    separate_addr_g : integer := 0      -- Transmits addr in parallel with data
114
 
115
    );
116
 
117
  port (
118
    bus_clk        : in std_logic;
119
    agent_clk      : in std_logic;
120
    -- pulsed clocks as used in pausible clock scheme
121
    -- IF fifo 1 and fast synch is used, sync clocks is used as the
122
    -- HIBI synch clock
123
    bus_sync_clk   : in std_logic;
124
    agent_sync_clk : in std_logic;
125
    rst_n          : in std_logic;
126
 
127
    bus_av_in   : in std_logic;
128
    bus_data_in : in std_logic_vector (data_width_g-1 downto 0);
129
    bus_comm_in : in std_logic_vector (comm_width_g-1 downto 0);
130
    bus_full_in : in std_logic;
131
    bus_lock_in : in std_logic;
132
 
133
    agent_av_in     : in  std_logic;
134
    agent_data_in   : in  std_logic_vector (data_width_g-1 downto 0);
135
    agent_comm_in   : in  std_logic_vector (comm_width_g-1 downto 0);
136
    agent_we_in     : in  std_logic;
137
    agent_full_out  : out std_logic;
138
    agent_one_p_out : out std_logic;
139
 
140
    agent_msg_av_in   : in std_logic;
141
    agent_msg_data_in : in std_logic_vector (data_width_g-1 downto 0);
142
    agent_msg_comm_in : in std_logic_vector (comm_width_g-1 downto 0);
143
    agent_msg_we_in   : in std_logic;
144
    agent_msg_re_in   : in std_logic;
145
 
146
    bus_av_out   : out std_logic;
147
    bus_data_out : out std_logic_vector (data_width_g-1 downto 0);
148
    bus_comm_out : out std_logic_vector (comm_width_g-1 downto 0);
149
    bus_lock_out : out std_logic;
150
    bus_full_out : out std_logic;
151
 
152
    agent_av_out    : out std_logic;
153
    agent_data_out  : out std_logic_vector (data_width_g-1 downto 0);
154
    agent_comm_out  : out std_logic_vector (comm_width_g-1 downto 0);
155
    agent_empty_out : out std_logic;
156
    agent_one_d_out : out std_logic;
157
    agent_re_in     : in  std_logic;
158
 
159
 
160
    agent_msg_av_out    : out std_logic;
161
    agent_msg_data_out  : out std_logic_vector (data_width_g-1 downto 0);
162
    agent_msg_comm_out  : out std_logic_vector (comm_width_g-1 downto 0);
163
    agent_msg_empty_out : out std_logic;
164
    agent_msg_one_d_out : out std_logic;
165
    agent_msg_full_out  : out std_logic;
166
    agent_msg_one_p_out : out std_logic
167
 
168
    -- synthesis translate_off 
169
;
170
    debug_out : out std_logic_vector(debug_width_g-1 downto 0);
171
    debug_in  : in  std_logic_vector(debug_width_g-1 downto 0)
172
    -- synthesis translate_on
173
 
174
    );
175
end hibi_wrapper_r1;
176
 
177
 
178
 
179
 
180
architecture structural of hibi_wrapper_r1 is
181
 
182
  -- Structure
183
  -- 1. Control logic for both transmitting (tx) and receiving (rx).
184
  -- 2. FIFOs for tx and rx. Actually, there can be 2 FIFOs in each direction:
185
  --    for regular and high-priority data.
186
  -- IP connects to the FIFOS.
187
  -- Controllers are between FIFOs and the bus. Controllers are connected
188
  -- together for configuring and reading the config.
189
 
190
  component transmitter is
191
    generic (
192
      id_g             : integer;
193
      addr_g           : integer;
194
      id_width_g       : integer;
195
      data_width_g     : integer;
196
      addr_width_g     : integer;
197
      comm_width_g     : integer;
198
      counter_width_g  : integer;
199
      cfg_addr_width_g : integer;
200
      prior_g          : integer;
201
      inv_addr_en_g    : integer;
202
      max_send_g       : integer;
203
      arb_type_g       : integer;
204
      n_agents_g       : integer;
205
      n_cfg_pages_g    : integer;
206
      n_time_slots_g   : integer;
207
      keep_slot_g      : integer;
208
      n_extra_params_g : integer;
209
      cfg_we_g         : integer;
210
      cfg_re_g         : integer;
211
      separate_addr_g  : integer;
212
      debug_width_g    : integer);
213
    port (
214
      clk             : in  std_logic;
215
      rst_n           : in  std_logic;
216
      lock_in         : in  std_logic;
217
      full_in         : in  std_logic;
218
      cfg_data_in     : in  std_logic_vector
219
      (data_width_g-1-(separate_addr_g*addr_width_g) downto 0);
220
      cfg_addr_in     : in  std_logic_vector(cfg_addr_width_g -1 downto 0);
221
      cfg_ret_addr_in : in  std_logic_vector(addr_width_g -1 downto 0);
222
      cfg_re_in       : in  std_logic;
223
      cfg_we_in       : in  std_logic;
224
      av_in           : in  std_logic;
225
      data_in         : in  std_logic_vector(data_width_g-1 downto 0);
226
      comm_in         : in  std_logic_vector(comm_width_g-1 downto 0);
227
      empty_in        : in  std_logic;
228
      one_d_in        : in  std_logic;
229
      av_out          : out std_logic;
230
      data_out        : out std_logic_vector(data_width_g-1 downto 0);
231
      comm_out        : out std_logic_vector(comm_width_g-1 downto 0);
232
      lock_out        : out std_logic;
233
      cfg_rd_rdy_out  : out std_logic;
234
      re_out          : out std_logic
235
      -- synthesis translate_off
236
;
237
      debug_out       : out std_logic_vector(debug_width_g-1 downto 0);
238
      debug_in        : in  std_logic_vector(debug_width_g-1 downto 0)
239
      -- synthesis translate_on
240
      );
241
  end component transmitter;
242
 
243
 
244
  component double_fifo_mux_rd
245
    generic (
246
      fifo_sel_g      : integer;
247
      re_freq_g       : integer;
248
      we_freq_g       : integer;
249
      depth_0_g       : integer;
250
      depth_1_g       : integer;
251
      data_width_g    : integer;
252
      debug_width_g   : integer;
253
      comm_width_g    : integer;
254
      separate_addr_g : integer
255
      );
256
    port (
257
      clk_re     : in std_logic;
258
      clk_we     : in std_logic;
259
      clk_re_pls : in std_logic;
260
      clk_we_pls : in std_logic;
261
      rst_n      : in std_logic;
262
 
263
      av_0_in     : in  std_logic;
264
      data_0_in   : in  std_logic_vector (data_width_g-1 downto 0);
265
      comm_0_in   : in  std_logic_vector (comm_width_g-1 downto 0);
266
      we_0_in     : in  std_logic;
267
      one_p_0_out : out std_logic;
268
      full_0_out  : out std_logic;
269
 
270
      av_1_in     : in  std_logic;
271
      data_1_in   : in  std_logic_vector (data_width_g-1 downto 0);
272
      comm_1_in   : in  std_logic_vector (comm_width_g-1 downto 0);
273
      we_1_in     : in  std_logic;
274
      full_1_out  : out std_logic;
275
      one_p_1_out : out std_logic;
276
 
277
      re_in     : in  std_logic;
278
      av_out    : out std_logic;
279
      data_out  : out std_logic_vector (data_width_g-1 downto 0);
280
      comm_out  : out std_logic_vector (comm_width_g-1 downto 0);
281
      empty_out : out std_logic;
282
      one_d_out : out std_logic;
283
      debug_out : out std_logic_vector(debug_width_g downto 0)
284
      );
285
  end component double_fifo_mux_rd;
286
 
287
 
288
 
289
  component receiver
290
    generic (
291
      id_g             : integer;
292
      id_min_g         : integer := 0;  -- Only for bridges, zero for others!
293
      id_max_g         : integer := 0;  -- Only for bridges, zero for others!
294
      addr_base_g      : integer;
295
      addr_limit_g     : integer := 0;
296
      id_width_g       : integer;
297
      data_width_g     : integer;
298
      addr_width_g     : integer;
299
      cfg_addr_width_g : integer;
300
      cfg_re_g         : integer;
301
      cfg_we_g         : integer;
302
      inv_addr_en_g    : integer;
303
      separate_addr_g  : integer := 0
304
      );
305
    port (
306
      clk           : in std_logic;
307
      rst_n         : in std_logic;
308
      av_in         : in std_logic;
309
      data_in       : in std_logic_vector(data_width_g-1 downto 0);
310
      comm_in       : in std_logic_vector(comm_width_c-1 downto 0);
311
      cfg_rd_rdy_in : in std_logic;
312
 
313
      av_0_out   : out std_logic;
314
      data_0_out : out std_logic_vector(data_width_g-1 downto 0);
315
      comm_0_out : out std_logic_vector(comm_width_c-1 downto 0);
316
      we_0_out   : out std_logic;
317
      full_0_in  : in  std_logic;
318
      one_p_0_in : in  std_logic;
319
 
320
      av_1_out   : out std_logic;
321
      data_1_out : out std_logic_vector(data_width_g-1 downto 0);
322
      comm_1_out : out std_logic_vector(comm_width_c-1 downto 0);
323
      we_1_out   : out std_logic;
324
      full_1_in  : in  std_logic;
325
      one_p_1_in : in  std_logic;
326
 
327
      bus_full_in      : in  std_logic;
328
      cfg_we_out       : out std_logic;
329
      cfg_re_out       : out std_logic;
330
      cfg_data_out     : out std_logic_vector
331
      (data_width_g-1-(separate_addr_g*addr_width_g) downto 0);
332
      cfg_addr_out     : out std_logic_vector(cfg_addr_width_g -1 downto 0);
333
      cfg_ret_addr_out : out std_logic_vector(addr_width_g -1 downto 0);
334
      full_out         : out std_logic
335
      );
336
  end component receiver;
337
 
338
 
339
 
340
  component double_fifo_demux_wr
341
    generic (
342
      fifo_sel_g    : integer;
343
      re_freq_g     : integer;
344
      we_freq_g     : integer;
345
      depth_0_g     : integer;
346
      depth_1_g     : integer;
347
      data_width_g  : integer;
348
      debug_width_g : integer;
349
      comm_width_g  : integer
350
      );
351
    port (
352
      clk_re     : in std_logic;
353
      clk_we     : in std_logic;
354
      clk_re_pls : in std_logic;
355
      clk_we_pls : in std_logic;
356
      rst_n      : in std_logic;
357
 
358
      av_0_in     : in  std_logic;
359
      data_0_in   : in  std_logic_vector (data_width_g-1 downto 0);
360
      comm_0_in   : in  std_logic_vector (comm_width_g-1 downto 0);
361
      we_0_in     : in  std_logic;
362
      one_p_0_out : out std_logic;
363
      full_0_out  : out std_logic;
364
 
365
      av_1_in     : in  std_logic;
366
      data_1_in   : in  std_logic_vector (data_width_g-1 downto 0);
367
      comm_1_in   : in  std_logic_vector (comm_width_g-1 downto 0);
368
      we_1_in     : in  std_logic;
369
      one_p_1_out : out std_logic;
370
      full_1_out  : out std_logic;
371
 
372
      re_0_in     : in  std_logic;
373
      av_0_out    : out std_logic;
374
      data_0_out  : out std_logic_vector (data_width_g-1 downto 0);
375
      comm_0_out  : out std_logic_vector (comm_width_g-1 downto 0);
376
      empty_0_out : out std_logic;
377
      one_d_0_out : out std_logic;
378
 
379
      re_1_in     : in  std_logic;
380
      av_1_out    : out std_logic;
381
      data_1_out  : out std_logic_vector (data_width_g-1 downto 0);
382
      comm_1_out  : out std_logic_vector (comm_width_g-1 downto 0);
383
      empty_1_out : out std_logic;
384
      one_d_1_out : out std_logic;
385
      debug_out   : out std_logic_vector(debug_width_g downto 0)
386
      );
387
  end component double_fifo_demux_wr;
388
 
389
 
390
  -- Calculate minimum of 1 and "value"
391
  -- Required for reserving signals for tslots ans extra_params
392
  -- (Design compiler does not handle empty arrays (e.g. 0 downto -1),
393
  -- Precision handles them well)
394
  function max_with_1 (
395
    constant value : integer)    return integer  is
396
  begin  -- max_with_1
397
    if value = 0 then
398
      return 1;
399
    else
400
      return value;
401
    end if;
402
  end max_with_1;
403
 
404
  function log2 (
405
    constant value : integer)    return integer is
406
 
407
    variable temp    : integer := 1;
408
    variable counter : integer := 0;
409
  begin  -- log2
410
    temp    := 1;
411
    counter := 0;
412
    for i in 0 to 31 loop
413
      if temp < value then
414
        temp    := temp*2;
415
        counter := counter+1;
416
      end if;
417
    end loop;
418
 
419
    return counter;
420
  end log2;
421
 
422
 
423
  -- Calculate the maximum size of configuration
424
  -- memory page. There are 8 parameters and  address,
425
  -- each time slots requires 3 parameters (start, stop, owner),
426
  -- and there may be some application specific extra parameters as well.
427
 
428
  -- E.g. if n_time_slots_g = n_extra_params_g=1
429
  -- then page_size_c= (8+1)+(1*3)+1= 13 parameters
430
  constant n_time_slots_tmp_c   : integer := max_with_1 (n_time_slots_g);
431
  constant n_extra_params_tmp_c : integer := max_with_1 (n_extra_params_g);
432
 
433
  constant page_size_c : integer := 8 + 1 + (n_time_slots_tmp_c * 3)
434
                                    + n_extra_params_tmp_c;
435
 
436
  constant page_addr_width_c  : integer := log2 (page_size_c);
437
  constant param_addr_width_c : integer := log2 (n_cfg_pages_g) +1;
438
  constant cfg_addr_width_c   : integer := param_addr_width_c
439
                                           + page_addr_width_c;
440
 
441
  -- These dbg signals can be viewed from Modelsim to check above
442
  -- calculations manually
443
  signal pag   : integer := page_addr_width_c;
444
  signal par   : integer := param_addr_width_c;
445
  signal cfg_a : integer := cfg_addr_width_c;
446
 
447
 
448
  -- Signals (Conf. mem => ) Transmitter => Receiver
449
  -- signal cfg_rom_en_tx_rx : std_logic;
450
  -- signal id_tx_rx         : std_logic_vector ( id_width_g-1 downto 0);
451
  -- signal base_id_tx_rx    : std_logic_vector ( id_width_g -1 downto 0);
452
  -- signal base_addr_tx_rx  : std_logic_vector ( addr_width_g -1 downto 0);
453
 
454
  -- Tx-fifo => Tx
455
  signal av_fifo_tx    : std_logic;
456
  signal data_fifo_tx  : std_logic_vector (data_width_g-1 downto 0);
457
  signal comm_fifo_tx  : std_logic_vector (comm_width_g-1 downto 0);
458
  signal re_tx_fifo    : std_logic;
459
  signal empty_fifo_tx : std_logic;
460
  signal one_d_fifo_tx : std_logic;
461
 
462
  -- Rx => Rx-fifo
463
  signal av_0_rx_fifo    : std_logic;
464
  signal data_0_rx_fifo  : std_logic_vector (data_width_g-1 downto 0);
465
  signal comm_0_rx_fifo  : std_logic_vector (comm_width_g-1 downto 0);
466
  signal we_0_rx_fifo    : std_logic;
467
  signal full_0_fifo_rx  : std_logic;
468
  signal one_0_p_fifo_rx : std_logic;
469
 
470
  signal av_1_rx_fifo    : std_logic;
471
  signal data_1_rx_fifo  : std_logic_vector (data_width_g-1 downto 0);
472
  signal comm_1_rx_fifo  : std_logic_vector (comm_width_g-1 downto 0);
473
  signal we_1_rx_fifo    : std_logic;
474
  signal full_1_fifo_rx  : std_logic;
475
  signal one_1_p_fifo_rx : std_logic;
476
 
477
  -- Tx => Rx
478
  signal cfg_rd_rdy_tx_rx : std_logic;
479
 
480
  -- Signals Receiver => Transmitter
481
  signal cfg_addr_rx_tx : std_logic_vector(cfg_addr_width_c -1 downto 0);
482
  signal cfg_data_rx_tx :
483
    std_logic_vector (data_width_g-1-(separate_addr_g*addr_width_g) downto 0);
484
  signal cfg_ret_addr_rx_tx : std_logic_vector(addr_width_g -1 downto 0);
485
  signal cfg_re_rx_tx       : std_logic;
486
  signal cfg_we_rx_tx       : std_logic;
487
 
488
 
489
begin  -- structural_muxed_tx_fifos
490
 
491
  --
492
  -- Transmission from IP to bus
493
  --
494
 
495
  tx_unit : transmitter
496
    -- tx_unit : entity work.transmitter
497
    generic map(
498
      data_width_g    => data_width_g,
499
      addr_width_g    => addr_width_g,
500
      comm_width_g    => comm_width_g,
501
      counter_width_g => counter_width_g,
502
 
503
      id_g       => id_g,
504
      id_width_g => id_width_g,
505
 
506
      addr_g        => addr_g,
507
      prior_g       => prior_g,
508
      inv_addr_en_g => inv_addr_en_g,
509
      max_send_g    => max_send_g,
510
 
511
      cfg_addr_width_g => cfg_addr_width_c,
512
      -- page_addr_width_g  => page_addr_width_g,
513
      -- param_addr_width_g => param_addr_width_g,
514
 
515
      arb_type_g       => arb_type_g,
516
      n_agents_g       => n_agents_g,
517
      n_cfg_pages_g    => n_cfg_pages_g,
518
      n_time_slots_g   => n_time_slots_g,
519
      keep_slot_g      => keep_slot_g,
520
      n_extra_params_g => n_extra_params_g,
521
      cfg_re_g         => cfg_re_g,
522
      cfg_we_g         => cfg_we_g,
523
      separate_addr_g  => separate_addr_g,
524
      debug_width_g    => debug_width_g
525
      )
526
    port map(
527
      clk   => bus_clk,
528
      rst_n => rst_n,
529
 
530
      -- from bus
531
      lock_in => bus_lock_in,
532
      full_in => bus_full_in,
533
 
534
      -- from rx
535
      cfg_data_in     => cfg_data_rx_tx,
536
      cfg_addr_in     => cfg_addr_rx_tx,
537
      cfg_ret_addr_in => cfg_ret_addr_rx_tx,
538
      cfg_re_in       => cfg_re_rx_tx,
539
      cfg_we_in       => cfg_we_rx_tx,
540
 
541
      -- from fifo
542
      av_in    => av_fifo_tx,
543
      data_in  => data_fifo_tx,
544
      comm_in  => comm_fifo_tx,
545
      empty_in => empty_fifo_tx,
546
      one_d_in => one_d_fifo_tx,
547
 
548
      --  to bus
549
      data_out => bus_data_out,
550
      comm_out => bus_comm_out,
551
      av_out   => bus_av_out,
552
      lock_out => bus_lock_out,
553
 
554
      -- to rx
555
      cfg_rd_rdy_out => cfg_rd_rdy_tx_rx,
556
      --id_out          => id_tx_rx,
557
      --base_id_out     => base_id_tx_rx,
558
      --base_addr_out   => base_addr_tx_rx,
559
      --inv_addr_en_out => cfg_rom_en_tx_rx,
560
 
561
      -- to fifo
562
      re_out => re_tx_fifo
563
 
564
      -- synthesis translate_off
565
      -- pragma synthesis_off
566
      -- pragma translate_off
567
      ,
568
      debug_in  => debug_in,
569
      debug_out => debug_out
570
      -- pragma translate_on
571
      -- pragma synthesis_on
572
      -- synthesis translate_on
573
      );
574
 
575
 
576
 
577
 
578
  tx_fifo_mux : double_fifo_mux_rd
579
    generic map(
580
      fifo_sel_g      => fifo_sel_g,
581
      re_freq_g       => rel_bus_freq_g,
582
      we_freq_g       => rel_agent_freq_g,
583
      depth_0_g       => tx_msg_fifo_depth_g,
584
      depth_1_g       => tx_fifo_depth_g,
585
      data_width_g    => data_width_g,
586
      debug_width_g   => 0,
587
      comm_width_g    => comm_width_g,
588
      separate_addr_g => separate_addr_g
589
      )
590
    port map(
591
      -- re bus side, we agent side
592
      clk_re     => bus_clk,
593
      clk_we     => agent_clk,
594
      clk_re_pls => bus_sync_clk,
595
      clk_we_pls => agent_sync_clk,
596
      rst_n      => rst_n,
597
 
598
      av_0_in     => agent_msg_av_in,
599
      data_0_in   => agent_msg_data_in,
600
      comm_0_in   => agent_msg_comm_in,
601
      we_0_in     => agent_msg_we_in,
602
      one_p_0_out => agent_msg_one_p_out,
603
      full_0_out  => agent_msg_full_out,
604
 
605
      data_1_in   => agent_data_in,
606
      comm_1_in   => agent_comm_in,
607
      av_1_in     => agent_av_in,
608
      we_1_in     => agent_we_in,
609
      one_p_1_out => agent_one_p_out,
610
      full_1_out  => agent_full_out,
611
 
612
      re_in     => re_tx_fifo,
613
      data_out  => data_fifo_tx,
614
      comm_out  => comm_fifo_tx,
615
      av_out    => av_fifo_tx,
616
      empty_out => empty_fifo_tx,
617
      one_d_out => one_d_fifo_tx
618
      );
619
 
620
 
621
  --
622
  -- Reception: from bus to IP
623
  --
624
 
625
  rx_unit : receiver
626
    -- rx_unit : entity work.receiver
627
    generic map(
628
      id_g             => id_g,
629
      id_min_g         => id_min_g,
630
      id_max_g         => id_max_g,
631
      id_width_g       => id_width_g,
632
      addr_base_g      => addr_g,
633
      addr_limit_g     => addr_limit_g,
634
      data_width_g     => data_width_g,
635
      addr_width_g     => addr_width_g,
636
      cfg_addr_width_g => cfg_addr_width_c,
637
      cfg_re_g         => cfg_re_g,
638
      cfg_we_g         => cfg_we_g,
639
      inv_addr_en_g    => inv_addr_en_g,
640
      separate_addr_g  => separate_addr_g
641
      )
642
    port map(
643
      clk   => bus_clk,
644
      rst_n => rst_n,
645
 
646
      av_in         => bus_av_in,
647
      data_in       => bus_data_in,
648
      comm_in       => bus_comm_in,
649
      cfg_rd_rdy_in => cfg_rd_rdy_tx_rx,
650
 
651
      --id_in          => id_tx_rx,
652
      --base_addr_in   => base_addr_tx_rx,
653
      --inv_addr_en_in => cfg_rom_en_tx_rx,
654
 
655
      av_0_out   => av_0_rx_fifo,
656
      data_0_out => data_0_rx_fifo,
657
      comm_0_out => comm_0_rx_fifo,
658
      we_0_out   => we_0_rx_fifo,
659
      full_0_in  => full_0_fifo_rx,
660
      one_p_0_in => one_0_p_fifo_rx,
661
 
662
      av_1_out   => av_1_rx_fifo,
663
      data_1_out => data_1_rx_fifo,
664
      comm_1_out => comm_1_rx_fifo,
665
      we_1_out   => we_1_rx_fifo,
666
      full_1_in  => full_1_fifo_rx,
667
      one_p_1_in => one_1_p_fifo_rx,
668
 
669
      bus_full_in      => bus_full_in,
670
      cfg_addr_out     => cfg_addr_rx_tx,
671
      cfg_data_out     => cfg_data_rx_tx,
672
      cfg_ret_addr_out => cfg_ret_addr_rx_tx,
673
      cfg_we_out       => cfg_we_rx_tx,
674
      cfg_re_out       => cfg_re_rx_tx,
675
      full_out         => bus_full_out
676
      );
677
 
678
 
679
 
680
  rx_fifo_mux : double_fifo_demux_wr
681
    generic map(
682
      fifo_sel_g    => fifo_sel_g,
683
      re_freq_g     => rel_agent_freq_g,
684
      we_freq_g     => rel_bus_freq_g,
685
      depth_0_g     => rx_msg_fifo_depth_g,
686
      depth_1_g     => rx_fifo_depth_g,
687
      data_width_g  => data_width_g,
688
      debug_width_g => 0,
689
      comm_width_g  => comm_width_g
690
      )
691
    port map(
692
      -- re is handled by agent side, we by bus side
693
      clk_re     => agent_clk,
694
      clk_we     => bus_clk,
695
      clk_re_pls => agent_sync_clk,
696
      clk_we_pls => bus_sync_clk,
697
      rst_n      => rst_n,
698
 
699
      av_0_in     => av_0_rx_fifo,
700
      data_0_in   => data_0_rx_fifo,
701
      comm_0_in   => comm_0_rx_fifo,
702
      we_0_in     => we_0_rx_fifo,
703
      full_0_out  => full_0_fifo_rx,
704
      one_p_0_out => one_0_p_fifo_rx,
705
 
706
      av_1_in     => av_1_rx_fifo,
707
      data_1_in   => data_1_rx_fifo,
708
      comm_1_in   => comm_1_rx_fifo,
709
      we_1_in     => we_1_rx_fifo,
710
      full_1_out  => full_1_fifo_rx,
711
      one_p_1_out => one_1_p_fifo_rx,
712
 
713
      re_0_in     => agent_msg_re_in,
714
      av_0_out    => agent_msg_av_out,
715
      data_0_out  => agent_msg_data_out,
716
      comm_0_out  => agent_msg_comm_out,
717
      empty_0_out => agent_msg_empty_out,
718
      one_d_0_out => agent_msg_one_d_out,
719
 
720
      re_1_in     => agent_re_in,
721
      av_1_out    => agent_av_out,
722
      data_1_out  => agent_data_out,
723
      comm_1_out  => agent_comm_out,
724
      empty_1_out => agent_empty_out,
725
      one_d_1_out => agent_one_d_out
726
      );
727
 
728
 
729
 
730
 
731
 
732
end structural;

powered by: WebSVN 2.1.0

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