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

Subversion Repositories nocem

[/] [nocem/] [trunk/] [VHDL/] [channel_fifo.vhd] - Blame information for rev 8

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 schelleg
 
2
-----------------------------------------------------------------------------
3
-- NoCem -- Network on Chip Emulation Tool for System on Chip Research 
4
-- and Implementations
5
-- 
6
-- Copyright (C) 2006  Graham Schelle, Dirk Grunwald
7
-- 
8
-- This program is free software; you can redistribute it and/or
9
-- modify it under the terms of the GNU General Public License
10
-- as published by the Free Software Foundation; either version 2
11
-- of the License, or (at your option) any later version.
12
-- 
13
-- This program is distributed in the hope that it will be useful,
14
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
15
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
-- GNU General Public License for more details.
17
-- 
18
-- You should have received a copy of the GNU General Public License
19
-- along with this program; if not, write to the Free Software
20
-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
21
-- 02110-1301, USA.
22
-- 
23
-- The authors can be contacted by email: <schelleg,grunwald>@cs.colorado.edu 
24
-- 
25
-- or by mail: Campus Box 430, Department of Computer Science,
26
-- University of Colorado at Boulder, Boulder, Colorado 80309
27
-------------------------------------------------------------------------------- 
28
 
29
 
30
-- 
31 2 schelleg
-- Filename: channel_fifo.vhd
32 4 schelleg
-- 
33 2 schelleg
-- Description: toplevel entity for channel fifo
34 4 schelleg
-- 
35
 
36
 
37 2 schelleg
--Use two channels for a bidirectional channel.  This 
38
--will allow a node to connect to the fifo with both 
39
--enqueueing and dequeuing capabilities.  This will 
40
--make connections easier as well.
41
--
42
 
43
 
44
 
45
library IEEE;
46
use IEEE.STD_LOGIC_1164.ALL;
47
use IEEE.STD_LOGIC_ARITH.ALL;
48
use IEEE.STD_LOGIC_UNSIGNED.ALL;
49
use work.pkg_nocem.all;
50
 
51
entity channel_fifo is
52
        generic (
53
          P0_NODE_ADDR : integer := 0;
54
          P1_NODE_ADDR : integer := 0;
55
          IS_AN_ACCESS_POINT_CHANNEL : boolean  := FALSE
56
        );
57
        port (
58
 
59
 
60
           p0_datain : in data_word;
61
           p0_pkt_cntrl_in : in pkt_cntrl_word;
62
 
63
           p0_dataout : out data_word;
64
           p0_pkt_cntrl_out : out pkt_cntrl_word;
65
 
66
           p0_channel_cntrl_in  : in channel_cntrl_word;
67
           p0_channel_cntrl_out : out channel_cntrl_word;
68
 
69
 
70
 
71
           p1_datain : in data_word;
72
           p1_pkt_cntrl_in : in pkt_cntrl_word;
73
 
74
           p1_dataout : out data_word;
75
           p1_pkt_cntrl_out : out pkt_cntrl_word;
76
 
77
           p1_channel_cntrl_in  : in channel_cntrl_word;
78
           p1_channel_cntrl_out : out channel_cntrl_word;
79
 
80
 
81
 
82
 
83
 
84
        clk: IN std_logic;
85
        rst: IN std_logic
86
 
87
   );
88
 
89
 
90
 
91
 
92
end channel_fifo;
93
 
94
architecture Behavioral of channel_fifo is
95
 
96
 
97
 
98
--std16,register signals
99
        -- port 0 signals
100
--signal p0_datain_pad,  : std_logic_vector(255 downto 0);
101
--signal p0_cntrl_in_pad,  : std_logic_vector(255 downto 0);
102
 
103
signal p0_data_re,p0_data_we,p0_data_full,p0_data_empty : std_logic;
104
signal p0_cntrl_re,p0_cntrl_we,p0_cntrl_full,p0_cntrl_empty : std_logic;
105
 
106
        -- port 1 signals
