Sunteți pe pagina 1din 16

VHDL Ș I VERILOG

Cuprins

Introducere.................................................................................................................................3
VHDL.........................................................................................................................................4
VERILOG..................................................................................................................................6
Simularea unui numărător pe 4 biți în VHDL............................................................................9
Simularea unui numărător pe 4 biți în Verilog.........................................................................12
Concluzii..................................................................................................................................15
Bibliografie..............................................................................................................................16

2
Introducere

Un FPGA (Field Programmable Gate Array) este un circuit integrat digital


configurabil, de către utilizator, după ce a fost fabricat (spre deosebire de dispozivele a căror
funcție este implementată in procesul de fabricație). Configurarea FPGA se face, in general,
cu ajutorul unui limbaj de descriere hardware HDL, similar cu cel folosit pentru dispozivele
ASIC, dezvoltându-se recent și compilatoare care traduc intructiuni din limbajul C în limbaje
HDL.
FPGA-urile sunt alcătuite din blocuri logice configurabile (programabile) legate între
ele de o serie de conexiuni configurabile la rândul lor. Blocuri logice pot fii configurate
pentru a efectua funcții complexe combinaționale, sau pur și simplu porti simple, logice, cum
ar fi AND și XOR. În cele mai multe FPGA-uri, blocuri logice includ, de asemenea, elemente
de memorie, care pot fi simple, blocuri de flip-flops sau mai multe complete de memorie.
În cadrul programării acestor circuite în general se folosesc două limbaje de
programare HDL (hardware description language): VHDL ș VERILOG. Aceste două limbaje
de programare sunt folosite de către proiectanții hardware, fiecare dintre ele având avantaje
și dezavantaje. Alegerea limbajului de programare nu este foarte important dacă se realizează
o proiectare de nivel mic-mediu, însă când este nevoie de proiectare avansată este bine de
reținut faptul că avem de ales între VHDL sau VERILOG fiecare dintre ele se pretează cel
mai bine la un anumit lucru.

3
VHDL

VHDL este unul dintre limbajele standard folosite în industrie la ora actuală, pentru a
descrie sistemele numerice. VHDL înseamnă VHSIC (Very High Speed Integrated Circuits)
Hardware Description Language adică un limbaj pentru descriere hardware a circuitelor
integrate de foarte mare viteză. Iniţial, acest limbaj foarte asemănător cu limbajul ADA, a
fost destinat doar modelării şi simulării unor circuite ASIC complexe şi numai ulterior a fost
utilizat pentru sinteza şi implementarea logicii corespunzătoare. Aşa cum s-a menţionat deja,
un sistem numeric poate fi reprezentat la diferite nivele de abstractizare. Acest lucru
facilitează mai ales descrierea şi proiectarea sistemelor complexe. Cel mai înalt nivel de
abstractizare este nivelul de descriere al comportării (funcţionării) numit în engleză
behavioral. La acest nivel de abstractizare un sistem este descris prin ceea ce face, adică
modul cum se comportă şi nu prin componentele sale şi conexiunile dintre acestea. O
descriere de acest tip specific relaţiile dintre semnalele de intrare şi ieşire. Descrierea poate fi
o expresie booleană sau o descriere mai abstractă, la nivelul transferului între registre sau la
nivelul algoritmilor. Ca un exemplu tipic să considerăm un circuit simplu care avertizează
pasagerul atunci când uşa automobilului este deschisă sau centura nu este folosită, de fiecare
dată când se introduce cheia în contact. Descrierea la nivel funcţional s-ar putea face în
modul următor :
Avertizare utilizator = Contact AND (Usa_deschisa OR Nu_Centura)
Nivelul structural, spre deosebire de nivelul 'behavioral', descrie un sistem ca o colecţie de
porţi şi componente care sunt conectate între ele pentru a realiza funcţia dorită. O
reprezentare structurală poate fi comparată cu o schemă de porţi logice conectate între ele.
Aceasta este o reprezentare care se apropie mai mult de realizarea fizică a sistemului.
Limbajul VHDL permite reprezentarea sistemelor la nivel funcţional (behavioral) sau
structural. Nivelul behavioral poate fi împărţit în două stiluri de reprezentare: al fluxului de
date (Data Flow) şi algoritmic. Reprezentarea de tip Data Flow descrie modul cum circulă
datele prin sistem, aceasta realizânduse în termenii transferului de date între registre (RTL).
Această descriere foloseşte instrucţiuni concurente, care se execută în paralel în momentul în
care datele sunt prezente la intrare. Pe de altă parte în reprezentarea de tip algoritmic
instrucţiunile sunt secvenţiale şi se execută în ordinea specificată. VHDL permite atribuirea
semnalelor în ambele moduri (secvenţial şi concurent).

