Documente Academic
Documente Profesional
Documente Cultură
sunt limbaje
VHDL (VHSIC HDL - Very High Speed Integrated Circuit Hardware Description
Language) - standard IEEE 1076 din 1987. A fost refacut in 1993, devenind " standard IEEE
1076 /1993".
Verilog HDL este mai vechi decat VHDL si este utilizat intensiv din 1983. A devenit IEEE
standard 1364 I /1995.
Pentru a modela hardware in orice limbaj HDL sunt importante 2 aspecte: comportamentul
abstract si structura hardware.
VHDL/Verilog
comparatie
Capabilitatea:
Structura hardware poate fi modelala in ambele tipuri de limbaj. Alegerea unui tip de limbaj
se face in functie de preferinta personala, disponibilitate in uneltele de dezvoltare etc.
Compilarea
VHDL.
Multiple unitati de design (perechi entitate/arhitectura = entity/architecture), care se afla in
acelasi fisier sistem, pot fi compilate separate. Un design bine proiectat va avea fiecare unitate
in alt fisier.
Verilog.
Trebuie tinut cont de ordinea in care se face compilarea codului scris intr-un singur fisier si
compilarea mai multor fisiere. Rezultatele simularii se pot schimba prin simpla schimbare a
ordinii compilarii.
Tipuri de date
VHDL.
Se pot folosi mai multe tipuri de date definite in limbaj cat si definite de utilizator. Exista
functii dedicate care fac conversia dintr-un tip in alt tip de date. VHDL este preferat, deoarece
ofera o flexibilitate mai mare.
Verilog.
Comparat cu VHDL, tipurile de date din Verilog sunt mai simple, usor de folosit si apropiate
modelarii structurii hardware in opozitie cu modelarea hardware abstracta.
Nu sunt premise tipuri de date definite de utilizator.
Exemplu de tipuri de date: net, wire, reg (registru).
Reutilizarea design-ului
VHDL. Procedurile si functiile pot fi plasate in pachet (package) astfel incat sa fie disponibile
pentru orice design.
Verilog. Nu exista un concept de pachet ca in VHDL. Functiile si procedurile utilizate intr-un
model trebuie definite in modul. Pentru a le face accesibile din diferite module, se vor plasa in
fisiere separate si incluse unde este nevoie prin folosirea directivei de compilare include .
Usurinta de invatare
Verilog este probabil mai usor de invatat. VHDL poate parea mai putin intuitiv dar dupa
invatare este mai robust, mai puternic. Sunt mai multe posibilitati de a modela acelasi circuit,
mai ales pentru structuri mari, ierarhice.
Extensia de limbaj
VHDL. Are un atribut denumit 'foreign care permit arhitecturilor si subprogramelor sa fie
modelate in alte limbaje.
Verilog. Foloseste Programming Language Interface (PLI)
mecanism de interfata intre
modelul Verilog si uneltele de dezvoltare pentru Verilog. Un vanzator de unelte pentru Verilog
poate specifica functii in limbajul C si apelarea din descrierea surselor in Verilog.
Utilizarea acestor functii speciale va face ca modelele sa fie nestandard si se poate sa nu poata
fi folosite de alte unelte Verilog. Utilizarea nu este recomandata.
Biblioteci
VHDL. O biblioteca este pentru a stoca entitati compilate, arhitecturi, pachete si configuratii.
Sunt utile pentru proiecte cu multiple design-uri.
Verilog. Nu exista conceptul de biblioteca in Verilog. Aceasta se datoreaza faptului ca la
origini este un limbaj interpretativ.
Operatori
Majoritatea operatorilor sunt la fel in cele 2 limbaje. Verilog are operatori unari de reducere,
ceea ce in VHDL se rezolva prin bucle. VHDL are modul operator care nu este si in Verilog.
Parametrizarea modelelor.
VHDL. Un model specific de o anumite latime de biti poate fi instantiat printr-un model generic
de n-bit, folosind o declaratie de tip generic. Modelul generic nu va fi sintetizabil decat daca
este instantiat si este data valoarea generica.
Verilog. O latime specifica de bit intr-un model poate fi instantiata de la un model generic n-bit
folosind suprascrierea parametrilor. Modelul generic trebuie sa aiba o valoare implicita definita.
Proceduri si task-uri
VHDL permite apelarea procedurilor concurente. Verilog nu permite apelul concurent.
Usurinta intelegerii codului
VHDL este un limbaj concis cu radacini in limbajul Ada. Verilog este mai apropiat de C
deoarece constructia lui este 50% C si 50% Ada.
Replicarea structurala
VHDL. Declaratia generate statement permite folosirea unui numar de instante ale aceluiasi
design si conectarea potrivita a acestora.
Verilog. Nu are un echivalent pentru generate.
VHDL
Bazele limbajului
VHDL
Aria de utilizare
Hardware design
ASIC: technology mapping
FPGA: CLB mapping
Solutii standard, modele, descrieri comportamentale
Software design
VHDL - C interface (unelte specifice)
cercetare (hardware/software co-design). Intrebarea care se pune este ce parte
trebuie implementate in software si ce parte in hardware. (constrangerile vor fi
date de performante, cerinte si pret)
IEEE std 1164-1993 - package STD_LOGIC_1164. Include tipuri referitoare la hardware si functii de
conversie.
IEEE std 1076a - imbunatateste folosirea variabilelor partajate
IEEE std 1076.1 VHDL-AMS, - standard extins pentru analogic.
IEEE std 1076.2
pentru imaginare.
IEEE std 1076.3
pachete matematice. Este divizat intr-un pachet pentru numere reale si alt pachet
operatori si tipuri descrisi pentru sinteza.
Execution of assignments:
Sequential
Concurrent
Methodologies: tehnici de
modelare
Abstraction
Modularity
Hierarchy
Declaratiile sunt active continuu, ordinea nu este importanta. Sunt potrivite pentru modele
paralele.
Abstractizare permite descrierea diferitelor parti din sistem. Informatia care este prea in
detaliu si nu este importanta pentru descriere va fi indepartata. Nivelul de abstractizare este
caracterizat de informatii comune pentru toate modelele de la acest nivel.
Nivelul de abstractizare in proiectarea IC
RT Level in VHDL
Fiecare elemnt al circuitului (ex. U86) este instantiat ca si componenta (ND2) si este
conectata la semnalele corespunzatoare (n192, n191, n188). Fiecare poarta folosita
apartine unei biblioteci unde se gasesc si informatii aditionale cum ar fi aria, intarzierile de
propagare, capacitate etc.
Modularitatea si ierarhia
Procesul de proiectare incepe cu faza de specificare. Componenta care este proiectata este
definita in ceea ce priveste functiile, interfata etc.
Modulele continute trebuie definite la nivel de sistem (system level). Se descrie interfata (intrari,
iesiri, formatul datelor), marimea clock-ului, mecanismul de reset. Pe baza acestei informatii se
poate implementa si modelul de simulare. Modelul comportamental poate fi integrat in sistem
folosind modele deja existente.
La nivel logic (logic level) - modelul trebuie descris avand in vedere toate aspectele necesare
pentru a fi sintetizabil. In urma sintezei din descrierea modelului abstract se deriva functiile
boolean si se mapeaza elementele in blocurile logice configurabile ale FPGA sau in biblioteca de
porti pentru ASIC. Rezultatul este o lista de legaturi, netlist la nivel de poarta - gate level
Fiecare tranzitie la un nivel de abstractizare de nivel mai scazut va fi verificat prin validari
functionale (validation). Pentru acest scop, se simuleaza descrierea in asa fel incat pentru toti
stimulii (=semnale de intrare pentru simulare) se compara cu raspunsurile modulului.
VHDL este potrivit pentru proiectare de la system level la gate level.
Generalitati
Comentarii: '--' pana la sfarsitul liniei
Declaratiile se termina cu ';
Delimitator lista ','
Atribuire semnal: '<='
Nume definite de utilizator:
litere, numere, underscores
Incep cu o litera
-- an example signal
Ex. declararea
unui port este
permisa numai
in entitate
Structura generala a
arhitecturii
Conectare ierarhica
Un modul poate fi alcatuit din mai multe sub-module. Conexiunea dintre submodule este definita
intr-o arhitectura de tip top module . Exemplu: un modul fulladder poate fi realizat din 2
module halfadders (module1, module2) si o poarta OR (module3).
O arhitectura structurala va contine o lista de componente si definirea interconexiunilor.
Exemplu proces:
Exemplu proces:
Exemplu proces:
package
colecteaza declaratii folosite in mod global pentru diferite unitati de design. Este alcatuit
din: declaratii de tip, constante, sub-programe etc. Acestea vor fi vizibile in orice unitate de design dintrun proiect si pot fi compilate intr-o biblioteca pentru o utilizare ulterioara. Consta din 2 parti: parte
declarativa si optional dintr-un corp. Se va folosi use pentru a putea fi folosit in unitatile de design.
Exemplu:
Biblioteci (library)
Toate procesele se executa paralel, fara sa conteze entitatea sau nivelul ierarhic unde sunt
localizate. Comunica intre ele prin intermediul semnalelor. (signals)
Tipuri de baza (folosite la descrierea unui design pentru sinteza sau folosite pentru a crea
teste functionale unde de test): signals, variables si constants (semnale, variabile si
constante)
Fiecare obiect declarat are un tip de date specific - data type (cum ar fi bit sau integer) cu
un set unic de posibile valori. Exemplu: un obiect de tip bit poate avea numai doua valori
posibile, '0' si '1',
Nota: Simbolul VHDL <= - reprezinta operatorul de atribuire (asignare) (atribuie valoarea din partea
dreapta pentru variabila din partea stanga )
reprezinta un singur fir (wire) care poate avea diferite valori logice
std_ulogic este un tip enumerare similar cu tipul bit din standardul 1076. Este un tip de
date unresolved . Un semnal de acest tip poate avea numai un singur driver,
Tipul std_ulogic_vector
Reprezinta o colectie de fire (wire) sau un bus de marime arbitrara.
type std_ulogic_vector is array ( natural range <> ) of std_ulogic;
Std_ulogic_vector
bit_vector.
Tipul Std_logic
Este un tip de date resolved bazat pe std_ulogic (este un sub-tip), cu urmatoarea
declaratie:
subtype std_logic is resolved std_ulogic;
In cazul driverelor multiple, cele noua valori std_logic sunt rezolvate cu valori dupa cum
urmeaza: ("std_logic" permite existenta driverelor multiple pentru un semnal simplu)
Operatori standard:
Valorile, semnalele si variabilele unui tip pot fi combinate in expresii prin folosirea operatorilor
comentariu
declarare library se incarca biblioteca IEEE.
Use - specifica ce anume din biblioteca ieee
este disponibil pentru design-ul realizat
(declarat prin antitate si arhitectura). Forma
generala include 3 campuri, separate prin
punct.
std_logic si std_logic_vector, sunt tipuri de
date standard din IEEE 1164 standard si in
biblioteca asociata IEEE
Descrie functionalitatea
comparatorului
ANEXE
Problema: Realizarea unui algoritm si a unui circuit care realizeaza operatia de aflare a celui mai
mare divizor comun. Se vor folosi limbajele VHDL, Verilog, C
1) Se vor realiza la nivel de algoritm 3 algoritmi care vor determina cel mai mare divizor comun (Greatest
Common Divisor (GCD)) in C si in 2 limbaje de descriere hardware: VHDL si Verilog.
2) Se vor modela algoritmii GCD la nivelul RTL pentru sinteza in ambele tipuri de limbaje HDL, VHDL si
Verilog. Modelul trebuie sa fie generic, astfel incat sa fie aplicabil pt diferite latimi de biti.
Semnalul Load indica cand datele de intrare sunt valide
Semnalul led Done va fi activat in momentul ibn care datele de iesire sunt valide
Modelul Generic se va verifica pentru semnale de 8 biti..
3) Se vor face testari ale modelelor: 1) la nivel de algoritm se va folosi acelasi fisier 2). Se vor instantia
ambele modele RTL si la nivel de porta sintetizabila si se vor simula si testa in acelasi timp.
Fisierul de test:
file: gcd_test_data.txt
21
49
7
25
30
5
19
27
1
40
40
40
250
190
10
5
250
5
file: gcd_test_data_hex.txt
15
31
7
19
1E
5
13
1B
1
28
28
28
FA
6E
A
5
FA
5
// Decimal
// Decimal
// Decimal
// Decimal
// Decimal
// Decimal
21
25
19
40
250
5
49
30
27
40
190
250
7
5
1
40
10
5
Algoritmul modelat in C
#include <stdio.h>
main ()
{
int A_in, B_in, A, B, Swap, Y, Y_Ref, Passed;
FILE *file_pointer;
file_pointer = fopen("gcd_test_data.txt", "r");
Passed = 1;
while (!feof(file_pointer))
{
/*------------------------------------*/
/* Read test data from file
*/
/*------------------------------------*/
fscanf (file_pointer, "%d %d %d\n", &A_in, &B_in, &Y_Ref);
/*----------------------------------*/
/* Model GCD algorithm
*/
/*----------------------------------*/
A = A_in;
B = B_in;
if (A != 0 && B != 0)
{
while (B != 0)
{
while (A >= B)
{
A = A - B;
}
Swap = A;
A = B;
B = Swap;
}
}
else
{
A = 0;
}
Y = A;
/*------------------------------*/
/* Test GCD algorithm
*/
/*------------------------------*/
if (Y != Y_Ref)
{
printf ("Error. A=%d B=%d Y=%d Y_Ref= %d\n", A_in, B_in, Y, Y_Ref);
Passed = 0;
}
}
if (Passed = 1) printf ("GCD algorithm test passed ok\n");
}
Algoritmul in Verilog
Modelul Verilog va urma de asemenea principiile descrise in C.
O diferenta majora este aceea ca Verilog nu poate citi valori zecimale dintr-un fisier. Datele citite dintr-un
fisier sunt:
1) citire folosind $readmemh sau $readmemb si
2) stocarea in memorie. Datele de citire vor fi in format binary sau in hex. Se va folosi fisierul
"gcd_test_data_hex.txt"
Verilog algorithmic level model
module GCD_ALG;
parameter Width = 8;
reg [Width-1:0] A_in, B_in, A, B, Y, Y_Ref;
reg [Width-1:0] A_reg,B_reg,Swap;
parameter GCD_tests = 6;
integer N, M;
reg Passed, FailTime;
integer SimResults;
// Declare memory array for test data
// ---------------------------------reg [Width-1:1] AB_Y_Ref_Arr[1:GCD_tests*3];
//---------------------------------// Model GCD algorithm
//---------------------------------always @(A or B)
begin: GCD
A = A_in;
B = B_in;
if (A != 0 && B != 0)
while (B != 0)
while (A >= B) begin
A = A - B;
Swap = A;
A = B;
B = Swap;
end
else
A = 0;
Y = A;
end
Daca A_hold este mai mic decat B_hold, scaderea nu se face, A_New va avea valoarea B_hold, schimbarea
va fi facuta dupa urmatorul front pozitiv al semnalului de ceas.
Al doilea if verifica daca B_hold are valoarea 0.
Daca da, semnalul Done=1, valoarea A_ hold este incarcata la iesirea Y prin intermediul unei functii de
multiplexare.
Problema este sintetizabila pentru un model generic cu semnale de 8 biti.
In Verilog se seteaza parametrul Width=8. Nu mai nevoie de a fi instantiat separate inainte de a fi sintetizat.
In VHDL se foloseste generic. Valoarea este specificata numai in momentul instantierii
Done:
out std_logic;
Y:
Referinte bibliografice:
[1] Douglas J. Smith - VHDL & Verilog Compared & Contrasted - Plus Modeled Example Written in
VHDL, Verilog and C
[2] - http://www.vhdl-online.de/tutorial/englisch/t_13.htm
[3] - Accolade VHDL Reference Guide - http://www.acc-eda.com/vhdlref/
[4] Prof. Sherief Reda Division of Engineering, Brown University Spring 2007 - Reconfigurable
Computing
[5] - Dr. Gilles SASSATELLI- Lecture on Reconfigurable Technologies, 2009