3 SOURCES

L'exemple proposé permet d'obtenir un comptage jusqu'à 7 et de l'afficher sur un afficheur.

3.1 Ajouter une source au projet :

Clic droit sur le circuit et new

Ajout d'une source de type schéma, programme ou chronogramme (simulation uniquement).

 

Exemple pour une source schematic

 

Nommer le schéma.

Pour une surface de travail plus confortable, cliquez sur cette icône. Le curseur se transforme en Z (Zoom).
- Click droit (une fois) au centre de la zone de dessin.
- Click gauche pour sortir du mode Zoom.

 

 

 

Dans le projet, le schéma apparaît avec l'extension .sch.

 

3.1.1 AJOUT D'UN COMPOSANT

Dans le menu Add, Symbol ou F2 ou click sur l'icône de la barre des taches de dessins.
On ajoute un composant dans l'une des librairies proposées.Parmi les librairies on trouve gate.lib (portes) regs.lib (bascules), iopads.lib (connectique vers les entrées sorties du composant), muxes.lib (multiplexeurs), arith.lib (additionneurs), title.lib et misc.lib (cartouches) vanttl.lib (quelques fonctions références ttl), (fonctions diverses : comparateurs, compteurs decodeurs, encodeurs, additionneurs, latches, inverseur 8 bits, multiplexeurs, détecteur de parité, registre à décalage), vanprim.lib (portes avec de nombreuses entrées) pll.lib (pll).

 

Pour l'exemple on choisit la librairie vanfunc.lib et la fonction CNT4DUDA (Compteur 4 bits Decimal Up Down A). C'est un compteur (UP)ou décompteur (DN) déclenchement sur front montant (CK) avec entrées (D0, D1, D2 & D3) de préchargement synchrone (LD) et asynchrone (CL). CO est la retenue du compteur.

3.1.2 AJOUTER DES FILS DE CONNEXIONS

Dans le menu Add Wire ou F3 ou click sur l'icône Add Wire de la barre des taches de dessins on ajoute des fils de connexions.

 

On reliera les entrées D0 à D3 à la masse ainsi que DN et l'entrée LD et UP à +VCC.La masse et + VCC se trouve dans la librairie Gates.

3.1.3 DONNER UN NOM A UN POTENTIEL :

Dans le menu Add Net Name ou F4 ou click sur l'icône Add Net Name de la barre des taches de dessins on nomme des potentiels.
Dans la fenêtre du bas on tape le nom et return puis on le place sur la feuille par un click.

 

3.1.4 PLACER DES ENTREES ET SORTIES

Dans le menu Add I/O Marker ou alt M ou click sur l'icône Add I/O Marker de la barre des taches de dessins on place des entrées sorties.

 

Une fenêtre permettant de choisir le type d'entrée sortie apparaît Choisir une sélection parmi les 4 proposés et cliquer sur le petit rectangle rouge associé au nom. Q0 à Q3 sont des sorties et CLK et RESET sont des entrées

Câbler les étiquettes aux entrées sorties correspondantes.

Le schéma final est le suivant :

 

3.1.5 CREATION D'UN SYMBOLE :

Dans le menu Add New Block Symbol ou click sur l'icône Add Block Symbol de la barre des taches de schematic editor, on associe le schéma à un symbole.

