Initiation_VHDL_P3
Apr 21, 2026 18:46
· 41:52
· French
· Whisper Turbo
· 6 speakers
Denne utskriften utløper i 11 dager.
Oppgradering for permanent lagring →
Viser bare
0:02
S…
Speaker 2 (Initiation_VHDL_P3)
Alors bonjour tout le monde, j'espère que vous allez bien. Alors je vais continuer normalement cette série de vidéos destinées pour l'initiation au langage VHDL. Cela s'inscrit bien sûr dans les travaux pratiques du module base des systèmes embarqués pour les deuxièmes en IGEXI GER de l'ENZ. Alors, dans les deux vidéos précédentes,
0:32
S…
Speaker 1 (Initiation_VHDL_P3)
Je vous ai parlé un petit peu sur comment peut-on faire la description matérielle d'un composant. On a dit qu'un composant, normalement, ou bien un système numérique, est généralement constitué de deux choses, ce qu'on appelle la vue externe. La vue externe, c'est en considérant notre circuit comme étant une boîte noire, j'ai des entrées, j'ai des sorties.
0:55
S…
Speaker 1 (Initiation_VHDL_P3)
Et aussi, j'ai ce qu'on appelle la vue interne. Alors, elle représente tout simplement le comportement du composant, c'est-à-dire les différents circuits électroniques à l'intérieur du circuit qui vont permettre de faire la liaison entre les sorties et les entrées.
1:13
S…
Speaker 1 (Initiation_VHDL_P3)
On a dit aussi qu'en langage VHDL, pour faire la description matérielle d'un circuit numérique, on a besoin aussi de deux choses. C'est-à-dire qu'on doit traduire ces deux vues, interne et externe, en code. Alors en VHDL, on a dit qu'on a ce qu'on appelle une entité.
1:32
S…
Speaker 1 (Initiation_VHDL_P3)
L'entité, elle sert tout simplement à faire la description de la vue externe du système, c'est-à-dire les différentes entrées-sorties. On a dit que, voilà, on va définir les ports, soit des entrées in, soit des sorties. On a dit aussi qu'on a des entrées-sorties. De plus, pour décrire le comportement ou bien la vue interne du système, on a ce qu'on appelle l'architecture.
2:00
S…
Speaker 4 (Initiation_VHDL_P3)
L'architecture va nous permettre de décrire comment ce système va faire la liaison entre les entrées et les sorties du système. On a dit qu'ensemble, c'est-à-dire en regroupant l'entité et l'architecture, on a ce qu'on appelle une unité de conception. Cette unité de conception, c'est la description matérielle du composant concidial.
2:28
S…
Speaker 2 (Initiation_VHDL_P3)
Alors, je vais continuer avec le cours. Normalement, on a essayé de faire un petit exemple sur ce Quartus. Pour le moment, je vais continuer pour vous initier à d'autres types de données qu'on peut utiliser en VHDL. Dans l'exemple précédent, l'exemple du main additionneur, on a utilisé le type STD logique. En tout cas, je vous ai parlé sur ces deux types-là. Je vous ai dit que, supposons que votre système,
2:59
S…
Speaker 4 (Initiation_VHDL_P3)
à des entrées et des sorties qui sont sous forme de bits, c'est-à-dire, par exemple, les entrées sont sous forme d'un port qui va vous permettre de faire entrer un seul bit ou bien un vecteur de bits, on va utiliser les STD logiques. Au cours de la programmation, je vous ai dit que pour utiliser STD logique ou bien STD logique vecteur, vous devez faire appel à ce pactage.
3:28
S…
Speaker 1 (Initiation_VHDL_P3)
Alors, stdlogic1164.1, en utilisant bien sûr le mot-clé use. Le mot-clé use, il va tout simplement faire l'import de ce pactage. Je vous ai dit aussi que ce pactage, il est défini ou bien prédéfini dans la bibliothèque I3E. Je ne sais pas si vous vous rappelez de ça ou non, mais quand même, la vidéo précédente, on a fait l'import ou bien appel à une bibliothèque library I3E. C'était la première ligne.
3:53
S…
Speaker 3 (Initiation_VHDL_P3)
Pour utiliser soit stdlogic, soit stdlogic vector, vous devez auparavant faire l'appel à cette bibliothèque. Normalement, sur ces deux types de données, on peut tout simplement faire les opérations.
4:12
S…
Speaker 4 (Initiation_VHDL_P3)
logique, c'est-à-dire le OR, XOR, etc. Malheureusement, on ne peut pas faire les opérations arithmétiques. Alors si vous avez par exemple un problème ou bien un circuit, à l'intérieur de ce circuit, vous allez effectuer par exemple des additions, des multiplications modulo, etc. Par exemple, vous voulez faire la conception d'une UAL ou bien d'une unité arithmétique et logique. Une unité arithmétique et logique, il va forcément faire
4:38
S…
Speaker 4 (Initiation_VHDL_P3)
l'addition, la multiplication, la division, etc. Alors dans ce cas, vous ne pouvez pas utiliser l'esthétique logique et l'esthétique logique vector. Par contre, vous devez utiliser d'autres types. Alors les types que vous pouvez utiliser dans ce sens, j'ai ce qu'on appelle un sign, un sign, c'est-à-dire un nombre entier non signé.
5:00
S…
Speaker 2 (Initiation_VHDL_P3)
On parle sur la représentation binaire. Alors ici, si je veux représenter un nombre, je vais le représenter sous forme binaire. Par exemple, celui-là, il va correspondre à quoi ? À 4. C'est un nombre non signé. Voilà, non signé, c'est-à-dire positif, entier positif. Le deuxième type, ce sont les nombres entiers signés. Alors cette fois, normalement aussi, c'est une représentation binaire.
5:29
S…
Speaker 2 (Initiation_VHDL_P3)
mais en considérant, bien sûr, le bit de Cini. C'est bon. En tout cas, ces deux-là, ce sont des représentations binaires et pas des entiers normales. Le troisième type, c'est Integer. Integer, c'est comme dans le langage C, c'est tout simplement un entier, mais cette fois, lorsqu'on va déclarer, par exemple, un A, il va recevoir directement un nombre, par exemple, 5.
5:55
S…
Speaker 2 (Initiation_VHDL_P3)
Dans ce cas-là, lorsque vous travaillez avec les entiers, vous pouvez directement donner des valeurs entières normales, en décimale. Ce que vous devez savoir ici concernant les entiers, c'est que par défaut, ces nombres-là sont codés sur 32 bits. Par exemple, on a déclaré A est égal à 5. C'est 5. Normalement, il est codé sur 32 bits. Un ensemble de 0, de 0, de 0. À la fin, vous aurez 1, 0 et 1.
6:26
S…
Speaker 6 (Initiation_VHDL_P3)
Mais en tout cas, c'est 32 bits. Alors, pour utiliser ces trois types de données, normalement, vous devez faire appel à cette bibliothèque. Ce n'est pas la bibliothèque, c'est un pactage à l'intérieur de la bibliothèque I3. Alors, pour utiliser Unsigned, Signed ou bien Integer, vous devez faire appel à ce pactage numérique std.on. Alors,
6:57
S…
Speaker 1 (Initiation_VHDL_P3)
Normalement, ce sont les types qu'on va utiliser. Bien sûr, on ne va pas utiliser l'ensemble de ces types de données, mais quand même, c'est à savoir. Alors, je passe vers les types d'objets en VHDL. Alors, normalement, il existe trois classes d'objets. C'est ce qu'on appelle les signaux, les variables et les constantes. Pour les variables et les constantes, vous savez déjà c'est quoi une variable et c'est quoi...
7:25
S…
Speaker 1 (Initiation_VHDL_P3)
Une constante. Il va vous rester tout simplement de savoir comment faire la déclaration et aussi l'affectation d'une variable, d'une constante. Et aussi, je vais vous initier aux signaux. Alors, je vais commencer par les signaux. Un signal, c'est quoi ? Alors, pour savoir c'est quoi un signal, je vais considérer le système suivant. Alors, normalement, ça, c'est le circuit d'un multiplexeur 2 fois 1. Alors, celui-là, il est équivalent.
7:57
S…
Speaker 1 (Initiation_VHDL_P3)
Au schéma suivant, alors ici j'ai A, j'ai C, et la broche de sélection c'est B, avec une sortie je vais considérer ça c'est Y, et ça c'est égal. Alors le schéma suivant, il est équivalent à un multiplexeur qui a normalement deux entrées et une sortie.
8:22
S…
Speaker 5 (Initiation_VHDL_P3)
Si on veut voir par exemple ce circuit-là comme étant, voir tout simplement la vue externe, on peut dire que j'ai trois entrées et j'ai une seule.
8:32
S…
Speaker 3 (Initiation_VHDL_P3)
Une seule sortie. Si on veut voir la vue interne du composant, bien l'architecture, on peut voir qu'il est constitué de plusieurs blocs. Alors le premier bloc, il est là. Le deuxième, il est là. Et le troisième, il est là. Les blocs pour nous, ce sont les circuits logiques, c'est-à-dire le AND et le OU.
8:53
S…
Speaker 3 (Initiation_VHDL_P3)
Alors un signal, c'est quoi ? Alors lorsque, par exemple, mon système est constitué de plusieurs blocs, c'est-à-dire la structure interne de mon système est constituée de plusieurs blocs, les fils de liaison entre les blocs, par exemple celui-là, et celui-là sont considérés comme étant des signaux. Et lors de la programmation, on doit déclarer ces liaisons-là, parce qu'ils font la liaison entre deux blocs ou bien deux éléments d'un circuit numérique destin.
9:20
S…
Speaker 3 (Initiation_VHDL_P3)
Alors, celui-là, il est séparé de celui-là, et celui-là, il est séparé de celui-là. Pour faire la liaison, même dans la programmation, on doit déclarer ces signaux-là. Alors, ce que vous devez retenir, c'est qu'un signal, normalement, c'est un fil de connexion ou bien d'interconnexion entre les éléments d'un système numérique.
9:39
S…
Speaker 4 (Initiation_VHDL_P3)
Normalement, puisqu'on va les utiliser, la déclaration de ces signaux se fait avant le mot begin de l'architecture. Alors, si vous vous souvenez de ça, normalement, l'architecture va commencer par l'entête architecture. J'aurai une zone ici, le mot begin, et une autre zone ici, et la fin.
10:00
S…
Speaker 1 (Initiation_VHDL_P3)
Alors, la déclaration se fait avant le mot « begin ». Ici. Alors, comment peut-on déclarer un signal ? C'est comme ça. Tout simplement, vous allez écrire « signal », le mot-clé « signal ». Les noms des signaux S1 et S2, par exemple, puisque ce sont deux signaux de même type, je peux les regrouper dans la même ligne. Deux points STD logique. Alors ici, c'est le type.
10:28
S…
Speaker 1 (Initiation_VHDL_P3)
Le type d'objet, c'est un signal. Le nom de l'objet et le type. Est-ce que c'est un esthédiologique, esthédiologique vector, un entier, signé, non signé, etc. Pour faire l'affectation des signaux, on utilise le symbole suivant. On a déjà utilisé ça lorsqu'on a fait l'affectation de la somme et de la retenue. Si vous vous rappelez, on a fait S reçoit.
10:59
S…
Speaker 1 (Initiation_VHDL_P3)
A, Xa, B. Et on a fait C reçoit A, B. Alors le S et le C sont considérés comme étant des signaux. Alors aussi, ici pour S1, il va recevoir quoi normalement c'est A and la négation de B. Alors c'est ça. S1 va recevoir A and not B. Not c'est la négation. S2, il va recevoir...
11:29
S…
Speaker 1 (Initiation_VHDL_P3)
Celui-là, c, and, b. Ici, il n'y a pas de négation, donc direct. C'est bon. Alors, pour l'affectation, c'est comme ça. Vous utilisez toujours le symbole suivant. Alors ça, c'est concernant les signaux. Je passe vers les variables. Alors, les variables, comme dans les langages de programmation, normalement, ce sont des entités qui changent de valeur au cours d'exécution du programme.
11:58
S…
Speaker 1 (Initiation_VHDL_P3)
Mais la particularité du VHDL, c'est que je ne peux pas utiliser les variables dans un programme normal. Je peux utiliser les variables tout simplement à l'intérieur d'un bloc de code appelé process. Je vais l'expliquer tout de suite. Alors, ces variables-là ne peuvent être déclarées qu'à l'intérieur d'un processus. Donc, ces variables-là peuvent être considérées comme étant des variables locales à ce processus.
12:28
S…
Speaker 1 (Initiation_VHDL_P3)
Pour déclarer une variable, on va utiliser les lignes de code suivantes. Par exemple, ici, on commence toujours par le type d'objet. Alors, je veux déclarer une variable, le nom de la variable, deux points, et le type de la variable. Si vous voulez faire l'initialisation, vous pouvez utiliser deux points égales avec la valeur que vous voulez. C'est bon ? Sinon, vous pouvez directement déclarer comme celui-là. Alors ici, j'ai déclaré une variable. Le nom, c'est V2. Le type, c'est...
12:58
S…
Speaker 1 (Initiation_VHDL_P3)
C'est bon. L'affectation, normalement, pour les variables, se fait par deux points égales. Tout à l'heure, on a vu que l'affectation pour les signaux se fait par le symbole suivant. Alors, pour les variables, se fait par deux points égales. C'est-à-dire, je veux affecter 5 à var 1, je vais utiliser cette ligne de code. Var 1, point égal, 5. Et de la même chose, var 2, point égal, var 1 plus 2, c'est-à-dire que j'aurai...
13:27
S…
Speaker 1 (Initiation_VHDL_P3)
Var 2 égale à 7. Alors la question qui se pose ici, c'est quoi un process ? Ou bien un processus ? Comme j'ai dit tout à l'heure, c'est un bloc de code. Un bloc de code, c'est-à-dire que j'ai un début et j'ai une fin. Ce bloc de code, il va être déclenché suite à un changement d'état d'un ensemble de signaux appelé la liste de sensibilité. Alors ces signaux-là.
13:58
S…
Speaker 1 (Initiation_VHDL_P3)
Pour commencer un process, vous commencez toujours par le mot-clé process. Entre parenthèses, vous allez mettre les signaux. Suite à leur changement, je vais déclencher le processus. Donc c'est un bloc de code qui est, on peut dire, en veille.
14:16
S…
Speaker 1 (Initiation_VHDL_P3)
et qu'il va être déclenché suite à un changement d'état dans une liste appelée liste de sensibilité. Alors, dans ce cas-là, on a une liste de sensibilité, c'est A, B et C. Alors, suite à un changement d'état de ces trois signaux, le processus va être déclenché, c'est-à-dire que l'ensemble des instructions que vous avez à l'intérieur du processus vont être exécutées. C'est bon ? Voilà.
14:46
S…
Speaker 2 (Initiation_VHDL_P3)
La particularité des processus, c'est que normalement, l'exécution des instructions à l'intérieur du processus se fait d'une manière séquentielle. Séquentielle, ça veut quoi dire ?
15:00
S…
Speaker 2 (Initiation_VHDL_P3)
que l'ordre d'exécution des instructions est tellement important. C'est-à-dire qu'il va suivre le fil d'exécution normal comme dans le langage C, c'est-à-dire que c'est séquentiel. Par contre, à l'extérieur d'un processus, normalement, l'exécution des instructions se fait d'une manière concurrente. Ça veut quoi dire ? Ça veut dire qu'ils s'exécutent en parallèle. C'est-à-dire que, bien sûr, l'ordre d'exécution n'est pas important. Alors, tout à l'heure, lorsqu'on a fait l'affectation de S,
15:30
S…
Speaker 2 (Initiation_VHDL_P3)
Par exemple, l'égal, je vais répéter une autre fois, XOR B, SC reçoit A et B. Alors ici, normalement, l'ordre d'exécution n'est pas important parce que les deux vont être exécutés en parallèle. Voilà, ça c'est ce qu'on appelle des instructions concurrentes.
15:53
S…
Speaker 2 (Initiation_VHDL_P3)
Alors, ce que vous devez savoir, c'est qu'un processus est utilisé lorsque, par exemple, notre système utilise des instructions séquentielles. Séquentielles, ça veut quoi dire ? Ça veut dire que l'état actuel du système dépend bien sûr de l'état précédent dans mon système. Donc, je dois garder ce fil-là, la relation entre l'état actuel et l'état précédent.
16:19
S…
Speaker 2 (Initiation_VHDL_P3)
Vous allez comprendre ça lorsqu'on va faire, par exemple, lorsqu'on va décrire le comportement d'une bascule D en utilisant les processus. Alors, je vais passer. Normalement, il y en a trois syntaxes que vous pouvez utiliser pour la création d'un processus. Alors, soit le syntaxe qu'on a vu tout à l'heure. Alors, ici, la liste des sensibilités, c'est A et B. Suite à un changement dans les états de A et B, ce code-là va être exécuté.
16:52
S…
Speaker 2 (Initiation_VHDL_P3)
Alors la deuxième version, vous pouvez voir que je n'ai pas une liste de sensibilité ici, mais j'ai une instruction wait on. Wait on en anglais, ça veut dire tout simplement que je vais attendre jusqu'à ce qu'il y en a un changement de A ou bien de B. Alors c'est la même chose. Moi c'est la troisième, mais avec le wait on et tout de suite après le mot clé begin.
17:22
S…
Speaker 2 (Initiation_VHDL_P3)
Alors dans ce cas, normalement, la différence entre ces deux, c'est que ici, normalement, le processus va s'exécuter et il va attendre jusqu'à ce que A et B changent de valeur pour réexécuter, normalement pour faire la réexécution une autre fois. Pour le troisième, normalement non. Pour le troisième, je vais attendre jusqu'à ce qu'il y en a un changement de A ou bien de B et je vais commencer à exécuter mon processus.
17:52
S…
Speaker 2 (Initiation_VHDL_P3)
puisque notre programme va s'exécuter comme étant une boucle. Alors, on ne va pas voir le changement, on ne va pas voir la différence entre les trois. Ça va donner la même chose. Alors, je passe vers le dernier type. Ce sont les constantes. Alors, excusez-moi, une minute j'arrive. Alors, on va enchaîner avec le dernier type d'objet. Ce sont les constantes.
18:24
S…
Speaker 1 (Initiation_VHDL_P3)
Une constante, c'est généralement une entité que normalement on fixe dans le programme, c'est-à-dire que c'est quelque chose qu'on va utiliser dans notre programme, mais quand même, il représente une valeur référence à quelque chose. Par exemple, VCC, directement VCC est égal à 1, c'est un état logique 1. Dans les systèmes embarqués, GNT, c'est un état 0. La même chose pour déclarer...
18:50
S…
Speaker 1 (Initiation_VHDL_P3)
Une constante, on commence toujours par le type d'objet, une constante, le nom de la constante, deux points, le type et la valeur si vous voulez faire l'initialisation. Aussi pour l'affectation des constantes, vous allez utiliser deux points égales. Les signaux sont les seules entités ou bien les seuls objets qui vont être affectés en utilisant le symbole suivant, inférieur ou égal. On ne va pas perdre beaucoup de temps dans ça, c'est simple.
19:20
S…
Speaker 1 (Initiation_VHDL_P3)
Les variables, les constantes, ce n'est pas grande chose. Alors, ce que vous devez savoir, c'est qu'aussi les constantes, une autre remarque, les constantes vont être déclarées avant le mot begin de l'architecture. Alors, c'est la même chose que les signaux. Les constantes, ce sont des constantes globales pour la totalité de l'architecture, donc elles vont être déclarées avant le mot begin dans la zone de déclaration de l'architecture. Pour les variables, je répète, on a dit qu'elles sont des...
19:50
S…
Speaker 1 (Initiation_VHDL_P3)
des variables locales au processus alors ils sont pas connus à l'extérieur du processus
20:00
S…
Speaker 1 (Initiation_VHDL_P3)
Normalement, pour faire la description matérielle d'un circuit numérique, on doit savoir les deux types de circuits qu'on a. Alors, on a soit des circuits combinatoires, soit des circuits séquenciers. Les circuits combinatoires, ce sont des circuits dont la sortie ne dépend pas des états passés.
20:23
S…
Speaker 1 (Initiation_VHDL_P3)
C'est-à-dire que la sortie dépend généralement de l'entrée directement. Il n'y a pas une interférence avec l'état précédent du système. Par contre, les circuits séquentiels, ce sont les circuits dont l'état actuel ou bien la sortie actuelle du système dépend des états précédents de mon système numérique. Par exemple, une bascule D. Une bascule D, c'est une bascule de mémorisation qui s'utilise dans les mémoires.
20:52
S…
Speaker 1 (Initiation_VHDL_P3)
La bascule D, elle va garder sa valeur s'il y en a 0. Elle va changer vers D s'il y en a 1. Alors, elle toujours dépend de l'état précédent et je dois savoir toujours l'état de la sortie de la bascule précédente. Alors, pour les systèmes combinatoires, par exemple, un multiplexeur, un additionneur, un décodeur 7 segments, ce sont des circuits combinatoires. Et pour les circuits séquentiels, j'ai un compteur, registre à décalage, et les machines à état,
21:22
S…
Speaker 1 (Initiation_VHDL_P3)
Fini ou bien les automates. Aussi pour les circuits séquentiels, ce sont des circuits qui nécessitent une synchronisation. Ou bien une horloge pour la synchronisation des différents tâches. Alors ici on parle de la logique séquentielle. Et aussi ici on parle de la logique combinatoire. La logique combinatoire, l'ordre d'exécution n'est pas important. La logique séquentielle, l'ordre d'exécution des instructions est tellement important. C'est bon ? Alors, passons maintenant.
21:54
S…
Speaker 1 (Initiation_VHDL_P3)
à la manière de décrire une architecture. Normalement, une architecture peut être décrite, on peut la voir selon trois vues ou bien selon trois descriptions. J'ai ce qu'on appelle la description en flux de données, data flow, description structurelle et description comportementale. Alors, je vais commencer directement par la description en flux de données.
22:20
S…
Speaker 1 (Initiation_VHDL_P3)
Alors, dans cette description, on va décrire le comportement du circuit en termes de flux de données. Donc, directement, on va donner la... c'est-à-dire comment les données circulent à l'intérieur du circuit. On va utiliser directement des fonctions logiques. Alors, les fonctions logiques qui vont directement... ou bien les fonctions logiques qui décrivent le comportement de ce circuit.
22:48
S…
Speaker 1 (Initiation_VHDL_P3)
le demi-additionnaire. Alors, vous pouvez voir ici. Alors ici, c'est une architecture nommée DF. C'est pour Data Flow. Of HA. HA, c'est pour Half Adder. Is. C'est ce qu'on a fait. Normalement, ici, il y a une erreur. Je dois mettre DF. C'est bon. Je dois utiliser...
23:10
S…
Speaker 1 (Initiation_VHDL_P3)
Le même nom de l'architecture. En tout cas, description en flux de données, c'est-à-dire que vous allez décrire votre système en utilisant des fonctions logiques, rien d'autre. Généralement, ce type d'architecture utilise des instructions concurrentes. Comme celle-là. Concurrence, c'est-à-dire que l'ordre d'exécution n'est pas important. Je peux commencer par C, quand je peux commencer par S. L'exécution se fait en parallèle et en même temps.
23:40
S…
Speaker 1 (Initiation_VHDL_P3)
Le deuxième type, on va faire un petit exemple d'un circuit combinatoire. Le circuit qu'on va faire, c'est un multiplexeur 2 fois 1. Normalement, l'exemple, c'est quoi ? L'exercice est quoi ? C'est décrire un programme VHDL qui permet de décrire le fonctionnement d'un multiplexeur 2 fois 1 en utilisant la description en flux de données, c'est-à-dire en donnant directement l'équation ou bien la fonction logique.
24:12
S…
Speaker 1 (Initiation_VHDL_P3)
Alors, comme on a dit tout à l'heure, pour décrire un système, on a besoin de deux choses. Alors, premièrement, je dois définir ou bien déclarer l'entité. L'entité, elle est en relation avec la vue externe du système. Alors, notre système, elle est là. Si on veut le voir comme étant une boîte noire, on peut voir directement que j'ai deux entrées, pardon, plus trois entrées. Alors, I0 et I1.
24:39
S…
Speaker 1 (Initiation_VHDL_P3)
et la broche de sélection, et j'ai une sortie C, c'est Y. Alors en fonction de S, Y va prendre soit I0, soit I1. Si S est égal à 0, il va prendre I0. Si S est égal à 1, il va prendre I1. Alors l'entité est la suivante.
25:00
S…
Speaker 1 (Initiation_VHDL_P3)
J'ai appelé cette entité MUX 2x1, IS. Les PORCONA, I0, I1 et S, ce sont des entrées de type STD logique. Et Y, c'est une sortie de type STD logique. Alors cette entité m'a permis de définir la vue externe de ce multiplex. C'est bon ?
25:25
S…
Speaker 1 (Initiation_VHDL_P3)
Alors, pour réellement décrire le circuit, on doit aussi décrire la vue interne, ou bien le comportement de ce système. Alors, pour faire, on doit savoir le circuit numérique du système. Alors, celui-là, ou bien le comportement d'un multiplexeur, 2 fois 1, peut être obtenu en utilisant le circuit suivant. Alors, j'ai S. Donc, en fonction de S, Y va prendre...
25:53
S…
Speaker 2 (Initiation_VHDL_P3)
des valeurs. Alors ici, si je veux, par exemple, tracer la table de vérité, alors j'aurai S plutôt, excusez-moi, alors j'aurai S et j'aurai Y. Alors pour S, c'est 0, 1. Alors si c'est 0, Y va prendre I0. Si c'est 1, Y va prendre I1. Alors si je veux la fonction logique,
26:26
S…
Speaker 2 (Initiation_VHDL_P3)
Y va être égal à I0 fois S1 plus I1 fois S. I1 fois S. Alors, ça c'est quoi ? C'est tout simplement la fonction logique permettant de faire la liaison entre Y et la sortie avec les entrées. Alors, c'est ce qu'on va essayer de faire en code. Alors voilà, Y.
27:03
S…
Speaker 1 (Initiation_VHDL_P3)
va être égal à I0S par plus I1S. Alors en général, lorsqu'on veut faire la description en utilisant une description en flux de données, on doit extraire directement la fonction logique, ou bien l'équation logique décrivant le comportement du circuit. Pour faire l'architecture, alors on va commencer, normalement, je vais donner directement l'architecture et je vais expliquer.
27:29
S…
Speaker 1 (Initiation_VHDL_P3)
Alors, on commence par architecture. Le nom de l'architecture, c'est architecture dataflow, ou bien flux de données, de multiplexer 2x1. Alors, je dois mettre le même nom. Begin, il n'y a pas de signaux. Alors ici, on n'a pas considéré des signaux. Tout à l'heure, on a mis ici S1 et ici S2, mais dans la description flux de données, on ne va pas faire ça. C'est-à-dire, on ne va pas considérer...
27:57
S…
Speaker 1 (Initiation_VHDL_P3)
des signaux. Ce qu'on va faire, c'est directement donner l'équation logique ou bien décrire le circuit en utilisant l'équation logique. Voilà. Y, la sortie, va recevoir directement I0 and not s. Ça. Alors cette ligne-là, ou bien cette partie de code, elle va traiter vers celle-là. Ou, c'est-à-dire or, I1 and s. Elle est là.
28:24
S…
Speaker 1 (Initiation_VHDL_P3)
Alors, ce qu'on a fait ici, on a décrit le comportement du multiplexeur en utilisant une description en fluide de donne. C'est bon ? Alors, voilà. Si on veut le programme complet, c'est ça. Alors, je vais essayer d'implémenter ça aussi dans ce Quartus. Alors, je vais partir vers Quartus. Elle est là. Je vais créer, comme d'habitude,
29:01
S…
Speaker 3 (Initiation_VHDL_P3)
Un nouveau projet, donc File, New Project Brazil. Je vais sélectionner un dossier dans lequel je vais mettre l'ensemble des fichiers utilisés dans le multiplexer. Alors, je vais rentrer ici. Nouveau dossier, je vais mettre un mix de 1. Parce que j'ai déjà un dossier mix de fois 1, je vais faire un mix 21. Voilà, je vais sélectionner.
29:36
S…
Speaker 3 (Initiation_VHDL_P3)
le dossier. Ici, je vais mettre Mux le nom du projet Mux de 1. Next. Je n'ai pas de données ou bien de fichiers à ajouter. Next. On ne va pas spécifier la carte puisqu'on ne va pas faire une implémentation réelle sur les FPGA.
30:00
S…
Speaker 1 (Initiation_VHDL_P3)
Et aussi, on n'a pas un système de simulation. Donc, je vais faire next et finish. Alors, vous pouvez voir qu'une autre fois ici, j'ai un projet mux 2x1. Alors, pour décrire le comportement de ce multiplexeur, je dois créer un fichier VHDN. Alors, je pars vers files, ou bien directement, vous pouvez cliquer sur ce bouton-là, new, ou bien ctrl-n. La même chose, ctrl-n.
30:31
S…
Speaker 1 (Initiation_VHDL_P3)
Vous sélectionnez VHDL file. Alors, la première des choses, je vais importer la librairie E3E et d'utiliser le pactage STD logique en all. Alors, l'utilité de celui-là, comme j'ai dit tout à l'heure, c'est de faire l'appel aux différentes fonctions, mais aussi au type STD logique. C'est bon ? Alors, pour définir le multiplexeur, je vais...
31:03
S…
Speaker 1 (Initiation_VHDL_P3)
Je vais essayer de prendre la même description qu'on a fait. Alors, entity mux 2 x 1 is. Je vais définir les parts. Alors, on va refaire ça tous ensemble en se basant tout simplement sur le schéma. Alors, je vais essayer de faire retour. Alors, comme ça. Alors, on a trois entrées de type trois entrées.
31:43
S…
Speaker 1 (Initiation_VHDL_P3)
Alors in de type std logique. Et j'ai une sortie. Alors out de type std aussi logique. Je ne fais pas le point-virgule ici. Je vais le mettre après la parenthèse. Et je fais and mux 2 fois 1. Point-virgule. Alors on a déclaré notre entité. On va définir l'architecture. Alors architecture.
32:14
S…
Speaker 2 (Initiation_VHDL_P3)
Arch, par exemple, la même chose, df, ou bien dataflow, of mix, deux fois un, is, le mot clé begin, pour commencer notre architecture, et je vais mettre y, reçoit, j'ouvre la parenthèse, alors, is erou, and, not, s, or, i1, and, s.
32:56
S…
Speaker 1 (Initiation_VHDL_P3)
Je termine l'architecture. Alors ici, on a réussi à quoi faire ? A décrire le comportement d'un multiplexeur 2 fois 1 en utilisant une description en flux de données, c'est-à-dire en donnant directement les équations logiques.
33:18
S…
Speaker 1 (Initiation_VHDL_P3)
Alors, je vais enregistrer le fichier avec le même nom de l'entité. Vous faites attention, vous devez enregistrer le fichier avec le même nom de l'entité. Alors, enregistrer. Je vais compiler pour savoir est-ce qu'il y en a des erreurs ou non. Alors, il n'y a pas d'erreurs, juste des warnings, ça ne nous intéresse pas. Alors, notre programme est juste. Alors, si on veut tester ce multiplexer-là,
34:09
S…
Speaker 1 (Initiation_VHDL_P3)
On doit créer un fichier de test. Alors, File, New, et vous allez partir vers University Program VWF, Virtual Waveform File. Vous cliquez OK. Alors, je vais prendre mon circuit ici, ou bien la fenêtre là. Alors, je vais ajouter les nœuds. On a déjà fait ça, alors je suis en train de répéter.
34:40
S…
Speaker 1 (Initiation_VHDL_P3)
Je vais prendre toutes les entrées sorties et je mets OK. Je clique sur OK une autre fois. Je vais définir ici la sensibilité horizontale, plutôt la taille de l'écran ou bien de mon écran.
35:00
S…
Speaker 2 (Initiation_VHDL_P3)
ou bien de l'espace de travail. Alors je vais faire 10 nanosecondes, par exemple. 10 nanosecondes. Je vais aussi définir la taille de la grille. Alors ici, 1 nanoseconde, c'est-à-dire pour avoir des périodes de 1 nanoseconde. Et je vais forcer I0 et I1 à des valeurs aléatoires.
35:49
S…
Speaker 1 (Initiation_VHDL_P3)
Je vais mettre par exemple ici 0,1, je vais mettre ici une période de 3 nanosecondes, tout simplement pour avoir des valeurs différentes. Pour le S, je vais mettre une cloque dans la fréquence C2 nanosecondes. Alors, ces valeurs-là, ce sont des valeurs arbitraires. L'essentiel, c'est de savoir est-ce que, réellement, en utilisant cette description-là, mon système va me permettre de décrire le comportement, ou bien mon code va me permettre de décrire le comportement d'un multiplexeur.
36:23
S…
Speaker 2 (Initiation_VHDL_P3)
Alors, je vais simuler, mais avant la simulation, je dois enregistrer le fichier. Alors, CTRL-S. Je vais le nommer, par exemple, test MUX2.1. C'est un nom, c'est rien. Donc, je vais enregistrer et je vais lancer la simulation. Voilà, on va vérifier. Est-ce que ça marche ?
37:05
S…
Speaker 1 (Initiation_VHDL_P3)
Je vais résumer un petit peu. Je vais prendre cette partie, on va voir. Alors, normalement, si S est égal à 0, il doit prendre la valeur de I0. Si S est égal à 1, il doit prendre la valeur de I1. Alors, pour le moment, ici, S est égal à 0. Puisque S est égal à 0, il doit prendre toujours la valeur de quoi ? Y doit prendre la valeur de I1. Alors, ici, I0.
37:36
S…
Speaker 1 (Initiation_VHDL_P3)
Alors Y est égal à I0. On va partir vers le cas où S est égal à 1. Alors I0, vous pouvez voir que durant cet intervalle, la totalité de cet intervalle, attendez, cet intervalle, on a S est égal à 0. Alors pour Y, il va directement copier le comportement de I1. Vous pouvez voir ici 0, 1, aussi ici 0,
38:12
S…
Speaker 1 (Initiation_VHDL_P3)
On passe vers le cas où S, celui-là, est égal à 1. Alors S est égal à 1, c'est-à-dire que Y va recevoir la valeur de Y de I1 plutôt. Alors voilà, S est égal à 1. Voilà le comportement de I1. On peut voir que Y a coupé exactement le...
38:34
S…
Speaker 1 (Initiation_VHDL_P3)
Comportement 2 et 1. Alors, ça fonctionne à 100%. En tout cas, vous pouvez refaire ça et vérifier chaque état toute seule. Alors, je vais faire retour au cours. Continuer. Alors, c'est ça, la description en flux de données. Alors ici, en créant ce composant, normalement, ou bien en décrivant le comportement,
39:01
S…
Speaker 1 (Initiation_VHDL_P3)
d'un multiplexeur 2 fois 1, je peux utiliser ce code-là par la suite comme étant un sous-programme ou bien ce qu'on appelle un composant, component. Par exemple, si je veux faire la description d'un multiplexeur 4 fois 1, je peux utiliser un multiplexeur 2 fois 1. Je peux utiliser plutôt 3 multiplexeurs 2 fois 1 pour représenter le comportement d'un multiplexeur 4 fois 1.
39:32
S…
Speaker 1 (Initiation_VHDL_P3)
Dans la suite de cours, on va considérer que j'ai déjà créé un composant 2 x 1, dont son code est celui-là. Je vais vous montrer comment utiliser ce composant par la suite. Alors, je passe vers le deuxième type de description des architectures, c'est la description structurelle. Alors, la description structurelle, c'est une description dans laquelle on va créer des composants, comme le cas.
40:00
S…
Speaker 1 (Initiation_VHDL_P3)
du multiplicateur 2 fois 1. Et par la suite, je vais utiliser ces composants-là pour créer un autre composant. C'est bon ? Alors, ce que vous avez ici, c'est normalement une architecture qui utilise deux composants. Alors, pour déclarer un composant, pour faire l'appel d'un composant, on utilise ce bloc de code qui commence par component et qui va se terminer par end component.
40:28
S…
Speaker 1 (Initiation_VHDL_P3)
Ici, le nom du composant, is, et on définit les ports. Alors, la définition des ports doit être la même de la définition des ports dans le composant. Je vais vous montrer ça dans l'exemple, donc ne vous inquiétez pas. Ce que vous devez savoir, c'est que dans la description structurelle, on va utiliser des composants à l'intérieur, ou bien pour définir, pour décrire, on va utiliser des sous-composants pour décrire le comportement du composant qu'on est en train de décrire.
40:57
S…
Speaker 1 (Initiation_VHDL_P3)
En tout cas, on va utiliser ce qu'on appelle la fonction port map. Alors port map, ce qu'il va faire, c'est de mapper tout simplement les signaux au port d'une instance de composants. Alors ce qui va nous permettre de connecter des signaux internes ou externes à des ports spécifiques du composant lors de l'exécution ou bien l'instantiation dans l'architecture. Pour comprendre comment ça marche, je ne vais pas me tarder dans les explications ici, alors on va faire un petit exemple.
41:26
S…
Speaker 2 (Initiation_VHDL_P3)
Alors l'exemple, c'est quoi ? C'est de décrire le comportement d'un multiplexeur 4 fois 1 en se basant sur un multiplexeur 2 fois 1. Alors, ce que je vais faire, je vais réserver une autre vidéo pour ça parce que ça va prendre beaucoup du temps. Et voilà, donc, la vidéo prochaine.
This transcript was generated by AI (automatic speech recognition). May contain errors — verify against the original audio for critical use. AI policy
Sammendrag
Trykk Summarize for å lage et AI- sammendrag av denne utskrifta.
Summarerer...
Spør AI om dette transkriptet
Spør noe om denne utskrifta – AI- en vil finne relevante avsnitt og svar.