Présentation du logiciel de conception ALTERA :

Max Plus II

par J. WEISS

15 octobre 98

Pour décrire le déroulement de la conception, prenons un exemple simple :

Projet étudié

Cahier des charges

On doit réaliser un module réalisant la fonction suivante :

 

 

Le symbole du module est le suivant :

Analyse du sujet

Notre module comprend donc 5 sorties et une entrée d'horloge; le cycle de la machine d'états étant de 16, il faut disposer, en interne d'un compteur 4 bits (il sera appelé COMPTEUR4).

Le compteur interne et la sortie AEN possèdent une période de 3 cycles d'horloge, il faudra donc concevoir un générateur de phases de même longueur (il sera appelé GENE_3).

Les sorties UN, TROIS, CINQ et SEPT sont issues du décodage du compteur interne validé par AEN, on placera donc un décodeur, appelé DECODEUR.

Conception

Définition du projet

Max Plus II gère des projets, c'est à dire des entités hiérarchiques, pour lesquels il effectue les opérations de CAO; pour illustrer cela, prenons notre module (nommé LOUVIERS), on va d'abord définir une feuille le décrivant et, pour cela, on va faire appel à des feuilles (de niveau hiérarchique inférieur) décrivant les sous-ensembles (COMPTEUR4, GENE_3 et DECODEUR).

La hiérarchie de notre projet est accessible par le menu Hierarchy Display (), le résultat est le suivant :


Résultat du menu Hierarchy Display

On voit donc, sur la figure précédente, les éléments intervenant dans notre projet; les symboles apparaissant sous la tête de la hiérarchie (LOUVIERS, dans notre cas) tels de acf, rpt, ... indiquent les différentes phases de conception déjà réalisés pour le projet.

 

Déroulement de la conception

La figure suivante présente quelques étapes de conception, cela peut également être décrit de la manière suivante :

Saisie -> validation fonctionnelle -> validation temporelle -> programmation

 

Le menu principal de Max Plus II (présenté par la figure suivante) propose les outils disponibles pour la conception.

 

 

Saisie

Le logiciel permet plusieurs modes de saisie :

Schéma : mode de saisie graphique par association de symboles

fichiers associés : *.GDF

Textuel : AHDL et VHDL

fichiers associés : *.TDF et *.VHD

Courbes : description par les résultat à obtenir

fichiers associés : *.WDF

 

Pour notre exemple, nous allons choisir le schéma pour le projet et le compteur, la description textuelle (AHDL) pour le décodeur et la description par les courbes pour le générateur de phases.

La feuille de description du projet est alors la suivante :


Feuille de description du projet (LOUVIERS.GDF)

 

Les éléments de hiérarchie inférieure sont liées à la feuille du projet par leur symbole; pour y accéder, il suffit de "double-cliquer" sur le symbole désiré.

Les figures suivantes présentent le contenu de chaque sous-ensemble :


Feuille de description du compteur 4 bits (COMPTEUR4.GDF)


Feuille de description du générateur de phases (GENE_3.WDF)

 

 

%***************************************

*                                      *
Décodeur d'adresse  
*                                      *
***************************************%
TITLE "Décodeur d'adresse";

CONSTANT page1_addr	   = H"1";
CONSTANT page3_addr	   = H"3";
CONSTANT page5_addr	   = H"5";
CONSTANT page7_addr	   = H"7";

SUBDESIGN decode
(
   addr[3..0],
   AEN  : INPUT;
 
   UN,
   TROIS,
   CINQ,
   SEPT : OUTPUT;  
)
BEGIN
  IF (!AEN) then
   UN           = (page1_addr   == addr[]) ;
   TROIS    = (page3_addr   == addr[]) ;
   CINQ      = (page5_addr   == addr[]) ;
   SEPT      = (page7_addr   == addr[]) ;
  END IF;
  
END;

Feuille de description du décodeur (DECODEUR.TDF)

 

Une fois la saisie achevée, il va falloir compiler la conception.

Compilation fonctionnelle