107
--signal p1_datain_pad,  : std_logic_vector(255 downto 0);
108
--signal p1_cntrl_in_pad,  : std_logic_vector(255 downto 0);
109
--
110
signal p1_data_re,p1_data_we,p1_data_full,p1_data_empty : std_logic;
111
signal p1_cntrl_re,p1_cntrl_we,p1_cntrl_full,p1_cntrl_empty : std_logic;
112
 
113
        -- for Modelsim purposes
114
signal p0_addr_conv,p1_addr_conv : std_logic_vector(NOCEM_AW-1 downto 0);
115
 
116
 
117
--register signals
118
 
119
 
120
 
121
begin
122
 
123
        -- for Modelsim purposes, do some signal re-typing here
124
        p0_addr_conv <= addr_gen(P0_NODE_ADDR,NOCEM_NUM_ROWS,NOCEM_NUM_COLS,NOCEM_AW);
125
        p1_addr_conv <= addr_gen(P1_NODE_ADDR,NOCEM_NUM_ROWS,NOCEM_NUM_COLS,NOCEM_AW);
126
 
127
 
128
 
129
 
130
        gvc_procs: if NOCEM_TYPE = NOCEM_VC_TYPE generate
131
 
132
 
133
        -- wrapping these constant assignments to make simulator actually work...
134
        p0_handling_vc : process (p0_channel_cntrl_in, p0_data_full, p0_data_empty, p0_datain, p0_cntrl_full, p0_cntrl_empty, p0_pkt_cntrl_in )
135
        begin
136
 
137
                p0_data_re <= p0_channel_cntrl_in(NOCEM_CHFIFO_DATA_RE_IX);
138
                p0_data_we <= p0_channel_cntrl_in(NOCEM_CHFIFO_DATA_WE_IX);
139
 
140
                p0_channel_cntrl_out(NOCEM_CHFIFO_DATA_FULL_N_IX)  <= not p0_data_full;
141
                p0_channel_cntrl_out(NOCEM_CHFIFO_DATA_EMPTY_N_IX) <= not p0_data_empty;
142
 
143
                p0_data_full  <= '0';
144
                p0_data_empty <= '0';
145
                p0_cntrl_full <= '0';
146
                p0_cntrl_empty <= '0';
147
 
148
                p0_channel_cntrl_out(NOCEM_CHFIFO_VC_WR_ADDR_HIX downto NOCEM_CHFIFO_VC_WR_ADDR_LIX) <= (others => '0');
149
                p0_channel_cntrl_out(NOCEM_CHFIFO_CNTRL_RE_IX) <= '0';
150
                p0_channel_cntrl_out(NOCEM_CHFIFO_CNTRL_WE_IX) <= '0';
151
                p0_channel_cntrl_out(NOCEM_CHFIFO_DATA_RE_IX)  <= '0';
152
                p0_channel_cntrl_out(NOCEM_CHFIFO_DATA_WE_IX)  <= '0';
153
                p0_channel_cntrl_out(NOCEM_CHFIFO_VC_ALLOC_FROMNODE_HIX downto NOCEM_CHFIFO_VC_ALLOC_FROMNODE_LIX) <= (others => '0');
154
                p0_channel_cntrl_out(NOCEM_CHFIFO_VC_REQER_FROMNODE_HIX downto NOCEM_CHFIFO_VC_REQER_FROMNODE_LIX) <= (others => '0');
155
                p0_channel_cntrl_out(NOCEM_CHFIFO_VC_RD_ADDR_HIX downto NOCEM_CHFIFO_VC_RD_ADDR_LIX) <= (others => '0');
156
 
157
                p0_cntrl_re <= p0_channel_cntrl_in(NOCEM_CHFIFO_CNTRL_RE_IX);
158
                p0_cntrl_we <= p0_channel_cntrl_in(NOCEM_CHFIFO_CNTRL_WE_IX);
159
 
160
                p0_channel_cntrl_out(NOCEM_CHFIFO_CNTRL_FULL_N_IX)  <= not p0_cntrl_full;
161
                p0_channel_cntrl_out(NOCEM_CHFIFO_CNTRL_EMPTY_N_IX) <= not p0_cntrl_empty;
162
 
163
        end process;
