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

Subversion Repositories saturn

[/] [saturn/] [trunk/] [FPGA Concentrateur SIL2/] [fpga_cosil2/] [con_communication_sil.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 DavidRAMBA
--============================================================================= 
2
--  TITRE : CON_COMMUNICATION_SIL
3
--  DESCRIPTION : 
4
--        Implémente la pile communication SATURN       coté concentrateur      
5
--  FICHIER :        con_communication_sil.vhd 
6
--=============================================================================
7
--  CREATION 
8
--  DATE              AUTEUR    PROJET  REVISION 
9
--  10/04/2014  DRA        SATURN       V1.0 
10
--=============================================================================
11
--  HISTORIQUE  DES  MODIFICATIONS :
12
--  DATE              AUTEUR    PROJET  REVISION
13
--  27/04/15   DRA      SATURN   V1.1
14
--     Augmentation des FIFO fifo_tx pour permettre au pic de stocker
15
--     d'avantage de trames de commande.
16
--=============================================================================
17
 
18
LIBRARY IEEE;
19
USE IEEE.STD_LOGIC_1164.ALL;
20
USE IEEE.STD_LOGIC_ARITH.ALL;
21
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
22
 
23
ENTITY con_communication_sil IS
24
   PORT (
25
      -- Ports système
26
      clk_sys  : IN  STD_LOGIC;                    -- Clock système
27
      rst_n    : IN  STD_LOGIC;                    -- Reset général système
28
      baudrate : IN  STD_LOGIC_VECTOR(2 DOWNTO 0); -- Baudrate en mdoe maitre
29
      actif    : IN  STD_LOGIC;                    -- Indique que le concentrateur est actif
30
      ad_con   : IN  STD_LOGIC_VECTOR(7 DOWNTO 0); -- Addresse logique du concentrateur (TID)
31
      top_cycle: IN  STD_LOGIC;                    -- TOP de synchro de début de cycle
32
      ena_filt_dble : IN STD_LOGIC;                -- Autorise le filtrage des trames en double
33
 
34
      -- Interfaces séries 1 et 2
35
      rx1      : IN  STD_LOGIC;                    -- Réception série port 1 
36
      tx1      : OUT STD_LOGIC;                    -- Transmission série port 1
37
      rx2      : IN  STD_LOGIC;                    -- Réception série port 2
38
      tx2      : OUT STD_LOGIC;                    -- Transmission série port 2
39
 
40
      copy_ena1: IN  STD_LOGIC;                    -- Autorise la recopie du port 1 sur le port 2
41
      copy_ena2: IN  STD_LOGIC;                    -- Autorise la recopie du port 2 sur le port 1
42
 
43
      -- Interfaces de lecture des trames reçues sur le port 1 pour le PIC
44
      filt_rx1          : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Flux de données
45
      filt_soc1         : OUT STD_LOGIC;           -- Indique un début de trame
46
      filt_rd1          : IN  STD_LOGIC;           -- Signal de elcture d'un octet de plus
47
      filt_comdispo1    : OUT STD_LOGIC;           -- Indique qu'au moins une trame est dispo
48
      layer7_newframe1  : OUT STD_LOGIC;           -- Indique la réception d'une nouvelle trame
49
      layer7_l2ok1      : OUT STD_LOGIC;           -- Indique que le CRC de la trame reçue est valide
50
      layer7_overflow1  : OUT STD_LOGIC;           -- Indique qu'une trame n'a pas pu être stockée
51
 
52
      -- Interfaces de lecture des trames reçues sur le port 2 pour le PIC
53
      filt_rx2          : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Idem que pour port 1
54
      filt_soc2         : OUT STD_LOGIC;
55
      filt_rd2          : IN  STD_LOGIC;
56
      filt_comdispo2    : OUT STD_LOGIC;
57
      layer7_newframe2  : OUT STD_LOGIC;
58
      layer7_l2ok2      : OUT STD_LOGIC;
59
      layer7_overflow2  : OUT STD_LOGIC;
60
 
61
      -- Interfaces de lecture des trames reçues sur le port 1 pour le PCIe
62
      data_storerx1  : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Flux de données
63
      val_storerx1   : OUT STD_LOGIC;              -- Validant du bus data
64
      sof_storerx1   : OUT STD_LOGIC;              -- Début de trame
65
      eof_storerx1   : OUT STD_LOGIC;              -- Fin de trame
66
      crcok_storerx1 : OUT STD_LOGIC;              -- CRC ok pour la trame reçue
67
 
68
      -- Interfaces de lecture des trames reçues sur le port 2 pour le PCIe
69
      data_storerx2  : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Idem quepour port 1
70
      val_storerx2   : OUT STD_LOGIC;
71
      sof_storerx2   : OUT STD_LOGIC;
72
      eof_storerx2   : OUT STD_LOGIC;
73
      crcok_storerx2 : OUT STD_LOGIC;
74
 
75
      -- Interface du PIC pour l'envoie de trame sur les liens séries
76
      tx_dat         : IN  STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Flux dedonnées
77
      val_txdat      : IN  STD_LOGIC;              -- Validant du bus data
78
      tx_sof         : IN  STD_LOGIC;              -- Début de trame
79
      tx_eof         : IN  STD_LOGIC;              -- Fin de trame
80
      txdat_free     : OUT STD_LOGIC;              -- Indique le module de transmission a pris en comtpe la dernière donnée
81
      clr_fifo_tx    : IN  STD_LOGIC;              -- Pour purger la FIFO de transmission
82
      stuf_phys      : IN  STD_LOGIC;              -- Pour envoyer des caractères de controle 7Fh
83
      acq_stuf       : OUT STD_LOGIC               -- Indique que la commande d'envoi des caractères 7Fh est terminée
84
      );
85
END con_communication_sil;
86
 
87
ARCHITECTURE rtl of con_communication_sil is
88
   -- Définit le nombre de bit nécessaires pour mesurer la durée du bit le plus lent avec l'horloge système
89
   -- i.e. 1 Bit à 50Kbit/s = 20µs nbbit_div = Log2(96MHz x 20µs)
90
   CONSTANT nbbit_div      : INTEGER := 11;
91
   CONSTANT freq_clk       : INTEGER := 96;     -- clk_sys = 96MHz
92
 
93
   -- DFF pour la métastabilité de rx1 et rx2
94
   SIGNAL rx1_r1, rx1_r2   : STD_LOGIC;
95
   SIGNAL rx2_r1, rx2_r2   : STD_LOGIC;
96
 
97
   -- Diviseur d'horloge pour le baud rate
98
   SIGNAL tc_divclk        : STD_LOGIC_VECTOR(nbbit_div - 1 DOWNTO 0);  -- Diviseur multiplexé selon le mode
99
   SIGNAL divclk_autobaud  : STD_LOGIC_VECTOR(nbbit_div - 1 DOWNTO 0);  -- diviseur déterminé par la fonction d'autobaud
100
   SIGNAL baud_locked      : STD_LOGIC;                  -- Indique que l'algo d'autobaud a convergé
101
 
102
   -- Interfaces du SWITCH1
103
   SIGNAL layer1_rx1    : STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Flux de donnée brut reçu sur Rx1
104
   SIGNAL layer1_val1   : STD_LOGIC;                     -- Validant du flux ded onnée sur Rx1
105
   SIGNAL sw_ena1       : STD_LOGIC;                     -- Indique qu'on est entre 2 trames en réception
106
   SIGNAL layer1_tx1    : STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Flux de donnée brut à transmettre sur Tx1
107
   SIGNAL layer1_rd1    : STD_LOGIC;                     -- Demande un octet de plus à transmettre sur Tx1
108
   SIGNAL layer1_empty1 : STD_LOGIC;                     -- Indique que la FIFO de transmission sur Tx1 est vide
109
 
110
   -- Interfaces du SWITCH2
111
   SIGNAL layer1_rx2    : STD_LOGIC_VECTOR(7 DOWNTO 0);     -- Idem que pour le port 1
112
   SIGNAL layer1_val2   : STD_LOGIC;
113
   SIGNAL sw_ena2       : STD_LOGIC;
114
   SIGNAL layer1_tx2    : STD_LOGIC_VECTOR(7 DOWNTO 0);
115
   SIGNAL layer1_rd2    : STD_LOGIC;
116
   SIGNAL layer1_empty2 : STD_LOGIC;
117
 
118
   -- Interfaces du module layer2_rx1_pic
119
   SIGNAL layer2_rx1_pic    : STD_LOGIC_VECTOR(7 DOWNTO 0); -- Flux de données destuffé port 1
120
   SIGNAL layer2_rxval1_pic : STD_LOGIC;
121
   SIGNAL layer2_sof1_pic   : STD_LOGIC;
122
   SIGNAL layer2_eof1_pic   : STD_LOGIC;
123
   SIGNAL layer2_l2ok1_pic  : STD_LOGIC;
124
   SIGNAL dont_keep1        : STD_LOGIC;
125
 
126
   -- Interfaces du module layer2_rx2_pic
127
   SIGNAL layer2_rx2_pic    : STD_LOGIC_VECTOR(7 DOWNTO 0); -- Flux de données destuffé port 2
128
   SIGNAL layer2_rxval2_pic : STD_LOGIC;
129
   SIGNAL layer2_sof2_pic   : STD_LOGIC;
130
   SIGNAL layer2_eof2_pic   : STD_LOGIC;
131
   SIGNAL layer2_l2ok2_pic  : STD_LOGIC;
132
   SIGNAL dont_keep2        : STD_LOGIC;
133
 
134
   -- Interfaces du module FRAME_STORE1
135
   SIGNAL layer7_rx1       : STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Flux de données
136
   SIGNAL layer7_soc1      : STD_LOGIC;            -- Indique un début de trame
137
   SIGNAL layer7_rd1       : STD_LOGIC;            -- Signal de elcture d'un octet de plus
138
   SIGNAL layer7_comdispo1 : STD_LOGIC;            -- Indique qu'au moins une trame est dispo
139
   SIGNAL overflow_store1  : STD_LOGIC;            -- Indique qu'une trame n'a pas pu être stockée
140
   SIGNAL overflow_filter1 : STD_LOGIC;            -- Overflow de l'algo de filtrage doubletrame coté 1
141
 
142
   -- Interfaces du module FRAME_STORE1
143
   SIGNAL layer7_rx2       : STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Flux de données
144
   SIGNAL layer7_soc2      : STD_LOGIC;            -- Indique un début de trame
145
   SIGNAL layer7_rd2       : STD_LOGIC;            -- Signal de elcture d'un octet de plus
146
   SIGNAL layer7_comdispo2 : STD_LOGIC;            -- Indique qu'au moins une trame est dispo
147
   SIGNAL overflow_store2  : STD_LOGIC;            -- Indique qu'une trame n'a pas pu être stockée
148
   SIGNAL overflow_filter2 : STD_LOGIC;            -- Overflow de l'algo de filtrage doubletrame coté 1
149
 
150
 
151
   -- Interfaces du module LAYER2_TX
152
   SIGNAL layer2_txdat     : STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Flux ded onnée applicatif à transmettre
153
   SIGNAL layer2_txval     : STD_LOGIC;
154
   SIGNAL layer2_progfull1 : STD_LOGIC;                     -- FIFO Tx1 presque pleine
155
   SIGNAL layer2_progfull2 : STD_LOGIC;                     -- FIFO Tx2 presque pleine
156
   SIGNAL layer2_full1     : STD_LOGIC;                     -- FIFO Tx1 pleine
157
   SIGNAL layer2_full2     : STD_LOGIC;                     -- FIFO Tx2 pleine
158
 
159
        COMPONENT autobaud
160
        PORT(
161
                clk_sys     : IN STD_LOGIC;
162
                rst_n       : IN STD_LOGIC;
163
                rx1         : IN STD_LOGIC;
164
                val_rx1     : IN STD_LOGIC;
165
                eof1        : IN STD_LOGIC;
166
                dat_rx1     : IN  STD_LOGIC_VECTOR(7 DOWNTO 0);
167
      l2_ok1      : IN STD_LOGIC;
168
                rx2         : IN STD_LOGIC;
169
                val_rx2     : IN STD_LOGIC;
170
                eof2        : IN STD_LOGIC;
171
                dat_rx2     : IN  STD_LOGIC_VECTOR(7 DOWNTO 0);
172
      l2_ok2      : IN STD_LOGIC;
173
                tc_divclk   : OUT STD_LOGIC_VECTOR(10 downto 0);
174
                baud_locked : OUT STD_LOGIC
175
                );
176
        END COMPONENT;
177
 
178
        COMPONENT switch
179
   GENERIC (
180
      nbbit_div : INTEGER := 10);
181
        PORT(
182
                clk_sys     : IN STD_LOGIC;
183
                rst_n       : IN STD_LOGIC;
184
      baud_lock   : IN  STD_LOGIC;
185
                tc_divclk   : IN STD_LOGIC_VECTOR(nbbit_div-1 downto 0);
186
                rx          : IN STD_LOGIC;
187
                rx_dat      : OUT STD_LOGIC_VECTOR(7 downto 0);
188
                rx_val      : OUT STD_LOGIC;
189
                tx          : OUT STD_LOGIC;
190
                tx_dat      : IN STD_LOGIC_VECTOR(7 downto 0);
191
                tx_rd       : OUT STD_LOGIC;
192
                tx_empty    : IN STD_LOGIC;
193
                sw_ena      : IN STD_LOGIC;
194
                copy_ena    : IN STD_LOGIC
195
                );
196
        END COMPONENT;
197
 
198
        COMPONENT con_layer2_rx
199
   GENERIC (
200
      nbbit_div : INTEGER := 10);
201
        PORT(
202
                clk_sys     : IN STD_LOGIC;
203
                rst_n       : IN STD_LOGIC;
204
      ad_con      : IN  STD_LOGIC_VECTOR(7 DOWNTO 0);
205
                sw_ena      : OUT STD_LOGIC;
206
                dat_in      : IN STD_LOGIC_VECTOR(7 downto 0);
207
                val_in      : IN STD_LOGIC;
208
                tc_divclk   : IN STD_LOGIC_VECTOR(nbbit_div-1 downto 0);
209
      sof_pic     : OUT  STD_LOGIC;
210
      eof_pic     : OUT  STD_LOGIC;
211
      l2_ok_pic   : OUT  STD_LOGIC;
212
      dat_out_pic : OUT  STD_LOGIC_VECTOR(7 downto 0);
213
      val_out_pic : OUT  STD_LOGIC;
214
      sof_pas     : OUT  STD_LOGIC;
215
      eof_pas     : OUT  STD_LOGIC;
216
      l2_ok_pas   : OUT  STD_LOGIC;
217
      dat_out_pas : OUT  STD_LOGIC_VECTOR(7 downto 0);
218
      val_out_pas : OUT  STD_LOGIC
219
                );
220
        END COMPONENT;
221
 
222
        COMPONENT frame_store
223
        PORT(
224
                clk_sys     : IN STD_LOGIC;
225
                rst_n       : IN STD_LOGIC;
226
                dat_in      : IN STD_LOGIC_VECTOR(7 downto 0);
227
                val_in      : IN STD_LOGIC;
228
                sof         : IN STD_LOGIC;
229
                eof         : IN STD_LOGIC;
230
                l2_ok       : IN STD_LOGIC;
231
                dat_out     : OUT STD_LOGIC_VECTOR(7 downto 0);
232
      soc_out     : OUT STD_LOGIC;
233
                rd_datout   : IN STD_LOGIC;
234
                new_frame   : OUT STD_LOGIC;
235
                com_dispo   : OUT STD_LOGIC;
236
                l7_ok       : OUT STD_LOGIC;
237
      overflow    : OUT STD_LOGIC
238
                );
239
        END COMPONENT;
240
 
241
   COMPONENT filter_dbl_frame IS
242
   PORT (
243
      clk_sys        : IN STD_LOGIC;
244
      rst_n          : IN STD_LOGIC;
245
      top_cycle      : IN  STD_LOGIC;
246
      ena_filt_dble  : IN  STD_LOGIC;
247
      data_port1           : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
248
      soc_port1            : IN STD_LOGIC;
249
      com_dispo1           : IN STD_LOGIC;
250
      rd_port1             : OUT STD_LOGIC;
251
      data_port2           : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
252
      soc_port2            : IN STD_LOGIC;
253
      com_dispo2           : IN STD_LOGIC;
254
      rd_port2             : OUT STD_LOGIC;
255
      data_filt1           : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
256
      soc_filt1            : OUT STD_LOGIC;
257
      frm_dispo_filt1      : OUT STD_LOGIC;
258
      rd_filt1             : IN  STD_LOGIC;
259
      data_filt2           : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
260
      soc_filt2            : OUT STD_LOGIC;
261
      frm_dispo_filt2      : OUT STD_LOGIC;
262
      rd_filt2             : IN  STD_LOGIC;
263
      dpram_overflow1      : OUT STD_LOGIC;
264
      dpram_overflow2      : OUT STD_LOGIC
265
      );
266
   END COMPONENT;
267
 
268
   COMPONENT con_layer2_tx
269
   PORT(
270
      clk_sys     : IN STD_LOGIC;
271
      rst_n       : IN STD_LOGIC;
272
      stuf_phys   : IN  STD_LOGIC;
273
      acq_stuf    : OUT STD_LOGIC;
274
      dat_in      : IN STD_LOGIC_VECTOR(7 downto 0);
275
      val_in      : IN STD_LOGIC;
276
      sof         : IN STD_LOGIC;
277
      eof         : IN STD_LOGIC;
278
      datin_free  : OUT STD_LOGIC;
279
      dat_out     : OUT STD_LOGIC_VECTOR(7 downto 0);
280
      val_out     : OUT STD_LOGIC;
281
      clr_fifo    : IN   STD_LOGIC;
282
      progfull1   : IN   STD_LOGIC;
283
      progfull2   : IN   STD_LOGIC;
284
      full1       : IN   STD_LOGIC;
285
      empty1      : IN   STD_LOGIC;
286
      full2       : IN   STD_LOGIC;
287
      empty2      : IN   STD_LOGIC
288
      );
289
   END COMPONENT;
290
 
291
   COMPONENT fifo_tx
292
   PORT (
293
      clk      : IN STD_LOGIC;
294
      srst     : IN STD_LOGIC;
295
      din      : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
296
      wr_en    : IN STD_LOGIC;
297
      rd_en    : IN STD_LOGIC;
298
      dout     : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
299
      full     : OUT STD_LOGIC;
300
      empty    : OUT STD_LOGIC;
301
      prog_full: OUT STD_LOGIC
302
      );
303
   END COMPONENT;
304
 
305
BEGIN
306
   --------------------------------------------
307
   -- Gestion de la métastbilité de rx1 et rx2
308
   --------------------------------------------
309
   meta : PROCESS(clk_sys, rst_n)
310
   BEGIN
311
      IF (rst_n = '0') THEN
312
         rx1_r1 <= '1';
313
         rx1_r2 <= '1';
314
         rx2_r1 <= '1';
315
         rx2_r2 <= '1';
316
      ELSIF (clk_sys'EVENT and clk_sys = '1') THEN
317
         rx1_r1 <= rx1;
318
         rx1_r2 <= rx1_r1;
319
         rx2_r1 <= rx2;
320
         rx2_r2 <= rx2_r1;
321
      END IF;
322
   END PROCESS;
323
 
324
   --------------------------------------------
325
   -- Sélection du baud rate fixé par registre ou autobaudrate
326
   --------------------------------------------
327
   mux_baud : PROCESS(clk_sys)
328
   BEGIN
329
      IF (clk_sys'EVENT and clk_sys = '1') THEN
330
         IF (actif = '1') THEN
331
         -- Si le concentrateur est maitre
332
            CASE baudrate IS
333
            -- LE baudrateest défini par registre
334
               WHEN "000" =>
335
                  tc_divclk <= CONV_STD_LOGIC_VECTOR(freq_clk*1000/50-1, tc_divclk'length);
336
               WHEN "001" =>
337
                  tc_divclk <= CONV_STD_LOGIC_VECTOR(freq_clk*1000/100-1, tc_divclk'length);
338
               WHEN "010" =>
339
                  tc_divclk <= CONV_STD_LOGIC_VECTOR(freq_clk*1000/200-1, tc_divclk'length);
340
               WHEN "011" =>
341
                  tc_divclk <= CONV_STD_LOGIC_VECTOR(freq_clk*1000/500-1, tc_divclk'length);
342
               WHEN "100" =>
343
                  tc_divclk <= CONV_STD_LOGIC_VECTOR(freq_clk*1000/1000-1, tc_divclk'length);
344
               WHEN "101" =>
345
                  tc_divclk <= CONV_STD_LOGIC_VECTOR(freq_clk*1000/2000-1, tc_divclk'length);
346
               WHEN "110" =>
347
                  tc_divclk <= CONV_STD_LOGIC_VECTOR(freq_clk*1000/6000-1, tc_divclk'length);
348
               WHEN "111" =>
349
                  tc_divclk <= CONV_STD_LOGIC_VECTOR(freq_clk*1000/12000-1, tc_divclk'length);
350
               WHEN OTHERS =>
351
                  NULL;
352
            END CASE;
353
         ELSE
354
         -- Si le cocentrateur n'est pas maitre
355
            tc_divclk <= divclk_autobaud;       -- C'est l'autobaud qui définit le baudrate
356
         END IF;
357
      END IF;
358
   END PROCESS;
359
 
360
        inst_autobaud: autobaud
361
   PORT MAP(
362
                clk_sys =>  clk_sys,
363
                rst_n =>    rst_n,
364
                rx1 =>      rx1_r2,
365
                rx2 =>      rx2_r2,
366
                val_rx1 =>  layer1_val1,
367
                dat_rx1 =>  layer1_rx1,
368
      eof1 =>     layer2_eof1_pic,
369
                l2_ok1 =>   layer2_l2ok1_pic,
370
                val_rx2 =>  layer1_val2,
371
      dat_rx2 =>  layer1_rx2,
372
                eof2 =>     layer2_eof2_pic,
373
                l2_ok2 =>   layer2_l2ok2_pic,
374
                tc_divclk => divclk_autobaud,
375
                baud_locked => baud_locked
376
        );
377
 
378
        inst_switch1: switch
379
   GENERIC MAP (
380
      nbbit_div => nbbit_div)
381
   PORT MAP(
382
                clk_sys =>     clk_sys,
383
                rst_n =>       rst_n,
384
      baud_lock =>   baud_locked,
385
                tc_divclk =>   tc_divclk,
386
                rx =>          rx1_r2,
387
                rx_dat =>      layer1_rx1,
388
                rx_val =>      layer1_val1,
389
                tx =>          tx2,
390
                tx_dat =>      layer1_tx2,
391
                tx_rd =>       layer1_rd2,
392
                tx_empty =>    layer1_empty2,
393
                sw_ena =>      sw_ena1,
394
                copy_ena =>    copy_ena1
395
        );
396
 
397
        inst_switch2: switch
398
   GENERIC MAP (
399
      nbbit_div => nbbit_div)
400
   PORT MAP(
401
                clk_sys =>     clk_sys,
402
                rst_n =>       rst_n,
403
      baud_lock =>   baud_locked,
404
                tc_divclk =>   tc_divclk,
405
                rx =>          rx2_r2,
406
                rx_dat =>      layer1_rx2,
407
                rx_val =>      layer1_val2,
408
                tx =>          tx1,
409
                tx_dat =>      layer1_tx1,
410
                tx_rd =>       layer1_rd1,
411
                tx_empty =>    layer1_empty1,
412
                sw_ena =>      sw_ena2,
413
                copy_ena =>    copy_ena2
414
        );
415
 
416
        inst_layer2_rx1: con_layer2_rx
417
   GENERIC MAP (
418
      nbbit_div => nbbit_div)
419
   PORT MAP(
420
                clk_sys =>     clk_sys,
421
                rst_n =>       rst_n,
422
      ad_con =>      ad_con,
423
                sw_ena =>      sw_ena1,
424
                dat_in =>      layer1_rx1,
425
                val_in =>      layer1_val1,
426
                tc_divclk =>   tc_divclk,
427
                sof_pic =>     layer2_sof1_pic,
428
                eof_pic =>     layer2_eof1_pic,
429
                l2_ok_pic =>   layer2_l2ok1_pic,
430
                dat_out_pic => layer2_rx1_pic,
431
                val_out_pic => layer2_rxval1_pic,
432
      sof_pas =>     sof_storerx1,
433
      eof_pas =>     eof_storerx1,
434
      l2_ok_pas =>   crcok_storerx1,
435
      dat_out_pas => data_storerx1,
436
      val_out_pas => val_storerx1
437
        );
438
 
439
        inst_layer2_rx2: con_layer2_rx
440
   GENERIC MAP (
441
      nbbit_div => nbbit_div)
442
   PORT MAP(
443
                clk_sys =>     clk_sys,
444
                rst_n =>       rst_n,
445
      ad_con =>      ad_con,
446
                sw_ena =>      sw_ena2,
447
                dat_in =>      layer1_rx2,
448
                val_in =>      layer1_val2,
449
                tc_divclk =>   tc_divclk,
450
                sof_pic =>     layer2_sof2_pic,
451
                eof_pic =>     layer2_eof2_pic,
452
                l2_ok_pic =>   layer2_l2ok2_pic,
453
                dat_out_pic => layer2_rx2_pic,
454
                val_out_pic => layer2_rxval2_pic,
455
      sof_pas =>     sof_storerx2,
456
      eof_pas =>     eof_storerx2,
457
      l2_ok_pas =>   crcok_storerx2,
458
      dat_out_pas => data_storerx2,
459
      val_out_pas => val_storerx2
460
        );
461
 
462
        inst_frame_store1: frame_store
463
   PORT MAP(
464
                clk_sys =>     clk_sys,
465
                rst_n =>       rst_n,
466
                dat_in =>      layer2_rx1_pic,
467
                val_in =>      layer2_rxval1_pic,
468
                sof =>         layer2_sof1_pic,
469
                eof =>         layer2_eof1_pic,
470
                l2_ok =>       layer2_l2ok1_pic,
471
                dat_out =>     layer7_rx1,
472
      soc_out =>     layer7_soc1,
473
                rd_datout =>   layer7_rd1,
474
                new_frame =>   layer7_newframe1,
475
                com_dispo =>   layer7_comdispo1,
476
                l7_ok =>       layer7_l2ok1,
477
      overflow =>    overflow_store1
478
        );
479
   layer7_overflow1 <= overflow_store1 OR overflow_filter1;
480
 
481
        inst_frame_store2: frame_store
482
   PORT MAP(
483
                clk_sys =>     clk_sys,
484
                rst_n =>       rst_n,
485
                dat_in =>      layer2_rx2_pic,
486
                val_in =>      layer2_rxval2_pic,
487
                sof =>         layer2_sof2_pic,
488
                eof =>         layer2_eof2_pic,
489
                l2_ok =>       layer2_l2ok2_pic,
490
                dat_out =>     layer7_rx2,
491
      soc_out =>     layer7_soc2,
492
                rd_datout =>   layer7_rd2,
493
                new_frame =>   layer7_newframe2,
494
                com_dispo =>   layer7_comdispo2,
495
                l7_ok =>       layer7_l2ok2,
496
      overflow =>    overflow_store2
497
        );
498
   layer7_overflow2 <= overflow_store2 OR overflow_filter2;
499
 
500
   inst_dble_filt : filter_dbl_frame
501
   PORT MAP(
502
      clk_sys        => clk_sys,
503
      rst_n          => rst_n,
504
      top_cycle      => top_cycle,
505
      ena_filt_dble  => ena_filt_dble,
506
      data_port1     => layer7_rx1,
507
      soc_port1      => layer7_soc1,
508
      com_dispo1     => layer7_comdispo1,
509
      rd_port1       => layer7_rd1,
510
      data_port2     => layer7_rx2,
511
      soc_port2      => layer7_soc2,
512
      com_dispo2     => layer7_comdispo2,
513
      rd_port2       => layer7_rd2,
514
      data_filt1     => filt_rx1,
515
      soc_filt1      => filt_soc1,
516
      frm_dispo_filt1=> filt_comdispo1,
517
      rd_filt1       => filt_rd1,
518
      data_filt2     => filt_rx2,
519
      soc_filt2      => filt_soc2,
520
      frm_dispo_filt2=> filt_comdispo2,
521
      rd_filt2       => filt_rd2,
522
      dpram_overflow1=> overflow_filter1,
523
      dpram_overflow2=> overflow_filter2
524
      );
525
 
526
   inst_layer2_tx: con_layer2_tx
527
   PORT MAP(
528
      clk_sys => clk_sys,
529
      rst_n => rst_n,
530
      stuf_phys => stuf_phys,
531
      acq_stuf => acq_stuf,
532
      dat_in => tx_dat,
533
      val_in => val_txdat,
534
      sof => tx_sof,
535
      eof => tx_eof,
536
      datin_free => txdat_free,
537
      dat_out => layer2_txdat,
538
      val_out => layer2_txval,
539
      clr_fifo => clr_fifo_tx,
540
      progfull1 => layer2_progfull1,
541
      progfull2 => layer2_progfull2,
542
      full1     => layer2_full1,
543
      empty1    => layer1_empty1,
544
      full2     => layer2_full2,
545
      empty2    => layer1_empty2
546
        );
547
 
548
   -- La FIFO contient 512 mots, le prog_full est configuré à 500 mots pour laisser une marge de 
549
   -- stockage avant overflow (voir le module layer2_tx)
550
   inst_fifo_tx1 : fifo_tx
551
   PORT MAP (
552
      clk =>   clk_sys,
553
      srst =>  clr_fifo_tx,
554
      din =>   layer2_txdat,
555
      wr_en => layer2_txval,
556
      rd_en => layer1_rd1,
557
      dout =>  layer1_tx1,
558
      full =>  layer2_full1,
559
      empty => layer1_empty1,
560
      prog_full => layer2_progfull1
561
   );
562
 
563
   inst_fifo_tx2 : fifo_tx
564
   PORT MAP (
565
      clk =>   clk_sys,
566
      srst =>  clr_fifo_tx,
567
      din =>   layer2_txdat,
568
      wr_en => layer2_txval,
569
      rd_en => layer1_rd2,
570
      dout =>  layer1_tx2,
571
      full =>  layer2_full2,
572
      empty => layer1_empty2,
573
      prog_full => layer2_progfull2
574
   );
575
 
576
END rtl;
577
 

powered by: WebSVN 2.1.0

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