Projekt VLSI - Wprowadzenie do VHDL

VHDL oznacza język opisu sprzętu z układem scalonym o bardzo dużej szybkości. Jest to język programowania używany do modelowania systemu cyfrowego za pomocą przepływu danych, behawioralnego i strukturalnego stylu modelowania. Język ten został po raz pierwszy wprowadzony w 1981 roku dla Departamentu Obrony (DoD) w ramach programu VHSIC.

Opisywanie projektu

W języku VHDL encja jest używana do opisu modułu sprzętowego. Podmiot można opisać za pomocą

  • Deklaracja podmiotu
  • Architecture
  • Configuration
  • Deklaracja paczki
  • Treść pakietu

Zobaczmy, co to jest?

Deklaracja podmiotu

Definiuje nazwy, sygnały wejściowe i wyjściowe oraz tryby modułu sprzętowego.

Syntax -

entity entity_name is
   Port declaration;
end entity_name;

Deklaracja encji powinna zaczynać się od „entity” i kończyć słowami kluczowymi „end”. Kierunek będzie wejściowy, wyjściowy lub wejściowy.

W Port można odczytać
Na zewnątrz Port można zapisać
Inout Port można odczytywać i zapisywać
Bufor Port można odczytywać i zapisywać, może mieć tylko jedno źródło.

Architecture -

Architekturę można opisać za pomocą stylu strukturalnego, przepływu danych, behawioralnego lub mieszanego.

Syntax -

architecture architecture_name of entity_name 
architecture_declarative_part;

begin
   Statements;
end architecture_name;

Tutaj powinniśmy określić nazwę jednostki, dla której piszemy treść architektury. Instrukcje dotyczące architektury powinny znajdować się wewnątrz słów kluczowych „begin” i „énd”. Część deklaratywna architektury może zawierać zmienne, stałe lub deklaracje komponentów.

Modelowanie przepływu danych

W tym stylu modelowania przepływ danych przez jednostkę jest wyrażany za pomocą sygnału współbieżnego (równoległego). Równoczesne instrukcje w języku VHDL to WHEN i GENERATE.

Oprócz nich do konstruowania kodu można również użyć przypisań wykorzystujących tylko operatory (AND, NOT, +, *, sll itp.).

Wreszcie, w tego rodzaju kodzie można również zastosować specjalny rodzaj przypisania, zwany BLOKIEM.

W kodzie współbieżnym można użyć:

  • Operators
  • Instrukcja WHEN (WHEN / ELSE lub WITH / SELECT / WHEN);
  • Instrukcja GENERATE;
  • Instrukcja BLOCK

Modelowanie behawioralne

W tym stylu modelowania zachowanie jednostki jako zestawu instrukcji jest wykonywane sekwencyjnie w określonej kolejności. Tylko instrukcje umieszczone wewnątrz PROCESU, FUNKCJI lub PROCEDURY są sekwencyjne.

PROCESY, FUNKCJE i PROCEDURY to jedyne sekcje kodu, które są wykonywane sekwencyjnie.

Jednak jako całość każdy z tych bloków jest nadal współbieżny z innymi instrukcjami umieszczonymi poza nim.

Jednym z ważnych aspektów kodu zachowań jest to, że nie jest on ograniczony do logiki sekwencyjnej. Rzeczywiście, dzięki niemu możemy budować układy sekwencyjne, a także układy kombinacyjne.

Instrukcje zachowania to IF, WAIT, CASE i LOOP. ZMIENNE są również ograniczone i powinny być używane tylko w kodzie sekwencyjnym. VARIABLE nigdy nie może być globalna, więc jej wartość nie może być przekazywana bezpośrednio.

Modelowanie strukturalne

W tym modelowaniu jednostka jest opisywana jako zbiór połączonych ze sobą komponentów. Instrukcja tworzenia instancji składnika jest instrukcją współbieżną. Dlatego kolejność tych stwierdzeń nie jest ważna. Strukturalny styl modelowania opisuje jedynie wzajemne połączenia komponentów (postrzegane jako czarne skrzynki), bez narzucania żadnego zachowania samych komponentów ani bytu, który wspólnie reprezentują.

W modelowaniu strukturalnym ciało architektury składa się z dwóch części - części deklaratywnej (przed słowem kluczowym begin) i części instrukcji (po słowie kluczowym begin).

Operacja logiczna - AND GATE

X Y 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;

Przebiegi

Operacja logiczna - OR Brama

X Y 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;

Przebiegi

Operacja logiczna - NIE bramka

X Y
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;

Przebiegi

Operacja logiczna - bramka NAND

X Y 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;

Przebiegi

Operacja logiczna - bramka NOR

X Y 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;

Przebiegi

Operacja logiczna - bramka XOR

X Y 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;

Przebiegi

Operacja logiczna - bramka X-NOR

X Y 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;

Przebiegi