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/] [tb/] [sad_tb/] [hibiv3_r4.vhd] - Blame information for rev 145

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 145 lanttu
-------------------------------------------------------------------------------
2
-- Title      : Hibi toplevel using r4 wrappers
3
-- Project    : 
4
-------------------------------------------------------------------------------
5
-- File       : hibiv3_r4.vhd
6
-- Author     : Lasse Lehtonen, modified from Jussi Nieminen's HWTG hibi
7
--              top level
8
-- Company    : 
9
-- Last update: 2010-11-25
10
-- Platform   : 
11
-------------------------------------------------------------------------------
12
-- Description: Semi-generic toplevel, add as many agents as you like.  Just
13
--              be sure to create enough addresses in the tables (scroll down).
14
--              Every segment has equal number of wrappers and are connected
15
--              as a chain.
16
-------------------------------------------------------------------------------
17
-- Revisions  :
18
-- Date        Version  Author  Description
19
-- 2009/06/23  1.0      niemin95        Created
20
-------------------------------------------------------------------------------
21
 
22
library ieee;
23
use ieee.std_logic_1164.all;
24
use work.hibiv3_pkg.all;
25
 
26
 
27
entity hibiv3_r4 is
28
 
29
  generic (
30
    -- HIBI generics
31
    id_width_g          : integer := 4;
32
    addr_width_g        : integer := 16;
33
    data_width_g        : integer := 32;
34
    comm_width_g        : integer := 5;
35
    counter_width_g     : integer := 8;
36
    rel_agent_freq_g    : integer := 1;
37
    rel_bus_freq_g      : integer := 1;
38
    arb_type_g          : integer := 3;
39
    fifo_sel_g          : integer := 0;
40
    rx_fifo_depth_g     : integer := 4;
41
    rx_msg_fifo_depth_g : integer := 4;
42
    tx_fifo_depth_g     : integer := 4;
43
    tx_msg_fifo_depth_g : integer := 4;
44
    max_send_g          : integer := 20;
45
    n_cfg_pages_g       : integer := 1;
46
    n_time_slots_g      : integer := 0;
47
    keep_slot_g         : integer := 0;
48
    n_extra_params_g    : integer := 1;
49
 
50
    cfg_re_g            : integer := 1;
51
    cfg_we_g            : integer := 1;
52
    debug_width_g       : integer := 0;
53
 
54
    n_agents_g   : integer := 12;
55
    n_segments_g : integer := 3;
56
 
57
    separate_addr_g : integer := 0
58
    );
59
 
60
  port (
61
    clk_ip  : in std_logic;
62
    clk_noc : in std_logic;
63
    rst_n   : in std_logic;
64
 
65
    agent_comm_in   : in  std_logic_vector(n_agents_g*comm_width_g-1 downto 0);
66
    agent_data_in   : in  std_logic_vector(n_agents_g*data_width_g-1 downto 0);
67
    agent_av_in     : in  std_logic_vector(n_agents_g-1 downto 0);
68
    agent_we_in     : in  std_logic_vector(n_agents_g-1 downto 0);
69
    agent_re_in     : in  std_logic_vector(n_agents_g-1 downto 0);
70
    agent_comm_out  : out std_logic_vector(n_agents_g*comm_width_g-1 downto 0);
71
    agent_data_out  : out std_logic_vector(n_agents_g*data_width_g-1 downto 0);
72
    agent_av_out    : out std_logic_vector(n_agents_g-1 downto 0);
73
    agent_full_out  : out std_logic_vector(n_agents_g-1 downto 0);
74
    agent_one_p_out : out std_logic_vector(n_agents_g-1 downto 0);
75
    agent_empty_out : out std_logic_vector(n_agents_g-1 downto 0);
76
    agent_one_d_out : out std_logic_vector(n_agents_g-1 downto 0)
77
 
78
    );
79
 
80
end hibiv3_r4;
81
 
82
 
83
 
