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

Subversion Repositories saturn

[/] [saturn/] [trunk/] [IPCommunication/] [communication_sil4_filtre.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 DavidRAMBA
--============================================================================= 
2
--  TITRE : COMMUNICATION_SIL4
3
--  DESCRIPTION : 
4
--        Implémente la pile communication des MIO sécuritaire pour un module SIL4
5
--  FICHIER :        communication_sil4.vhd 
6
--=============================================================================
7
--  CREATION 
8
--  DATE              AUTEUR    PROJET  REVISION 
9
--  10/04/2014  DRA        SATURN       V1.0 
10
--=============================================================================
11
 
12
LIBRARY IEEE;
13
USE IEEE.STD_LOGIC_1164.ALL;
14
USE IEEE.STD_LOGIC_ARITH.ALL;
15
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
16
 
17
ENTITY communication_sil4 IS
18
   PORT (
19
      -- Ports systčme
20
      clk_sys  : IN  STD_LOGIC;     -- Clock systčme
21
      rst_n    : IN  STD_LOGIC;     -- Reset général systčme
22
      ad_mio   : IN  STD_LOGIC_VECTOR(7 DOWNTO 0); -- TID du MIO
23
      top_cycle: IN  STD_LOGIC;                    -- TOP de synchro de début de cycle
24
      ena_filt_dble : IN STD_LOGIC;                -- Autorise le filtrage des trames en double      
25
 
26
      -- Interfaces séries 1 et 2
27
      rx1       : IN  STD_LOGIC;    -- Réception série port 1
28
      tx1       : OUT STD_LOGIC;    -- Transmission série port 1
29
      rx2       : IN  STD_LOGIC;    -- Réception série port 2
30
      tx2       : OUT STD_LOGIC;    -- Transmission série port 2
31
 
32
      copy_ena1 : IN  STD_LOGIC;    -- Autorise la copy du port 1 sur le port 2
33
      copy_ena2 : IN  STD_LOGIC;    -- Autorise la copy du port 2 sur le port 1
34
 
35
      -- Interfaces de lecture des trames port 1 côté ľC1
36
      filt_rx1_uc1   : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Données applicatives reçues sur port 1
37
      filt_soc1_uc1  : OUT STD_LOGIC;           -- Indique un début de trame
38
      filt_rd1_uc1   : IN  STD_LOGIC;           -- Signal de lecture d'un octet de plus
39
      filt_comdispo1_uc1 : OUT STD_LOGIC;       -- Indique qu'au moins une trame est dispo en mémoire
40
      layer7_newframe1 : OUT STD_LOGIC;         -- Indique la réception d'une nouvelle trame
41
      layer7_l2ok1     : OUT STD_LOGIC;         -- Indique que la trame reçue est conforme
42
      layer7_overflow1 : OUT STD_LOGIC;         -- Indique un débordement de mémoire
43
      activity1        : OUT STD_LOGIC;         -- Indique du trafic sur le port 1
44
      -- Interfaces de lecture des trames port 2 côté ľC1
45
      filt_rx2_uc1   : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Idem port 1
46
      filt_soc2_uc1  : OUT STD_LOGIC;
47
      filt_rd2_uc1   : IN  STD_LOGIC;
48
      filt_comdispo2_uc1 : OUT STD_LOGIC;
49
      layer7_newframe2 : OUT STD_LOGIC;
50
      layer7_l2ok2     : OUT STD_LOGIC;
51
      layer7_overflow2 : OUT STD_LOGIC;
52
      activity2        : OUT STD_LOGIC;         -- Indique du trafic sur le port 2
53
      -- Interfaces de lecture des trames port 1 côté ľC1
54
      filt_rx1_uc2   : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Données applicatives reçues sur port 1
55
      filt_soc1_uc2  : OUT STD_LOGIC;           -- Indique un début de trame
56
      filt_rd1_uc2   : IN  STD_LOGIC;           -- Signal de lecture d'un octet de plus
57
      filt_comdispo1_uc2 : OUT STD_LOGIC;       -- Indique qu'au moins une trame est dispo en mémoire
58
      -- Interfaces de lecture des trames port 2 côté ľC1
59
      filt_rx2_uc2   : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Idem port 1
60
      filt_soc2_uc2  : OUT STD_LOGIC;
61
      filt_rd2_uc2   : IN  STD_LOGIC;
62
      filt_comdispo2_uc2 : OUT STD_LOGIC;
63
      -- Interface d'écriture des trames côté ľC1
64
      txdat_free       : OUT STD_LOGIC;         -- Indique que le module couche transport Tx est dispo
65
      tx_dat_uc1       : IN  STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Flux de données applicatives ŕ transmettre
66
      val_txdat_uc1    : IN  STD_LOGIC;         -- Indique un octet dispo sur tx_dat
67
      tx_sof_uc1       : IN  STD_LOGIC;         -- Indique un début de trame
68
      tx_eof_uc1       : IN  STD_LOGIC;         -- Indique une fin de trame
69
      clr_fifo_tx_uc1  : IN  STD_LOGIC;         -- Clear de la FIFO transport Tx
70
      -- Interface d'écriture des trames côté ľC2
71
      tx_dat_uc2       : IN  STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Flux de données applicatives ŕ transmettre
72
      val_txdat_uc2    : IN  STD_LOGIC;         -- Indique un octet dispo sur tx_dat
73
      tx_sof_uc2       : IN  STD_LOGIC;         -- Indique un début de trame
74
      tx_eof_uc2       : IN  STD_LOGIC;         -- Indique une fin de trame
75
      clr_fifo_tx_uc2  : IN  STD_LOGIC          -- Clear de la FIFO transport Tx
76
      );
77
END communication_sil4;
78
 
79
ARCHITECTURE rtl of communication_sil4 is
80
   -- Définit le nombre de bit nécessaires pour mesurer la durée du bit le plus lent avec l'horloge systčme
81
   -- i.e. 1 Bit ŕ 50Kbit/s = 20ľs nbbit_div = Log2(96MHz x 20ľs)
82
   CONSTANT nbbit_div      : INTEGER := 11;
83
 
84
   -- DFF pour la métastabilité de rx1 et rx2
85
   SIGNAL rx1_r1, rx1_r2 : STD_LOGIC;
86
   SIGNAL rx2_r1, rx2_r2 : STD_LOGIC;
87
 
88
   -- Diviseur d'horloge pour le baud rate
89
   SIGNAL tc_divclk     : STD_LOGIC_VECTOR(nbbit_div - 1 DOWNTO 0);  -- Termianl count du diviseur
90
   SIGNAL baud_locked   : STD_LOGIC;                                 -- Indique que l'autobaud est locké
91
 
92
   -- Interfaces du SWITCH1
93
   SIGNAL layer1_rx1    : STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Flux de donnée déserialisé (Rx)
94
   SIGNAL layer1_val1   : STD_LOGIC;                     -- Indique un octet valide sur layer1_rx1
95
   SIGNAL sw_ena1       : STD_LOGIC;                     -- Indique qu'on est en réception entre 2 trames sur port 1
96
   SIGNAL layer1_tx1    : STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Flux de donnée ŕ sérialiser (Tx)
97
   SIGNAL layer1_rd1    : STD_LOGIC;                     -- Demande un octet de plus ŕ transmettre
98
   SIGNAL layer1_empty1 : STD_LOGIC;                     -- Indique qu'aucun octet n'est en attente de serialsiation
99
 
100
   -- Interfaces du SWITCH2
101
   SIGNAL layer1_rx2    : STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Idem port 1
102
   SIGNAL layer1_val2   : STD_LOGIC;
103
   SIGNAL sw_ena2       : STD_LOGIC;
104
   SIGNAL layer1_tx2    : STD_LOGIC_VECTOR(7 DOWNTO 0);
105
   SIGNAL layer1_rd2    : STD_LOGIC;
106
   SIGNAL layer1_empty2 : STD_LOGIC;
107
 
108
   -- Interfaces du module LAYER2_RX1
109
   SIGNAL layer2_rx1    : STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Flux de données applicatives destuffé
110
   SIGNAL layer2_rxval1 : STD_LOGIC;                     -- Indique un octet valide sur layer2_rx1
111
   SIGNAL layer2_sof1   : STD_LOGIC;                     -- Indique un  début de trame
112
   SIGNAL layer2_eof1   : STD_LOGIC;                     -- Indqiue une fin de trame
113
   SIGNAL layer2_l2ok1  : STD_LOGIC;                     -- Indique que la trame reçue est correcte
114
 
115
   -- Interfaces du module LAYER2_RX2
116
   SIGNAL layer2_rx2    : STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Idem que port 1
117
   SIGNAL layer2_rxval2 : STD_LOGIC;
118
   SIGNAL layer2_sof2   : STD_LOGIC;
119
   SIGNAL layer2_eof2   : STD_LOGIC;
120
   SIGNAL layer2_l2ok2  : STD_LOGIC;
121
 
122
   -- Interfaces du module FRAME_STORE1
123
   SIGNAL layer7_rx1       : STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Flux de données
124
   SIGNAL layer7_soc1      : STD_LOGIC;            -- Indique un début de trame
125
   SIGNAL layer7_rd1       : STD_LOGIC;            -- Signal de elcture d'un octet de plus
126
   SIGNAL layer7_comdispo1 : STD_LOGIC;            -- Indique qu'au moins une trame est dispo
127
   SIGNAL overflow_store1  : STD_LOGIC;            -- Indique qu'une trame n'a pas pu ętre stockée
128
   SIGNAL overflow_filter1 : STD_LOGIC;            -- Overflow de l'algo de filtrage doubletrame coté 1
129
 
130
   -- Interfaces du module FRAME_STORE2
131
   SIGNAL layer7_rx2       : STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Flux de données
132
   SIGNAL layer7_soc2      : STD_LOGIC;            -- Indique un début de trame
133
   SIGNAL layer7_rd2       : STD_LOGIC;            -- Signal de elcture d'un octet de plus
134
   SIGNAL layer7_comdispo2 : STD_LOGIC;            -- Indique qu'au moins une trame est dispo
135
   SIGNAL overflow_store2  : STD_LOGIC;            -- Indique qu'une trame n'a pas pu ętre stockée
136
   SIGNAL overflow_filter2 : STD_LOGIC;            -- Overflow de l'algo de filtrage doubletrame coté 2
137
 
138
   -- Interfaces du module LAYER2_TX
139
   SIGNAL layer2_txdat     : STD_LOGIC_VECTOR(7 DOWNTO 0);-- Flux de donnée stuffé + CRC transport
140
   SIGNAL layer2_txval     : STD_LOGIC;                  -- Indique un octet valide sur layer2_txdat
141
   SIGNAL layer2_progfull1 : STD_LOGIC;                  -- La FIFO de données Tx port 1 est presque pleine
142
   SIGNAL layer2_progfull2 : STD_LOGIC;                  -- La FIFO de données Tx port 2 est presque pleine
143
   SIGNAL layer2_full1     : STD_LOGIC;                  -- La FIFO de données Tx port 1 est pleine
144
   SIGNAL layer2_full2     : STD_LOGIC;                  -- La FIFO de données Tx port 2 est pleine
145
 
146
   -- Signaux de multiplexage des écritures des trames Tx par les 2 PIC
147
   SIGNAL tx_dat       : STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Flux de données applicatives ŕ transmettre
148
   SIGNAL val_txdat    : STD_LOGIC;         -- Indique un octet dispo sur tx_dat
149
   SIGNAL tx_sof       : STD_LOGIC;         -- Indique un début de trame
150
   SIGNAL tx_eof       : STD_LOGIC;         -- Indique une fin de trame
151
   SIGNAL clr_fifo_tx  : STD_LOGIC;         -- Clear de la FIFO transport Tx
152
 
153
 
154
        COMPONENT autobaud
155
        PORT(
156
                clk_sys     : IN STD_LOGIC;
157
                rst_n       : IN STD_LOGIC;
158
                rx1         : IN STD_LOGIC;
159
                val_rx1     : IN STD_LOGIC;
160
                eof1        : IN STD_LOGIC;
161
                dat_rx1     : IN  STD_LOGIC_VECTOR(7 DOWNTO 0);
162
      l2_ok1      : IN STD_LOGIC;
163
                rx2         : IN STD_LOGIC;
164
                val_rx2     : IN STD_LOGIC;
165
                eof2        : IN STD_LOGIC;
166
                dat_rx2     : IN  STD_LOGIC_VECTOR(7 DOWNTO 0);
167
      l2_ok2      : IN STD_LOGIC;
168
                tc_divclk   : OUT STD_LOGIC_VECTOR(10 downto 0);
169
                baud_locked : OUT STD_LOGIC
170
                );
171
        END COMPONENT;
172
 
173
        COMPONENT switch
174
   GENERIC (
175
      nbbit_div : INTEGER := 10);
176
        PORT(
177
                clk_sys     : IN STD_LOGIC;
178
                rst_n       : IN STD_LOGIC;
179
      baud_lock   : IN  STD_LOGIC;
180
                tc_divclk   : IN STD_LOGIC_VECTOR(nbbit_div-1 downto 0);
181
                rx          : IN STD_LOGIC;
182
                rx_dat      : OUT STD_LOGIC_VECTOR(7 downto 0);
183
                rx_val      : OUT STD_LOGIC;
184
                tx          : OUT STD_LOGIC;
185
                tx_dat      : IN STD_LOGIC_VECTOR(7 downto 0);
186
                tx_rd       : OUT STD_LOGIC;
187
                tx_empty    : IN STD_LOGIC;
188
                sw_ena      : IN STD_LOGIC;
189
                copy_ena    : IN STD_LOGIC;
190
      etat                 : OUT  STD_LOGIC
191
                );
192
        END COMPONENT;
193
 
194
        COMPONENT layer2_rx
195
   GENERIC (
196
      nbbit_div : INTEGER := 10);
197
        PORT(
198
                clk_sys     : IN STD_LOGIC;
199
                rst_n       : IN STD_LOGIC;
200
                tc_divclk   : IN STD_LOGIC_VECTOR(nbbit_div-1 downto 0);
201
                ad_mio      : IN STD_LOGIC_VECTOR(7 downto 0);
202
                dat_in      : IN STD_LOGIC_VECTOR(7 downto 0);
203
                val_in      : IN STD_LOGIC;
204
                dat_out     : OUT STD_LOGIC_VECTOR(7 downto 0);
205
                val_out     : OUT STD_LOGIC;
206
                sw_ena      : OUT STD_LOGIC;
207
                sof         : OUT STD_LOGIC;
208
                eof         : OUT STD_LOGIC;
209
                l2_ok       : OUT STD_LOGIC
210
                );
211
        END COMPONENT;
212
 
213
        COMPONENT frame_store
214
        PORT(
215
                clk_sys     : IN STD_LOGIC;
216
                rst_n       : IN STD_LOGIC;
217
                dat_in      : IN STD_LOGIC_VECTOR(7 downto 0);
218
                val_in      : IN STD_LOGIC;
219
                sof         : IN STD_LOGIC;
220
                eof         : IN STD_LOGIC;
221
                l2_ok       : IN STD_LOGIC;
222
                dat_out     : OUT STD_LOGIC_VECTOR(7 downto 0);
223
      soc_out     : OUT STD_LOGIC;
224
                rd_datout   : IN STD_LOGIC;
225
                new_frame   : OUT STD_LOGIC;
226
                com_dispo   : OUT STD_LOGIC;
227
                l7_ok       : OUT STD_LOGIC;
228
      overflow    : OUT STD_LOGIC
229
                );
230
        END COMPONENT;
231
 
232
   COMPONENT filter_dbl_frame_sil4 IS
233
   PORT (
234
      clk_sys        : IN STD_LOGIC;
235
      rst_n          : IN STD_LOGIC;
236
      top_cycle      : IN  STD_LOGIC;
237
      ena_filt_dble  : IN  STD_LOGIC;
238
      data_port1           : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
239
      soc_port1            : IN STD_LOGIC;
240
      com_dispo1           : IN STD_LOGIC;
241
      rd_port1             : OUT STD_LOGIC;
242
      data_port2           : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
243
      soc_port2            : IN STD_LOGIC;
244
      com_dispo2           : IN STD_LOGIC;
245
      rd_port2             : OUT STD_LOGIC;
246
      data_filt1_uc1       : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
247
      soc_filt1_uc1        : OUT STD_LOGIC;
248
      frm_dispo_filt1_uc1  : OUT STD_LOGIC;
249
      rd_filt1_uc1         : IN  STD_LOGIC;
250
      data_filt2_uc1       : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
251
      soc_filt2_uc1        : OUT STD_LOGIC;
252
      frm_dispo_filt2_uc1  : OUT STD_LOGIC;
253
      rd_filt2_uc1         : IN  STD_LOGIC;
254
      data_filt1_uc2       : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
255
      soc_filt1_uc2        : OUT STD_LOGIC;
256
      frm_dispo_filt1_uc2  : OUT STD_LOGIC;
257
      rd_filt1_uc2         : IN  STD_LOGIC;
258
      data_filt2_uc2       : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
259
      soc_filt2_uc2        : OUT STD_LOGIC;
260
      frm_dispo_filt2_uc2  : OUT STD_LOGIC;
261
      rd_filt2_uc2         : IN  STD_LOGIC;
262
      dpram_overflow1      : OUT STD_LOGIC;
263
      dpram_overflow2      : OUT STD_LOGIC
264
      );
265
   END COMPONENT;
266
 
267
   COMPONENT layer2_tx
268
   PORT(
269
      clk_sys     : IN STD_LOGIC;
270
      rst_n       : IN STD_LOGIC;
271
      dat_in      : IN STD_LOGIC_VECTOR(7 downto 0);
272
      val_in      : IN STD_LOGIC;
273
      sof         : IN STD_LOGIC;
274
      eof         : IN STD_LOGIC;
275
      datin_free  : OUT STD_LOGIC;
276
      dat_out     : OUT STD_LOGIC_VECTOR(7 downto 0);
277
      val_out     : OUT STD_LOGIC;
278
      clr_fifo    : IN   STD_LOGIC;
279
      progfull1   : IN   STD_LOGIC;
280
      progfull2   : IN   STD_LOGIC;
281
      full1       : IN   STD_LOGIC;
282
      empty1      : IN   STD_LOGIC;
283
      full2       : IN   STD_LOGIC;
284
      empty2      : IN   STD_LOGIC
285
      );
286
   END COMPONENT;
287
 
288
   -- La FIFO contient 512 mots, le prog_full est configuré ŕ 500 mots pour laisser une marge de 
289
   -- stockage avant overflow (voir le module layer2_tx)
290
   COMPONENT fifo_tx
291
   PORT (
292
      clk      : IN STD_LOGIC;
293
      srst     : IN STD_LOGIC;
294
      din      : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
295
      wr_en    : IN STD_LOGIC;
296
      rd_en    : IN STD_LOGIC;
297
      dout     : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
298
      full     : OUT STD_LOGIC;
299
      empty    : OUT STD_LOGIC;
300
      prog_full: OUT STD_LOGIC
301
      );
302
   END COMPONENT;
303
 
304
BEGIN
305
   --------------------------------------------
306
   -- Gestion de la métastbilité de rx1 et rx2
307
   --------------------------------------------
308
   meta : PROCESS(clk_sys, rst_n)
309
   BEGIN
310
      IF (rst_n = '0') THEN
311
         rx1_r1 <= '1';
312
         rx1_r2 <= '1';
313
         rx2_r1 <= '1';
314
         rx2_r2 <= '1';
315
      ELSIF (clk_sys'EVENT and clk_sys = '1') THEN
316
         rx1_r1 <= rx1;
317
         rx1_r2 <= rx1_r1;
318
         rx2_r1 <= rx2;
319
         rx2_r2 <= rx2_r1;
320
      END IF;
321
   END PROCESS;
322
 
323
        inst_autobaud: autobaud
324
   PORT MAP(
325
                clk_sys =>  clk_sys,
326
                rst_n =>    rst_n,
327
                rx1 =>      rx1_r2,
328
                rx2 =>      rx2_r2,
329
                val_rx1 =>  layer1_val1,
330
                dat_rx1 =>  layer1_rx1,
331
      eof1 =>     layer2_eof1,
332
                l2_ok1 =>   layer2_l2ok1,
333
                val_rx2 =>  layer1_val2,
334
      dat_rx2 =>  layer1_rx2,
335
                eof2 =>     layer2_eof2,
336
                l2_ok2 =>   layer2_l2ok2,
337
                tc_divclk => tc_divclk,
338
                baud_locked => baud_locked
339
        );
340
 
341
        inst_switch1: switch
342
   GENERIC MAP (
343
      nbbit_div => nbbit_div)
344
   PORT MAP(
345
                clk_sys =>     clk_sys,
346
                rst_n =>       rst_n,
347
      baud_lock =>   baud_locked,
348
                tc_divclk =>   tc_divclk,
349
                rx =>          rx1_r2,
350
                rx_dat =>      layer1_rx1,
351
                rx_val =>      layer1_val1,
352
                tx =>          tx2,
353
                tx_dat =>      layer1_tx2,
354
                tx_rd =>       layer1_rd2,
355
                tx_empty =>    layer1_empty2,
356
                sw_ena =>      sw_ena1,
357
                copy_ena =>    copy_ena1,
358
      etat =>        OPEN
359
        );
360
 
361
        inst_switch2: switch
362
   GENERIC MAP (
363
      nbbit_div => nbbit_div)
364
   PORT MAP(
365
                clk_sys =>     clk_sys,
366
                rst_n =>       rst_n,
367
      baud_lock =>   baud_locked,
368
                tc_divclk =>   tc_divclk,
369
                rx =>          rx2_r2,
370
                rx_dat =>      layer1_rx2,
371
                rx_val =>      layer1_val2,
372
                tx =>          tx1,
373
                tx_dat =>      layer1_tx1,
374
                tx_rd =>       layer1_rd1,
375
                tx_empty =>    layer1_empty1,
376
                sw_ena =>      sw_ena2,
377
                copy_ena =>    copy_ena2,
378
      etat =>        OPEN
379
        );
380
 
381
        inst_layer2_rx1: layer2_rx
382
   GENERIC MAP (
383
      nbbit_div => nbbit_div)
384
   PORT MAP(
385
                clk_sys =>     clk_sys,
386
                rst_n =>       rst_n,
387
                tc_divclk =>   tc_divclk,
388
      ad_mio =>      ad_mio,
389
                dat_in =>      layer1_rx1,
390
                val_in =>      layer1_val1,
391
                dat_out =>     layer2_rx1,
392
                val_out =>     layer2_rxval1,
393
                sof =>         layer2_sof1,
394
                eof =>         layer2_eof1,
395
                l2_ok =>       layer2_l2ok1,
396
                sw_ena =>      sw_ena1
397
        );
398
   activity1 <= layer2_eof1;
399
 
400
        inst_layer2_rx2: layer2_rx
401
   GENERIC MAP (
402
      nbbit_div => nbbit_div)
403
   PORT MAP(
404
                clk_sys =>     clk_sys,
405
                rst_n =>       rst_n,
406
                tc_divclk =>   tc_divclk,
407
      ad_mio =>      ad_mio,
408
                dat_in =>      layer1_rx2,
409
                val_in =>      layer1_val2,
410
                dat_out =>     layer2_rx2,
411
                val_out =>     layer2_rxval2,
412
                sof =>         layer2_sof2,
413
                eof =>         layer2_eof2,
414
                l2_ok =>       layer2_l2ok2,
415
                sw_ena =>      sw_ena2
416
        );
417
   activity2 <= layer2_eof2;
418
 
419
        inst_frame_store1: frame_store
420
   PORT MAP(
421
                clk_sys =>     clk_sys,
422
                rst_n =>       rst_n,
423
                dat_in =>      layer2_rx1,
424
                val_in =>      layer2_rxval1,
425
                sof =>         layer2_sof1,
426
                eof =>         layer2_eof1,
427
                l2_ok =>       layer2_l2ok1,
428
                dat_out =>     layer7_rx1,
429
      soc_out =>     layer7_soc1,
430
                rd_datout =>   layer7_rd1,
431
                new_frame =>   layer7_newframe1,
432
                com_dispo =>   layer7_comdispo1,
433
                l7_ok =>       layer7_l2ok1,
434
      overflow =>    layer7_overflow1
435
        );
436
 
437
        inst_frame_store2_uc1: frame_store
438
   PORT MAP(
439
                clk_sys =>     clk_sys,
440
                rst_n =>       rst_n,
441
                dat_in =>      layer2_rx2,
442
                val_in =>      layer2_rxval2,
443
                sof =>         layer2_sof2,
444
                eof =>         layer2_eof2,
445
                l2_ok =>       layer2_l2ok2,
446
                dat_out =>     layer7_rx2,
447
      soc_out =>     layer7_soc2,
448
                rd_datout =>   layer7_rd2,
449
                new_frame =>   layer7_newframe2,
450
                com_dispo =>   layer7_comdispo2,
451
                l7_ok =>       layer7_l2ok2,
452
      overflow =>    layer7_overflow2
453
        );
454
 
455
   inst_dble_filt : filter_dbl_frame_sil4
456
   PORT MAP(
457
      clk_sys        => clk_sys,
458
      rst_n          => rst_n,
459
      top_cycle      => top_cycle,
460
      ena_filt_dble  => ena_filt_dble,
461
      data_port1     => layer7_rx1,
462
      soc_port1      => layer7_soc1,
463
      com_dispo1     => layer7_comdispo1,
464
      rd_port1       => layer7_rd1,
465
      data_port2     => layer7_rx2,
466
      soc_port2      => layer7_soc2,
467
      com_dispo2     => layer7_comdispo2,
468
      rd_port2       => layer7_rd2,
469
      data_filt1_uc1 => filt_rx1_uc1,
470
      soc_filt1_uc1  => filt_soc1_uc1,
471
      frm_dispo_filt1_uc1=> filt_comdispo1_uc1,
472
      rd_filt1_uc1   => filt_rd1_uc1,
473
      data_filt2_uc1 => filt_rx2_uc1,
474
      soc_filt2_uc1  => filt_soc2_uc1,
475
      frm_dispo_filt2_uc1=> filt_comdispo2_uc1,
476
      rd_filt2_uc1   => filt_rd2_uc1,
477
      data_filt1_uc2 => filt_rx1_uc2,
478
      soc_filt1_uc2  => filt_soc1_uc2,
479
      frm_dispo_filt1_uc2=> filt_comdispo1_uc2,
480
      rd_filt1_uc2   => filt_rd1_uc2,
481
      data_filt2_uc2 => filt_rx2_uc2,
482
      soc_filt2_uc2  => filt_soc2_uc2,
483
      frm_dispo_filt2_uc2=> filt_comdispo2_uc2,
484
      rd_filt2_uc2   => filt_rd2_uc2,
485
      dpram_overflow1=> overflow_filter1,
486
      dpram_overflow2=> overflow_filter2
487
      );
488
 
489
 
490
   tx_dat <= tx_dat_uc1 WHEN (val_txdat_uc1 = '1') ELSE tx_dat_uc2;
491
   val_txdat <= val_txdat_uc1 OR val_txdat_uc2;
492
   tx_sof <= tx_sof_uc1 OR tx_sof_uc2;
493
   tx_eof <= tx_eof_uc1 OR tx_eof_uc2;
494
   clr_fifo_tx <= clr_fifo_tx_uc1 OR clr_fifo_tx_uc2;
495
 
496
   inst_layer2_tx: layer2_tx
497
   PORT MAP(
498
      clk_sys => clk_sys,
499
      rst_n => rst_n,
500
      dat_in => tx_dat,
501
      val_in => val_txdat,
502
      sof => tx_sof,
503
      eof => tx_eof,
504
      datin_free => txdat_free,
505
      dat_out => layer2_txdat,
506
      val_out => layer2_txval,
507
      clr_fifo => clr_fifo_tx,
508
      progfull1 => layer2_progfull1,
509
      progfull2 => layer2_progfull2,
510
      full1     => layer2_full1,
511
      empty1    => layer1_empty1,
512
      full2     => layer2_full2,
513
      empty2    => layer1_empty2
514
        );
515
 
516
   inst_fifo_tx1 : fifo_tx
517
   PORT MAP (
518
      clk =>   clk_sys,
519
      srst =>  clr_fifo_tx,
520
      din =>   layer2_txdat,
521
      wr_en => layer2_txval,
522
      rd_en => layer1_rd1,
523
      dout =>  layer1_tx1,
524
      full =>  layer2_full1,
525
      empty => layer1_empty1,
526
      prog_full => layer2_progfull1
527
   );
528
 
529
   inst_fifo_tx2 : fifo_tx
530
   PORT MAP (
531
      clk =>   clk_sys,
532
      srst =>  clr_fifo_tx,
533
      din =>   layer2_txdat,
534
      wr_en => layer2_txval,
535
      rd_en => layer1_rd2,
536
      dout =>  layer1_tx2,
537
      full =>  layer2_full2,
538
      empty => layer1_empty2,
539
      prog_full => layer2_progfull2
540
   );
541
 
542
END rtl;
543
 

powered by: WebSVN 2.1.0

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