164
 
165
        -- wrapping these constant assignments to make simulator actually work...
166
        p1_handling_vc : process (p1_channel_cntrl_in,p1_data_full, p1_data_empty, p1_datain, p1_cntrl_full, p1_cntrl_empty, p1_pkt_cntrl_in  )
167
        begin
168
 
169
                p1_data_re <= p1_channel_cntrl_in(NOCEM_CHFIFO_DATA_RE_IX);
170
                p1_data_we <= p1_channel_cntrl_in(NOCEM_CHFIFO_DATA_WE_IX);
171
 
172
                p1_channel_cntrl_out(NOCEM_CHFIFO_DATA_FULL_N_IX)  <= not p1_data_full;
173
                p1_channel_cntrl_out(NOCEM_CHFIFO_DATA_EMPTY_N_IX) <= not p1_data_empty;
174
 
175
 
176
                p1_data_full  <= '0';
177
                p1_data_empty <= '0';
178
                p1_cntrl_full <= '0';
179
                p1_cntrl_empty <= '0';
180
 
181
                p1_channel_cntrl_out(NOCEM_CHFIFO_VC_WR_ADDR_HIX downto NOCEM_CHFIFO_VC_WR_ADDR_LIX) <= (others => '0');
182
                p1_channel_cntrl_out(NOCEM_CHFIFO_CNTRL_RE_IX) <= '0';
183
                p1_channel_cntrl_out(NOCEM_CHFIFO_CNTRL_WE_IX) <= '0';
184
                p1_channel_cntrl_out(NOCEM_CHFIFO_DATA_RE_IX)  <= '0';
185
                p1_channel_cntrl_out(NOCEM_CHFIFO_DATA_WE_IX)  <= '0';
186
                p1_channel_cntrl_out(NOCEM_CHFIFO_VC_ALLOC_FROMNODE_HIX downto NOCEM_CHFIFO_VC_ALLOC_FROMNODE_LIX) <= (others => '0');
187
                p1_channel_cntrl_out(NOCEM_CHFIFO_VC_REQER_FROMNODE_HIX downto NOCEM_CHFIFO_VC_REQER_FROMNODE_LIX) <= (others => '0');
188
                p1_channel_cntrl_out(NOCEM_CHFIFO_VC_RD_ADDR_HIX downto NOCEM_CHFIFO_VC_RD_ADDR_LIX) <= (others => '0');
189
 
190
                p1_cntrl_re <= p1_channel_cntrl_in(NOCEM_CHFIFO_CNTRL_RE_IX);
191
                p1_cntrl_we <= p1_channel_cntrl_in(NOCEM_CHFIFO_CNTRL_WE_IX);
192
 
193
                p1_channel_cntrl_out(NOCEM_CHFIFO_CNTRL_FULL_N_IX)  <= not p1_cntrl_full;
194
                p1_channel_cntrl_out(NOCEM_CHFIFO_CNTRL_EMPTY_N_IX) <= not p1_cntrl_empty;
195
 
196
         end process;
197
 
198
        end generate;     -- end VC handling processes
199
 
200
 
201
        gnovc_procs: if NOCEM_TYPE /= NOCEM_VC_TYPE generate
202
 
203
 
204
                -- wrapping these constant assignments to make simulator actually work...
205
                p0_handling_no_vc : process (p0_channel_cntrl_in, p0_data_full, p0_data_empty, p0_datain, p0_cntrl_full, p0_cntrl_empty, p0_pkt_cntrl_in )
206
                begin
207
 
208
                        p0_data_re <= p0_channel_cntrl_in(NOCEM_CHFIFO_DATA_RE_IX);
209
                        p0_data_we <= p0_channel_cntrl_in(NOCEM_CHFIFO_DATA_WE_IX);
210
 
211
                        p0_channel_cntrl_out(NOCEM_CHFIFO_DATA_FULL_N_IX)  <= not p0_data_full;
212
                        p0_channel_cntrl_out(NOCEM_CHFIFO_DATA_EMPTY_N_IX) <= not p0_data_empty;
213
 
