vhdl vs verilog

22

Click here to load reader

Upload: torjoc-florin

Post on 08-Aug-2015

170 views

Category:

Documents


0 download

DESCRIPTION

Vhdl vs Verilog cu exemple

TRANSCRIPT

Page 1: Vhdl vs Verilog

VHDL ȘI VERILOG

Page 2: Vhdl vs 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

Page 3: Vhdl vs Verilog

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

Page 4: Vhdl vs Verilog

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

Page 5: Vhdl vs Verilog

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

Page 6: Vhdl vs Verilog

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

Page 7: Vhdl vs Verilog

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

Page 8: Vhdl vs Verilog

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

Page 9: Vhdl vs Verilog

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

Page 10: Vhdl vs Verilog

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

Page 11: Vhdl vs Verilog

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

Page 12: Vhdl vs Verilog

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

Page 13: Vhdl vs Verilog

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

Page 14: Vhdl vs Verilog

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

14

Page 15: Vhdl vs Verilog

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

Page 16: Vhdl vs Verilog

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