4
Avantajele limbajului VHDL
 Este foarte puternic tipizat şi permite programatorilor să-şi definească propriile lor
tipuri deşi, în practică se utilizează tipurile de bază şi cele definite de IEEE.
Beneficiul constă în faptul că verificarea tipului se realizează de către compilator,
ceea ce reduce erorile; dezavantajul este că schimbarea tipului trebuie făcută explicit.
 Se permit instanţieri condiţionale de module (if/for ... generate)
 Se furnizează un mecanism simplu (construcţia configure) care permite proiectantului
să comute uşor între descrieri diferite de module particulare.
 Permite instrucțiuni concurente care rulează în paralel.
 Ușurință în lucrul cu proiecte mari.
 Pachete si librării definite de către utilizator.
 Descrie un sistem(tot unitar) .
 VHDL suportă constructii nesintetizate, care sunt folositoare scrierii de modele de
nivel înalt, masă de lucru, sau artefacte non-hardware sau non sintetizabile pe care le
folosim în design-ul hardware.
 Permite utilizatorului realizarea de tipuri date.

Dezavantajele limbajului VHDL


 Mai greu de învățat față de Verilog pentru că are o gramatică complexă.
 VHDL este prolix, complicat si confuz.
 Conceptele care au scopuri similare au sintaxa foarte diferită (case vs select)
 Conceptele care au sintaxa similare au semantica foarte diferite (variabile vs
semnale)
 Hardware-ul care este sintetizat nu este întotdeauna evident.

5
VERILOG

În anul 1989, GDA (precum şi drepturile asupra Verilog şi Verilog-XL) a fost


cumpărată de către Cadence care a pus Verilog în domeniul public în 1990. Acest lucru a
permis şi altor companii (precum Synopsys) să dezvolte “tools”-uri alternative la Cadence,
ceea ce a permis utilizatorilor să adopte limbajul pe scară largă. Însă, în anul 1981,
Departamentul American al Apărării a sponsorizat un “workshop” pe tema limbajelor de
descriere “hardware” ca parte a programului VHSIC (“Very High Speed Integrated Circuits”)
din care s-au născut specificaţiile pentru VHDL (Vhsic HDL) în anul 1983. Dezvoltat cu
restricţii până în anul 1985, VHDL a devenit standard IEEE 1076 în anul 1987. Acest lucru a
făcut ca, în anul 1990, Verilog să devină un limbaj închis. De aceea, Cadence a organizat
Open Verilog International (OVI) şi a furnizat în anul 1991 documentaţia pentru Verilog
HDL. În anul 1992, OVI (cunoscută acum ca Accellera) a dus o muncă laborioasă de
îmbunătăţire a manualului de referinţă a limbajului (LRM – „Language Reference Manual”)
şi, în anul 1994, grupul de lucru IEEE 1364 a transformat OVI LRM în standard IEEE.
Astfel, în 1995, Verilog-HDL a devenit standard comercial IEEE-1364, fiind referit ca
Verilog-95. Standardul combina atât sintaxa limbajului Verilog, cât şi PLI (“Programming
Language Interface”) într-un singur volum.
În următorii ani au fost adăugate noi caracteristici iar noua versiune a limbajului a devenit
standard IEEE 1364-2001 sau Verilog-2001. Prin îmunătăţiri ulterioare, printr-un proiect
separat System Verilog, limbajul a devenit stahdard IEEE 1364-2005 sau Verilog-2005. Prin
includerea suportului de modelare analogice şi mixte, limbajul a fost referit ca Verilog-AMS.
În anul 2005, de către Co-Design Automation Inc, s-a dezvoltat un limbaj de verificare de
nivel înalt numit Superlog; acest limbaj a fost donat către Accellera, care l-a transformat în
System Verilog, devenind standard IEEE P1800-2005 complet aliniat cu Verilog-2005.
Verilog este un limbaj de descriere “hardware” (HDL) utilizat pentru a modela sisteme
numerice. Limbajul suportă proiectare, verificare şi implementare a circuitelor analogice,
digitale şi mixte pe diferite niveluri de abstractizare.
Limbajul are o sintaxă similară cu cea a limbajului C, ceea ce îl face familiar în utilizare.
Astfel, ca şi limbajul C, Verilog are un pre-procesor, construcţii de control ca “if”, “while”,