214
                        p0_cntrl_re <= p0_channel_cntrl_in(NOCEM_CHFIFO_CNTRL_RE_IX);
215
                        p0_cntrl_we <= p0_channel_cntrl_in(NOCEM_CHFIFO_CNTRL_WE_IX);
216
 
217
                        p0_channel_cntrl_out(NOCEM_CHFIFO_CNTRL_FULL_N_IX)  <= not p0_cntrl_full;
218
                        p0_channel_cntrl_out(NOCEM_CHFIFO_CNTRL_EMPTY_N_IX) <= not p0_cntrl_empty;
219
 
220
                end process;
221
 
222
                -- wrapping these constant assignments to make simulator actually work...
223
                p1_handling_no_vc : process (p1_channel_cntrl_in,p1_data_full, p1_data_empty, p1_datain, p1_cntrl_full, p1_cntrl_empty, p1_pkt_cntrl_in )
224
                begin
225
 
226
                        p1_data_re <= p1_channel_cntrl_in(NOCEM_CHFIFO_DATA_RE_IX);
227
                        p1_data_we <= p1_channel_cntrl_in(NOCEM_CHFIFO_DATA_WE_IX);
228
 
229
                        p1_channel_cntrl_out(NOCEM_CHFIFO_DATA_FULL_N_IX)  <= not p1_data_full;
230
                        p1_channel_cntrl_out(NOCEM_CHFIFO_DATA_EMPTY_N_IX) <= not p1_data_empty;
231
 
232
                        p1_cntrl_re <= p1_channel_cntrl_in(NOCEM_CHFIFO_CNTRL_RE_IX);
233
                        p1_cntrl_we <= p1_channel_cntrl_in(NOCEM_CHFIFO_CNTRL_WE_IX);
234
 
235
                        p1_channel_cntrl_out(NOCEM_CHFIFO_CNTRL_FULL_N_IX)  <= not p1_cntrl_full;
236
                        p1_channel_cntrl_out(NOCEM_CHFIFO_CNTRL_EMPTY_N_IX) <= not p1_cntrl_empty;
237
 
238
                end process;
239
 
240
        end generate;     -- end no VC handling processes
241
 
242
 
243
 
244
 
245
 
246
 
247
g3: if NOCEM_CHFIFO_TYPE = NOCEM_CHFIFO_VC_TYPE generate
248
 
249
 
250
        p01_vc : vc_channel
251
        Generic map (IS_AN_ACCESS_POINT_CHANNEL => IS_AN_ACCESS_POINT_CHANNEL)
