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/] [2.0/] [vhd/] [double_fifo_mux_rd.vhd] - Blame information for rev 145

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 145 lanttu
-------------------------------------------------------------------------------
2
-- Funbase IP library Copyright (C) 2011 TUT Department of Computer Systems
3
--
4
-- This source file may be used and distributed without
5
-- restriction provided that this copyright statement is not
6
-- removed from the file and that any derivative work contains
7
-- the original copyright notice and the associated disclaimer.
8
--
9
-- This source file is free software; you can redistribute it
10
-- and/or modify it under the terms of the GNU Lesser General
11
-- Public License as published by the Free Software Foundation;
12
-- either version 2.1 of the License, or (at your option) any
13
-- later version.
14
--
15
-- This source is distributed in the hope that it will be
16
-- useful, but WITHOUT ANY WARRANTY; without even the implied
17
-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
18
-- PURPOSE.  See the GNU Lesser General Public License for more
19
-- details.
20
--
21
-- You should have received a copy of the GNU Lesser General
22
-- Public License along with this source; if not, download it
23
-- from http://www.opencores.org/lgpl.shtml
24
-------------------------------------------------------------------------------
25
-------------------------------------------------------------------------------
26
-- File        : double_fifo_mux_rd.vhd
27
-- Description : Double_Fifo_Mux_Rd buffer for hibi v.2 interface
28
--               Includes two fifos and a special multiplexer
29
--               so that the reader sees only one fifo. Multiplexer
30
--               selects addr+data first from fifo 0 (i.e. it has a higher priority)
31
-- Author      : Erno Salminen
32
-- e-mail       : erno.salminen@tut.fi
33
-- Project      huuhaa
34
-- Design      : Do not use term design when you mean system
35
-- Date        : 07.02.2003
36
-- Modified    : 
37
--
38
--15.12.04      ES names changed
39
--18.12.2006 AK modified to support different kinds of IF fifos
40
-------------------------------------------------------------------------------
41
library ieee;
42
use ieee.std_logic_1164.all;
43
use ieee.std_logic_arith.all;
44
use ieee.std_logic_unsigned.all;
45
 
46
 
47
 
48
entity double_fifo_mux_rd is
49
 
50
  generic (
51
    -- 0 synch multiclk, 1 basic GALS,
52
    -- 2 Gray FIFO (depth=2^n!), 3 mixed clock pausible
53
    fifo_sel_g : integer := 0;
54
 
55
    -- needed for fifos 0 (accurate) and 3 (which is faster)
56
    re_freq_g     : integer := 1;
57
    we_freq_g     : integer := 1;
58
    depth_0_g     : integer := 5;       -- log2 for fifo 2!
59
    depth_1_g     : integer := 5;
60
    data_width_g  : integer := 32;
61
    debug_width_g : integer := 0;       -- for debugging
62
    comm_width_g  : integer := 3
63
    );
