Documente Academic
Documente Profesional
Documente Cultură
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
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.
5
VERILOG
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.
8
Simularea unui numă ră tor pe 4 biți în VHDL
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
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;
--Inputs
signal Clock : std_logic := '0';
signal Reset : std_logic := '0';
--Outputs
signal Output : std_logic_vector(0 to 3);
BEGIN
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;
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
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
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
15
Bibliografie
16