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

Subversion Repositories saturn

[/] [saturn/] [trunk/] [FPGA MIOSIL2/] [fpga_miosil2/] [top_miosil2.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 DavidRAMBA
--============================================================================= 
2
--  TITRE : TOP_MIOSIL2
3
--  DESCRIPTION : 
4
--        Module TOP du FPGA MIO SIL2
5
--
6
--  FICHIER :        top_miosil2.vhd 
7
--=============================================================================
8
--  CREATION 
9
--  DATE              AUTEUR    PROJET  REVISION 
10
--  10/04/2014  DRA        SATURN       V1.0 
11
--=============================================================================
12
--  HISTORIQUE  DES  MODIFICATIONS :
13
--  DATE              AUTEUR    PROJET  REVISION
14
--  18/09/14   DRA      SATURN   1.1
15
--    Evolution du module con_communication 
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
LIBRARY UNISIM;
23
USE UNISIM.VComponents.ALL;
24
 
25
ENTITY top_miosil2 IS
26
   GENERIC (
27
      reg_version : STD_LOGIC_VECTOR(7 DOWNTO 0) := x"11"    -- Version du firmware
28
      );
29
   PORT (
30
      -- Ports système
31
      clk_24      : IN  STD_LOGIC;     -- Clock principale à 24MHz
32
      rst_n       : IN  STD_LOGIC;     -- Reset principal de la carte
33
      rst_fpgan   : IN  STD_LOGIC;     -- Reset issu du PIC32
34
      led_confok  : OUT STD_LOGIC;     -- Pilotage de la led rouge
35
      led_run     : OUT STD_LOGIC;     -- Pilotage de la 1ère LED verte
36
      led_fail    : OUT STD_LOGIC;     -- Pilotage de la 2ème LED verte
37
      power_rstn  : IN  STD_LOGIC;     -- Indique que l'alim 3.3V du PIC est coupée
38
 
39
      -- Interfaces ports séries
40
      ls485_de1   : OUT STD_LOGIC;     -- Signal d'autorisation à émettre de la LS1
41
      ls485_ren1  : OUT STD_LOGIC;     -- Signal d'autorisation à émettre de la LS1
42
      ls485_rx1   : IN  STD_LOGIC;     -- Signal de réception de la LS1
43
      ls485_tx1   : OUT STD_LOGIC;     -- Signal d'émission de la LS1
44
 
45
      ls485_de2   : OUT STD_LOGIC;     -- Signal d'autorisation à émettre de la LS2
46
      ls485_ren2  : OUT STD_LOGIC;     -- Signal d'autorisation à émettre de la LS2
47
      ls485_rx2   : IN  STD_LOGIC;     -- Signal de réception de la LS2
48
      ls485_tx2   : OUT STD_LOGIC;     -- Signal d'émission de la LS2
49
 
50
      -- Interface SPI (Interface PIC)
51
      pic_sclk    : IN  STD_LOGIC;
52
      pic_sdi     : OUT STD_LOGIC;
53
      pic_sdo     : IN  STD_LOGIC;
54
      pic_ssn     : IN  STD_LOGIC;
55
 
56
      -- Interface de pilotage des Alim isolées
57
      cdehigh_5vid   : OUT STD_LOGIC;
58
      cdelow_5vid    : OUT STD_LOGIC;
59
      cdehigh_5vls1  : OUT STD_LOGIC;
60
      cdelow_5vls1   : OUT STD_LOGIC;
61
      cdehigh_5vls2  : OUT STD_LOGIC;
62
      cdelow_5vls2   : OUT STD_LOGIC;
63
 
64
      -- Interface SPI (programmation de la flash de configuration)
65
      wp_flashn      : OUT STD_LOGIC;     -- Autorisation d'écriture dans la flash SPI
66
      cclk           : OUT STD_LOGIC;     -- Horloge d'accès à la flash SPI
67
      din_miso       : IN  STD_LOGIC;     -- Data série en lecture SPI
68
      mosi           : OUT STD_LOGIC;     -- Data série en écriture SPI
69
      cso_b          : OUT STD_LOGIC;     -- Chip select SPI
70
 
71
      -- Spare et RFU
72
      cde_diag1      : IN STD_LOGIC;
73
      cde_diag2      : IN STD_LOGIC;
74
      pic_tx         : IN STD_LOGIC;
75
      pic_rx         : OUT STD_LOGIC;
76
      pic_spare      : IN  STD_LOGIC_VECTOR(3 DOWNTO 0);
77
      prog_b         : IN  STD_LOGIC;
78
      pic_refclki    : IN  STD_LOGIC;
79
      tp7            : OUT STD_LOGIC;
80
      tp8            : OUT STD_LOGIC;
81
      tp9            : OUT STD_LOGIC;
82
      spare          : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
83
   );
84
END top_miosil2;
85
 
86
ARCHITECTURE rtl of top_miosil2 is
87
   -- signaux utilisés pour les fonctions systèmes
88
   SIGNAL clk_sys        : STD_LOGIC:= '0';      -- Horloge système = 2 x clk_24
89
   SIGNAL clk_48         : STD_LOGIC:= '0';      -- Pour récupérer l'horloge CLKx2 à la sortie du DCM
90
   SIGNAL clk_96         : STD_LOGIC:= '0';      -- Pour récupérer l'horloge CLKFX à la sortie du DCM
91
   SIGNAL clk_dna        : STD_LOGIC:= '0';      -- Horloge à 1 MHz pour lire le DNA
92
   SIGNAL rst_dcm        : STD_LOGIC:= '0';      -- Signal de reset du DCM
93
   SIGNAL rstdna_n       : STD_LOGIC:= '0';      -- reset resynchronisé sur clk_dna
94
   SIGNAL rst96_n        : STD_LOGIC:= '0';      -- reset resynchronisé sur clk96
95
   SIGNAL dcm_locked     : STD_LOGIC:= '0';      -- Signal de lock du DCM
96
   SIGNAL cpt_blink      : STD_LOGIC_VECTOR(23 DOWNTO 0); -- Compteur pour le blink de la led run
97
   SIGNAL iid            : STD_LOGIC_VECTOR(63 DOWNTO 0); -- Valeur DNA du FPGA
98
   SIGNAL iid_rdy        : STD_LOGIC;            -- Indique que le IID a été récupéré
99
 
100
   -- Signaux d'interface entre le module de communication et le module SPI PIC
101
   SIGNAL tid         : STD_LOGIC_VECTOR(7 DOWNTO 0); -- TID que la COM doit utiliser pour ce MIO
102
   SIGNAL cpy1        : STD_LOGIC;              -- Autorise la copie du port 1 sur le port 2
103
   SIGNAL cpy2        : STD_LOGIC;              -- Autorise la copie du port 2 sur le port 1
104
   SIGNAL repli       : STD_LOGIC;              -- Indique que le MIO est en mode repli
105
   -- Interface de gestion des données applicatives reçues sur le port 1
106
   SIGNAL l7_rx1      : STD_LOGIC_VECTOR(7 DOWNTO 0); -- Dbus de onnées extraites de la trame
107
   SIGNAL l7_soc1     : STD_LOGIC;              -- Indique un début de trame
108
   SIGNAL l7_rd1      : STD_LOGIC;              -- Demande une donnée applicative de plus
109
   SIGNAL l7_comdispo1: STD_LOGIC;              -- Indique que des données applicatives sont en attentes
110
   SIGNAL l7_newframe1: STD_LOGIC;              -- Indique la réception d'une nouvelle trame
111
   SIGNAL l7_l2ok1    : STD_LOGIC;              -- Indique que la trame reçu est correcte (format + CRC)
112
   SIGNAL l7_overflow1: STD_LOGIC;              -- Indique que la mémoire de stockage a débordé
113
   SIGNAL activity1   : STD_LOGIC;              -- Indique du trafic sur le port 1
114
   -- Interface de gestion des données applicatives reçues sur le port 2
115
   SIGNAL l7_rx2      : STD_LOGIC_VECTOR(7 DOWNTO 0); -- Idem
116
   SIGNAL l7_soc2     : STD_LOGIC;
117
   SIGNAL l7_rd2      : STD_LOGIC;
118
   SIGNAL l7_comdispo2: STD_LOGIC;
119
   SIGNAL l7_newframe2: STD_LOGIC;
120
   SIGNAL l7_l2ok2    : STD_LOGIC;
121
   SIGNAL l7_overflow2: STD_LOGIC;
122
   SIGNAL activity2   : STD_LOGIC;
123
   -- Interface de gestion des données applicatives à transmettre
124
   SIGNAL tx_dat      : STD_LOGIC_VECTOR(7 DOWNTO 0); -- Bis de données applicatives
125
   SIGNAL val_txdat   : STD_LOGIC;              -- Indique une donnée valide sur tx_dat
126
   SIGNAL tx_sof      : STD_LOGIC;              -- Indique un début de trame à transmettre
127
   SIGNAL tx_eof      : STD_LOGIC;              -- Indique une fin de trame à transmettre
128
   SIGNAL txdat_free  : STD_LOGIC;              -- Indique que le module transport en tx est dispo
129
   SIGNAL clr_fifo_tx : STD_LOGIC;              -- Permet d'effacer la FIFO d'emission
130
   -- Signaux de gestion de l'interface SPI
131
   SIGNAL sclk        : STD_LOGIC;
132
   SIGNAL sdi         : STD_LOGIC;
133
   SIGNAL sdo         : STD_LOGIC;
134
   SIGNAL ssn         : STD_LOGIC;
135
 
136
   -- Signaux de gestion du module d'accès à la PROM de cofniguration FPGA
137
   SIGNAL txprom_dat  : STD_LOGIC_VECTOR(7 downto 0); -- Donnée/commande à écrire
138
   SIGNAL txprom_val  : STD_LOGIC;                    -- Indique une donnée disponible sur txprom_dat
139
   SIGNAL rxprom_dat  : STD_LOGIC_VECTOR(7 downto 0); -- Donnée lue dans la PROM
140
   SIGNAL rxprom_val  : STD_LOGIC;                    -- Indique une donnée disponible sur rxprom_dat
141
   SIGNAL rxprom_next : STD_LOGIC;                    -- Demande une dnouvelle donnée sur rxprom_dat
142
   SIGNAL prom_type_com: STD_LOGIC;                   -- Définit le type de commande à exécuter (R ou W)
143
   SIGNAL prom_exec_com: STD_LOGIC;                   -- Lance l'exécution d'une commande d'accès à la PROM
144
   SIGNAL prom_busy   : STD_LOGIC;                    -- Indique que le module est occupé
145
   SIGNAL prom_nbread : STD_LOGIC_VECTOR(7 DOWNTO 0); -- Nombre d 'octets à lire avec une commande de lecture
146
   SIGNAL prom_rstn   : STD_LOGIC;                    -- reset du module d'accès à la PROM
147
 
148
   -- Pilotage des Alims (PWM)
149
   SIGNAL cpt_cde       : STD_LOGIC_VECTOR(5 DOWNTO 0);  -- Compteur pour générer les pulses de commande des alims isolées
150
   SIGNAL toggle_cde    : STD_LOGIC;                  -- Pour savoir quelle voie de la commadne alim est active
151
   SIGNAL cde_high      : STD_LOGIC;                  -- Signal de pilotage MOSFET
152
   SIGNAL cde_low       : STD_LOGIC;                  -- Signal de piltoage MOSFET
153
 
154
   COMPONENT communication_sil
155
   PORT (
156
      clk_sys        : IN  STD_LOGIC;
157
      rst_n          : IN  STD_LOGIC;
158
      ad_mio         : IN  STD_LOGIC_VECTOR(7 DOWNTO 0);
159
      rx1            : IN  STD_LOGIC;
160
      tx1            : OUT STD_LOGIC;
161
      rx2            : IN  STD_LOGIC;
162
      tx2            : OUT STD_LOGIC;
163
      copy_ena1      : IN  STD_LOGIC;
164
      copy_ena2      : IN  STD_LOGIC;
165
      layer7_rx1       : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
166
      layer7_soc1      : OUT STD_LOGIC;
167
      layer7_rd1       : IN  STD_LOGIC;
168
      layer7_newframe1 : OUT STD_LOGIC;
169
      layer7_comdispo1 : OUT STD_LOGIC;
170
      layer7_l2ok1     : OUT STD_LOGIC;
171
      layer7_overflow1 : OUT STD_LOGIC;
172
      activity1        : OUT STD_LOGIC;
173
      layer7_rx2       : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
174
      layer7_soc2      : OUT STD_LOGIC;
175
      layer7_rd2       : IN  STD_LOGIC;
176
      layer7_newframe2 : OUT STD_LOGIC;
177
      layer7_comdispo2 : OUT STD_LOGIC;
178
      layer7_l2ok2     : OUT STD_LOGIC;
179
      layer7_overflow2 : OUT STD_LOGIC;
180
      activity2        : OUT STD_LOGIC;
181
      tx_dat           : IN  STD_LOGIC_VECTOR(7 DOWNTO 0);
182
      val_txdat        : IN  STD_LOGIC;
183
      tx_sof           : IN  STD_LOGIC;
184
      tx_eof           : IN  STD_LOGIC;
185
      txdat_free       : OUT STD_LOGIC;
186
      clr_fifo_tx      : IN  STD_LOGIC
187
      );
188
   END COMPONENT;
189
 
190
   COMPONENT readmac
191
   GENERIC (
192
      sim_dna_value : STD_LOGIC_VECTOR(59 DOWNTO 0) :=  X"023456789ABCDEF");
193
   PORT (
194
      clk_sys  : IN  STD_LOGIC;
195
      rst_n    : IN  STD_LOGIC;
196
      mac      : OUT  STD_LOGIC_VECTOR(63 downto 0);
197
      mac_rdy  : OUT  STD_LOGIC
198
      );
199
   END COMPONENT;
200
 
201
   COMPONENT if_picspi
202
   GENERIC (
203
      version : STD_LOGIC_VECTOR(7 DOWNTO 0));
204
   PORT (
205
      clk_sys  : IN  STD_LOGIC;
206
      rst_n    : IN  STD_LOGIC;
207
      sclk     : IN  STD_LOGIC;
208
      sdi      : IN  STD_LOGIC;
209
      sdo      : OUT STD_LOGIC;
210
      ssn      : IN  STD_LOGIC;
211
      iid      : IN  STD_LOGIC_VECTOR(63 DOWNTO 0);
212
      tid      : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
213
      cpy1     : OUT STD_LOGIC;
214
      cpy2     : OUT STD_LOGIC;
215
      repli        : OUT STD_LOGIC;
216
      l7_rx1       : IN  STD_LOGIC_VECTOR(7 DOWNTO 0);
217
      l7_soc1      : IN  STD_LOGIC;
218
      l7_rd1       : OUT STD_LOGIC;
219
      l7_comdispo1 : IN  STD_LOGIC;
220
      l7_newframe1 : IN  STD_LOGIC;
221
      l7_l2ok1     : IN  STD_LOGIC;
222
      l7_overflow1 : IN  STD_LOGIC;
223
      activity1    : IN  STD_LOGIC;
224
      l7_rx2       : IN  STD_LOGIC_VECTOR(7 DOWNTO 0);
225
      l7_soc2      : IN  STD_LOGIC;
226
      l7_rd2       : OUT STD_LOGIC;
227
      l7_comdispo2 : IN  STD_LOGIC;
228
      l7_newframe2 : IN  STD_LOGIC;
229
      l7_l2ok2     : IN  STD_LOGIC;
230
      l7_overflow2 : IN  STD_LOGIC;
231
      activity2    : IN  STD_LOGIC;
232
      tx_dat       : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
233
      val_txdat    : OUT STD_LOGIC;
234
      tx_sof       : OUT STD_LOGIC;
235
      tx_eof       : OUT STD_LOGIC;
236
      txdat_free   : IN  STD_LOGIC;
237
      clr_fifo_tx  : OUT STD_LOGIC;
238
      txprom_dat   : OUT STD_LOGIC_VECTOR(7 downto 0);
239
      txprom_val   : OUT STD_LOGIC;
240
      rxprom_dat   : IN  STD_LOGIC_VECTOR(7 downto 0);
241
      rxprom_val   : IN  STD_LOGIC;
242
      rxprom_next  : OUT STD_LOGIC;
243
      prom_type_com: OUT STD_LOGIC;
244
      prom_exec_com: OUT STD_LOGIC;
245
      prom_busy    : IN  STD_LOGIC;
246
      prom_nbread  : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
247
      prom_rstn    : OUT STD_LOGIC
248
      );
249
   END COMPONENT;
250
 
251
   COMPONENT if_promspi
252
   GENERIC (
253
      div_rate    : INTEGER := 1;
254
      spiclk_freq : INTEGER := 10
255
      );
256
   PORT (
257
      clk_sys     : IN  STD_LOGIC;
258
      rst_n       : IN  STD_LOGIC;
259
      spi_csn     : OUT STD_LOGIC;
260
      spi_wpn     : OUT STD_LOGIC;
261
      spi_sdo     : OUT STD_LOGIC;
262
      spi_sdi     : IN  STD_LOGIC;
263
      spi_clk     : OUT STD_LOGIC;
264
      tx_dat      : IN  STD_LOGIC_VECTOR(7 downto 0);
265
      tx_val      : IN  STD_LOGIC;
266
      rx_dat      : OUT STD_LOGIC_VECTOR(7 downto 0);
267
      rx_val      : OUT STD_LOGIC;
268
      rx_next     : IN  STD_LOGIC;
269
      type_com    : IN  STD_LOGIC;
270
      exec_com    : IN  STD_LOGIC;
271
      spi_busy    : OUT STD_LOGIC;
272
      nb_read     : IN  STD_LOGIC_VECTOR(7 DOWNTO 0)
273
      );
274
   END COMPONENT;
275
 
276
BEGIN
277
   ---------------------------------------------------
278
   -- Gestion des interfaces système
279
   ---------------------------------------------------
280
   rst_dcm <= NOT(rst_fpgan);                -- Le reset généré par le PIC déclenche un reset général
281
 
282
   DCM_SP_inst : DCM_SP
283
   generic map (
284
      CLKDV_DIVIDE => 16.0,                  -- CLKDV divide value
285
                                             -- (1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8,9,10,11,12,13,14,15,16).
286
      CLKFX_DIVIDE => 1,                     -- Divide value on CLKFX outputs - D - (1-32)
287
      CLKFX_MULTIPLY => 4,                   -- Multiply value on CLKFX outputs - M - (2-32)
288
      CLKIN_DIVIDE_BY_2 => FALSE,            -- CLKIN divide by two (TRUE/FALSE)
289
      CLKIN_PERIOD => 41.7,                  -- Input clock period specified in nS
290
      CLKOUT_PHASE_SHIFT => "NONE",          -- Output phase shift (NONE, FIXED, VARIABLE)
291
      CLK_FEEDBACK => "2X",                  -- Feedback source (NONE, 1X, 2X)
292
      DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- SYSTEM_SYNCHRNOUS or SOURCE_SYNCHRONOUS
293
      DFS_FREQUENCY_MODE => "LOW",           -- Unsupported - Do not change value
294
      DLL_FREQUENCY_MODE => "LOW",           -- Unsupported - Do not change value
295
      DSS_MODE => "NONE",                    -- Unsupported - Do not change value
296
      DUTY_CYCLE_CORRECTION => TRUE,         -- Unsupported - Do not change value
297
      FACTORY_JF => X"c080",                 -- Unsupported - Do not change value
298
      PHASE_SHIFT => 0,                      -- Amount of fixed phase shift (-255 to 255)
299
      STARTUP_WAIT => FALSE                  -- Delay config DONE until DCM_SP LOCKED (TRUE/FALSE)
300
   )
301
   port map (
302
      CLK0 => OPEN,           -- 1-bit output: 0 degree clock output
303
      CLK180 => OPEN,         -- 1-bit output: 180 degree clock output
304
      CLK270 => OPEN,         -- 1-bit output: 270 degree clock output
305
      CLK2X => clk_48,        -- 1-bit output: 2X clock frequency clock output
306
      CLK2X180 => OPEN,       -- 1-bit output: 2X clock frequency, 180 degree clock output
307
      CLK90 => OPEN,          -- 1-bit output: 90 degree clock output
308
      CLKDV => clk_dna,       -- 1-bit output: Divided clock output
309
      CLKFX => clk_96,        -- 1-bit output: Digital Frequency Synthesizer output (DFS)
310
      CLKFX180 => OPEN,       -- 1-bit output: 180 degree CLKFX output
311
      LOCKED => dcm_locked,   -- 1-bit output: DCM_SP Lock Output
312
      PSDONE => OPEN,         -- 1-bit output: Phase shift done output
313
      STATUS => OPEN,         -- 8-bit output: DCM_SP status output
314
      CLKFB => clk_sys,       -- 1-bit input: Clock feedback input
315
      CLKIN => clk_24,        -- 1-bit input: Clock input
316
      DSSEN => '0',           -- 1-bit input: Unsupported, specify to GND.
317
      PSCLK => '0',           -- 1-bit input: Phase shift clock input
318
      PSEN => '0',            -- 1-bit input: Phase shift enable
319
      PSINCDEC => '0',        -- 1-bit input: Phase shift increment/decrement input
320
      RST => rst_dcm          -- 1-bit input: Active high reset input
321
   );
322
 
323
   BUFG_inst : BUFG
324
   port map (
325
      O => clk_sys,
326
      I => clk_48
327
   );
328
 
329
   --Resynhcronisation du signal DCM_LOCKED sur clk_dna
330
   PROCESS (clk_dna, rst_fpgan)
331
   BEGIN
332
      IF (rst_fpgan = '0') THEN
333
         rstdna_n <= '0';
334
      ELSIF (clk_dna'EVENT AND clk_dna = '1') THEN
335
         rstdna_n <= dcm_locked;
336
      END IF;
337
   END PROCESS;
338
 
339
   --Compteur en free running pour la LED OK à 2Hz
340
   PROCESS (clk_24)
341
   BEGIN
342
      IF (clk_24'EVENT AND clk_24 = '1') THEN
343
         cpt_blink <= cpt_blink + 1;
344
      END IF;
345
   END PROCESS;
346
 
347
   led_fail <= NOT(repli);                   -- quand repli = '1' on affiche du rouge fixe
348
   led_run  <= '1' WHEN (repli = '1') ELSE   -- Si repli = '0' on affiche du vert à 2Hz
349
               cpt_blink(cpt_blink'LEFT);    -- Période de la led run à 700ms
350
   led_confok <= '0';                        -- Dès que le FPGA est configuré on allume la LED verte 
351
 
352
   -----------------------------------------------
353
   -- Instantiation du module de récupération de l'@ IID
354
   -----------------------------------------------
355
   inst_readiid : readmac
356
   GENERIC MAP(
357
      sim_dna_value => X"123456789ABCDEF")
358
   PORT MAP (
359
      clk_sys  => clk_dna,    -- Utilise une horloge à 2MHz MAX
360
      rst_n    => rstdna_n,   -- Autorisé dès que la DCM est lockée
361
      mac      => iid,
362
      mac_rdy  => iid_rdy
363
      );
364
 
365
   --Resynhcronisation sur l'horloge à 96MHz
366
   PROCESS (clk_96, rst_fpgan)
367
   BEGIN
368
      IF (rst_fpgan = '0') THEN
369
         rst96_n <= '0';
370
      ELSIF (clk_96'EVENT AND clk_96 = '1') THEN
371
         rst96_n <= iid_rdy;
372
      END IF;
373
   END PROCESS;
374
 
375
   -----------------------------------------------
376
   -- Instantiation du module de communication
377
   -----------------------------------------------
378
   -- Les 2 drivers RS485 sont toujours autorisés à émettre
379
   ls485_de1 <= '1';
380
   ls485_de2 <= '1';
381
   -- Les 2 drivers RS485 sont toujours autorisés à recevoir
382
   ls485_ren1 <= '0';
383
   ls485_ren2 <= '0';
384
 
385
   inst_comm : communication_sil
386
   PORT MAP (
387
      clk_sys        => clk_96,
388
      rst_n          => rst96_n,
389
      ad_mio         => tid,
390
      rx1            => ls485_rx1,
391
      tx1            => ls485_tx1,
392
      rx2            => ls485_rx2,
393
      tx2            => ls485_tx2,
394
      copy_ena1      => cpy1,
395
      copy_ena2      => cpy2,
396
      layer7_rx1     => l7_rx1,
397
      layer7_soc1    => l7_soc1,
398
      layer7_rd1     => l7_rd1,
399
      layer7_newframe1 => l7_newframe1,
400
      layer7_comdispo1 => l7_comdispo1,
401
      layer7_l2ok1     => l7_l2ok1,
402
      layer7_overflow1 => l7_overflow1,
403
      activity1        => activity1,
404
      layer7_rx2       => l7_rx2,
405
      layer7_soc2      => l7_soc2,
406
      layer7_rd2       => l7_rd2,
407
      layer7_newframe2 => l7_newframe2,
408
      layer7_comdispo2 => l7_comdispo2,
409
      layer7_l2ok2     => l7_l2ok2,
410
      layer7_overflow2 => l7_overflow2,
411
      activity2        => activity2,
412
      tx_dat           => tx_dat,
413
      val_txdat        => val_txdat,
414
      tx_sof           => tx_sof,
415
      tx_eof           => tx_eof,
416
      txdat_free       => txdat_free,
417
      clr_fifo_tx      => clr_fifo_tx
418
   );
419
 
420
   -----------------------------------------------
421
   -- Instantiation du module d'interface PIC
422
   -----------------------------------------------
423
   inst_pic : if_picspi
424
   GENERIC MAP(
425
      version => reg_version)
426
   PORT MAP (
427
      clk_sys  => clk_96,
428
      rst_n    => rst96_n,
429
      sclk     => sclk,
430
      sdi      => sdi,
431
      sdo      => sdo,
432
      ssn      => ssn,
433
      iid      => iid,
434
      tid      => tid,
435
      cpy1     => cpy1,
436
      cpy2     => cpy2,
437
      repli    => repli,
438
      l7_rx1   => l7_rx1,
439
      l7_soc1  => l7_soc1,
440
      l7_rd1   => l7_rd1,
441
      l7_comdispo1 => l7_comdispo1,
442
      l7_newframe1 => l7_newframe1,
443
      l7_l2ok1     => l7_l2ok1,
444
      l7_overflow1 => l7_overflow1,
445
      activity1    => activity1,
446
      l7_rx2       => l7_rx2,
447
      l7_soc2      => l7_soc2,
448
      l7_rd2       => l7_rd2,
449
      l7_comdispo2 => l7_comdispo2,
450
      l7_newframe2 => l7_newframe2,
451
      l7_l2ok2     => l7_l2ok2,
452
      l7_overflow2 => l7_overflow2,
453
      activity2    => activity2,
454
      tx_dat       => tx_dat,
455
      val_txdat    => val_txdat,
456
      tx_sof       => tx_sof,
457
      tx_eof       => tx_eof,
458
      txdat_free   => txdat_free,
459
      clr_fifo_tx  => clr_fifo_tx,
460
      txprom_dat   => txprom_dat,
461
      txprom_val   => txprom_val,
462
      rxprom_dat   => rxprom_dat,
463
      rxprom_val   => rxprom_val,
464
      rxprom_next  => rxprom_next,
465
      prom_type_com=> prom_type_com,
466
      prom_exec_com=> prom_exec_com,
467
      prom_busy    => prom_busy,
468
      prom_nbread  => prom_nbread,
469
      prom_rstn    => prom_rstn
470
      );
471
 
472
   -----------------------------------------------
473
   -- Instantiation du module d'interface SPI de programmation de la PROM
474
   -----------------------------------------------
475
   int_promspi :  if_promspi
476
   GENERIC MAP(
477
      div_rate    => 3,          -- Diviseur de l'horlgoe système
478
      spiclk_freq => 12          -- Fréquence de 'lhorlgoe du SPI
479
      )
480
   PORT MAP(
481
      clk_sys     => clk_96,
482
      rst_n       => prom_rstn,
483
      spi_csn     => cso_b,
484
      spi_wpn     => wp_flashn,
485
      spi_sdo     => mosi,
486
      spi_sdi     => din_miso,
487
      spi_clk     => cclk,
488
      tx_dat      => txprom_dat,
489
      tx_val      => txprom_val,
490
      rx_dat      => rxprom_dat,
491
      rx_val      => rxprom_val,
492
      rx_next     => rxprom_next,
493
      type_com    => prom_type_com,
494
      exec_com    => prom_exec_com,
495
      spi_busy    => prom_busy,
496
      nb_read     => prom_nbread
497
      );
498
 
499
   ---------------------------------------
500
   -- Compteur en free running pour la génération à 300KHz de la commande des alims isolées des LS
501
   ---------------------------------------
502
   PROCESS (clk_24)  -- Process nopn soumis au reset pour disposer des alims tout le temps
503
   BEGIN
504
      IF (clk_24'EVENT AND clk_24 = '1') THEN
505
         IF (cpt_cde = CONV_STD_LOGIC_VECTOR(41, cpt_cde'LENGTH)) THEN
506
         -- A la demi période (i.e = 42 x 40ns), on passe en temsp de repos pour les 2 MOSFET (non recouvrement)
507
            cpt_cde <= (OTHERS => '0');
508
            cde_high <= '0';              -- Commande directe
509
            cde_low <= '0';               -- Commande à 180°
510
            toggle_cde <= NOT(toggle_cde);
511
         ELSE
512
            cpt_cde <= cpt_cde + 1;
513
            IF (cpt_cde = CONV_STD_LOGIC_VECTOR(0, cpt_cde'LENGTH)) THEN
514
               cde_high <= toggle_cde;       -- high et low ne doivent jamais être à '1' en même temps
515
               cde_low <= NOT(toggle_cde);
516
            END IF;
517
         END IF;
518
      END IF;
519
   END PROCESS;
520
   cdehigh_5vid   <= cde_high;
521
   cdelow_5vid    <= cde_low;
522
   cdehigh_5vls1  <= cde_high;
523
   cdelow_5vls1   <= cde_low;
524
   cdehigh_5vls2  <= cde_high;
525
   cdelow_5vls2   <= cde_low;
526
 
527
   ----------------------------------------
528
   -- Isolation des signaux vers le PIC quand le 3.3V du PIC est off
529
   ----------------------------------------
530
   sclk    <= pic_sclk;
531
   sdi     <= pic_sdo;
532
   pic_sdi <= sdo WHEN (power_rstn = '1') ELSE 'Z';
533
   ssn     <= pic_ssn;
534
 
535
   ----------------------------------------
536
   -- Gestion des SPARE et RFU
537
   ----------------------------------------
538
   pic_rx <= 'Z';
539
   tp7    <= '0';
540
   tp8    <= '0';
541
   tp9 <= rst_fpgan OR cde_diag1 OR cde_diag2 OR pic_tx OR pic_spare(0) OR pic_spare(1) OR pic_spare(2)
542
          OR pic_spare(3) OR prog_b OR pic_refclki;
543
   spare  <= (OTHERS => '0');
544
 
545
END rtl;
546
 

powered by: WebSVN 2.1.0

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