Dans la fenêtre on clique sur Use Data From This Block (cela permet d'associer directement les entrées sorties à ce bloc) puis sur Run.

On peut visualiser ce nouveau composant dans la librairie Local symbol compteur.

3.1.6 ERREUR DE CONNEXION

Dans le menu DRC Consistency Check ou click sur l'icône Consistency de la barre des taches de schematic editor, on vérifie les éventuelles incohérence du schéma électrique.
Une fenêtre error report communique les erreurs.

Fermer les fenêtres de l'éditeur de schéma.

 

Créer un nouveau schéma (voir §3.1) appelez le transcodeur. Ajouter le composant V7449 dans la librairie vanttl.lib, puis le composant G_INV dans la librairie gates.lib.

On peut se servir des outils dupliquer , déplacer et effacer de la barre des taches de dessins, afin de réaliser un transcodeur actif en sortie à l'état bas. Réaliser le schéma suivant :

 

Créer un symbole pour ce schéma. Le nom du symbole restera "transcodeur".

Fermer les fenêtres de l'éditeur de schéma.

Créer un nouveau schéma (voir §3.1) appelez le Principal.

Ajouter les deux composants crées depuis la librairie Local (symbol compteur & transcodeur).

 

Nous allons créer une fonction puis la décrire dans un deuxième temps.

Créer un symbole sans correspondance de source.

Penser à sauvegarder régulièrement

 

Placer le sur le schéma principal et effectuer les liaisons suivantes :

On se servira de l'outils de la barre des taches de dessin afin de retourner le décodeur, lorsque celui-ci aura été sélectionné avec l'icône move ou la touche [F7].

A partir de la librairie iopads.lib, placer les composants G_OUPUT et G_CLKBUFFER. Câbler le schéma suivant (ne pas oublier les noms et les entrées sorties) :

 


Les composants dans la librairies iopads, vont permettre de se connecter à une des pins du composant.

3.1.7 ATTRIBUTION D'UNE PIN DU COMPOSANT :

Cliquer sur l'icône Edit Symbol Attribut de la barre des taches de dessins. Une fenêtre apparaît, cliquer sur le premier symbole et affecter le numéro de broche souhaité (cliquer sur PinNumber et remplacer * par celui souhaité).

Sans taper sur la touche return cliquer sur le symbole iopads suivant et affecter le numéro de broche.

Le schéma final est celui-ci :

 

3.2 Associé un fichier HDL à un bloc

Sur le projet ajouter une nouvelle source ABEL-HDL Module.

Une fenêtre s'ouvre spécifier le nom du module (identique au nom du symbole crée précédemment). Spécifier le fichier (extension ABL) associé à ce module et décrire sa fonction.Pas d'accent !

 

Un éditeur de texte s'ouvre Taper le programme ci-contre :

MODULE DECODEUR

TITLE 'Decoder le nombre 7'

Declarations

"Inputs

I1, I2, I3 PIN ISTYPE 'COM';"

Outputs

O PIN ISTYPE 'COM';

Equations

O=I1 & I2 & I3 ;

END DECODEUR

 

Enregistrer le programme et fermer la fenêtre.

NB : on peut aussi créer le symbole à partir du fichier abel : dans la fenêtre du projet cliquer sur le fichier abel et double cliquer sur le Generate Schematic Symbol. ATTENTION SYMBOLE DEJA CREER CI-DESSUS.

 

3.3 Hiérarchie du projet

Dans le projet cliquer sur principal et compiler le schéma.
On retrouve la hiérarchie du projet avec les 3 sources filles de la source principale.

 

3.4 Simulation fonctionnelle

3.4.1 AJOUT D'UNE SOURCE ABEL TEST VECTORS

Dans le projet principal ajouter une source (voir §3.1), choisir Abel Test vectors.
Donner un nom (diviseur.abv)
Dans l'éditeur de texte taper le programme suivant :

MODULE principal

"Déclaration Inputs

CK PIN ;

" Déclaration Outputs

O PIN ;

[Q0..Q2 PIN]; " Equivalent à Q0, Q1, Q2

Nb=[Q0,Q1,Q2]; " Equivalence

" Permet de décrire la simulation (entrées -> sorties)

Test_Vectors ([CK] ->[Nb, O])

" Répète 10 fois la valeur d'entrée qui vaut une suite de 010 et calcule les 2 sorties.

" La durée d'un 0 (bit) est de 100ns.

@repeat 10 {[.c.]-> [.x., .x.];}

END

Enregistrer et fermer l'éditeur de texte.
Cliquer sur diviseur.abv
Dans la fenêtre Processes for a curent source du projet, double cliquer sur compile test vector. Constater l'absence d'erreur.
Toujours dans la même fenêtre, double cliquer sur functional simulation.

Une fenêtre " Import Source Constraints 2.0 " demande si les contraintes (affectation des numéros de broche du CPLD) relevées dans le fichier source doivent écraser celles figurant dans le fichier de contraintes par défaut. Cliquer sur [Yes].

Après le succès de la compilation une fenêtre simulator control panel s'ouvre

Cliquer sur Run

Une fenêtre de résultats de simulation apparaît :

Interpréter les résultats obtenus

3.4.2 Inserer un signal sur un chronogramme

 

Dans le menu Edit Show cliquer sur le net que l'on veut voir. Puis cliquer sur show.

Penser à sauvegarder régulièrement

3.5 Simulation Temporelle

Si l'on lance la simulation temporelle on peut constater que les sorties sont dans un état indéterminé, en effet dans la réalité l'état initial est inconnu.

Pour montrer un résultat cohérent, il faut modifier le schéma :

Ouvrir Compteur.sch et modifier le composant pour obtenir le schéma

ci-contre :

 

Ecraser l'ancien symbole en créant un nouveau.

Modifier le fichier principal.sch pour obtenir le schéma suivant :

Modifier le fichier diviseur .abv de la manière suivante :

MODULE principal

"Inputs

CK PIN ;

Init PIN ;

"Outputs

O PIN ;

[Q0..Q2] PIN;

Nb=[Q0,Q1,Q2];

Test_Vectors ([CK,Init] ->[Nb, O])

@repeat 2 {[.c.,0]-> [.x., .x.];}

@repeat 10 {[.c.,1]-> [.x., .x.];}

END

Compiler et faire une simulation temporelle
Résultat de la compilation après un run

Résultat de simulation :


Interpréter les résultats obtenus

3.6 Ajout d'une source de stimulis graphiques pour une simulation.

On peut créer un stimulus d'entrée graphiquement à la place d'un fichier de vecteur de test.

Créer un nouveau fichier (voir chap 3.1) waveform stimulus associé au composant M4 nom du fichier Div.

Cliquer sur l'icône New Wave Ajouter les entrées CK et INIT (sélection de Input et Add), Ajouter Les Sorties O et Q0 (sélection de Output et Add).

Fermer la fenêtre.

Sélectionner Edit Mode

Cliquer sur CK I, amener la souris dans la partie chronogramme devant 10ns et sur l'alignement de CK I 0 cliquer, un niveau logique apparaît, sélectionner dans la fenêtre le niveau low (on peut modifier la durée).

Faire de même de à 20ns avec un niveau haut (automatique).

Sélectionner l'ensemble de la période (de 0 à 20ns) (la sélection apparaît par un trait gras sous le chronogramme) et dans la fenêtre rentrer 10 dans repeat (10 périodes horloge) et 2 dans Scale (double la période).


Stimulis init
On sélectionne Init, durant les 2 premières périodes de l'horloge on force à 0, le reste du temps à 1.

Le résultat graphique est le suivant :

Enregistrer et fermer la fenêtre de stimuli.

Dans le projet cliquer sur le fichier div.wdl, puis double click sur functional simulation ensuite sur RUN dans la fenêtre de dialogue le résultat est le suivant :

Interpréter les résultats obtenus

Même chose avec timing simulation :

Interpréter les résultats obtenus

 

Penser à sauvegarder régulièrement

 

Programmation d'un circuit


Giampiero D'AQUINO - Enseignant en Génie Electronique -