252
        PORT MAP(
253
                rd_pkt_cntrl =>                                         p1_pkt_cntrl_out,
254
                rd_pkt_data =>                                  p1_dataout,
255
 
256
                node_dest_id =>                                         p1_addr_conv,
257
                vc_mux_wr =>                                            p0_channel_cntrl_in(NOCEM_CHFIFO_VC_WR_ADDR_HIX downto NOCEM_CHFIFO_VC_WR_ADDR_LIX),
258
                vc_mux_rd =>                                            p1_channel_cntrl_in(NOCEM_CHFIFO_VC_RD_ADDR_HIX downto NOCEM_CHFIFO_VC_RD_ADDR_LIX),
259
                wr_pkt_cntrl =>                                         p0_pkt_cntrl_in,
260
                wr_pkt_data =>                                  p0_datain,
261
 
262
                rd_pkt_chdest =>                                        p1_channel_cntrl_out(NOCEM_CHFIFO_VC_CHDEST_HIX downto NOCEM_CHFIFO_VC_CHDEST_LIX),
263
                rd_pkt_vcdest =>                                        p1_channel_cntrl_out(NOCEM_CHFIFO_VC_VCDEST_HIX downto NOCEM_CHFIFO_VC_VCDEST_LIX),
264
                rd_pkt_vcsrc  =>                                        p1_channel_cntrl_out(NOCEM_CHFIFO_VC_VCSRC_HIX downto NOCEM_CHFIFO_VC_VCSRC_LIX),
265
                vc_eop_rd_status =>                             p0_channel_cntrl_out(NOCEM_CHFIFO_VC_EOP_RD_HIX downto NOCEM_CHFIFO_VC_EOP_RD_LIX),
266
                vc_eop_wr_status =>                             p1_channel_cntrl_out(NOCEM_CHFIFO_VC_EOP_WR_HIX downto NOCEM_CHFIFO_VC_EOP_WR_LIX),
267
                vc_allocate_from_node =>                p1_channel_cntrl_in(NOCEM_CHFIFO_VC_ALLOC_FROMNODE_HIX downto NOCEM_CHFIFO_VC_ALLOC_FROMNODE_LIX),
268
                vc_requester_from_node =>               p1_channel_cntrl_in(NOCEM_CHFIFO_VC_REQER_FROMNODE_HIX downto NOCEM_CHFIFO_VC_REQER_FROMNODE_LIX),
269
                vc_allocate_destch_to_node => p1_channel_cntrl_out(NOCEM_CHFIFO_VC_REQER_DEST_CH_HIX downto NOCEM_CHFIFO_VC_REQER_DEST_CH_LIX),
270
 
271
                --vc_allocate_destch_to_node--
272
 
273
                vc_requester_to_node =>                 p1_channel_cntrl_out(NOCEM_CHFIFO_VC_REQER_VCID_HIX downto NOCEM_CHFIFO_VC_REQER_VCID_LIX),
274
                vc_empty =>                                             p1_channel_cntrl_out(NOCEM_CHFIFO_VC_EMPTY_HIX downto NOCEM_CHFIFO_VC_EMPTY_LIX),
275
                vc_full =>                                                 p0_channel_cntrl_out(NOCEM_CHFIFO_VC_FULL_HIX downto NOCEM_CHFIFO_VC_FULL_LIX),
276
                RE =>                                                           p1_data_re,
277
                WE =>                                                           p0_data_we,
278
                clk => clk,
279
                rst => rst
280
        );
281
 
282
 
283
        g31: if IS_AN_ACCESS_POINT_CHANNEL = false generate
284
 
285
                p10_vc_false : vc_channel
286
                        Generic map (IS_AN_ACCESS_POINT_CHANNEL => IS_AN_ACCESS_POINT_CHANNEL)
287
                        PORT MAP(
288
 
289
                        rd_pkt_cntrl =>                                         p0_pkt_cntrl_out,
290
                        rd_pkt_data =>                                  p0_dataout,
291
 
292
                        node_dest_id =>                                         p0_addr_conv,
293
                        vc_mux_wr =>                                            p1_channel_cntrl_in(NOCEM_CHFIFO_VC_WR_ADDR_HIX downto NOCEM_CHFIFO_VC_WR_ADDR_LIX),
294
                        vc_mux_rd =>                                            p0_channel_cntrl_in(NOCEM_CHFIFO_VC_RD_ADDR_HIX downto NOCEM_CHFIFO_VC_RD_ADDR_LIX),
295
 
296
                        wr_pkt_cntrl =>                                         p1_pkt_cntrl_in,
297
                        wr_pkt_data =>                                  p1_datain,
298
 
299
                        rd_pkt_chdest =>                                        p0_channel_cntrl_out(NOCEM_CHFIFO_VC_CHDEST_HIX downto NOCEM_CHFIFO_VC_CHDEST_LIX),
300
                        rd_pkt_vcdest =>                                        p0_channel_cntrl_out(NOCEM_CHFIFO_VC_VCDEST_HIX downto NOCEM_CHFIFO_VC_VCDEST_LIX),
301
                   rd_pkt_vcsrc  =>                                     p0_channel_cntrl_out(NOCEM_CHFIFO_VC_VCSRC_HIX downto NOCEM_CHFIFO_VC_VCSRC_LIX),
302
 
303
                        vc_eop_rd_status =>                             p1_channel_cntrl_out(NOCEM_CHFIFO_VC_EOP_RD_HIX downto NOCEM_CHFIFO_VC_EOP_RD_LIX),
304
                        vc_eop_wr_status =>                             p0_channel_cntrl_out(NOCEM_CHFIFO_VC_EOP_WR_HIX downto NOCEM_CHFIFO_VC_EOP_WR_LIX),
305
                        vc_allocate_from_node =>                p0_channel_cntrl_in(NOCEM_CHFIFO_VC_ALLOC_FROMNODE_HIX downto NOCEM_CHFIFO_VC_ALLOC_FROMNODE_LIX),
306
                        vc_requester_from_node =>               p0_channel_cntrl_in(NOCEM_CHFIFO_VC_REQER_FROMNODE_HIX downto NOCEM_CHFIFO_VC_REQER_FROMNODE_LIX),
307
                        vc_allocate_destch_to_node => p0_channel_cntrl_out(NOCEM_CHFIFO_VC_REQER_DEST_CH_HIX downto NOCEM_CHFIFO_VC_REQER_DEST_CH_LIX),
308
                        vc_requester_to_node =>                 p0_channel_cntrl_out(NOCEM_CHFIFO_VC_REQER_VCID_HIX downto NOCEM_CHFIFO_VC_REQER_VCID_LIX),
309
                        vc_empty =>                                             p0_channel_cntrl_out(NOCEM_CHFIFO_VC_EMPTY_HIX downto NOCEM_CHFIFO_VC_EMPTY_LIX),
310
                        vc_full =>                                                 p1_channel_cntrl_out(NOCEM_CHFIFO_VC_FULL_HIX downto NOCEM_CHFIFO_VC_FULL_LIX),
311
                        RE =>                                                           p0_data_re,
312
                        WE =>                                                           p1_data_we,
313
                        clk => clk,
314
                        rst => rst
315
                );