84
architecture structural of hibiv3_r4 is
85
 
86
  -----------------------------------------------------------------------------
87
  -- HIBI ADDRESSES
88
  -----------------------------------------------------------------------------
89
 
90
  type gen_addr_array_type is array (1 to 4) of integer;
91
  type gen_addr_array_3d_type is array (0 to 2) of gen_addr_array_type;
92
  type gen_bridge_addr_array is array (0 to 1) of integer;
93
 
94
  -- addresses_c(segment index)(wrapper index in the segment)
95
  constant addresses_c : gen_addr_array_3d_type :=
96
    ((16#00000010#, 16#00000030#, 16#00000050#, 16#00000070#),
97
     (16#00000110#, 16#00000130#, 16#00000150#, 16#00000170#),
98
     (16#00000310#, 16#00000330#, 16#00000350#, 16#00000370#));
99
 
100
  constant bridge_a_addr_base_c : gen_bridge_addr_array :=
101
    (16#00000000#, 16#00000000#);
102
  constant bridge_a_addr_limit_c : gen_bridge_addr_array :=
103
    (16#000000FF#, 16#000001FF#);
104
  constant bridge_b_addr_base_c : gen_bridge_addr_array :=
105
    (16#00000000#, 16#00000000#);
106
  constant bridge_b_addr_limit_c : gen_bridge_addr_array :=
107
    (16#000000FF#, 16#000001FF#);
108
 
109
  constant bridge_a_id_min_c : gen_bridge_addr_array :=
110
    (1, 1);
111
  constant bridge_a_id_max_c : gen_bridge_addr_array :=
112
    (5, 11);
113
  constant bridge_b_id_min_c : gen_bridge_addr_array :=
114
    (1, 1);
115
  constant bridge_b_id_max_c : gen_bridge_addr_array :=
116
    (5, 11);
117
 
118
  constant bridge_a_inv_addr_c : gen_bridge_addr_array :=
119
    (1, 1);
120
  constant bridge_b_inv_addr_c : gen_bridge_addr_array :=
121
    (0, 0);
122
 
123
 
124
 
125
 
126
 
127
 
128
 
129
  -----------------------------------------------------------------------------
130
  -- 
131
  -----------------------------------------------------------------------------
132
 
133
  -- purpose: to resolve the number of agents in each segment
134
  function n_agents_in_segment (
135
    constant segment, n_segments, wrappers_per_seg : integer)
136
    return integer is
137
  begin  -- n_agents_in_segment
138
 
139
    if n_segments = 1 then
140
      return wrappers_per_seg;
141
    elsif segment = 0 or segment = n_segments - 1 then
142
      -- end segment, only one bridge
143
      return wrappers_per_seg + 1;
144
    else
145
      -- middle segment
146
      return wrappers_per_seg + 2;
147
    end if;
148
 
149
  end n_agents_in_segment;
150
 
151
  function priority_a (
152
    constant segment, n_segments, wrappers_per_seg : integer)
153
    return integer is
154
  begin
155
 
156
    if n_segments = 1 then
157
      return 0;
158
    elsif segment = 0 or segment = n_segments - 1 then
159
      -- end segment, only one bridge
160
      return wrappers_per_seg + 1;
161
    else
162
      -- middle segment
163
      return wrappers_per_seg + 2;
164
    end if;
165
 
166
  end priority_a;
167
 
168
  function priority_b (
169
    constant segment, n_segments, wrappers_per_seg : integer)
170
    return integer is
171
  begin
172
 
173
    if n_segments = 1 then
174
      return 0;
175
    elsif segment = 0 or segment = n_segments - 1 then
176
      -- end segment, only one bridge
177
      return wrappers_per_seg + 1;
178
    else
179
      -- middle segment
180
      return wrappers_per_seg + 1;
181
    end if;
182
 
183
  end priority_b;
184
 
185
  function id_agent (
186
    constant segment, n_segments, wrappers_per_seg : integer)
187
    return integer is
188
  begin
189
 
190
    if n_segments = 1 then
191
      return 1;
192
    elsif segment = 0 then
193
      -- first segment
194
      return 1;
195
    elsif segment = n_segments - 1 then
196
      -- last segment
197
      return segment*(wrappers_per_seg+2);
198
    else
199
      -- middle segment
200
      return segment*(wrappers_per_seg+2);
201
    end if;
202
 
203
  end id_agent;
204
 
205
  function id_a (
206
    constant segment, n_segments, wrappers_per_seg : integer)
207
    return integer is
208
  begin
209
 
210
    if n_segments = 1 then
211
      return 0;
212
    elsif segment = 0 then
213
      -- first segment
214
      return wrappers_per_seg + 1;
215
    elsif segment = n_segments - 1 then
216
      -- last segment
217
      return 0;
218
    else
219
      -- middle segment
220
      return segment*(wrappers_per_seg+2)+wrappers_per_seg;
221
    end if;
222
 
223
  end id_a;
224
 
225
  function id_b (
226
    constant segment, n_segments, wrappers_per_seg : integer)
227
    return integer is
228
  begin
229
 
230
    if n_segments = 1 then
231
      return 0;
232
    elsif segment = 0 then
233
      -- first segment
234
      return 0;
235
    elsif segment = n_segments - 1 then
236
      return segment*(wrappers_per_seg+2)+wrappers_per_seg;
237
    else
238
      -- middle segment
239
      return segment*(wrappers_per_seg+2)+wrappers_per_seg+1;
240
    end if;
241
 
242
  end id_b;
243
 
244
 
245
  constant wrappers_per_segment_c : integer := n_agents_g / n_segments_g;
246
 
247
  type bus_data_segments_array is array (0 to n_segments_g-1) of
248
    std_logic_vector(data_width_g-1 downto 0);
249
  type bus_comm_segments_array is array (0 to n_segments_g-1) of
250
    std_logic_vector(comm_width_c-1 downto 0);
251
 
252
  signal bus_wra_data : bus_data_segments_array;
253
  signal bus_wra_comm : bus_comm_segments_array;
254
  signal bus_wra_av   : std_logic_vector(n_segments_g-1 downto 0);
255
  signal bus_wra_full : std_logic_vector(n_segments_g-1 downto 0);
256
  signal bus_wra_lock : std_logic_vector(n_segments_g-1 downto 0);
257
 
258
  -- +1, because there might be bridges in the segment. This is not optimal,
259
  -- but much easier and extra signals should be optimized away in synthesis
260
  type data_to_bus_type is array (0 to wrappers_per_segment_c+1) of
261
    std_logic_vector(data_width_g-1 downto 0);
262
  type comm_to_bus_type is array (0 to wrappers_per_segment_c+1) of
263
    std_logic_vector(comm_width_c-1 downto 0);
264
 
265
  type data_segments_array is array (0 to n_segments_g-1) of data_to_bus_type;
266
  type comm_segments_array is array (0 to n_segments_g-1) of comm_to_bus_type;
267
  type cntr_segments_array is array (0 to n_segments_g-1) of std_logic_vector
268
    (wrappers_per_segment_c + 1 downto 0);
269
 
270
  signal wra_bus_data : data_segments_array;
271
  signal wra_bus_comm : comm_segments_array;
272
  signal wra_bus_av   : cntr_segments_array;
273
  signal wra_bus_full : cntr_segments_array;
274
  signal wra_bus_lock : cntr_segments_array;
275
 
276
-------------------------------------------------------------------------------
277
begin  -- structural
278
-------------------------------------------------------------------------------
279
 
280
  -- if there is more than 1 segment, wrappers must distribute evenly
281
  assert n_segments_g = 1 or n_agents_g mod n_segments_g = 0
282
    report "With more than one segment wrappers distribute evenly"
283
    severity failure;
284
 
285
 
286
  segments : for seg in 0 to n_segments_g-1 generate
287
 
288
    wrappers : for wra in 0 to wrappers_per_segment_c-1 generate
289
 
290
      wrapper : entity work.hibi_wrapper_r4
291
        generic map (
292
          id_g                => id_agent
293
          (seg, n_segments_g, wrappers_per_segment_c) + wra,
294
          addr_g              => addresses_c(seg)(wra + 1),
295
          inv_addr_en_g       => 0,
296
          id_width_g          => id_width_g,
297
          addr_width_g        => addr_width_g,
298
          data_width_g        => data_width_g,
299
          separate_addr_g     => separate_addr_g,
300
          comm_width_g        => comm_width_g,
301
          counter_width_g     => counter_width_g,
302
          rel_agent_freq_g    => rel_agent_freq_g,
303
          rel_bus_freq_g      => rel_bus_freq_g,
304
          arb_type_g          => arb_type_g,
305
          fifo_sel_g          => fifo_sel_g,
306
          rx_fifo_depth_g     => rx_fifo_depth_g,
307
          rx_msg_fifo_depth_g => rx_msg_fifo_depth_g,
308
          tx_fifo_depth_g     => tx_fifo_depth_g,
309
          tx_msg_fifo_depth_g => tx_msg_fifo_depth_g,
310
          prior_g             => wra + 1,
311
          max_send_g          => max_send_g,
312
          -- n_agents_g should be num of ips + num of bridges in the segment
313
          n_agents_g          => n_agents_in_segment
314
          (seg, n_segments_g, wrappers_per_segment_c),
315
          n_cfg_pages_g       => n_cfg_pages_g,
316
          n_time_slots_g      => n_time_slots_g,
317
          keep_slot_g         => keep_slot_g,
318
          n_extra_params_g    => n_extra_params_g,
319
 
320
          cfg_re_g            => cfg_re_g,
321
          cfg_we_g            => cfg_we_g,
322
          debug_width_g       => debug_width_g
323
          )
324
        port map (
325
          bus_clk         => clk_noc,
326
          agent_clk       => clk_ip,
327
          bus_sync_clk    => clk_noc,
328
          agent_sync_clk  => clk_ip,
329
          rst_n           => rst_n,
330
          bus_comm_in     => bus_wra_comm(seg),
331
          bus_data_in     => bus_wra_data(seg),
332
          bus_full_in     => bus_wra_full(seg),
333
          bus_lock_in     => bus_wra_lock(seg),
334
          bus_av_in       => bus_wra_av(seg),
335
          agent_comm_in   => agent_comm_in((seg*wrappers_per_segment_c+wra+1)*
336
                                           comm_width_g-1 downto
337
                                           (seg*wrappers_per_segment_c+wra)*
338
                                           comm_width_g),
339
          agent_data_in   => agent_data_in((seg*wrappers_per_segment_c+wra+1)*
340
                                           data_width_g-1 downto
341
                                           (seg*wrappers_per_segment_c+wra)*
342
                                           data_width_g),
343
          agent_av_in     => agent_av_in(seg*wrappers_per_segment_c+wra),
344
          agent_we_in     => agent_we_in(seg*wrappers_per_segment_c+wra),
345
          agent_re_in     => agent_re_in(seg*wrappers_per_segment_c+wra),
346
          bus_comm_out    => wra_bus_comm(seg)(wra),
347
          bus_data_out    => wra_bus_data(seg)(wra),
348
          bus_full_out    => wra_bus_full(seg)(wra),
349
          bus_lock_out    => wra_bus_lock(seg)(wra),
350
          bus_av_out      => wra_bus_av(seg)(wra),
351
          agent_comm_out  => agent_comm_out((seg*wrappers_per_segment_c+wra+1)*
352
                                            comm_width_g-1 downto
353
                                            (seg*wrappers_per_segment_c+wra)*
354
                                            comm_width_g),
355
          agent_data_out  => agent_data_out((seg*wrappers_per_segment_c+wra+1)*
356
                                            data_width_g-1 downto
357
                                            (seg*wrappers_per_segment_c+wra)*
358
                                            data_width_g),
359
          agent_av_out    => agent_av_out(seg*wrappers_per_segment_c+wra),
360
          agent_full_out  => agent_full_out(seg*wrappers_per_segment_c+wra),
361
          agent_one_p_out => agent_one_p_out(seg*wrappers_per_segment_c+wra),
362
          agent_empty_out => agent_empty_out(seg*wrappers_per_segment_c+wra),
363
          agent_one_d_out => agent_one_d_out(seg*wrappers_per_segment_c+wra)
364
          -- synthesis translate_off
365
          ,
366
          debug_out       => open,
367
          debug_in        => (others => '0')
368
          -- synthesis translate_on
369
          );
370
 
371
 
372
    end generate wrappers;
373
 
374
 
375
    bridge_needed : if seg > 0 generate
376
 
377
      i_bridge : entity work.hibi_bridge
378
        generic map (
379
          a_id_g                =>
380
          id_a(seg-1, n_segments_g, wrappers_per_segment_c),
381
          a_addr_g              => bridge_a_addr_base_c(seg-1),
382
          a_inv_addr_en_g       => bridge_a_inv_addr_c(seg-1),
383
          a_id_width_g          => id_width_g,
384
          a_addr_width_g        => addr_width_g,
385
          a_data_width_g        => data_width_g,
386
          a_separate_addr_g     => separate_addr_g,
387
          a_comm_width_g        => comm_width_g,
388
          a_counter_width_g     => counter_width_g,
389
          a_rx_fifo_depth_g     => rx_fifo_depth_g,
390
          a_tx_fifo_depth_g     => tx_fifo_depth_g,
391
          a_rx_msg_fifo_depth_g => rx_msg_fifo_depth_g,
392
          a_tx_msg_fifo_depth_g => tx_msg_fifo_depth_g,
393
          a_arb_type_g          => arb_type_g,
394
          a_fifo_sel_g          => fifo_sel_g,
395
 
396
          a_debug_width_g       => debug_width_g,
397
          a_prior_g             =>
398
          priority_a(seg-1, n_segments_g, wrappers_per_segment_c),
399
          a_max_send_g          => max_send_g,
400
          a_n_agents_g          =>
401
          n_agents_in_segment(seg-1, n_segments_g, wrappers_per_segment_c),
402
          a_n_cfg_pages_g       => n_cfg_pages_g,
403
          a_n_time_slots_g      => n_time_slots_g,
404
          a_n_extra_params_g    => n_extra_params_g,
405
          a_cfg_re_g            => cfg_re_g,
406
          a_cfg_we_g            => cfg_we_g,
407
 
408
          b_id_g                =>
409
          id_b(seg, n_segments_g, wrappers_per_segment_c),
410
          b_addr_g              => bridge_b_addr_base_c(seg-1),
411
          b_inv_addr_en_g       => bridge_b_inv_addr_c(seg-1),
412
          b_id_width_g          => id_width_g,
413
          b_addr_width_g        => addr_width_g,
414
          b_data_width_g        => data_width_g,
415
          b_separate_addr_g     => separate_addr_g,
416
          b_comm_width_g        => comm_width_g,
417
          b_counter_width_g     => counter_width_g,
418
          b_rx_fifo_depth_g     => rx_fifo_depth_g,
419
          b_tx_fifo_depth_g     => tx_fifo_depth_g,
420
          b_rx_msg_fifo_depth_g => rx_msg_fifo_depth_g,
421
          b_tx_msg_fifo_depth_g => tx_msg_fifo_depth_g,
422
          b_arb_type_g          => arb_type_g,
423
          b_fifo_sel_g          => fifo_sel_g,
424
 
425
          b_debug_width_g       => debug_width_g,
426
          b_prior_g             =>
427
          priority_b(seg, n_segments_g, wrappers_per_segment_c),
428
          b_max_send_g          => max_send_g,
429
          b_n_agents_g          =>
430
          n_agents_in_segment(seg, n_segments_g, wrappers_per_segment_c),
431
          b_n_cfg_pages_g       => n_cfg_pages_g,
432
          b_n_time_slots_g      => n_time_slots_g,
433
          b_n_extra_params_g    => n_extra_params_g,
434
          b_cfg_re_g            => cfg_re_g,
435
          b_cfg_we_g            => cfg_we_g,
436
 
437
          a_id_min_g     => bridge_a_id_min_c(seg-1),
438
          a_id_max_g     => bridge_a_id_max_c(seg-1),
439
          a_addr_limit_g => bridge_a_addr_limit_c(seg-1),
440
 
441
          b_id_min_g     => bridge_b_id_min_c(seg-1),
442
          b_id_max_g     => bridge_b_id_max_c(seg-1),
443
          b_addr_limit_g => bridge_b_addr_limit_c(seg-1)
444
 
445
          )
446
        port map (
447
          a_clk          => clk_noc,
448
          a_rst_n        => rst_n,
449
          b_clk          => clk_noc,
450
          b_rst_n        => rst_n,
451
          a_bus_av_in    => bus_wra_av(seg-1),
452
          a_bus_data_in  => bus_wra_data(seg-1),
453
          a_bus_comm_in  => bus_wra_comm(seg-1),
454
          a_bus_full_in  => bus_wra_full(seg-1),
455
          a_bus_lock_in  => bus_wra_lock(seg-1),
456
          b_bus_av_in    => bus_wra_av(seg),
457
          b_bus_data_in  => bus_wra_data(seg),
458
          b_bus_comm_in  => bus_wra_comm(seg),
459
          b_bus_full_in  => bus_wra_full(seg),
460
          b_bus_lock_in  => bus_wra_lock(seg),
461
          a_bus_av_out   => wra_bus_av(seg-1)(wrappers_per_segment_c),
462
          a_bus_data_out => wra_bus_data(seg-1)(wrappers_per_segment_c),
463
          a_bus_comm_out => wra_bus_comm(seg-1)(wrappers_per_segment_c),
464
          a_bus_lock_out => wra_bus_lock(seg-1)(wrappers_per_segment_c),
465
          a_bus_full_out => wra_bus_full(seg-1)(wrappers_per_segment_c),
466
          b_bus_av_out   => wra_bus_av(seg)(wrappers_per_segment_c+1),
467
          b_bus_data_out => wra_bus_data(seg)(wrappers_per_segment_c+1),
468
          b_bus_comm_out => wra_bus_comm(seg)(wrappers_per_segment_c+1),
469
          b_bus_lock_out => wra_bus_lock(seg)(wrappers_per_segment_c+1),
470
          b_bus_full_out => wra_bus_full(seg)(wrappers_per_segment_c+1)
471
                        -- synthesis translate_off
472
          ,
473
          a_debug_out    => open,
474
          a_debug_in     => (others => '0'),
475
          b_debug_out    => open,
476
          b_debug_in     => (others => '0')
477
          -- synthesis translate_on
478
          );
479
 
480
      -- nullify extra signals
481
      nullify_first_seg : if seg = 1 generate
482
        -- no b-side on the first segment
483
        wra_bus_av(seg-1)(wrappers_per_segment_c+1)   <= '0';
484
        wra_bus_full(seg-1)(wrappers_per_segment_c+1) <= '0';
485
        wra_bus_lock(seg-1)(wrappers_per_segment_c+1) <= '0';
486
        wra_bus_comm(seg-1)(wrappers_per_segment_c+1) <= (others => '0');
487
        wra_bus_data(seg-1)(wrappers_per_segment_c+1) <= (others => '0');
488
      end generate nullify_first_seg;
489
 
490
      nullify_last_seg : if seg = n_segments_g-1 generate
491
        -- no a-side here
492
        wra_bus_av(seg)(wrappers_per_segment_c)   <= '0';
493
        wra_bus_full(seg)(wrappers_per_segment_c) <= '0';
494
        wra_bus_lock(seg)(wrappers_per_segment_c) <= '0';
495
        wra_bus_comm(seg)(wrappers_per_segment_c) <= (others => '0');
496
        wra_bus_data(seg)(wrappers_per_segment_c) <= (others => '0');
497
      end generate nullify_last_seg;
498
 
499
    end generate bridge_needed;
500
 
501
 
502
    no_bridges : if n_segments_g = 1 generate
503
 
504
      -- no bridges, nullify extra all signals
505
      wra_bus_av(seg)(wrappers_per_segment_c)     <= '0';
506
      wra_bus_full(seg)(wrappers_per_segment_c)   <= '0';
507
      wra_bus_lock(seg)(wrappers_per_segment_c)   <= '0';
508
      wra_bus_comm(seg)(wrappers_per_segment_c)   <= (others => '0');
509
      wra_bus_data(seg)(wrappers_per_segment_c)   <= (others => '0');
510
      wra_bus_av(seg)(wrappers_per_segment_c+1)   <= '0';
511
      wra_bus_full(seg)(wrappers_per_segment_c+1) <= '0';
512
      wra_bus_lock(seg)(wrappers_per_segment_c+1) <= '0';
513
      wra_bus_comm(seg)(wrappers_per_segment_c+1) <= (others => '0');
514
      wra_bus_data(seg)(wrappers_per_segment_c+1) <= (others => '0');
515
 
516
    end generate no_bridges;
517
 
518
 
519
  end generate segments;
520
 
521
 
522
  -- making the bus
523
  form_bus : process (wra_bus_data, wra_bus_comm, wra_bus_av,
524
                      wra_bus_full, wra_bus_lock)
525
    variable tmp_data_v : bus_data_segments_array;
526
    variable tmp_comm_v : bus_comm_segments_array;
527
    variable tmp_av_v   : std_logic_vector(n_segments_g-1 downto 0);
528
    variable tmp_full_v : std_logic_vector(n_segments_g-1 downto 0);
529
    variable tmp_lock_v : std_logic_vector(n_segments_g-1 downto 0);
530
  begin  -- process form_bus
531
 
532
    for seg in 0 to n_segments_g-1 loop
533
 
534
      tmp_data_v(seg) := wra_bus_data(seg)(0);
535
      tmp_comm_v(seg) := wra_bus_comm(seg)(0);
536
      tmp_av_v(seg)   := wra_bus_av(seg)(0);
537
      tmp_full_v(seg) := wra_bus_full(seg)(0);
538
      tmp_lock_v(seg) := wra_bus_lock(seg)(0);
539
 
540
      for n in 1 to wrappers_per_segment_c+1 loop
541
 
542
        tmp_data_v(seg) := wra_bus_data(seg)(n) or tmp_data_v(seg);
543
        tmp_comm_v(seg) := wra_bus_comm(seg)(n) or tmp_comm_v(seg);
544
        tmp_av_v(seg)   := wra_bus_av(seg)(n) or tmp_av_v(seg);
545
        tmp_full_v(seg) := wra_bus_full(seg)(n) or tmp_full_v(seg);
546
        tmp_lock_v(seg) := wra_bus_lock(seg)(n) or tmp_lock_v(seg);
547
 
548
      end loop;  -- n
549
 
550
      bus_wra_data(seg) <= tmp_data_v(seg);
551
      bus_wra_comm(seg) <= tmp_comm_v(seg);
552
      bus_wra_av(seg)   <= tmp_av_v(seg);
553
      bus_wra_full(seg) <= tmp_full_v(seg);
554
      bus_wra_lock(seg) <= tmp_lock_v(seg);
555
 
556
    end loop;  -- seg
557
 
558
  end process form_bus;
559
 
560
end structural;

powered by: WebSVN 2.1.0

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