6
etc, rutine de afişare şi operatori similare lui C. El diferă însă fundamental de C în anumite
aspecte, ca de exemplu: utilizează begin/end pentru delimitarea blocurilor de cod, utilizează
constante definite pe dimensiuni de biţi, nu are structuri, pointeri şi subrutine recursive
(totuşi, System Verilog include acum aceste capabilităţi) şi lucrează cu conceptul de timp,
important pentru sincronizare.
Limbajul diferă de un limbaj convenţional în sensul că execuţia instrucţiunilor nu este
strict liniară. Un proiect Verilog constă într-o ierarhie de module. Modulele sunt definite ca
un set de porturi de intrare, ieşire şi bidirecţionale. Intern, modulele conţin fire de legătură şi
registre. Relaţia dintre porturi, fire şi registre este definită prin construcţii concurente şi
secvenţiale care stabilesc comprtamentul modului. Construcţiile secvenţiale sunt plasate în
interiorul blocurilor şi sunt executate în ordine secvenşială în cadrul blocului. Toate
construcţiile concurente şi blocurile din proiect sunt executate în paralel. Un modul poate
conţine şi una sau mai multe instanţe ale altor module definite în ierarhie.
Un subset de construcţii din limbaj sunt sintetizabile. Daca modulele din proiect
conţin numai construcţii sintetizabile, programul Verilog poate fi utilizat pentru a sintetiza
proiectul într-o listă de legături care descrie componentele de bază şi conexiunile ce vor fi
implementate “hardware”. Lista de legături poate fi apoi transformată într-o formă care
descrie celule standard ale unui circuit integrat (cum este ASIC – “Application Specific
Integrated Circuit”) sau un flux de biţi (“bitstream”) pentru un dispozitiv logic programabil
(cum este FPGA – “Field Programmable Gate Arrays”).
Actualmente există o concurenţă puternică între limbajele VHDL şi Verilog, ceea ce impune
prezentarea unei scurte comparaţii între cele două limbaje.
O prima diferenţă între limbaje este sintaxa – după cum Verilog este bazat pe C iar VHDL
este bazat pe ADA.
Verilog este uşor de invăţat pentru ca C este mai simplu. El produce astfel mai mult
cod compact, atât pentru citire, cât şi pentru scriere. Mai mult, proiectanţii (care deja ştiu C
comparativ cu cei care ştiu ADA) îl învaţă şi fac “training” mai uşor.

Verilog include PLI care permite accesul dinamic la structurile de date, ceea ce oferă
programatorilor un grad de control mai mare asupra simulării iar proiectanţilor posibilitatea
dezvoltării mediului de proiectare prin includerea de interfeţe grafice sau rutine de tip C
pentru a calcula întârzierile în analiza sincronizării. Pragmatic, un proiectant ar fi bine să le
ştie pe amândouă.

7
Verilog este alcătuit dintr-o ierarhie de module. Modulele sunt definite ca un set de
porturi de intrare, ieşire şi bidirecţionale. Intern, modulele conţin fire de legătură şi registre.
Relaţia dintre porturi, fire şi registre este definită prin construcţii concurente şi secvenţiale
care stabilesc comprtamentul modului. Construcţiile secvenţiale sunt plasate în interiorul
blocurilor şi sunt executate în ordine secvențială în cadrul blocului. Toate construcţiile
concurente şi blocurile din proiect sunt executate în paralel. Un modul poate conţine şi una
sau mai multe instanţe ale altor module definite în ierarhie.

