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 :
On doit réaliser un module réalisant la fonction suivante :
Le symbole du module est le suivant :
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.
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 :

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.
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.
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 :

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 :
%***************************************


* *
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.
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) :
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 :
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 (
).
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)
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)
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.
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).
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 (
).