Post on 08-Aug-2015
description
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”,
etc, rutine de afişare şi operatori similare lui C. El diferă însă fundamental de C în anumite
6
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ă.
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.
7
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 iesirilebegin 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 tempend 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 ISEND 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';wait for Clock_period/2;Clock <= '1';
10
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 , // clockreset , // resetenable , // activare numarătorcounter_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 wirereg [3:0] counter_out ;
//------------Început cod------------------------------// Numărătorul va număra la frontul pozitiv al clockalways @ (posedge clock)// doar la frontul pozitivbegin : 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; endend // End of Block COUNTERendmodule // End of Module counter
12
Mai jos este prezentat codul sursă pentru generatorul de stimuli.
module first_counter_tb;// declarare intrări și ieșirireg clock, reset, enable;wire [3:0] counter_out;
// inițializarea variabilelorinitial 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 simulationend
// generator de ceasalways begin #5 clock = ~clock; // schimbare front la fiecare 5 impulsuriend
// 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