Avantajele limbajului VERILOG


 Nivel de programare abstract.
 Limbaj ușor de învățat pentru cei care cunosc C.
 Verilog a fost original dezvoltat pentru modelare la nivel de poartă si este foarte bun
pentru modelare low level coborând până la nivel de celulă.
 Se asigură faptul că toate semnalele sunt iniţializate ca nedefinite ceea ce asigură că
toţi proiectanţii vor furniza logica necesară de iniţializare a proiectelor lor (tipurile de
bază din VHDL iniţializează la 0).

Dezavantajele limbajului VERILOG


 Parametrizare simplă.
 Limbaj slab consistent.Dacă nu menții anumit stil de coordonare pot apărea probleme.
 Nu exista concept de pachete. Funcțiile și procedurile utilizate in cadrul modelului
trebuie sa definească modului. Ca să putem construii functii și proceduri general
accesibile din diferite declarații funcțiile și procedurile trebuie plasate separat în
sistem și incluse folosind directiva include .
 Tipuri de date redus.
 Verilog nu foloseste librării.
 În Verilog nu existăinformatii ajutătoare pentru managementul proiectelor mari.

8
Simularea unui numă ră tor pe 4 biți în VHDL

Pentru exemplificarea sintaxei și modului de funcționare al unui program scris în


VHDL am ales un numărător crescător pe 4 biți. În continuare voi prezenta programul
precum și rezultatul simulării sale în Altera Model Sim.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity Counter2_VHDL is – declarare porturi I/O


port(
Clock: in std_logic;
Reset: in std_logic;
Output: out std_logic_vector(0 to 3));
end Counter2_VHDL;
-–program principal--------------------------------------
architecture Behavioral of Counter2_VHDL is
signal temp: std_logic_vector(0 to 3):= "0000";--setam 0 iesirile
begin process(Clock,Reset)
begin
if Reset='1' then -–resetare iesire pentru reset = HI
temp <= "0000";
end if; -- nu avem reset ? contiună sa numeri
temp <= temp + 1;
end process;
Output <= temp; --setează iesirea cu valoarea temp
end Behavioral;

9
Odată compilat cu succes mai există încă un pas de realizat înainte de a simula
programul. Pentru a putea simula în Model Sim avem nevoie de un fisier care conține
declaratiile stimulilor specifici acestui program si anume un test bench. Acest fisier este ca o
masă de lucru pentru program pentru că generează semnalele necesare funcionării modulului.
Mai jos este prezentat codul sursă pentru generatorul de stimuli.
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY vhdl_4_bittb IS
END vhdl_4_bittb;

ARCHITECTURE behavior OF vhdl_4_bittb IS

-- Component Declaration for the Unit Under Test (UUT)


COMPONENT Counter2_VHDL
PORT(
Clock : IN std_logic;
Reset : IN std_logic;
Output : OUT std_logic_vector(0 to 3)
);
END COMPONENT;

--Inputs
signal Clock : std_logic := '0';
signal Reset : std_logic := '0';

--Outputs
signal Output : std_logic_vector(0 to 3);

-- Clock period definitions


constant Clock_period : time := 10 ps;

BEGIN

-- Instantiate the Unit Under Test (UUT)


uut: Counter2_VHDL PORT MAP (
Clock => Clock,
Reset => Reset,
Output => Output
);

-- Clock process definitions


Clock_process :process
begin
Clock <= '0';

10
wait for Clock_period/2;
Clock <= '1';
wait for Clock_period/2;
end process;

-- Stimulus process
stim_proc: process
begin
-- hold reset state for 100 ns.
wait for 10 ps;

wait for Clock_period*10;

-- insert stimulus here

wait;
end process;

END;

În figura de mai jos este ilustrată o parte din simularea modulului numărător pe 4 biți.

După cum am văzut fisierul test bench asociat VHDL este destul de complex, și greoi
din punct de vedere al structurii sale.

11
Simularea unui numă ră tor pe 4 biți în Verilog

Pentru exemplificarea sintaxei și modului de funcționare al unui program scris în


verilog am ales la fel ca și pentru VHDL un numărător crescător pe 4 biți. În continuare voi
prezenta programul precum și rezultatul simulării sale în Altera Model Sim.

