ESSI1 – Spécification des circuits logiques avec AHDL (Jean-Paul Stromboni, 1999) Page - 4 -
comparateur 16 bits
if a[ ]== b[ ] then aeqb= VCC ;
elsif a[ ]>b[ ] then agtb = VCC ;
elsif a[ ]<b[ ] then altb = VCC ; end if ;
Quand la fonction logique synthétisée est trop importante, le compilateur ahdl demande
l’autorisation d’ajouter de la place, et de choisir des circuits logiques programmables
EPLD plus grands, cocher la case « Add extra devices as needed ».
Pour changer le format d’affichage des groupes binaires dans les diagrammes temporels,
il faut détruire le groupe « Ungroup », choisir un format Hexa, Décimal, Binaire, etc … et
refaire le groupe « Enter group »
Attention au comptage en code Gray, ou code binaire réfléchi, le code des diagrammes
de Karnaugh où le nombres successifs varient d’un bit seulement. Il donne des
comportements bizarres, tels que « 2+2=5 » ! ! !
Les subdesigns ahdl ne sont pas des programmes exécutant des instructions en
séquence, ce sont des spécifications textuelles de connexions de signaux logiques, la
plupart du temps, l’ordre des instructions n’a pas d’importance, puisqu’il ne correspond
pas à une cohérence de calcul. De plus, une instruction du type a = a +b sera refusée,
parce qu’il s’agit de relier un signal a à une valeur différente a+b (court circuit). Enfin, on
préfèrera a= VCC pour mettre a au niveau logique un.
Suggestion d’autres exercices (non exhaustif …)
Comment créer un décodeur BCD
7 segments nommé BCD.tdf dans un projet BCD ?
Utiliser ce composant pour afficher 1999.
Créer la fonction Valse.tdf qui convertit le format Valeur Absolue + signe en format
complément à deux sur 8 bits : Entrée VA+Signe , sortie Cà2, Créer la fonction inverse :
entrée Cà2, sortie VA+Signe.
Obtenir un comparateur 16 bits comp16.tdf à partir de comparateurs 4 bits à retrouver
dans les bibliothèques de MAXPLUSII : les entrées sont A(16 bits) et B(16 bits) et les 3 sorties
binaires sont notées AgtB, AltB et AeqB. Proposer une autre méthode plus simple.
Comment construire un compteur synchrone modulo 2000 dans ctr2000.tdf ? et un
compteur décompteur commandé par une variable logique updown ?
Réaliser dans distrib.tdf les équations du distributeur de boissons
Réaliser une logique de décodage adressant un périphérique P1 (signal CS1=1) si R/W=1
et ALE=1 et un second périphérique P2 (signal de validation CS2=1) si ALE=1 et R/W=0.
Constituer un registre à décalage 8 bits shiftr.tdf fonctionnant en mode Parallel Input
Serial Output PISO.
Utiliser une ALU (Arithmetic and Logic Unit) pour effectuer diverses opérations sur deux
opérandes A et B contenus dans des registres 8 bits.
Peut on piloter l’Universal Asynchronous Receiver Transmitter UART inclus dans
l’environnement ? Sur l’entrée RxD, on lit successivement Startbit, B0, B1, ... B7, Stopbit. Le
circuit mémorise les Bi dans un registre à décalage, qui est lu quand il est plein. C’est la
conversion parallèle série SIPO. La conversion inverse est réalisée sur la sortie TxD ? On
prendra 19200 bauds.
Peut on réaliser multiplieur binaire par additions et décalages (ou par un autre moyen) ?
...