316
 
317
        end generate;
318
 
319
        g32: if IS_AN_ACCESS_POINT_CHANNEL = true generate
320
 
321
                p10_vc_true : vc_channel_destap
322
                        PORT MAP(
323
                        node_dest_id =>                                         p0_addr_conv,
324
                        vc_mux_rd =>                                            p0_channel_cntrl_in(NOCEM_CHFIFO_VC_RD_ADDR_HIX downto NOCEM_CHFIFO_VC_RD_ADDR_LIX),
325
                        vc_mux_wr =>                                            p1_channel_cntrl_in(NOCEM_CHFIFO_VC_WR_ADDR_HIX downto NOCEM_CHFIFO_VC_WR_ADDR_LIX),
326
                        wr_pkt_cntrl =>                                         p1_pkt_cntrl_in,
327
                        wr_pkt_data =>                                  p1_datain,
328
                        rd_pkt_cntrl =>                                         p0_pkt_cntrl_out,
329
                        rd_pkt_data =>                                  p0_dataout,
330
                        rd_pkt_chdest =>                                        p0_channel_cntrl_out(NOCEM_CHFIFO_VC_CHDEST_HIX downto NOCEM_CHFIFO_VC_CHDEST_LIX),
331
                        rd_pkt_vcdest =>                                        p0_channel_cntrl_out(NOCEM_CHFIFO_VC_VCDEST_HIX downto NOCEM_CHFIFO_VC_VCDEST_LIX),
332
                   rd_pkt_vcsrc  =>                                     p0_channel_cntrl_out(NOCEM_CHFIFO_VC_VCSRC_HIX downto NOCEM_CHFIFO_VC_VCSRC_LIX),
333
                        vc_eop_rd_status =>                             p1_channel_cntrl_out(NOCEM_CHFIFO_VC_EOP_RD_HIX downto NOCEM_CHFIFO_VC_EOP_RD_LIX),
334
                        vc_eop_wr_status =>                             p0_channel_cntrl_out(NOCEM_CHFIFO_VC_EOP_WR_HIX downto NOCEM_CHFIFO_VC_EOP_WR_LIX),
335
                        vc_allocate_from_node =>                p0_channel_cntrl_in(NOCEM_CHFIFO_VC_ALLOC_FROMNODE_HIX downto NOCEM_CHFIFO_VC_ALLOC_FROMNODE_LIX),
336
                        vc_requester_from_node =>               p0_channel_cntrl_in(NOCEM_CHFIFO_VC_REQER_FROMNODE_HIX downto NOCEM_CHFIFO_VC_REQER_FROMNODE_LIX),
337
                        vc_allocate_destch_to_node => p0_channel_cntrl_out(NOCEM_CHFIFO_VC_REQER_DEST_CH_HIX downto NOCEM_CHFIFO_VC_REQER_DEST_CH_LIX),
338
                        vc_requester_to_node =>                 p0_channel_cntrl_out(NOCEM_CHFIFO_VC_REQER_VCID_HIX downto NOCEM_CHFIFO_VC_REQER_VCID_LIX),
339
                        vc_empty =>                                             p0_channel_cntrl_out(NOCEM_CHFIFO_VC_EMPTY_HIX downto NOCEM_CHFIFO_VC_EMPTY_LIX),
340
                        vc_full =>                                                 p1_channel_cntrl_out(NOCEM_CHFIFO_VC_FULL_HIX downto NOCEM_CHFIFO_VC_FULL_LIX),
341
                        RE =>                                                           p0_data_re,
342
                        WE =>                                                           p1_data_we,
343
                        clk => clk,
344
                        rst => rst
345
                );