module 4bit_counter (
clock , // clock
reset , // reset
enable , // activare numarător
counter_out // 4 bit vector output
); // final listă porturi
//-------------Declarare intrări-----------------------
input clock ;
input reset ;
input enable ;
//-------------Declarare ieșiri------------------------
output [3:0] counter_out ;
//-------------Asignare tip de data intrărilor---------
// După reguli toate intrările se declară wire
wire clock ;
wire reset ;
wire enable ;
//------------- Asignare tip de data ieșiri------------
// Portul de ieșire poate fii reg sau wire
reg [3:0] counter_out ;

//------------Început cod------------------------------
// Numărătorul va număra la frontul pozitiv al clock
always @ (posedge clock)// doar la frontul pozitiv
begin : COUNTER // nume bloc
// la fiecare front crescator de ceas verificăm dacă
//există semnal de reset,
// dacă da setăm ieșirea pe 0, adica 4'b0000
if (reset == 1'b1) begin
counter_out <= #1 4'b0000;
end
//dacă exista semnal de activare se va incrementa valoarea ieșirii
else if (enable == 1'b1) begin
counter_out <= #1 counter_out + 1;
end
end // End of Block COUNTER
endmodule // End of Module counter

12
Mai jos este prezentat codul sursă pentru generatorul de stimuli.

module first_counter_tb;
// declarare intrări și ieșiri
reg clock, reset, enable;
wire [3:0] counter_out;

// inițializarea variabilelor
initial begin
$display ("time\t clk reset enable counter");
$monitor ("%g\t %b %b %b %b",
$time, clock, reset, enable, counter_out);
clock = 1; // initial value of clock
reset = 0; // initial value of reset
enable = 0; // initial value of enable
#5 reset = 1; // Assert the reset
#10 reset = 0; // De-assert the reset
#10 enable = 1; // Assert enable
#100 enable = 0; // De-assert enable
#5 $finish; // Terminate simulation
end

// generator de ceas
always begin
#5 clock = ~clock; // schimbare front la fiecare 5 impulsuri
end

// Conectare program la masa de lucru


4bit_counter U_counter (
clock,
reset,
enable,
counter_out
);

endmodule

Fisierul test bench asociat Verilog este concis, usor de înțeles și oferă un control direct asupra
stimulilor.

13
În figura de mai jos este ilustrată o parte din simularea modulului numărător pe 4 biți.

14
Concluzii

VHDL a fost dezvoltat pentru a furniza un limbaj de modelare consistent pentru


documentarea proiectelor digitale hardware. Limbajul nu a fost niciodată impus pentru a
realiza un proiect actual. Cu toate acestea pentru a menține un așa numit avantaj competitiv s-
au făcut investișii pentru a impune acest limbaj standard. Modelele VHDL dezvoltate pe un
sistem nu vor rula pe altul. Limbajul este greu de învățat și mai greu de utilizat. Este foarte
verbose mai ales la nivel de poartă când informatia de timp este specifică și considerabilă.
Prolixitatea VHDL creează severe probleme de memorie încercând să simulăm proiecte
medii-mari. Producătorii de circuite ezită foarte mult în furnizarea de librării VHDL cu acces
direct asupra porților si incluzând temporizare.
Sintaxa complexă a VHDL nu ofera avantaje strategice care să impună o mai bună
calitate a proiectului. Acest lucru subminează puterea de bază a VHDL cum ar fii
productivitatea realizată prin metodologia top-down.
Verilog HDL a fost dezvoltat si va continua să evolueze adresându-se nevoilor
comerciale ceea ce la făcut cel mai de success limbaj utilizat azi. Cât timp inginerii si
companiile lor vor avea nevoie de produse mult mai calitative si inovatoare Verilog HDL va
continua să fie soluția dominantă. În acelasi timp uneltele și simulatoarele dedicate Verilog
devin din ce în ce mai complexe și mai productive.

15
Bibliografie

1.) Xilinx, Inc. – http://www.xilinx.com


2.) FPGA CPLD and ASIC from Altera - www.altera.com
3.) VHDL & Verilog Compared & Contrasted - Plus Modeled Example Written in VHDL,
Verilog and C. -Douglas J. Smith
4.) http://en.wikipedia.org/wiki/VHDL

16

S-ar putea să vă placă și