Conception VLSI - Introduction VHDL

VHDL est synonyme de langage de description de matériel de circuit intégré à très haute vitesse. C'est un langage de programmation utilisé pour modéliser un système numérique par flux de données, style comportemental et structurel de modélisation. Ce langage a été introduit pour la première fois en 1981 pour le département de la Défense (DoD) dans le cadre du programme VHSIC.

Décrire un design

En VHDL, une entité est utilisée pour décrire un module matériel. Une entité peut être décrite en utilisant,

  • Déclaration d'entité
  • Architecture
  • Configuration
  • Déclaration de colis
  • Corps du paquet

Voyons ce que c'est?

Déclaration d'entité

Il définit les noms, les signaux de sortie d'entrée et les modes d'un module matériel.

Syntax -

entity entity_name is
   Port declaration;
end entity_name;

Une déclaration d'entité doit commencer par «entité» et se terminer par des mots-clés «fin». La direction sera entrée, sortie ou inout.

Dans Le port peut être lu
En dehors Le port peut être écrit
Inout Le port peut être lu et écrit
Tampon Le port peut être lu et écrit, il ne peut avoir qu'une seule source.

Architecture -

L'architecture peut être décrite en utilisant un style structurel, de flux de données, comportemental ou mixte.

Syntax -

architecture architecture_name of entity_name 
architecture_declarative_part;

begin
   Statements;
end architecture_name;

Ici, nous devons spécifier le nom de l'entité pour laquelle nous écrivons le corps de l'architecture. Les déclarations d'architecture doivent être à l'intérieur des mots-clés «begin» et «énd». La partie déclarative de l'architecture peut contenir des variables, des constantes ou une déclaration de composant.

Modélisation des flux de données

Dans ce style de modélisation, le flux de données à travers l'entité est exprimé à l'aide d'un signal simultané (parallèle). Les instructions simultanées dans VHDL sont WHEN et GENERATE.

Outre eux, les affectations utilisant uniquement des opérateurs (AND, NOT, +, *, sll, etc.) peuvent également être utilisées pour construire du code.

Enfin, un type spécial d'affectation, appelé BLOCK, peut également être utilisé dans ce type de code.

Dans le code simultané, les éléments suivants peuvent être utilisés -

  • Operators
  • L'instruction WHEN (WHEN / ELSE ou WITH / SELECT / WHEN);
  • L'instruction GENERATE;
  • L'instruction BLOCK

Modélisation comportementale

Dans ce style de modélisation, le comportement d'une entité en tant qu'ensemble d'instructions est exécuté séquentiellement dans l'ordre spécifié. Seules les instructions placées dans un PROCESS, FUNCTION ou PROCEDURE sont séquentielles.

PROCESSES, FONCTIONS et PROCÉDURES sont les seules sections de code qui sont exécutées séquentiellement.

Cependant, dans l'ensemble, n'importe lequel de ces blocs est toujours en même temps que toute autre instruction placée en dehors de celui-ci.

Un aspect important du code de comportement est qu'il n'est pas limité à la logique séquentielle. En effet, avec lui, nous pouvons construire des circuits séquentiels ainsi que des circuits combinatoires.

Les instructions de comportement sont IF, WAIT, CASE et LOOP. Les VARIABLES sont également restreintes et sont censées être utilisées uniquement dans le code séquentiel. VARIABLE ne peut jamais être globale, donc sa valeur ne peut pas être transmise directement.

Modélisation structurelle

Dans cette modélisation, une entité est décrite comme un ensemble de composants interconnectés. Une instruction d'instanciation de composant est une instruction simultanée. Par conséquent, l'ordre de ces déclarations n'est pas important. Le style structurel de la modélisation ne décrit qu'une interconnexion de composants (considérés comme des boîtes noires), sans impliquer aucun comportement des composants eux-mêmes ni de l'entité qu'ils représentent collectivement.

Dans la modélisation structurelle, le corps de l'architecture est composé de deux parties: la partie déclarative (avant le mot-clé begin) et la partie instruction (après le mot-clé begin).

Fonctionnement logique - AND GATE

X Oui Z
0 0 0
0 1 0
1 0 0
1 1 1

VHDL Code:
Library ieee;
use ieee.std_logic_1164.all;

entity and1 is
   port(x,y:in bit ; z:out bit);
end and1;

architecture virat of and1 is
begin
   z<=x and y; 
end virat;

Formes d'onde

Fonctionnement logique - OU Gate

X Oui Z
0 0 0
0 1 1
1 0 1
1 1 1

VHDL Code: 
Library ieee; 
use ieee.std_logic_1164.all;  

entity or1 is
   port(x,y:in bit ; z:out bit); 
end or1; 
 
architecture virat of or1 is
begin
   z<=x or y; 
end virat;

Formes d'onde

Opération logique - PAS Gate

X Oui
0 1
1 0

VHDL Code:
  
Library ieee; 
use ieee.std_logic_1164.all; 
 
entity not1 is
   port(x:in bit ; y:out bit); 
end not1; 
 
architecture virat of not1 is
begin
   y<=not x;
end virat;

Formes d'onde

Fonctionnement logique - NAND Gate

X Oui z
0 0 1
0 1 1
1 0 1
1 1 0

VHDL Code:
  
Library ieee; 
use ieee.std_logic_1164.all; 

entity nand1 is
   port(a,b:in bit ; c:out bit); 
end nand1; 
 
architecture virat of nand1 is
begin
   c<=a nand b; 
end virat;

Formes d'onde

Fonctionnement logique - Porte NOR

X Oui z
0 0 1
0 1 0
1 0 0
1 1 0

VHDL Code: 
 
Library ieee; 
use ieee.std_logic_1164.all; 
 
entity nor1 is
   port(a,b:in bit ; c:out bit); 
end nor1; 
 
architecture virat of nor1 is
begin
   c<=a nor b;
end virat;

Formes d'onde

Fonctionnement logique - XOR Gate

X Oui Z
0 0 1
0 1 1
1 0 1
1 1 0

VHDL Code: 
 
Library ieee; 
use ieee.std_logic_1164.all;
  
entity xor1 is
   port(a,b:in bit ; c:out bit); 
end xor1;
  
architecture virat of xor1 is
begin
   c<=a xor b; 
end virat;

Formes d'onde

Fonctionnement logique - X-NOR Gate

X Oui Z
0 0 1
0 1 1
1 0 1
1 1 0

VHDL Code: 
 
Library ieee; 
use ieee.std_logic_1164.all; 

entity xnor1 is
   port(a,b:in bit ; c:out bit); 
end xnor1; 
 
architecture virat of xnor1 is
begin
   c<=not(a xor b); 
end virat;

Formes d'onde