346
 
347
        end generate;
348
 
349
end generate;
350
 
351
 
352
 
353
 
354
 
355
g2: if NOCEM_CHFIFO_TYPE = NOCEM_CHFIFO_NOVC_TYPE generate
356
 
357
                 p01_cntrl_fifo_allvhdl : fifo_allvhdl
358
                        generic map(
359
                                WIDTH => NOCEM_PKT_CNTRL_WIDTH,
360
                                ADDR_WIDTH => Log2(NOCEM_CHFIFO_DEPTH)
361
                        )
362
                        port map (
363
                        clk => clk,
364
                        din => p0_pkt_cntrl_in,
365
                        rd_en => p1_cntrl_re,
366
                        rst => rst,
367
                        wr_en => p0_cntrl_we,
368
                        dout => p1_pkt_cntrl_out,
369
                        empty => p1_cntrl_empty,
370
                        full => p0_cntrl_full
371
                        );
372
 
373
                 p01_data_fifo_allvhdl : fifo_allvhdl
374
                        generic map(
375
                                WIDTH => NOCEM_DW,
376
                                ADDR_WIDTH => Log2(NOCEM_CHFIFO_DEPTH)
377
                        )
378
                        port map (
379
                        clk => clk,
380
                        din => p0_datain,
381
                        rd_en => p1_data_re,
382
                        rst => rst,
383
                        wr_en => p0_data_we,
384
                        dout => p1_dataout,
385
                        empty => p1_data_empty,
386
                        full => p0_data_full
387
                        );
388
 
389
                 p10_cntrl_fifo_allvhdl : fifo_allvhdl
390
                        generic map(
391
                                WIDTH => NOCEM_PKT_CNTRL_WIDTH,
392
                                ADDR_WIDTH => Log2(NOCEM_CHFIFO_DEPTH)
393
                        )
394
                        port map (
395
                        clk => clk,
396
                        din => p1_pkt_cntrl_in,
397
                        rd_en => p0_cntrl_re,
398
                        rst => rst,
399
                        wr_en => p1_cntrl_we,
400
                        dout => p0_pkt_cntrl_out,
401
                        empty => p0_cntrl_empty,
402
                        full => p1_cntrl_full
403
                        );
404
 
405
                 p10_data_fifo_allvhdl : fifo_allvhdl
406
                        generic map(
407
                                WIDTH => NOCEM_DW,
408
                                ADDR_WIDTH => Log2(NOCEM_CHFIFO_DEPTH)
409
                        )
410
                        port map (
411
                        clk => clk,
412
                        din => p1_datain,
413
                        rd_en => p0_data_re,
414
                        rst => rst,
415
                        wr_en => p1_data_we,
416
                        dout => p0_dataout,
417
                        empty => p0_data_empty,
418
                        full => p1_data_full
419
                        );
420
 
421
end generate;
422
 
423
 
424
 
425
 
426
 
427
end Behavioral;

powered by: WebSVN 2.1.0

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