Notation : P1 = 1 ; P2 = 1 ; P3 = 1
Dans ce TP, nous allons utiliser ISE pour construire un contrôleur. C’est avec des compteurs et des bascules D que vous développerez ce contrôleur. A partir d'un automate composé d'états et de transitions vous pourrez en déduire les circuits qui mémorisent l'état courant, qui calculent le prochain état et les sorties associées à chaque état. Un symbole pourra y être associé comme pour un développement d'un circuit schématique. Vous vérifierez par simulation puis par exécution sur la carte que les comportements de votre automate correspondent à vos spécifications.
La meilleure façon de représenter un comportement temporel consiste à utiliser une FSM (Finite State Machine). Cette FSM permet de définir ce qu’il faut déclencher comme signaux à chaque instant et cela en fonction du contexte dans lequel elle évolue. La réalisation d’une FSM cyclique peut se faire en schématique et vous l’avez déjà fait pour la réalisation de l’afficheur 4 chiffres. L’utilisation d’un compteur d’état et ensuite de multiplexeurs avec éventuellement des bascules de transition d’état permettent de réaliser un tel circuit. Pour une FSM acyclique on utilisera des bascules D avec les tables de vérité associées.
Automates, FSM, les TP précédents.
Dans ce TP, nous allons utiliser ISE pour construire un contrôleur. A partir d'un automate composé d'états et de transitions il faudra soit utiliser le compteur4 du TP 4 soit utiliser les bascules D déjà manipulées dans le TP4. Un symbole pourra y être associé comme pour un développement d'un circuit schématique. Vous vérifierez par simulation puis par exécution sur la carte que les comportements de votre automate correspondent à vos spécifications.
Vous allez concevoir un composant et son symbole de gestion des feux de circulation. Vous allez construire l'automate qui accepte quelques signaux en entrée et produit en sortie un afficheur sur les leds, les 6 lampes d’un croisement (2 x [Rouge + Orange + Vert]). Il faudra ensuite instancier ce symbole dans un schéma qui intègre les entrées/sorties soit les switches et les leds de la carte. Plusieurs niveaux de difficulté pour la FSM seront successivement abordés.
Nos spécifications du système initial se limitent à un automate à 4 états pour un croisement perpendiculaire de deux rues Nord-Sud (NS) et Est-Ouest (EO). On définit ces 4 états de la façon suivante :
RougeVert: Rouge sur NS et Vert sur EO
RougeOrange: Rouge su NS et Orange sur EO
VertRouge: Vert sur NS et Rouge sur EO
OrangeRouge: Orange su NS et Rouge sur EO
L’automate est lui aussi très simple, il s’agit d’une boucle cyclique infinie sur 4 états. Le système change d’état à chaque top d’horloge et pour chaque top il allume les leds correspondantes : les trois leds de droite représentent led(2)=>Rouge, led(1)=> Orange et led(0)=>Vert d’un sens de circulation. Les trois leds les plus à gauche représentent led(7)=>Rouge, led(6)=>Orange et led(5)=> Vert de l’autre sens. Voici une représentation de l’automate qui positionne ces leds à chaque top d’horloge sur le front montant. La valeur des leds est ici validée à chaque top en fonction de l’état correspondant.
Figure 59 Automate feux tricolores
Vous allez créer votre nouveau projet TP5, insérez de suite un Schematic de nom toplevel et placez les deux Properties pour ucf et JTAG. Vous allez ensuite créer une New Source de type Schematic que vous nommerez fsm. Comme l'automate est cyclique vous allez pouvoir utiliser un compteur . Soit vous utilisez le compteur4 du TP4 soit vous utilisez le symbole CB2RE comme pour la correction du TD4 avec compteur , ici pas besoin de modulo . Pour chaque Led, voici la table de vérité ainsi que le schéma que vous devez implanter sous ISE. A vous de jouer avec ISE pour produire ce symbole Sortie! Il vous faudra placez un bus Q(1:0) en entrée et un bus myled(7:0) en sortie. Placez les portes nécessaires, puis avec des bus tap vous pouvez ensuite relier vos fils aux portes...
Pour led(2) je vous conseille de placer un AND sur Q(1) et Q(1) pour pouvoir changer de nom de Q(1) vers led(2) , x and x = x, led(3) et led(4) sont toujours à '0'
Table de vérité de sortie
Idée du circuit réalisé avec circuitverse ;-)
Placez le composant compteur4 et sortie dans votre fsm . Il devrait y avoir 2 I/O marker , pour la clk en entrée et pour les Led(7:0) en sortie. J'ai placé les deux types de compteur au choix.
Fsm sous ISE
Vous êtes en mesure de lancer la simulation. Vous pouvez ajouter une nouvelle source de type VHDL Test Bench nommée fsm_tb. Associez ce testbench à fsm.
Comme dans le TP précèdent , il faut vérifier que l'horloge clk initialisé à '0' et est bien stimulée par le process avec changement tous les 10ns, ici la fréquence est de 50Mhz. Le résultat obtenu vous valide la périodicité des affichages de Led. Vous pouvez créer le symbole de fsm.
Voici la simulation obtenue.
Figure 61 Simulation de la fsm
Allez-y pour la synthèse, il vous faut donc ajouter à votre projet une copie du fichier S3.ucf modifié lors du TP4, ajoutez aussi une copie de clkdiv.sch dont vous allez produire le symbole. Placez dans toplevel une instance de clkdiv, une instance de fsm. Connectez clksec à l’entrée de votre fsm. Placez les deux I/O Marker sur les ports clk et Led(7:0). ISE créera pour vous directement les deux fil et bus qu’il faudra renommer clk et led(7:0). La compilation peut être lancée puis chargez le toplevel.bit sur la carte.
Figure 62 Toplevel tricolore
Faire valider ce développement carte et simulation
Figure 63 FSM tricolore avec travaux
Faites une copie de TP5 dans TP52.
Vous allez transformer votre fsm de telle sorte que lorsque le switches(0) est actif, les feux se mettent en mode travaux c’est-à-dire en clignotement Orange sur les deux axes. Les contraintes de réactivité étant faible pour ce système, je vous propose de passer en mode travaux seulement quand votre automate est dans l’état RougeVert. Il faut donc transformer votre automate en ajoutant deux nouveaux états OrangeON, OrangeOFF. Les modifications à apporter à votre FSM sont de plusieurs types :
Ajoutez un port en entrée, nommé travaux.
Ajoutez deux nouveaux états dans votre schéma : OrangeON et OrangeOFF. Placez y la valeur de led à "01000010" et "00000000"
Utilisez des bascules D pour représenter les 6 états et créez le composant state ( D(2:0) et clk en entrée et Q(2:0) en sortie et son symbole).
Codifiez vos états de 000 à 101
Faire le circuit next_state qui calcule le prochain état en fonction de l'état courant et de l'entrée travaux. Nous allons cette fois utiliser des LUT4( voir en bas de page ). Il suffit de ranger la table de vérité directement dans la LUT . On Initialise la LUT en Hexa avec les 16 valeurs de sortie des poids forts vers les poids faibles. Voir le shéma suivant .
Faire la table de vérité du circuit sortie avec ces nouvelles spécifications, refaites la même chose avec des LUT3. 6 Lut devrait suffire , il y a deux led à '0'.
Réalisez ces deux circuits et gênerez les symboles correspondants.
Modifiez la fsm en ajoutant vos bascules D de state , et les deux circuits réalisés sortie et next_state.
Mettre à jour le toplevel et réalisez la simulation
Validez sur la carte après avoir mis à jour le fichier ucf
Table de vérité pour next_state
Init D2 = x3120 ( D2 (15:0))
Init D1 = x0616
Init D0 = x1415
On change le nom et on initialise la table de vérité
Le circuit next_state en ISE
table vérité sortie
Init L7 = x03
Init L6 = x18
Init L5 = x04
Init L2 = x0c
Init L1 = x12
Init L0 = x01
Le circuit sortie en ISE
La simulation par fsm_tb ne fonctionne plus, puisque travaux n’était pas défini auparavant. Je vous propose de créer une nouvelle source VHDL test bench nommée fsmtravaux_tb qui sera associée à votre nouvelle fsm. Il faut cette fois stimuler le signal travaux pendant un certain laps de temps. Il suffit pour cela d’ajouter dans le process Stim_proc le bout de code suivant :
stim_proc : process
begin
wait for 1100 ns ;
travaux <='1';
wait for 1000 ns ;
end process;
Figure 64 Simulation fsm avec travaux
Pour la vérification sur la carte il vous faut modifier toplevel. Avant tout il faut recréer le symbole associé à fsm par un Create schematic symbol visible en mode implementation : les ports ne sont plus les mêmes, il y a maintenant un port d’entrée travaux qui doit apparaître. Pour mettre à jour ce symbole dans toplevel, il suffit de faire un clic gauche sur la page, vous obtenez la liste des symboles obsolètes avec la possibilité de le mettre à jour en cliquant Update. Allez-y pour fsm. En rouvrant la fenêtre associée à toplevel, on obtient un autre écran de mise à jour des symboles obsolètes du même genre.
La fsm avec ise
Ajouter un bus et son I/O Marker nommé switches(7:0).Placez un Bus Tap entre switches(0) et le port travaux. Ça doit être prêt pour la compilation et exécution sur la carte. À vous de tester la réactivité du switches(0).
Figure 66 Toplevel fsm avec travaux
Faire valider cette partie
La construction de l’automate reste le point crucial de la conception, ensuite ce n’est qu’un travail de traduction. Je vous conseille de construire si possible des automates simples donc avec le moins d’états possible.
Vous allez ajouter à votre automate une nouvelle fonctionnalité à vos feux de croisement. On vous demande d’avoir un temps d’affichage d’un feu vert 3 fois plus long sur un axe que l'autre, on choisira l'axe associé à l'état VertRouge. Comment modifier votre automate ? Vous pouvez ajouter 2 autres nœuds VertRouge1 VertRouge2. Ces états intermédiaires s’intercaleraient entre Vert_Rouge et Orange_Rouge il ne servent qu'à laisser passer le temps et a priori ne demande pas de bascules D complémentaire...
Modifiez votre automate en fonction , vous pouvez utiliser les deux codes 110 et 111 que l'on n'a pas encore utilisé. Il suffit de compléter les deux tables de vérité next_state et sortie. Ensuite changez les valeurs Init de vos LUT4 et LUT3.
Testez et validez sur la carte
Par simulation on observe bien les 3 cycles sur une direction.
A lire sur Symbol info dans ISE