Le compilateur () dispose de 2 modes de fonctionnement : Fonctionnel et temporel.

Dans un premier temps, nous allons chercher à valider notre conception en fonctionnel, pour cela, on configure par le menu : Processing/Functionnal SNF Extractor.

 

Nota : SNF représente le fichier de simulation (Simulation Netlist File), dans notre cas, le fichier généré s'appellera LOUVIER.SNF.

La fenêtre du compilateur comprend alors 3 cases correspondant à la traduction de la saisie, la génération d'une base de données et la génération du fichier de simulation (SNF).

Le lancement du compilateur se fait en appuyant sur le bouton Start.

A la fin du traitement, le compilateur nous informe du résultat du traitement, à savoir s'il y a eu des erreurs lors de la compilation; s'il y en a, le logiciel ouvre une fenêtre de dialogue permettant de les connaître et de les localiser.

A ce niveau, il faut définir des stimuli (ou vecteurs) de simulation, pour cela, on utilise l'éditeur de courbes (MaxPlusII/Waveform Editor) :

Définition des stimuli

La première étape consiste à définir que ce l'on désire voir apparaître sur les courbes, pour cela, accéder au menu Node/Enter Nodes from SNF, la fenêtre est alors :

La première opération à effectuer est de définir le type de noeuds recherchés (Entrées, Sorties, ...), il faut ensuite demander la liste des noeuds de ces types (bouton List), on voit ceux-ci apparaître dans la fenêtre de gauche; la sélection des noeuds désirés se fait par leur copie dans la fenêtre de droite.

 

Après validation, on revient à la fenêtre de courbes :

 

 

Avant de définir les stimuli, il faut vérifier la configuration de l'éditeur :

 

Options/Snap to Grid : il est conseillé de valider cette option afin de définir précisément la position temporelle des transitions des signaux,

Options/Show_Grid : conseillé pour plus de clarté lors de l'édition,

Options/Grid_Size : il est conseillé de choisir un pas de simulation proche de l'application (pour notre exemple, on choisit 100 ns, ce qui correspond à une fréquence d'horloge de 5 MHz),

