« Very High Speed Integrated Circuit Hardware Description Language/Travail pratique/TP 4 » : différence entre les versions

Contenu supprimé Contenu ajouté
m Robot : Remplacement de texte automatisé (-\n(==={0,3})(?: *)([^\n=]+)(?: *)\1(?: *)\n +\n\1 \2 \1\n)
m Robot : Remplacement de texte automatisé (-(<|</)source([ \t>]) +\1syntaxhighlight\2)
Ligne 86 :
 
L'entité globale est :
<sourcesyntaxhighlight lang="VHDL">
entity tp3 is
port(
Ligne 93 :
aff : out std_logic_vector(3 downto 0));
end tp3;
</syntaxhighlight>
</source>
L'ensemble des composants à réaliser est maintenant :
<sourcesyntaxhighlight lang="VHDL">
component Counter8 -- compteur {{Unité|8|bits}}
port(horloge,reset : in std_logic;
Ligne 138 :
);
end component;
</syntaxhighlight>
</source>
On utilisera complètement le travail fait en [[../TP 1/]] et partiellement celui de [[../TP 2/]].
 
Ligne 154 :
On donne sans plus de commentaires la solution du TP 3 ici :
 
<sourcesyntaxhighlight lang="VHDL">
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
Ligne 359 :
'0' when others;
end acompare;
</syntaxhighlight>
</source>
auquel on ajoute l'entité et l'architecture du [[../TP 1/]].
 
Ligne 414 :
{{Solution|contenu=
Évidemment le composant de comparaison est à changer :
<sourcesyntaxhighlight lang="VHDL">
component compare
port (
Ligne 421 :
);
end component;
</syntaxhighlight>
</source>
On vous montre comment éviter de réaliser trop de composants : {{Abréviation|GRAFCET|graphe fonctionnel de commande par étapes et transitions}} + TIMER. On peut utiliser la technique à deux process différents dans un même composant :
<sourcesyntaxhighlight lang="VHDL">
entity seq is
port(
Ligne 464 :
reset <= etape3 or etape6;
end aseq;
</syntaxhighlight>
</source>
Ce sera tout pour nos indications.
}}
Ligne 495 :
Nous allons présenter étape par étape la réalisation du graphe d'états de la section précédente. Nous allons commencer par la détection des fronts descendants de l'horloge PS2, puis ajouter le séquenceur pour enfin ajouter à tout cela le [[w:Chemin_de_données|chemin de données]].
Notre entité est :
<sourcesyntaxhighlight lang="VHDL">
-- notre entite inspiree de P. P. Chu
library ieee;
Ligne 509 :
);
end ps2_rx;
</syntaxhighlight>
</source>
==== Réalisation de la détection de front ====
Si l’on veut que la détection de front ne dure qu'une période d'horloge, on peut faire comme ci-dessous :
<sourcesyntaxhighlight lang="VHDL">
-- encore une fois inspiré de P. P. Chu (voir programme complet plus loin)
process (clk, reset)
Ligne 532 :
-- pret pour la detection du front descendant
fall_edge <= f_ps2c_reg and (not f_ps2c_next);
</syntaxhighlight>
</source>
Cette partie est séquentielle et ne fonctionne que sur des fronts d'horloge montants.
 
==== Réalisation du séquenceur ====
Le séquenceur va être réalisé avec deux process. Cette façon de faire a été peu décrite dans ce document mais elle est tellement commune que nous laissons le soin au lecteur de trouver des documents expliquant ce style de programmation.
<sourcesyntaxhighlight lang="VHDL">
 
type statetype is (e0, e1, e2, e3, e4, e5);
Ligne 582 :
end process;
 
</syntaxhighlight>
</source>
 
Puisque nous ne nous intéressons qu'au séquenceur, nous retirons tout ce qui concerne les actions. Ceci sera ajouté en section suivante.
Ligne 588 :
==== Réalisation de l’ensemble ====
Dans cette section, nous allons assembler le code des deux sections précédentes à la description du graphe d'états pour en faire un ensemble complet avec six états. Nous présenterons ensuite la version en trois états qui a fortement inspiré ce code [[w:VHDL|VHDL]].
<sourcesyntaxhighlight lang="VHDL">
-- notre entite inspiree de P. P. Chu
library ieee;
Ligne 687 :
dout <= b_reg(8 downto 1); -- data bits
end arch;
</syntaxhighlight>
</source>
Bien sûr ce code nécessite au minimum l'ajout d'un registre d'affichage et l’affichage sur au moins deux afficheurs sept segments comme cela a été fait au [[../TP 1|TP1]].
 
==== Version à trois États de Pong P. Chu ====
Pong P. Chu dans son livre "FPGA prototyping by VHDL examples" propose une version utilisant seulement trois états que nous donnons maintenant pour comparer avec ce que nous avons fait (d'ailleurs très inspiré par son livre). L’idée est en fait assez simple si l’on était capable de noter des actions qui se déroulent seulement quand on quitte les états. Ceux qui nous ont suivi jusque là se disent mais pourquoi donc, n'était-ce pas le cas comme expliqué dans la section [[Very High Speed Integrated Circuit Hardware Description Language/VHDL et machines à états algorithmiques#Glissement sémantique|glissement sémantique]] du chapitre [[Very High Speed Integrated Circuit Hardware Description Language/VHDL et machines à états algorithmiques|VHDL et machines à états algorithmiques]]. Et bien non ! Pas si l’on reste coincé dans l'étape ! C'est vrai que l'action se réalise au sortir de l'étape mais seulement si elle est suivie par une transition toujours réceptive ("=1"). Autrement elle est aussi réalisée pendant qu'on reste dans l'étape mais avec un front d'horloge de retard. Tout cela est bien compliqué et probablement pas à la portée d'étudiants de niveau 14.
<sourcesyntaxhighlight lang="VHDL">
-- Listing 8.1 (Pong. P. Chu "FPGA prototyping by VHDL examples")
library ieee;
Ligne 786 :
dout <= b_reg(8 downto 1); -- data bits
end arch;
</syntaxhighlight>
</source>
Et pour finir, un peu de travail.
=== Travail à réaliser ===