64
  port (
65
    clk_re     : in std_logic;
66
    clk_we     : in std_logic;
67
    -- pulsed clocks. used in pausible clock scheme
68
    -- used in 1 for faster synchronization, when they are integer multiples
69
    -- of re and we (can also be 1 if the same as clk_re and clk_we
70
    clk_re_pls : in std_logic;
71
    clk_we_pls : in std_logic;
72
    rst_n      : in std_logic;
73
 
74
    av_0_in     : in  std_logic;
75
    data_0_in   : in  std_logic_vector (data_width_g-1 downto 0);
76
    comm_0_in   : in  std_logic_vector (comm_width_g-1 downto 0);
77
    we_0_in     : in  std_logic;
78
    full_0_out  : out std_logic;
79
    one_p_0_out : out std_logic;
80
 
81
    av_1_in     : in  std_logic;
82
    data_1_in   : in  std_logic_vector (data_width_g-1 downto 0);
83
    comm_1_in   : in  std_logic_vector (comm_width_g-1 downto 0);
84
    we_1_in     : in  std_logic;
85
    full_1_out  : out std_logic;
86
    one_p_1_out : out std_logic;
87
 
88
    re_in     : in  std_logic;
89
    av_out    : out std_logic;
90
    data_out  : out std_logic_vector (data_width_g-1 downto 0);
91
    comm_out  : out std_logic_vector (comm_width_g-1 downto 0);
92
    empty_out : out std_logic;
93
    one_d_out : out std_logic;
94
    debug_out : out std_logic_vector(debug_width_g downto 0)
95
    );
96
end double_fifo_mux_rd;
97
 
98
 
99
 
100
architecture structural of double_fifo_mux_rd is
101
 
102
 
103
  constant re_faster_c : integer := re_freq_g/we_freq_g;
104
 
105
-- one_p currently statically at '0' ...
106
  component mixed_clk_fifo
107
    generic (
108
      re_faster_g  : integer := 1;      -- integer multiple of clk_we
109
--      we_freq_g    : integer := 0;      -- or vice versa
110
      data_width_g : integer := 0;
111
      depth_g      : integer := 0
112
      );
113
    port (
114
      clk_re    : in std_logic;
115
      clk_we    : in std_logic;
116
      clk_ps_re : in std_logic;         -- phase shifted pulse      
117
      clk_ps_we : in std_logic;         -- phase shifted pulse         
118
      rst_n     : in std_logic;
119
 
120
      data_in   : in  std_logic_vector (data_width_g-1 downto 0);
121
      we_in     : in  std_logic;
122
      full_out  : out std_logic;
123
      one_p_out : out std_logic;
124
 
125
      re_in     : in  std_logic;
126
      data_out  : out std_logic_vector (data_width_g-1 downto 0);
127
      one_d_out : out std_logic;
128
      empty_out : out std_logic
129
      );
130
  end component;  --multiclk_fifo;
131
 
132
  component multiclk_fifo
133
    generic (
134
      re_freq_g    : integer;
135
      we_freq_g    : integer;
136
      depth_g      : integer;
137
      data_width_g : integer);
138
    port (
139
      clk_re    : in  std_logic;
140
      clk_we    : in  std_logic;
141
      rst_n     : in  std_logic;
142
      data_in   : in  std_logic_vector (data_width_g-1 downto 0);
143
      we_in     : in  std_logic;
144
      full_out  : out std_logic;
145
      one_p_out : out std_logic;
146
      re_in     : in  std_logic;
147
      data_out  : out std_logic_vector (data_width_g-1 downto 0);
148
      empty_out : out std_logic;
149
      one_d_out : out std_logic);
150
  end component;
151
 
152
  component cdc_fifo
153
    generic (
154
      READ_AHEAD_g  : integer;
155
      SYNC_CLOCKS_g : integer;
156
      depth_log2_g  : integer;
157
      dataw_g       : integer);
158
    port (
159
      rst_n        : in  std_logic;
160
      rd_clk       : in  std_logic;
161
      rd_en_in     : in  std_logic;
162
      rd_empty_out : out std_logic;
163
      rd_one_d_out : out std_logic;
164
      rd_data_out  : out std_logic_vector(dataw_g-1 downto 0);
165
      wr_clk       : in  std_logic;
166
      wr_en_in     : in  std_logic;
167
      wr_full_out  : out std_logic;
168
      wr_one_p_out  : out std_logic;
169
      wr_data_in   : in  std_logic_vector(dataw_g-1 downto 0));
170
  end component;
171
 
172
  component fifo_mux_rd
173
    generic (
174
      data_width_g : integer := 0;
175
      comm_width_g : integer := 0
176
      );
177
    port (
178
      clk   : in std_logic;
179
      rst_n : in std_logic;
180
 
181
      av_0_in    : in  std_logic;
182
      data_0_in  : in  std_logic_vector (data_width_g-1 downto 0);
183
      comm_0_in  : in  std_logic_vector (comm_width_g-1 downto 0);
184
      empty_0_in : in  std_logic;
185
      one_d_0_in : in  std_logic;
186
      re_0_out   : out std_logic;
187
 
188
      av_1_in    : in  std_logic;
189
      data_1_in  : in  std_logic_vector (data_width_g-1 downto 0);
190
      comm_1_in  : in  std_logic_vector (comm_width_g-1 downto 0);
191
      empty_1_in : in  std_logic;
192
      one_d_1_in : in  std_logic;
193
      re_1_out   : out std_logic;
194
 
195
      re_in     : in  std_logic;
196
      av_out    : out std_logic;
197
      data_out  : out std_logic_vector (data_width_g-1 downto 0);
198
      comm_out  : out std_logic_vector (comm_width_g-1 downto 0);
199
      empty_out : out std_logic;
200
      one_d_out : out std_logic
201
      );
202
  end component;  --fifo_mux_rd;
203
 
204
  -- from inputs to fifos (concatenated)
205
  signal a_c_d_input_f0 : std_logic_vector (1 + comm_width_g + data_width_g-1 downto 0);
206
  signal a_c_d_input_f1 : std_logic_vector (1 + comm_width_g + data_width_g-1 downto 0);
207
 
208
  -- from fifo 0 to mux
209
  signal a_c_d_f0_mux : std_logic_vector (1 + comm_width_g + data_width_g-1 downto 0);
210
  signal av_f0_mux    : std_logic;
211
  signal data_f0_mux  : std_logic_vector (data_width_g-1 downto 0);
212
  signal comm_f0_mux  : std_logic_vector (comm_width_g-1 downto 0);
213
  signal empty_f0_mux : std_logic;
214
  signal one_d_f0_mux : std_logic;
215
 
216
  -- from fifo 1 to mux
217
  signal a_c_d_f1_mux : std_logic_vector (1 + comm_width_g + data_width_g-1 downto 0);
218
  signal av_f1_mux    : std_logic;
219
  signal data_f1_mux  : std_logic_vector (data_width_g-1 downto 0);
220
  signal comm_f1_mux  : std_logic_vector (comm_width_g-1 downto 0);
221
  signal empty_f1_mux : std_logic;
222
  signal one_d_f1_mux : std_logic;
223
 
224
 
225
  -- from mux to fifos
226
  signal re_mux_f0 : std_logic;
227
  signal re_mux_f1 : std_logic;
228
 
229
 
230
  signal Tie_High : std_logic;
231
  signal Tie_Low  : std_logic;
232
 
233
  -- basic gals, for fifo 1
234
 
235
  component aif_we_top
236
    generic (
237
      data_width_g : integer);
238
    port (
239
      tx_clk      : in  std_logic;
240
      tx_rst_n    : in  std_logic;
241
      tx_we_in    : in  std_logic;
242
      tx_data_in  : in  std_logic_vector(data_width_g-1 downto 0);
243
      tx_full_out : out std_logic;
244
      rx_clk      : in  std_logic;
245
      rx_rst_n    : in  std_logic;
246
      rx_full_in  : in  std_logic;
247
      rx_we_out   : out std_logic;
248
      rx_data_out : out std_logic_vector(data_width_g-1 downto 0));
249
  end component;
250
 
251
  signal tx_we_to_we_aif     : std_logic;
252
  signal tx_data_to_we_aif   : std_logic_vector(data_width_g+comm_width_g+1-1 downto 0);
253
  signal tx_full_from_we_aif : std_logic;
254
 
255
  signal rx_full_to_we_aif   : std_logic;
256
  signal rx_we_from_we_aif   : std_logic;
257
  signal rx_data_from_we_aif : std_logic_vector(data_width_g+comm_width_g+1-1 downto 0);
258
 
259
  signal tx_msg_we_to_we_aif     : std_logic;
260
  signal tx_msg_data_to_we_aif   : std_logic_vector(data_width_g+comm_width_g+1-1 downto 0);
261
  signal tx_msg_full_from_we_aif : std_logic;
262
 
263
  signal rx_msg_full_to_we_aif   : std_logic;
264
  signal rx_msg_we_from_we_aif   : std_logic;
265
  signal rx_msg_data_from_we_aif : std_logic_vector(data_width_g+comm_width_g+1-1 downto 0);
266
 
267
  function log2 (
268
    constant value : integer)
269
    return integer is
270
    variable temp    : integer := 1;
271
    variable counter : integer := 0;
272
  begin  -- log2
273
    while temp < value loop
274
      temp    := temp*2;
275
      counter := counter+1;
276
    end loop;
277
 
278
    return counter;
279
  end log2;
280
 
281
 
282
begin  -- structural
283
  -- Check generics
284
  assert (depth_0_g + depth_1_g > 0) report "Both fifo depths zero!" severity warning;
285
 
286
  -- Concurrent assignments
287
  Tie_High       <= '1';
288
  Tie_Low        <= '0';
289
  -- Combine fifo inputs
290
  a_c_d_input_f0 <= av_0_in & comm_0_in & data_0_in;
291
  a_c_d_input_f1 <= av_1_in & comm_1_in & data_1_in;
292
 
293
 
294
  -- Split fifo output
295
  av_f0_mux   <= a_c_d_f0_mux (1+comm_width_g + data_width_g-1);
296
  comm_f0_mux <= a_c_d_f0_mux (comm_width_g + data_width_g-1 downto data_width_g);
297
  data_f0_mux <= a_c_d_f0_mux (data_width_g-1 downto 0);
298
  av_f1_mux   <= a_c_d_f1_mux (1+comm_width_g + data_width_g-1);
299
  comm_f1_mux <= a_c_d_f1_mux (comm_width_g + data_width_g-1 downto data_width_g);
300
  data_f1_mux <= a_c_d_f1_mux (data_width_g-1 downto 0);
301
 
302
  multi : if fifo_sel_g = 0 generate
303
    -- regular / multiclock synchronous
304
 
305
    Map_Fifo_0 : if depth_0_g > 0 generate
306
      multiclk_fifo_0 : multiclk_fifo
307
        generic map(
308
          re_freq_g    => re_freq_g,
309
          we_freq_g    => we_freq_g,
310
          data_width_g => 1 + comm_width_g + data_width_g,
311
          depth_g      => depth_0_g
312
          )
313
        port map(
314
          clk_re => clk_re,
315
          clk_we => clk_we,
316
          rst_n  => rst_n,
317
 
318
          data_in   => a_c_d_input_f0,
319
          we_in     => we_0_in,
320
          full_out  => full_0_out,
321
          one_p_out => one_p_0_out,
322
 
323
          re_in     => re_mux_f0,
324
          data_out  => a_c_d_f0_mux,
325
          one_d_out => one_d_f0_mux,
326
          empty_out => empty_f0_mux
327
          );
328
    end generate Map_Fifo_0;
329
 
330
 
331
    Map_Fifo_1 : if depth_1_g > 0 generate
332
      multiclk_fifo_1 : multiclk_fifo
333
        generic map(
334
          re_freq_g    => re_freq_g,
335
          we_freq_g    => we_freq_g,
336
          data_width_g => 1 + comm_width_g + data_width_g,
337
          depth_g      => depth_1_g
338
          )
339
        port map(
340
          clk_re => clk_re,
341
          clk_we => clk_we,
342
          rst_n  => rst_n,
343
 
344
          data_in   => a_c_d_input_f1,
345
          we_in     => we_1_in,
346
          full_out  => full_1_out,
347
          one_p_out => one_p_1_out,
348
 
349
          re_in     => re_mux_f1,
350
          data_out  => a_c_d_f1_mux,
351
          one_d_out => one_d_f1_mux,
352
          empty_out => empty_f1_mux
353
          );
354
    end generate Map_Fifo_1;
355
 
356
  end generate multi;
357
 
358
 
359
  gals : if fifo_sel_g = 1 generate
360
 
361
    -- GALS basic + multiclk
362
 
363
    -- signal assigments needed for asynchronous modes
364
 
365
    -- agent writes.
366
 
367
    Map_Fifo_0 : if depth_0_g > 0 generate
368
 
369
    aif_we_top_0 : aif_we_top
370
      generic map (
371
        data_width_g => data_width_g+comm_width_g+1)
372
      port map (
373
        tx_clk      => clk_we,
374
        tx_rst_n    => rst_n,
375
        tx_we_in    => we_0_in,
376
        tx_data_in  => a_c_d_input_f0,
377
        tx_full_out => full_0_out,
378
 
379
        rx_clk      => clk_re_pls,
380
        rx_rst_n    => rst_n,
381
        rx_full_in  => rx_full_to_we_aif,
382
        rx_we_out   => rx_we_from_we_aif,
383
        rx_data_out => rx_data_from_we_aif
384
        );
385
 
386
      multiclk_fifo_0 : multiclk_fifo
387
        generic map(
388
          re_freq_g    => re_freq_g,    -- HIBI reading side
389
          we_freq_g    => we_freq_g,    -- Writing agent OR HIBI synch clk
390
          data_width_g => 1 + comm_width_g + data_width_g,
391
          depth_g      => depth_0_g
392
          )
393
        port map(
394
          clk_re => clk_re,
395
          clk_we => clk_re_pls,         -- HIBI synch clk
396
          rst_n  => rst_n,
397
 
398
          data_in   => rx_data_from_we_aif,
399
          we_in     => rx_we_from_we_aif,
400
          full_out  => rx_full_to_we_aif,
401
          one_p_out => one_p_0_out,     -- ???
402
 
403
          re_in     => re_mux_f0,
404
          data_out  => a_c_d_f0_mux,
405
          one_d_out => one_d_f0_mux,
406
          empty_out => empty_f0_mux
407
          );
408
    end generate Map_Fifo_0;
409
 
410
    Map_Fifo_1 : if depth_1_g > 0 generate
411
 
412
    -- agent msg writes.
413
    aif_we_top_1 : aif_we_top
414
      generic map (
415
        data_width_g => data_width_g+comm_width_g+1)
416
      port map (
417
        tx_clk      => clk_we,
418
        tx_rst_n    => rst_n,
419
        tx_we_in    => we_1_in,
420
        tx_data_in  => a_c_d_input_f1,
421
        tx_full_out => full_1_out,
422
 
423
        rx_clk      => clk_re_pls,
424
        rx_rst_n    => rst_n,
425
        rx_full_in  => rx_msg_full_to_we_aif,
426
        rx_we_out   => rx_msg_we_from_we_aif,
427
        rx_data_out => rx_msg_data_from_we_aif
428
        );
429
 
430
      multiclk_fifo_1 : multiclk_fifo
431
        generic map(
432
          re_freq_g    => re_freq_g,
433
          we_freq_g    => we_freq_g,
434
          data_width_g => 1 + comm_width_g + data_width_g,
435
          depth_g      => depth_1_g
436
          )
437
        port map(
438
          clk_re => clk_re,
439
          clk_we => clk_re_pls,
440
          rst_n  => rst_n,
441
 
442
          data_in   => rx_msg_data_from_we_aif,
443
          we_in     => rx_msg_we_from_we_aif,
444
          full_out  => rx_msg_full_to_we_aif,
445
          one_p_out => one_p_1_out,
446
 
447
          re_in     => re_mux_f1,
448
          data_out  => a_c_d_f1_mux,
449
          one_d_out => one_d_f1_mux,
450
          empty_out => empty_f1_mux
451
          );
452
    end generate Map_Fifo_1;
453
 
454
  end generate gals;
455
 
456
  gray : if fifo_sel_g = 2 generate
457
    -- Gray FIFO
458
 
459
    Map_Fifo_0 : if depth_0_g > 0 generate
460
      cdc_fifo_0 : cdc_fifo
461
        generic map (
462
          READ_AHEAD_g  => 1,           -- this is the hibi style, look-ahead
463
          SYNC_CLOCKS_g => 0,           -- we use two flops
464
          depth_log2_g  => log2(depth_0_g),
465
          dataw_g       => 1 + comm_width_g + data_width_g
466
          )
467
        port map (
468
          rst_n        => rst_n,
469
          rd_clk       => clk_re,
470
          rd_en_in     => re_mux_f0,
471
          rd_empty_out => empty_f0_mux,
472
          rd_one_d_out => one_d_f0_mux,
473
          rd_data_out  => a_c_d_f0_mux,
474
 
475
          wr_clk      => clk_we,
476
          wr_en_in    => we_0_in,
477
          wr_full_out => full_0_out,
478
          wr_one_p_out => one_p_0_out,
479
          wr_data_in  => a_c_d_input_f0
480
          );
481
 
482
--      one_p_0_out <= '0';
483
 
484
    end generate Map_Fifo_0;
485
 
486
 
487
 
488
    Map_Fifo_1 : if depth_1_g > 0 generate
489
      cdc_fifo_1 : cdc_fifo
490
        generic map (
491
          READ_AHEAD_g  => 1,           -- this is the hibi style, look-ahead
492
          SYNC_CLOCKS_g => 0,           -- we use two flops
493
          depth_log2_g  => log2(depth_1_g),
494
          dataw_g       => 1 + comm_width_g + data_width_g
495
          )
496
        port map (
497
          rst_n        => rst_n,
498
          rd_clk       => clk_re,
499
          rd_en_in     => re_mux_f1,
500
          rd_empty_out => empty_f1_mux,
501
          rd_one_d_out => one_d_f1_mux,
502
          rd_data_out  => a_c_d_f1_mux,
503
 
504
          wr_clk      => clk_we,
505
          wr_en_in    => we_1_in,
506
          wr_full_out => full_1_out,
507
          wr_one_p_out => one_p_1_out,
508
          wr_data_in  => a_c_d_input_f1
509
          );
510
 
511
--      one_p_1_out <= '0';
512
 
513
    end generate Map_Fifo_1;
514
 
515
  end generate gray;
516
 
517
 
518
  mixed : if fifo_sel_g = 3 generate
519
 
520
    Map_Fifo_0 : if depth_0_g > 0 generate
521
      Mixed_clk_Fifo_0 : mixed_clk_fifo
522
        generic map(
523
          re_faster_g  => re_faster_c,
524
          data_width_g => 1 + comm_width_g + data_width_g,
525
          depth_g      => depth_0_g
526
          )
527
        port map(
528
          clk_re    => clk_re,
529
          clk_we    => clk_we,
530
          clk_ps_we => clk_we_pls,
531
          clk_ps_re => clk_re_pls,
532
          rst_n     => rst_n,
533
 
534
          data_in   => a_c_d_input_f0,
535
          we_in     => we_0_in,
536
          full_out  => full_0_out,
537
          one_p_out => one_p_0_out,
538
 
539
          re_in     => re_mux_f0,
540
          data_out  => a_c_d_f0_mux,
541
          one_d_out => one_d_f0_mux,
542
          empty_out => empty_f0_mux
543
          );
544
    end generate Map_Fifo_0;
545
 
546
 
547
    Map_Fifo_1 : if depth_1_g > 0 generate
548
      Mixed_clk_Fifo_1 : mixed_clk_fifo
549
        generic map(
550
          re_faster_g  => re_faster_c,
551
          data_width_g => 1 + comm_width_g + data_width_g,
552
          depth_g      => depth_1_g
553
          )
554
        port map(
555
          clk_re    => clk_re,
556
          clk_we    => clk_we,
557
          clk_ps_we => clk_we_pls,
558
          clk_ps_re => clk_re_pls,
559
          rst_n     => rst_n,
560
 
561
          data_in   => a_c_d_input_f1,
562
          we_in     => we_1_in,
563
          full_out  => full_1_out,
564
          one_p_out => one_p_1_out,
565
 
566
          re_in     => re_mux_f1,
567
          data_out  => a_c_d_f1_mux,
568
          one_d_out => one_d_f1_mux,
569
          empty_out => empty_f1_mux
570
          );
571
    end generate Map_Fifo_1;
572
 
573
  end generate mixed;
574
 
575
 
576
  Not_Map_Fifo_0 : if depth_0_g = 0 generate
577
    -- Fifo #0 does not exist!
578
    a_c_d_f0_mux <= (others => '0');
579
    empty_f0_mux <= Tie_High;
580
    one_d_f0_mux <= Tie_Low;
581
    full_0_out   <= Tie_High;
582
    one_p_0_out  <= Tie_Low;
583
 
584
    -- Connect the other fifo (#1)straight to the outputs ( =>  FSM)
585
    av_out    <= av_f1_mux;
586
    data_out  <= data_f1_mux;
587
    comm_out  <= comm_f1_mux;
588
    empty_out <= empty_f1_mux;
589
    one_d_out <= one_d_f1_mux;
590
 
591
    re_mux_f1 <= re_in;                 --15.05
592
 
593
  end generate Not_Map_Fifo_0;
594
 
595
 
596
  Not_Map_Fifo_1 : if depth_1_g = 0 generate
597
    -- Fifo #1 does not exist!
598
 
599
    -- Signals fifo#1=> IP
600
    --     full_1_out  <= Tie_High;
601
    --     one_p_1_out <= Tie_Low;
602
 
603
    -- Signals fifo#1=> FSM
604
    a_c_d_f1_mux <= (others => '0');
605
    empty_f1_mux <= Tie_High;
606
    one_d_f1_mux <= Tie_Low;
607
 
608
    -- Connect the other fifo (#0)straight to the outputs ( =>  FSM)
609
    av_out    <= av_f0_mux;
610
    data_out  <= data_f0_mux;
611
    comm_out  <= comm_f0_mux;
612
    empty_out <= empty_f0_mux;
613
    one_d_out <= one_d_f0_mux;
614
 
615
    re_mux_f0 <= re_in;                 --15.05
616
 
617
  end generate Not_Map_Fifo_1;
618
 
619
 
620
  Map_mux : if depth_0_g > 0 and depth_1_g > 0 generate
621
    -- Multiplexer is needed only if two fifos are used
622
    MUX_01 : fifo_mux_rd
623
      generic map(
624
        data_width_g => data_width_g,
625
        comm_width_g => comm_width_g
626
        )
627
      port map(
628
        clk   => clk_re,
629
        rst_n => rst_n,
630
 
631
        av_0_in    => av_f0_mux,
632
        data_0_in  => data_f0_mux,
633
        comm_0_in  => comm_f0_mux,
634
        empty_0_in => empty_f0_mux,
635
        one_d_0_in => one_d_f0_mux,
636
        re_0_out   => re_mux_f0,
637
 
638
        av_1_in    => av_f1_mux,
639
        data_1_in  => data_f1_mux,
640
        comm_1_in  => comm_f1_mux,
641
        empty_1_in => empty_f1_mux,
642
        one_d_1_in => one_d_f1_mux,
643
        re_1_out   => re_mux_f1,
644
 
645
        re_in     => re_in,
646
        av_out    => av_out,
647
        data_out  => data_out,
648
        comm_out  => comm_out,
649
        empty_out => empty_out,
650
        one_d_out => one_d_out
651
        );
652
  end generate Map_mux;
653
 
654
 
655
 
656
 
657
 
658
 
659
 
660
 
661
 
662
 
663
end structural;
664
 
665
 
666
 

powered by: WebSVN 2.1.0

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