File/End_Time : permet de définir la durée de la simulation ( pour notre exemple, on veut au moins 32 cycles d'horloge, soit 64 pas de simulation, on choisit 100, ce qui donne une durée de 10 us).

Pour commencer à définir l'horloge, il faut effectuer un zoom arrière (), puis sélectionner l'horloge sur le premier pas de simulation, cliquer à droite, menu OverWrite/invert.

On sélectionne l'horloge sur les 2 premiers pas de simulation, on copie (Click_Droit//copy), et on duplique (Click_Droit /repeat/xxx fois).

Il ne reste plus qu'à sauvegarder le fichier généré (File/Save/LOUVIERS.SCF)

A ce niveau, on peut effectuer la simulation fonctionnelle de notre projet :

Simulation fonctionnelle

L'accès au simulateur est possible à partir de la fenêtre du compilateur, en cliquant sur l'icône SNF ou à partir de l'icône () de la barre de menu.

Le simulateur propose 5 options, dont :

Use Device : cela permet, si l'on dispose d'un support de programmation approprié, d'effectuer la simulation sur le composant,

Setup/hold : vérification du respect des contraintes temporelles,

Check Outputs : permet des comparer 2 simulations successives.

A ce niveau de développement du projet, aucune de ces options n'est à valider.

A la fin de la simulation, le logiciel nous informe du résultat du traitement avec une indication du taux de couverture (analyse de l'activité des noeuds); cette information n'est pas à prendre en compte lors d'une simulation fonctionnelle.

Le résultat de la simulation est visible sur la feuille de courbes (SCF).

On suppose qu'à ce stade de la conception le projet répond fonctionnellement au cahier des charges, on va donc pouvoir passer à la phase temporelle de la validation; pour cela, on retourne au compilateur ().

 

Compilation Temporelle

Le passage au mode temporel se fait en invalidant l'option Processing/Functionnal SNF Extractor; cela permet d'avoir accès à d'autres options :

Processing/Design Doctor : assistant de synthèse, à valider

Processing/timing SNF Extractor : à valider

Processing/Optimize timing SNF : permet d'accélérer la simulation dans certains cas (pas utile pour notre projet)

Il faut définir la cible de notre conception, il est possible de désigner une famille ou un composant précis : Assign/Device :

Après exécution, le compilateur indique le résultat du traitement et l'avis de l'assistant de compilation (Design Doctor) :

 

 

 

La première opération que l'on va effectuer est d'analyser le rapport de compilation (Report File : RPT)

rapport de compilation

N.B. : compte-tenu de la longueur de ce fichier, seuls quelques extraits sont présentés

Dans ce fichier sont indiqués tous les points concernant le projet, on y trouve la complexité (nombre de cellules), le brochage, le détail de la synthèse, les options utilisées, ....


Project Information                          c:\max2work\louviers\louviers.rpt

***** Project compilation was successful

** DEVICE SUMMARY **
Chip/                     Input   Output   Bidir         Shareable
POF       Device          Pins    Pins     Pins     LCs  Expanders  % Utilized

louviers  EPM7032LC44-6    1        5        0      12      0           37 %
User Pins:                 1        5        0  

** PROJECT COMPILATION MESSAGES **
Info: Design Doctor has given the project a clean bill of health based on the EPLD Rules set

** AUTO GLOBAL SIGNALS **
INFO: Signal 'H' chosen for auto global Clock

** PIN/LC/CHIP ASSIGNMENTS **

                           Actual                  
    	       User       Assignments                
    Assignments  (if different)     Node Name

louviers@41                                 AEN
louviers@37                       		CINQ
louviers@43                       		H
louviers@36                       		SEPT
louviers@38                       		TROIS
louviers@39                       		UN

** FILE HIERARCHY **
|decode:6|
|gene_3:7|
|compteur4:18|


Device: EPM7032LC44-6
Turbo: OFF
Security: OFF
              R  R  R                       R  
              E  E  E                       E  
              S  S  S                       S  
              E  E  E                       E  
              R  R  R                       R  
              V  V  V  V  G  G  G     G  A  V  
              E  E  E  C  N  N  N     N  E  E  
              D  D  D  C  D  D  D  H  D  N  D  
            -----------------------------------_ 
          /   6  5  4  3  2  1 44 43 42 41 40   | 
RESERVED |  7                                39 | UN 
RESERVED |  8                                38 | TROIS 
RESERVED |  9                                37 | CINQ 
     GND | 10                                36 | SEPT 
RESERVED | 11                                35 | VCC 
RESERVED | 12         EPM7032LC44-6          34 | RESERVED 
RESERVED | 13                                33 | RESERVED 
RESERVED | 14                                32 | RESERVED 
     VCC | 15                                31 | RESERVED 
RESERVED | 16                                30 | GND 
RESERVED | 17                                29 | RESERVED 
         |_  18 19 20 21 22 23 24 25 26 27 28  _| 
           ------------------------------------ 
              R  R  R  R  G  V  R  R  R  R  R  
              E  E  E  E  N  C  E  E  E  E  E  
              S  S  S  S  D  C  S  S  S  S  S  
              E  E  E  E        E  E  E  E  E  
              R  R  R  R        R  R  R  R  R  
              V  V  V  V        V  V  V  V  V  
              E  E  E  E        E  E  E  E  E  
              D  D  D  D        D  D  D  D  D  



N.C. = Not Connected.
VCC = Dedicated power pin, which MUST be connected to VCC.
GND = Dedicated ground pin or unused dedicated input, which MUST be connected to GND.
RESERVED = Unused I/O pin, which MUST be left unconnected.

** RESOURCE USAGE **
                                                Shareable     External
Logic Array Block     Logic Cells   I/O Pins    Expanders   Interconnect

A:     LC1 - LC16     0/16(  0%)   0/16(  0%)   0/16(  0%)   0/36(  0%) 
B:    LC17 - LC32    12/16( 75%)   5/16( 31%)   0/16(  0%)   7/36( 19%) 

Total dedicated input pins used:                 1/4    ( 25%)
Total I/O pins used:                             5/32   ( 15%)
Total logic cells used:                         12/32   ( 37%)
Total shareable expanders used:                  0/32   (  0%)
Total Turbo logic cells used:                    4/32   ( 12%)
Total shareable expanders not available (n/a):   0/32   (  0%)

Total input pins required:                       1
Total output pins required:                      5
Total bidirectional pins required:               0
Total logic cells required:                     12
Total flipflops required:                        7
Total shareable expanders in database:           0
Synthesized logic cells:                         0/  32 (  0%)

** OUTPUTS **
                                         Shareable
                                         Expanders     Fan-In    Fan-Out
 Pin     LC  LAB  Primitive    Code   Total Shared n/a INP  FBK  OUT  FBK  Name
  41     17    B     OUTPUT              0      0   0    0    1    0    0  AEN
  37     21    B     OUTPUT              0      0   0    0    5    0    0  CINQ
  36     22    B     OUTPUT              0      0   0    0    5    0    0  SEPT
  38     20    B     OUTPUT              0      0   0    0    5    0    0  TROIS
  39     19    B     OUTPUT              0      0   0    0    5    0    0  UN

** BURIED LOGIC **
                                         Shareable
                                         Expanders     Fan-In    Fan-Out
 Pin     LC  LAB  Primitive    Code   Total Shared n/a INP  FBK  OUT  FBK  Name
 (29)    27    B       TFFE  +  t        0      0   0    0    1    4    3  q0 (|compteur4:18|:127)
 (31)    26    B       TFFE  +  t        0      0   0    0    2    4    2  q1 (|compteur4:18|:128)
 (32)    25    B       TFFE  +  t        0      0   0    0    3    4    1  q2 (|compteur4:18|:130)
 (33)    24    B       TFFE  +  t        0      0   0    0    4    4    0  q3 (|compteur4:18|:132)
 (28)    28    B       DFFE  +           0      0   0    0    2    0    6  ONE (|gene_3:7|:31)
 (40)    18    B       DFFE  +           0      0   0    0    1    0    2  |gene_3:7.TWO (|gene_3:7|:32)
 (34)    23    B       DFFE  +           0      0   0    0    1    5    0  |gene_3:7.THREE (|gene_3:7|:33)

Code:
s = Synthesized pin or logic cell
t = Turbo logic cell
+ = Synchronous flipflop
! = NOT gate push-back
r = Fitter-inserted logic cell

Ainsi notre projet utilise 12 macrocellules, qui se répartissent comme suit :

Compteur 4 bits : 4 macrocellules
Générateur : 3 macrocellules
Décodeur : 4 macrocellules (utilisation des E/S)
AEN : 1 macrocellule (utilisation des E/S)

Simulation temporelle

L'étape suivante est la simulation temporelle, cela se fait de la même manière que pour la simulation fonctionnelle avec, le cas échéant, validation de certaines options.

Analyse Temporelle

Il faut également faire de l'analyse temporelle de notre projet, par le menu MaxPlusII/Timing_Analysis (ou l'icône ().

Le logiciel propose 3 types d'analyse (menu Analysis) :

1 Tableau des temps de propagation (Delay_Matrix)

2 SetUp et Hold (non-applicable à notre projet)

3 Fréquence maximale de fonctionnement (Registered Performance) : cette analyse se base sur la fréquence de l'horloge pour déterminer la limite de fonctionnement du projet (notre projet fonctionne jusqu'à 151 MHz, soit une période d'horloge de 6,6 ns).

FloorPlan Editor

La dernière phase de la conception consiste à définir le brochage du composant, cela est possible par le menu MaxPlusII/FloorPlan ou l'icône ()

L'ultime étape consiste à programmer le composant, par le menu MaxPlusII/Programmer ou l'icône ().