Documente Academic
Documente Profesional
Documente Cultură
2019
Cuvânt c tre cetitor
Prezenta carte este a doua în seria de autor "Carte de înv t, tur ". Dup prima carte, "Electronic digital
aceast a doua carte cuprinde lect, ii de Verilog.
- Carte de înv t, tur 2.0",
Lect, iile sunt utilizate la disciplina "Limbaje de descriere hardware" predat la Universitatea Transilvania din
Bras, ov.
Verilog este un limbaj de descriere hardware (engl. HDL = Hardware Description Language) a c rui denumire
provine din concatenarea cuvintelor din limba englez "Very-logic" (foarte logic).
Abordarea lect, iilor de Verilog necesit cunoas, terea not, iunilor de electronic digital . Pentru a rezolvate
activit t, ile practice propuse în cadrul ec rei lect, ii este necesar cunoas, terea de c tre student, i a not, iunilor
teoretice prezentate în preambulul lect, iei.
A fost intent, ia autorului ca activit t, ile practice propuse s necesite un timp de realizare mai mare decât cele
dou ore alocate unui laborator. Fiecare student este stimulat s realizeze cât mai mult din aceste activit t, i.
Student, ii dornici de a înv t, a mai mult în acest domeniu sunt invitat, i s acorde timp suplimentar pentru realizarea
tuturor activit t, ilor propuse de lect, ii.
Aceast abordare permite inginerilor care lucreaz în domeniul de modelare Verilog s revin la lect, iile din
aceast carte de înv t, tur s, i dup absolvire, pentru a g si aici mai mult ajutor decât au remarcat în timpul
studiilor.
Lect, iile se bazez pe simulatorul ModelSim PE Student Edition, release 10.4a, care ruleaz sub sistem de
operare Windows. Acest simulator poate desc rcat gratuit de c tre student, i, de pe site-ul produc torului.
www.mentor.com/company/higher_ed/modelsim-student-edition
Pentru editarea codului Verilog se recomand folosirea editorului Notepad sau a unui editor specializat pentru
Pentru vizualizarea datelor în format binar se recomand folosirea utilitarului HxD Hexeditor .
www.DanNicula.ro/books/verilog
ii Limbaje de descriere hardware - Laborator
Cuprins
6 Modelarea num r toarelor 73
6.1 Scopurile lect, iei 73
6.2 Not, iuni teoretice 73
6.3 Activit t, i practice 78
7 Modelarea FSM 81
7.1 Scopurile lect, iei 81
7.2 Not, iuni teoretice 81
7.3 Activit t, i practice 88
8 Modelarea memoriilor 95
8.1 Scopurile lect, iei 95
8.2 Not, iuni teoretice 95
8.3 Activit t, i practice 101
B Proiect 135
B.1 Cerint, e generale 136
B.2 Module reutilizate 137
B.3 Cerint, e specice 138
B.4 Interfat, 142
B.5 Etape de realizare 143
• Realizarea unui script ce cont, ine comenzi ModelSim pentru rularea automat a simul rii.
Directorul de proiect este directorul din sistemul de siere unde se vor g si toate sierele si bibliotecile
, , ,
asociate proiectului. Utilizatorul trebuie s aib drept de scriere în acest director. În continuare, se va
considera utilizarea directorului C:\home ca ind director de proiect.
Fisierele cu cod surs sunt siere text care contin module Verilog. Se recomand ca ecare modul Verilog
, , ,
s e stocat într-un s, ier separat iar numele s, ierului (cu extensia .v) s e identic cu numele modulului
1
2 LECT, IA 1. Metodologia de simulare a modelelor HDL cu ModelSim
cont, inut. De exemplu, modulul counter_up va inclus în s, ierul counter_up.v. Editarea s, ierelor
surs se va face cu editoare de text simple (nu Word): Notepad, Notepad++, EditPlus+.
Compilarea reprezint conversia codului surs într-un format specic simulatorului. Compilarea necesit ca
parametrii unul sau mai multe nume de s, iere cu cod surs . La simulatorul ModelSim, comanda de
compilare se numes, te vlog.
Biblioteca de lucru este un director unde se vor plasa rezultatele compil rii, în formatul specic simulatoru-
lui. ModelSim este un simulator de cod Verilog/VHDL compilat. În comanda de compilare este necesar
specicarea unei biblioteci unde se va plasa codul compilat. Pentru bibliotec , se recomand folosirea
denumirii implicite work. Rezultatul compil rii se depune în biblioteca specicat (implicit work).
Simularea reprezint procesul de creare a unui model abstract pentru sistemul simulat. La simulatorul Model-
Sim comanda de simulare se numes, te vsim. Comanda de simulare necesit ca parametru un modul Verilog.
Totdeauna modelul ce se pune în simulare nu are porturi. În modulul pus în simulare se instant, iaz modelul
circuitului de testat DUT s, i module sau specicat, ii adit, ionale: generatoarele de stimului TB, monitoarele
de semnale, module care veric asert, ii. Toate aceste module sunt instant, iate în modulul de nivel înalt,
f r porturi, care se lanseaz în simulare.
Rularea modelului reprezint procesul de simulare a function rii sistemului digital în timp. La simulatorul
,
ModelSim, comanda de rulare se numes, te run. Ea are ca parametru timpul pentru care se va rula modelul.
Exist opt, iunea de a se rula modelul la innit, cu comanda run -all.
Modelul RTL (engl. RTL = Register Transfer Level) reprezint un model HDL pentru un circuit ce urmeaz
a implementat în hardware. Datorit proces rii ulterioare automate, sunt acceptate doar anumite
specicat, ii Verilog, posibil de convertit într-o structur hardware. Modelul structural rezultat, denumit
netlist (engl. net-list = list de componente) este un model HDL ce cont, ine instant, e de componente
specice unei biblioteci de tehnologie, interconectate într-o ret, ea. Modelul RTL detaliaz comportamentul
sistemului pân la nivelul transferului de date între elementele de memorare (registre).
Sinteza RTL reprezint procesul de conversie automat a codului RTL într-un netlist, cu ajutorul unor pro-
grame software specializate (engl. EDA = Electronic Design Automation), pe baza unei biblioteci de
tehnologie.
Modulul de testat este modelul pentru circuitul digital ce se va implementa în hardware. Acesta este referit
cu abrevierea DUT. Scopul simul rii este vericarea comportamentului acestui modul prin comparat, ie
cu specicat, iile de proiectare. Modulul de testat trebuie descris în HDL doar cu specicat, ii acceptate de
sintetizatoare RTL. În cazul unor circuite complexe, modulul poate structurat în module de complexitate
mai mic . În cazul unor circuite simple, modelarea este comportamental , la nivel RTL (f r a instat, ia
port, i logice predenite în limbaj sau modele de tranzistoare).
Generatorul de stimuli este modelul pentru sistemul exterior modulului de testat. În cazul unor stimuli
simpli, acest modul poate lipsi, ind înlocuit cu specicat, ii de atribuire de semnale prezente în modulul
de test. Pentru modelarea generatoarelor de stimuli pot folosite orice specicat, ii, deoarece aceste module
au rol exclusiv pentru vericarea DUT (nu se sintetizeaz în hardware).
Modulul de test este modelul pentru sistemul format din modulul de testat DUT s, i generatorul de stimuli
TB. Acest modul cont, ine instant, a modelului DUT care se veric . Al turi de aceasta se pot instant, ia unul
sau mai multe generatoare de stimuli sau module de monitorizare a datelor. Tot aici pot ap rea specicat, ii
pentru vericarea uxului de date (asert, ii). Se remarc faptul c modulul de test are întotdeauna interfat, a
vid (nu are porturi).
Monitoarele de date sunt modele optionale care încapsuleaz reguli de vericare (asertii) asupra datelor.
, ,
Figura 1.1 prezint grac relat, iile dintre diversele modele HDL implicate în simulare. Scopul simul rii este
de a se certica faptul c modulul DUT se comport conform specicat, iilor, prin expunerea acestuia la diverse
scenarii de vericare.
Figura 1.1 Reprezentarea grac a modelelor implicate în simulare: DUT, generator de stimuli TB, monitoare, modul
de test TEST.
În simulatorul ModelSim, modulele implicate în simulare sunt prezentate textual, în fereastra sim. Pentru
cazul unui num r tor presetabil, gura 1.6 prezint grac relat, iile dintre diversele modele HDL implicate în
simulare. Figura 1.12, în fereastra sim, se observ prezentarea textual a relat, iilor dintre module.
• s, iere RTL care modeleaz hardware s, i vor utilizate în continuare pentru sintez ,
• s, iere care modeleaz mediul de vericare s, i sunt utilizate exclusiv pentru vericare,
Într-un proiect mare, num rul acestor s, iere impune o disciplin a gestion ri acestora. De aceea, se im-
pune structurarea riguroas a s, ierelor în directoare specice. O propunere de structurare a directoarelor este
prezentat în continuare. Pentru exemplicare, se consider ca director de proiect directorul C:\home.
• Directorul C:\home\doc cont, ine s, iere cu specicat, ii pentru descrierea comportamentului sau structurii
modelului RTL.
• Directorul C:\home\hdl cont, ine s, iere RTL care modeleaz hardware s, i vor utilizate în continuare pentru
sintez .
• Directorul C:\home\include cont, ine s, iere incluse de c tre modulele RTL care modeleaz asert, ii s, i specicat, ii
utilizate pentru depanarea modulului RTL (comenzi de acces la s, iere în scopul extragerii de date pentru
depanare). Aceste s, iere sunt incluse în simulare dar nu sunt utilizate pentru sinteza RTL.
4 LECT, IA 1. Metodologia de simulare a modelelor HDL cu ModelSim
• Directorul C:\home\debug cont, ine dou directoare cu s, iere utilizate exclusiv pentru depanare.
Directorul C:\home\debug\hdl contine siere utilizate pentru vericare: generatoare de stimuli, medii
, ,
de testare, monitoare.
Directorul C:\home\debug\sim este directorul utilizat ca director de proiect pentru simulator. Aici
se stocheaz s, iere utilizate pentru automatizarea simul rii sim.do, wave.do. Tot aici se va crea,
prin intermediul ModelSim, directorul asociat bibliotecii work în care simulatorul va stoca, într-un
format intern, modulele simulate. Acest director se poate structura, dup necesit t, i, prin crearea
unor directoare specice funct, iilor. De exemplu:
∗ Directorul C:\home\debug\sim\input_data pentru s, iere de date citite de generatoarele de sti-
muli sau de monitoare (s, iere cu datele as, teptate).
∗ Directorul C:\home\debug\sim\output_data pentru s, iere scrise în cursul simul rii cu date
es, antionate în anumite puncte din circuit, la anumite momente de timp.
• În directorul C:\home pot exista s, iere batch (cu extensia .bat) utilizate pentru operat, ii asupra s, ierelor
s, i directoarelor. De exemplu:
Fisierul
, cleanup.bat care include comenzi pentru eliminarea s, ierelor temporare în vederea arhiv rii
proiectului, prin p strarea exclusiv a s, ierelor surs necesare.
Fis, ierul build.bat care colecteaz exclusiv s, ierele RTL în vederea transmiterii acestora spre vericare
sau sintez .
Pentru exemplicare, în continuare se prezint structura de directoare asociat acestei lect, ii.
Directory of c:\home\
cleanup.bat
<DIR> debug
<DIR> hdl
Directory of c:\home\debug
<DIR> hdl
<DIR> sim
Directory of c:\home\debug\hdl
ck_rst_tb.v
counter_preset_tb.v
counter_preset_test.v
Directory of c:\home\debug\sim
sim.do
wave.do
Directory of c:\home\hdl
counter_preset.v
Modelarea reprezint scrierea de c tre proiectant a unui cod HDL RTL. Prin simulare se veric faptul c
acesta se comport conform specicat, iilor de proiectare.
Sinteza reprezint conversia automat a modelului RTL într-un netlist cu componente din biblioteca de
tehnologie. Simularea netlist-ului este necesar deoarece exist posibilitatea ca sintetizatorul s nu pro-
duc structura hardware as, teptat , îndeosebi datorit model rii incorecte de c tre proiectant, ne-observate
în timpul simul rii RTL.
1.4. Cod HDL 5
Implementarea reprezint conversia netlist-ului într-un model la nivel zic, prin plasarea si rutarea compo-
,
nentelor din biblioteca de tehnologie prezente în acest model. La nalul acestei etape se obt, ine un netlist
ce cont, ine informat, ii temporale asociate semnalelor. Aceste informat, ii permit simularea modelului la
frecvent, e reale s, i realizarea diferitelor statistici s, i m sur tori: banda de date necesare, puterea consumat
în regim normal, etc.
Figura 1.2 Metodologia de proiectare a circuitelor integrate digitale. Se observ multiple simul ri în cadrul metodologiei:
simulare RTL, simulare netlist, simulare model temporal.
Simularea modelelor este necesar în cadrul ec rei din cele 3 etape deoarece proces rile intermediare realizate
cu software EDA pot schimba comportamentul modelului RTL init, ial. Fiecare model al sistemului proiectat
(RTL, netlist, model temporal) ar trebui simulat în acelas, i mediu de test. Mediul de testare reprezint un model
pentru sistemul proiectat (DUT) conectat în mediul exterior.
module c o u n t e r _ p r e s e t #(
6 LECT, IA 1. Metodologia de simulare a modelelor HDL cu ModelSim
endmodule // counter_preset
i n i t i a l begin
c l k = 1 ' b0 ;
forever #5 c l k = ~ c l k ;
end
1.4. Cod HDL 7
i n i t i a l begin
rst_n <= 1 ' b1 ;
@( posedge c l k ) ;
rst_n <= 1 ' b0 ;
@( posedge c l k ) ;
@( posedge c l k ) ;
rst_n <= 1 ' b1 ;
@( posedge c l k ) ;
end
endmodule // ck_rst_tb
Fis, ierul counter_preset_tb.v cont, ine un generator de stimuli pentru modulul counter_preset.
module c ou n t e r _ p r e s e t _ t b #(
parameter WIDTH = ' d8 // numar d e biti ai numaratorului
) (
input clk , // semnal de ceas
input rst_n , // semnal de reset asincron , activ low
output reg count_up , // comanda d e numarare , activa high
output reg load , // comanda presetare , activa high ,
// prioritara fata de numarare
output reg [WIDTH − 1:0] data_preset // data presetare
);
i n i t i a l begin
count_up <= 1 ' bx ;
load <= 1 ' bx ;
d a t a _ p r e s e t <= {WIDTH{ 1 ' bx } } ;
// preseteaza starea in 13
load <= 1 ' b1 ;
d a t a _ p r e s e t <= ' d13 ;
@( posedge c l k ) ;
load <= 1 ' b0 ;
d a t a _ p r e s e t <= ' bx ;
@( posedge c l k ) ;
// asteapta
repeat ( 5 ) @( posedge c l k ) ;
end
endmodule // counter_preset_tb
Simbolul acestui modul prezint ies, iri asociate intr rilor circuitului num r tor presetabil DUT (gura 1.5).
Adit, ional, modulul cont, ine intr ri pentru semnalul de ceas s, i cel de reset.
module c o u n t e r _ p r e s e t _ t e s t ;
localparam WIDTH = ' d4 ; // numar d e biti ai numaratorului
1.5. Metodologia de simulare a modelelor HDL cu ModelSim 9
c o u n t e r _ p r e s e t #(
.WIDTH (WIDTH )
) DUT_counter_preset (
. clk ( clk ),
. rst_n ( rst_n ),
. count_up ( count_up ),
. load ( load ),
. data_preset ( data_preset ),
. counter_out ( counter_out ),
. carry_out ( carry_out )
);
ck_rst_tb i_ck_rst_tb (
. clk ( clk ),
. rst_n ( rst_n )
);
co u n t e r _ p r e s e t _ t b #(
.WIDTH (WIDTH )
) i_counter_preset_tb (
. clk ( clk ),
. rst_n ( rst_n ),
. count_up ( count_up ),
. load ( load ),
. data_preset ( data_preset )
);
endmodule // counter_preset_test
Mediul de testare este prezentat grac în gura 1.6. Se observ instant, ierea DUT, a generatorului de semnal
de ceas s, i a generatorului de stimuli pentru num r tor. Porturile de ies, ire ale generatorului de stimuli au fost
conectate la porturile de intrare asociate ale DUT prin intermediul unor semnale cu aceleas, i nume. Parametru
local al modulului de test (WIDTH, cu valoare 4) a fost propagat ca valoare pentru parametrii corespunz tori
ai DUT s, i TB.
• Lansarea simulatorului;
• Init, ierea unui proiect s, i congurarea acestuia;
• Compilarea s, ierelor cu cod surs ;
• Simularea modelului de test;
• Rularea simul rii;
• Diagnoza comportamentului sistemului de testat, prin utilizarea resurselor simulatorului;
• Automatizarea procesului de simulare.
În sect, iunile urm toare se vor detalia aceste etape, cu exemplicare pentru cazul simul rii unui num r tor
sincron presetabil.
• interfat, grac , recomandat pentru depanarea unui modul, permite vizualizarea formelor de und s, i
utilizarea unor comenzi prin meniuri grace s, i
• interfat, text,
recomandat pentru rul ri multiple, ne-interactive, pentru vericarea unor multiple scenarii,
dup ce s-a realizat depanarea cazurilor frecvente.
ModelSim se lanseaz în execut, ie în mod grac prin dublu-clic pe icon-ul prezent pe desktop sau din
meniul de programe. Se va deschide fereastra principal , similar cu cea prezentat în gura 1.7. Se observ
meniurile, tastele cu comenzi rapide s, i ferestrele Library s, i Transcript.
Din meniul principal al ModelSim, se stabiles, te directorul de simulare ca director curent:
File > Change Directory... selectat, i C:/home/debug/sim.
Compilarea unui s, ier reprezint analiza codului Verilog din acel s, ier s, i realizarea unui model de simulare
într-un format propriu simulatorului. Modelul de simulare este stocat într-o bibliotec de simulare materializat
sub forma unui director s, i a unor informat, ii stocate în s, iere gestionate de c tre simulator. Înainte de a compila
un s, ier cu cod Verilog, trebuie creat o bibliotec de proiect s, i asociat cu un nume generic. Se recomand
p strarea numelui implicit work pentru bibliotec .
Crearea bibliotecii se poate face din meniul grac astfel:
File > New > Library...
Se recomand p strarea câmpurilor Library Name s, i Library Physical Name cu valorile completate implicit
work. Selectati OK.,
Aceast act, iune va determina crearea unui subdirector numit work, biblioteca de proiect, în directorul curent.
Acest subdirector cont, ine un s, ier particular, denumit _info.
Ca alternativ , se poate crea biblioteca de lucru cu o comand specic lansat în fereastra Transcript sau
12 LECT, IA 1. Metodologia de simulare a modelelor HDL cu ModelSim
Având biblioteca creat s, i asociat cu un nume, se poate trece la etapa de compilare a s, ierelor surs . Ordinea
de compilare a modulelor Verilog este indiferent . ModelSim face vericarea existent, ei tuturor modulelor referite
în proiect numai în momentul simul rii modulului în care se instant, iaz acestea (nu în momentul compil rii).
Compilarea s, ierelor surs Verilog se face prin act, ionarea butonului Compile sau cu comanda textual :
ModelSim> vlog <nume s, ier>
Fis, ierele se compileaz unul câte unul sau mai multe deodat prin select, ia multipl a acestora. Se vor
compila atât s, ierele RTL DUT cât s, i s, ierele cu generatoarele de stimuli TB s, i mediul de testare TEST. Nu
se vor compila s, ierele incluse cu specicat, ia Verilog 'include. Acestea se for include automat prin execut, ia
specicat, iei de includere prezente în codul Verilog compilat.
Fis, ierele incluse sunt c utate implicit în directorul de proiect. Se poate ment, iona o alt locat, ie pentru s, ierele
incluse, prin utilizarea opt, iunii +incdir pentru comanda vlog:
ModelSim> vlog <nume s, ier> "+incdir+<cale s, iere incluse>"
De exemplu, dac directorul de proiect este C:\home\debug\sim iar s, ierul surs C:\home\hdl\counter_preset.v
include un s, ier de asert, ii C:\home\include\counter_preset_assert.v, atunci, comanda de compilare va :
ModelSim> vlog ../hdl/counter_preset_assert.v +incdir+../../include
Calea spre s, ierele incluse este referit din directorul de proiect, nu din directorul s, ierului surs .
În s, ierul C:\home\hdl\counter_preset.v trebuie s apar specicat, ia:
'include "counter_preset_assert.v"
Structura proiectului se va putea vizualiza ulterior, dup simularea proiectului, în fereastra dedicat sim
(gura 1.12).
La ap sarea butonului Compile se va deschide caseta de dialog Compile Source Files (gura 1.9). În
aceast caset se permite selectarea multipl a s, ierelor cu cod Verilog, urmat de ap sarea tastei Compile.
Urmare a compil rii, în fereastra Transcript apar posibilele mesaje de eroare sau de atent, ionare. Se închide
caseta de dialog prin ap sarea butonului Done.
Dup nalizarea compil rii, modulele se g sesc în biblioteca de simulare work, într-un format propriu simu-
1.5. Metodologia de simulare a modelelor HDL cu ModelSim 13
latorului. Acest lucru se poate verica în fereastra Library, dup selectarea bibliotecii work (gura 1.10).
Simularea se face întotdeauna cu precizarea modulului cu mediul de test (cel cu interfat, vid în care este
instant, iat modulul de testat DUT). Simularea se lanseaz selectând butonul Simulate sau la prompterul
ferestrei Transcript:
Modelsim> vsim <modul de top>
Va ap rea caseta de dialog Start Simulation, similar celei prezentate în gura 1.11.
Caseta de dialog Load Design permite selectarea din biblioteca specicat a modulului de top ce se va simula,
counter_preset_test. Se poate selecta s, i rezolut, ia de simulare, implicit având valoarea 1 ns. Biblioteca implicit
din care se va prelua modulul de simulat este work.
Comanda alternativ în fereastra Transcript este:
Modelsim> vsim -gui work.counter_preset_test
# vsim -gui
# Start time: 10:00:00 on Oct 1,2019
# Loading work.counter_preset_test
# Loading work.counter_preset
# Loading work.ck_rst_tb
# Loading work.counter_preset_tb
Dup nalizarea simul rii, în partea stânga-jos a ferestrei principale apare timpul de simulare:
14 LECT, IA 1. Metodologia de simulare a modelelor HDL cu ModelSim
Pornirea simul rii se face prin ap sarea butonul Run Aceast act, iune va determina rularea simul rii
pentru un timp selectat (implicit 100 ns).
Se poate da o comand de rulare s, i din fereastra Transcript:
VSIM> run
Timpul curent al simul rii este as, at în partea de jos a ferestrei principale (gura 1.12).
Se poate rula simularea la innit prin act, ionarea butonului Run All sau cu comanda:
VSIM> run -all
Oprirea simulatorului comandat s ruleze la innit se face prin ap sarea butonului Break .
• Fereastra Transcript, în care sunt as, ate mesaje referitoare la starea execut, iei comenzilor s, i mesajele de
eroare sau atent, ionare. În aceast fereastr se pot lansa comenzi textuale individuale sau scripturi de
comenzi (cu comanda do <sier.do>).
• Fereastra Objects, în care se vizualizeaz semnalele asociate unui modul selectat. Exist posibilitatea
transfer rii acestora în fereastra Wave pentru a vizualizate ca forme de und sau fereastra List. În
gura 1.12 se observ în fereastra Objects semnalele declarate în modulul selectat în fereastra sim (modulul
ck_rst_tb, instant, iat cu numele i_ck_rst_tb).
• Fereastra sim, în care se prezint o descriere textual a ierarhiei proiectului. În aceast fereastr se
poate selecta modulul curent la care se face referire pentru vizualizarea informat, iilor în alte ferestre:
lista de semnale, codul surs , etc. În gura 1.12 se observ în fereastra sim prezentarea textual a
ierarhiei proiectului simulat, similar cu reprezentarea grac din gura 1.6. Modulul counter_preset_test
instant, iaz 3 module:
• dup select, ia multipl a semnalelor s, i clic-dreapta pe unul din semnale apare un meniu de unde se selecteaz
opt, iunea Add Wave.
O alternativ const în selectarea unui modul în fereastra sim s, i clic-dreapta urmat de select, ia opt, iunii Add
Wave din meniul ap rut. Exist s, i opt, iunea utiliz rii tastei scurte Ctrl+W dup select, ia unui modul sau a unor
semnale în ferestrele asociate (sim, Objects).
Congurarea ferestrei Wave poate salvat într-un s, ier extern, pentru a reutilizat într-o sesiune viitoare,
cu meniul:
File > Save format... sau tasta scurt Ctrl+S.
Fis, ierul salvat va avea extensia .do (se recomand denumirea wave.do) s, i va putea executat cu comanda
do wave.do lansat dup simulare la prompterul ferestrei Transcript.
Cursoarele sunt utile pentru a marca timpul la care se investigheaz valoarea semnalelor s, i pentru a face
m sur tori de timp.
16 LECT, IA 1. Metodologia de simulare a modelelor HDL cu ModelSim
Ad ugarea s, i eliminarea cursoarelor din fereastra de as, are a formelor de und se face cu comenzi specice.
La prima deschidere a ferestrei Wave exist un singur cursor, plasat la timpul 0. Cursorul se mut automat la
timpul la care se face clic în fereastra Wave. Pot plasate pe ecran maximum 12 cursoare. Cursoarele sunt
însot, ite de casete care precizeaz intervalele de timp dintre cursoare.
Figura 1.13 Fereastra Wave cu semnalele interne ale modulului de testat counter_preset.
• Compilarea s, ierelor surs Verilog (DUT, test-bench TB s, i test) (comanda vlog).
• Înc rcarea formelor de und ce se doresc a vizualizate (comanda do cu un s, ier auxiliar de descriere a
formelor de und ).
v l i b work
vmap work work
do wave . do
run − a l l
Automatizarea simul rii nu este necesar pentru proiecte de dimensiuni mici. Pentru proiecte complexe,
ce cont, in zeci sau sute de module, este absolut necesar scrierea unor scripturi de comenzi prin care s se
preg teasc simularea.
18 LECT, IA 1. Metodologia de simulare a modelelor HDL cu ModelSim
1. Urm rit, i metodologia de simulare prezentat în sect, iunea 1.5 pentru simularea unui num r tor presetabil
cu validare. Preluat, i modelul RTL s, i mediul de depanare din directoarele specice lect, iei. Urm rit, i
metodologia de simulare: compilare, simulare, rulare, observare forme de und .
În cadrul simul rii num r torului presetabil cu validare, descoperit, i funct, ionalitatea meniurilor s, i feres-
trelor ModelSim.
2. Modicat, i codul RTL s, i ad ugat, i num r torului posibilitatea de a num ra s, i în sens cresc tor s, i în sens
descresc tor. Ad ugat, i o intrare de comand de num rare în sens descresc tor, activ în 1, denumit
count_down. Modicat, i s, ierul de generare de stimuli s, i cel al mediului de testare pentru a depana
aceast nou caracteristic a num r torului.
Vericat, i comportamentul num r torului în cazul: count_down=count_up=1. Inspectat, i formele de und
simulate s, i decidet, i dac circuitul se comport conform as, tept rilor.
Completat, i tabelul de funct, ionare a num r torului.
+
rst_n clk load count_up count_down counter_out Act, iune
0 - - - - 0 init, ializare
1 ↑ 1 - - data_preset presetare
1 ↑ 0 1 0 counter_out+1 num r în sens cresc tor
1 ↑ 0 0 1 counter_out-1 num r în sens descresc tor
1 ↑ 0 0 0 ... ...
1 ↑ 0 1 1 ... ...
Ad ugat, i informat, ia despre comportamentul ies, irii carry_out în cazul num r rii în sens cresc tor sau
descresc tor.
3. Modicat, i codul RTL s, i ad ugat, i num r torului posibilitatea de a-s, i deplasa cont, inutul la stânga s, i la
dreapta. Ad ugat, i intr rile sh_left s, i sh_right. Modicat, i s, ierul de generare de stimuli s, i cel al mediului
de testare pentru a depana aceste noi caracteristici ale num r torului.
Completat, i tabelul de funct, ionare a num r torului.
+
rst_n clk load count_up count_down sh_left sh_right counter_out Act, iune
0 - - - - - - 0 init, ializare
1 ↑ 1 - - - - ... ...
1 ↑ 0 1 - - - ... ...
1 ↑ 0 0 1 - - ... ...
1 ↑ 0 0 0 1 - ... ...
1 ↑ 0 0 0 0 1 ... ...
1 ↑ 0 0 0 0 0 ... ...
4. Pe baza codului RTL asociat modulului counter_preset, presupunând WIDTH=4, desenat, i de mân o
schem intern cu simboluri pentru registre/bistabile, circuite aritmetice, port, i logice, multiplexoare,
etc. Ce resurse suplimentare sunt necesare pentru implementarea num r rii reversibile s, i a deplas rii
cont, inutului?
5. Extindet, i modulul generatorului de stimuli pentru testarea tuturor funct, iilor num r torului pentru WIDTH=4.
De exemplu:
• Presetare la valoarea 5.
• Num rare în sens cresc tor, pân la generarea semnalului de dep s, ire (carry_out=1).
• Num rare în sens descresc tor, pân la generarea semnalului de dep s, ire (carry_out=1) s, i apoi cu
pauze pân la valoarea counter_out=5.
• Deplasare stânga cu 3 pozit, ii.
• Deplasare dreapta cu 3 pozit, ii.
1.6. Activit t, i practice 19
Ce modic ri trebuie aduse mediului de simulare pentru a verica modulul counter_preset, cu WIDTH=8?
6. Realizat, i un script de automatizare prin copierea comenzilor din fereastra Transcript. Denumit, i scriptul
sim.do. Includet, i în script toate comenzile necesare pentru rularea simul rii, începând cu crearea bibliotecii
de lucru work s, i pân la rularea simul rii (run -all), inclusiv înc rcarea unor forme de und .
Vericat, i scriptul prin lansarea în execut, ie a acestuia din fereastra Transcript cu comanda: do sim.do.
Lect, ia 2
Se vor modela circuite simple, accentul ind pus pe însus, irea metodologiei de simulare s, i utilizarea programului
de simulare.
• Proiectarea unui modul RTL comportamental s, i a unui mediu de testare pentru un sumator s, i o unitate
logico-aritmetic .
• Proiectarea unui modul RTL structural pentru un circuit secvent, ial de acumulare, pe baza instant, ierii
unui sumator s, i a unui registru.
• Proiectarea unui modul RTL structural pentru un circuit secvent, ial de multiplicare s, i acumulare.
• Utilizarea simulatorului ModelSim pentru simularea unor scenarii de comportament pentru circuitele
proiectate.
• Conceperea unui monitor pentru vericarea automat a rezultatelor obt, inute din simulare prin comparare
cu cele as, teptate.
2.2.1 Modulul
Verilog este un limbaj de descriere hardware în care se pot modela atât circuite ce urmeaz a implementate
în mod real sub forma unui circuit integrat digital cât s, i medii de testare, utilizate exclusiv pentru simulare.
Verilog nu este un limbaj de programare.
Un program este o secvent, de instruct, iuni executate de un procesor.
Din acest motiv, este improprie not, iunea de "cod Verilog". Este recomandat utilizarea not, iunii de "model
Verilog". Modelul Verilog se poate simula. Dac modelul este compus exclusiv din specicat, ii sintetizabile,
modelul se poate sintetiza. Sinteza reprezint transformarea modelului RTL într-o structur hardware de c tre
un set de programe software specializate. Setul de programe software utilizate pentru proiectare în electronic
este cunoscut sub abrevierea EDA (engl. Electronic Design Automation).
21
22 LECT, IA 2. Simularea modelelor HDL cu ModelSim
Verilog permite atât descrierea comportamentului cât s, i descrierea structurii unui circuit digital. Modelele
Verilog pot dezvoltate pe diferite nivele de abstractizare:
• Nivel algoritmic: un model care descrie algoritmul unui circuit digital prin construct, ii de nivel înalt
ale limbajului, f r corespondent, direct cu resursele hardware s, i f r a modela detaliat temporizarea
circuitului. Acest nivel este utilizat pentru generarea rapid a unui model care descrie comportamentul,
f r a utilizat direct pentru sinteza de hardware.
• RTL (engl. Register Transfer Level): un model care descrie transferul datelor între registre s, i modul de
procesare a acestora. Modelele sistemelor ce se vor implementa hardware sunt descrise de c tre proiectant, i
la acest nivel de detaliere.
• Nivel de poart logic : un model care descrie port, ile logice s, i conexiunile dintre port, i logice. De obicei,
modelele de acest tip sunt generate automat s, i sunt utilizate pentru a simula funct, ionarea unui circuit
deja implementat.
• Nivel de comutare: un model care descrie circuitul logic realizat cu tranzistoare, similar cu modelele
SPICE.
Modulul este blocul elementar de construct, ie Verilog. Un modul cont, ine modelul unui circuit sau a unei
p rt, i de circuit. Limbajul Verilog are multe similitudini cu limbajul de programare C. De exemplu, similar cu
instant, ierea unei clase, un modul poate instant, iat în cadrul altui modul. În acest mod, se poate realiza o
descriere a structurii unui modul complex.
Modulul Verilog este delimitat de cuvintele rezervate module s, i endmodule. Numele modulului este obli-
gatoriu s, i apare imediat dup cuvântul rezervat module. Se recomand utilizarea unor nume sugestive pentru
module.
module numarator
. . .
endmodule
Opt, ional, modulul poate avea parametrii (constante). Descrierea parametrilor se face imediat dup numele
modulului, între paranteze rotunde precedate de simbolul #. Fiecare parametru, introdus prin cuvântul rezervat
parameter, are un nume s, i o valoare implicit . Valoarea implicit a parametrului poate modicat la
instant, ierea modulului.
module numarator #(
parameter NO_BITS = 1 ' b8 , // numar d e biti
parameter MODULO_NUM = ' d35 // numar d e stari
)
. . .
endmodule
Opt, ional, modulul poate cont, ine o list de porturi, între paranteze rotunde. Porturile sunt conexiunile
modulului cu lumea exterioar . Fiecare port este introdus printr-un cuvânt rezervat care desemneaz direct, ia
acestuia (input, output sau inout) urmat de dimensiunea portului s, i numele acestuia. Dimensiunile portului
se exprim prin indexul celui mai semnicativ bit s, i indexul celui mai put, in semnicativ bit, între paranteze
drepte. Dimensiunea unui port poate exprimat pe baza parametrilor.
module numarator #(
parameter NO_BITS = 1 ' b8 , // numar d e biti
parameter MODULO_NUM = ' d35 // numar d e stari
)
(
// semnale de ceas si reset
input clk , // ceas
input rst_n , // reset asincron activ 0
// semnale de control
input load , // incarcare
2.2. Not, iuni teoretice 23
Specicat, iile din cadrul modulului modeleaz comportamentul acestuia sau permit instant, ierea unor alte
module, în mod ierarhic. Modelarea comportamental se realizeaz cu specicat, ii assign s, i always.
module numarator #(
parameter NO_BITS = 1 ' b8 , // numar d e biti
parameter MODULO_NUM = ' d35 // numar d e stari
)
(
// semnale de ceas si reset
input clk , // ceas
input rst_n , // reset asincron activ 0
// semnale de control
input load , // incarcare
input count_up , // numara in sens crescator
input count_dn , // numara in sens descrescator
output ovf , // depasire
// registru de depasire
always @( posedge c l k or negedge rst_n )
i f (~ rst_n ) ovf_r <= 1 ' b0 ; el se
ovf_r <= o v f ; el se
endmodule // numarator
(
// semnale de ceas si reset
input clk , // ceas
input rst_n , // reset asincron activ 0
// semnale de control
input load , // incarcare
input count_up , // numara in sens crescator
input count_dn , // numara in sens descrescator
output ovf , // depasire
// registrul numaratorului
reg_param #(
. NO_BITS (NO_BITS)
) i_reg_param (
. clk ( clk ),
. rst_n ( rst_n ),
. data_in ( next_data ) ,
. data_out ( data_out )
);
// registru de depasire
reg_param #(
. NO_BITS ( 1 ' b1 )
) i_reg_param (
. clk ( clk ),
. rst_n ( rst_n ),
. data_in ( o v f ),
. data_out ( ovf_r )
);
endmodule // numarator
În acest caz, în modulul numarator a fost instat, iat modulul reg_param (registru cu l t, ime parametrizabil )
atât pentru modelarea registrului de ies, ire (data_out) cât s, i pentru modelarea bistabilului plasat pe ies, irea
ovf_r.
module reg_param #(
parameter NO_BITS = 1 ' b8 // numar d e biti
2.2. Not, iuni teoretice 25
)
(
input clk , // ceas
input rst_n , // reset asincron activ 0
input [ NO_BITS − 1:0] data_in , // date presetate
output reg [ NO_BITS − 1:0] data_out // iesire numarator
);
endmodule // reg_param
• Tipul net, introdus prin cuvântul rezervat wire, modeleaz conexiunile zice dintre elementele struc-
turale. Un obiect de acest tip se comport similar cu o sârm a c rei valoare este dat de singura surs
aplicat . Valoarea unei date de acest tip este determinat de sursa sa, care poate o specicat, ie de
atribuire continu assign sau o instant, iere de component (printr-un port de ies, ire). În lipsa unei surse
pentru semnal, data de tip wire are valoarea implicit 'bz. În cazul mai multor surse cu valori comple-
mentare, semnalul de tip wire are valoarea nedeterminat 'bx. O sârm declarat de tip wire are valoarea
continuu atribuit de c tre sursa sa.
• Tipul register, introdus prin cuvântul rezervat reg, modeleaz un element abstract de stocare a datelor.
Valorile obiectelor de acest tip pot atribuite cu specicat, ii always. Valoarea implicit a acestui tip de
date este 'bx. O sârm declarat de tip reg îs, i p streaz valoarea pân la atribuirea unei noi valori.
Modelarea circuitelor combinat, ionale se poate face cu specicat, ii assign. În acest caz, semnalul de ies, ire al
circuitului combinat, ional trebuie declarat ca ind de tip wire.
În cazul unor funct, ii logice mai complexe, care necesit specicat, ii secvent, iale (if sau case), se pot mode-
la circuite combinat, ionale cu specicat, ii always. În acest caz, semnalul trebuie declarat ca ind de tip reg.
Este obligatoriu ca, în cazul model rii unui circuit combinat, ional, specicat, ia always s cuprind în lista de
senzitivit t, i toate semnalele ce determin valoarea ies, irii. O alternativ la enumerarea semnalelor într-o list
de semnale desp rt, ite de virgule este de a se utiliza simbolul specic @(*).
Exemple:
wire a;
wire b;
wire y; // circuit combinational y(a , b)
reg z; // circuit combinational z (a , b)
always @( a or b )
z = a & b; // atribuire secventiala , z = a.b
wire [ 3 : 0 ] i1 ; // operatori
wire [ 3 : 0 ] i2 ;
wire [ 1 : 0 ] sel ; // expresie de selectie
26 LECT, IA 2. Simularea modelelor HDL cu ModelSim
always @( ∗ ) // echivalent cu : a l w a y s @( s e l or i1 or i2 )
case ( s e l )
2 ' b01 : u = i1 − i2 ; // diferenta , daca s e l = 01
2 ' b10 : u = i1 & i2 ; // AND p e biti , daca s e l = 10
2 ' b11 : u = i1 | i2 ; // OR p e biti , daca s e l = 11
default : u = i1 + i2 ; // suma , daca sel nu are nicio valoare mentionata anterior
endcase ;
Modelarea circuitelor secvent, iale se face întotdeauna cu specicat, ii always, semnalele ind declarate de tip
reg. În lista de senzitivit t, i a specicat, iei always trebuie s apar unul din cuvintele rezervate posedge sau
negedge ce preced numele semnalului de ceas. Opt, ional, poate ap rea s, i sintagma ce modeleaz un semnal de
reset asincron. Diferent, a între semnalul de ceas s, i cel de reset este c semnalul de ceas nu apare în corpul
specicat, iei always dar semnalul de reset apare în condit, ia asociat specicat, iei secvent, iale if.
Exemple:
parameter N = 8;
wire [ N− 1 : 0 ] d ; // sarma de 8 biti
reg [ N− 1 : 0 ] q ; // sarma ce modeleaza iesirea unui registru de 8 biti
reg rst_n ; // semnal de reset asincron activ 0
reg [ N− 1 : 0 ] z ; // sarma ce modeleaza iesirea unui registru de 8 biti
always @( posedge c l k )
q <= d ; // bistabil /registru
wire en ;
wire [3:0] i1 ; // operatori
wire [3:0] i2 ;
wire [1:0] sel ; // expresie de selectie
reg [3:0] u ;
2.2.4 Operatori
Verilog are trei tipuri de operatori:
3. Ternari,cu trei operanzi delimitat, i de simbolurile operatorului. Exist un singur operator ternar ce
modeleaz comportamentul de select, ie al unui multiplexor 2:1.
y = s ? i1 : i0; // operator ternar cu funct, ie de multiplexor 2:1 (y = s.i1+s̄.i0)
Operator Descriere
+ Operator unar pentru num r pozitiv
- Operator unar pentru num r negativ
! Operator unar pentru negare logic
~ Operator unar pentru negare pe bit, i
& Operator de reducere AND (aplicat unui vector produce un bit)
~& Operator de reducere NAND
^ Operator de reducere XOR
~^ Operator de reducere XNOR
| Operator de reducere OR
~| Operator de reducere NOR
* Operator binar de multiplicare
/ Operator binar de împ rt, ire
% Operator binar modulo
+ Operator binar de adunare
- Operator binar de sc dere
<< Operator binar de deplasare stânga
>> Operator binar de deplasare dreapta
< Operator binar de comparare "mai mic"
<= Operator binar de comparare "mai mic sau egal"
> Operator binar de comparare "mai mare"
>= Operator binar de comparare "mai mare sau egal"
== Operator binar de egalitate logic
!= Operator binar de inegalitate logic
=== Operator binar de egalitate cu select, ie
!== Operator binar de inegalitate cu select, ie
& Operator binar logic AND pe bit, i (aplicat unor operanzi vectori produce un vector)
^ Operator binar logic XOR pe bit, i
~^ Operator binar logic XNOR pe bit, i
| Operator binar logic OR pe bit, i
&& Operator binar AND logic (aplicat unor expresii, produce o valoare de adev r a unei condit, ii)
|| Operator binar OR logic
? : Operator ternar condit, ional
module adder #(
parameter WIDTH = ' d8 // numar d e biti ai operanzilor
) (
input [WIDTH − 1:0] op1 , // operand 1
input [WIDTH − 1:0] op2 , // operand 2
output [WIDTH+1 − 1:0] rezultat // rezultat
);
// a l w a y s @( ∗ )
// r e z u l t a t = op1 + op2 ;
endmodule // adder
i n i t i a l begin
op1 <= ' bx ;
op2 <= ' bx ;
#CYCLE;
repeat ( 1 0 ) begin
op1 <= $random ;
op2 <= $random ;
#CYCLE;
end
endmodule // adder_tb
Mediu de testare
module a d d e r _ t e s t #(
parameter WIDTH = ' d8 , // numar d e biti ai numaratorului
parameter CYCLE = ' d10 // interval de timp intre schimbarea
// stimulilor
);
wire [WIDTH − 1:0] op1 ; // operator 1
wire [WIDTH − 1:0] op2 ; // operator 2
wire [WIDTH+1 − 1:0] rezultat ; // rezultat
2.4. Activit t, i practice 29
adder_tb #(
.WIDTH (WIDTH ) ,
.CYCLE (CYCLE )
) i_adder_tb (
. op1 ( op1 ), // operand 1
. op2 ( op2 ) // operand 2
);
adder #(
.WIDTH (WIDTH )
) i_adder_DUT (
. op1 ( op1 ), // operand 1
. op2 ( op2 ), // operand 2
. rezultat ( rezultat ) // rezultat
);
endmodule // adder_test
module r e g i s t e r #(
parameter WIDTH = ' d8 // numar d e biti ai numaratorului
) (
input clk , // semnal de ceas
input rst_n , // semnal de reset asincron , activ low
input [WIDTH − 1:0] reg_input , // intrare in registru
output reg [WIDTH − 1:0] reg_output // iesire din registru
);
endmodule // register
2.4.1 Sumator
Vericat, i prin simulare comportamentul circuitului sumator. Lansat, i în execut, ie, de la prompterul din fereastra
Transcript, scriptul sim_adder.do
ModelSim> do sim_adder.do
Scriptul va crea biblioteca work, o va asocia cu numele work, va compila s, ierul surs adder.v s, i s, ierele de
simulare adder_tb.v, adder_test.v, apoi va simula modulul de top adder_test. Se va înc rca s, ierul cu descrierea
formelor de und wave_adder.do s, i se va lansa în execut, ie simularea.
Pornind de la modulul adder, dezvoltat, i un modul alu care s realizeze mai multe funct, ii aritmetice s, i logice,
pe baza unei intr ri de select, ie. Funct, iile implementate sunt descrise în tabelul urm tor.
// codul aici
endmodule // alu
Utilizat, i parametrii locali (localparam) pentru alocarea unor nume pentru codurile de select, ie asociate
operat, iilor.
localparam ADD = 2 ' b00 ;
localparam SUM = 2 ' b01 ;
localparam AND = 2 ' b10 ;
localparam OR = 2 ' b11 ;
endmodule // acumulator
Realizat, i un model structural pentru un circuit secvent, ial de multiplicare s, i acumulare. Interfat, a modulului
mac este:
module mac #(
parameter WIDTH = ' d8 // numar d e biti ai numaratorului
) (
input clk , // semnal de ceas
input rst_n , // semnal de reset asincron , activ low
// semnale de control
input clr , // incarcare cu 0
input load , // incarcare
32 LECT, IA 2. Simularea modelelor HDL cu ModelSim
endmodule // mac
Circuitul este sincron, având intrarea de ceas clk activ pe frontul pozitiv.
Init, ializarea circuitului se face prin semnalul de reset asincron rst_n activ în starea 0.
Intr rile clr, load s, i acc controleaz comportamentul circuitului. Ies, irea data_acc are o l t, ime parametrizabil
WIDTH. Intr rile op1 s, i op1 au l t, imi parametrizabile WIDTH s, i determin datele necesare pentru operat, ia
aritmetic implementat de circuit.
Ies, irea ovf este activ dac ultima operat, ie de acumulare a determinat dep s, irea valorii posibil de acumulat.
În acest caz, valoarea expus la ies, irea data_acc este cea mai mare valoare posibil de reprezentat.
Se consider c datele reprezint numere întregi s, i pozitive.
Circuitul poate realiza 3 act, iuni, sincron pe ceas:
2. Înc rcarea unei valori, în cazul clr = 0 s, i load = 1. Valoarea înc rcat este valoarea prezent pe
intrarea op1. data_acc = op1.
3. Acumularea valorii, în cazul clr = 0, load = 0 s, i acc = 1. Valoarea nal , dup acumulare, se obt, ine
din valoarea curent prin adunarea valorii obt, inute din înmult, irea celor doi operanzi op1 s, i op2.
Dac noua valoare acumulat nu poate reprezentat pe num rul de bit, i WIDTH, atunci valoarea se
limiteaz la valoarea maxim data_acc = {W IDT H{1′ b1}} s, i se activeaz ies, irea ovf = 1. Ies, irea care
semnaleaz dep s, irea valorii revine la valoarea init, ial ovf = 0 dup una din comenzile clr sau load sau
dup resetul asincron rst_n = 0.
• Completat, i codul modulului mac cu specicat, iile necesare pentru modelarea structurii prezentate în gura
2.1.
• Depanat, i codul RTL prin utilizarea ModelSim s, i a facilit t, ilor acestuia (meniuri s, i ferestre).
2.4. Activit t, i practice 33
• multiplexor,
• demultiplexor,
• codicator cu prioritate.
3.2.1 Multiplexor
Multiplexorul este circuitul digital care implementeaz în hardware funct, ia de select, ie a unei intr ri.
Multiplexorul 2N : 1 selecteaz pe baza unui cod de N bit, i una din cele 2N intr ri de date pe care o transmite
la unica ies, ire.
Funct, ionarea multiplexorului 2:1 (o intrare de select, ie s, i dou intr ri de date) se poate descrie astfel:
"dac select, ia este egal cu 0, ies, irea ia valoarea intr rii I0 , iar dac select, ia este egal cu 1, ies, irea ia valoarea
I1 " .
intr rii
Multiplexorul implementeaz în hardware funct, ia de decizie, similar cu specicat, ia software "if ... then ...
. . ." (în cazul MUX 2:1) sau "case" (în cazul MUX de dimensiuni mai mari).
else
35
36 LECT, IA 3. Modelarea circuitelor logice combinat, ionale
MUX 2:1 Y = S · I1 + S · I0
MUX 4:1 Y = S1 · S0 · I3 + S1 · S0 · I2 + S1 · S0 · I1 + S1 · S0 · I0
MUX 8:1 Y = S2 · S1 · S0 · I7 + S2 · S1 · S0 · I6 + S2 · S1 · S0 · I5 + S2 · S1 · S0 · I4 +
+S2 · S1 · S0 · I3 + S2 · S1 · S0 · I2 + S2 · S1 · S0 · I1 + S2 · S1 · S0 · I0
Figura 3.1 Simboluri de multiplexoare: MUX 2:1, MUX 4:1, MUX 2N : 1, MUX 2N : 1 cu date pe M biti. ,
Codurile RTL asociate multiplexoarelor din gura 3.1 sunt prezentate în continuare:
Multiplexor 2:1 modelat cu operator ternar.
module mux2x1 (
input sel , // selectie
input data_0 , // data de intrare selectata pentru s e l =0
input data_1 , // data de intrare selectata pentru s e l =1
output data_out // data de iesire
);
endmodule // mux2x1
module mux4x1 (
input [1:0] sel , // selectie , 2 biti
input [3:0] data_in , // data de intrare , 2^2 biti
output reg data_out // data de iesire
);
always @( ∗ )
case ( s e l )
2 ' b01 : data_out = data_in [ 1 ] ;
2 ' b10 : data_out = data_in [ 2 ] ;
2 ' b11 : data_out = data_in [ 3 ] ;
default : data_out = data_in [ 0 ] ;
endcase
endmodule // mux4x1
module muxNx1 #(
parameter WIDTH_SEL = ' d1 // numar d e biti de selectie
)(
input [WIDTH_SEL − 1:0] s e l , // selectie
input [(1<<WIDTH_SEL) − 1:0] data_in , // data de intrare
output data_out // data de iesire
);
endmodule // muxNx1
module mux #(
parameter WIDTH_SEL = ' d1 , // numar d e biti de selectie
parameter WIDTH_DATA = ' d1 // numar d e biti de date
// d i m e n s i u n e a mux− u l u i este 2^WIDTH_SEL : 1
// date reprezentate p e WIDTH_DATA b i t i
// p e n t r u MUX 2 : 1 parametrii sunt cei impliciti
) (
input [WIDTH_SEL − 1:0] s e l , // selectie
input [WIDTH_DATA∗(1<<WIDTH_SEL) − 1:0] data_in , // data de intrare
output reg [WIDTH_DATA − 1:0] data_out // data de iesire
);
always @( ∗ )
for ( i =0; i <(1<<WIDTH_SEL) ; i=i +1)
data_out = data_in [ (WIDTH_DATA∗ i )+:WIDTH_DATA] ;
endmodule // mux
3.2.2 Demultiplexor
Demultiplexorul DMUX 1 : 2N selecteaz pe baza unui cod de N biti una din cele 2N iesiri de date pe care
, ,
DMUX 1:2 Y1 = S · I Y0 = S · I
DMUX 1:4 Y3 = S1 · S0 · I Y2 = S1 · S0 · I Y1 = S1 · S0 · I Y0 = S1 · S0 · I
DMUX 1:8 Y7 = S2 · S1 · S0 · I Y6 = S2 · S1 · S0 · I Y5 = S2 · S1 · S0 · I Y4 = S2 · S1 · S0 · I
Y3 = S2 · S1 · S0 · I Y2 = S2 · S1 · S0 · I Y1 = S2 · S1 · S0 · I Y0 = S2 · S1 · S0 · I
Figura 3.2 Simboluri de demultiplexoare: DMUX 1:2, DMUX 1:4, DMUX 1 : 2N , DMUX 1 : 2N cu date pe M biti. ,
Codurile RTL asociate demultiplexoarelor din gura 3.2 sunt prezentate în continuare:
Demultiplexor 1:2 modelat cu specicatii assign. ,
module dmux1x2 (
input sel , // selectie
input data_in , // data de intrare
output data_out0 , // data de iesire pentru s e l =0
output data_out1 // data de iesire pentru s e l =1
);
endmodule // dmux1x2
Demultiplexor 1 : 2N modelat cu specicatie for prin care se atribuie valori ec rei iesiri.
, ,
module dmux1xN #(
parameter WIDTH_SEL = ' d1 // numar d e biti de selectie
) (
input [WIDTH_SEL − 1:0] sel , // selectie , N biti
input data_in , // data de intrare
output reg [(1<<WIDTH_SEL) − 1:0] data_out // data de iesire , 2^N biti
);
always @( ∗ )
for ( i =0; i <(1<<WIDTH_SEL) ; i=i +1)
data_out [ i ] = ( s e l == i ) & data_in ;
endmodule // dmux1xN
module dmux #(
parameter WIDTH_SEL = ' d1 , // numar d e biti de selectie
parameter WIDTH_DATA = ' d1 // numar d e biti de date
// d i m e n s i u n e a dmux− u l u i este 1 : 2^WIDTH_SEL
// date reprezentate p e WIDTH_DATA b i t i
// p e n t r u DMUX 1 : 2 parametrii sunt cei impliciti
) (
3.2. Not, iuni teoretice 39
always @( ∗ )
for ( i =0; i <(1<<WIDTH_SEL) ; i=i +1)
data_out [ (WIDTH_DATA∗ i )+:WIDTH_DATA] = ( s e l == i ) & data_in ;
endmodule // dmux
Codicatorul prioritar de 2N biti are 2N intr ri si N iesiri. La iesire se prezint codul binar al celei mai
, , , ,
prioritare intr ri activate. Codicatorul poate avea o ies, ire care semnaleaz aparit, ia pe intrare a unei congurat, ii
valide (cu cel put, in un bit egal cu 1).
Tabelul de adev r al codicatorului prioritar de 8 bit, i este prezentat în continuare.
module e n c o d e r (
input [ 8 − 1:0] data_in , // data de intrare
output [ 3 − 1:0] data_out , // data de iesire
output valid // data de iesire valida
);
Exist posibilitatea ca ies, irea codicatorului s prezinte cea mai prioritar intrare activat cu codicare "one-
hot" (un singur bit egal cu 1). În acest caz, tabelul de adev r este prezentat în continuare. Codicatorul
prioritar de 2N bit, i are 2N intr ri s, i 2N ies, iri.
40 LECT, IA 3. Modelarea circuitelor logice combinat, ionale
module encoder_onehot (
input [ 8 − 1:0] data_in , // data de intrare
output [ 8 − 1:0] data_out , // data de iesire , codata one− h o t
output valid // data de iesire valida
);
În proiecte mari, codicatorul nu se încapsuleaz într-un modul. Specicat, ia ce modeleaz codicatorul poate
ap rea în modulul ierarhic superior al turi de specicat, ii concurente ce modeleaz o logic suplimentar .
În cazul unor funct, ii logice complexe, este greu de exprimat funct, ia de transfer a circutului logic combinat, ional
utilizând exclusiv operatori logici s, i aritmetici. Funct, ia ar putea exprimat mai us, or cu specicat, ii secvent, iale
(if s, i case). Îns , acestea pot utilizate exclusiv în corpul specicat, iei always. Pentru a modela circuite
combinat, ionale, specicat, ia always trebuie s cont, in în lista de senzitivit t, i o enumerare a tuturor semnalelor
de intrare (delimitate prin cuvântul rezervat or) sau sintagma @(*) care desemneaz "toate semnalele de intrare"
(aate în dreapta simbolului de atribuire "="). În cadrul specicat, iei always, semnalele se vor atribui cu simbolul
de atribuire blocant "=". În cazul model rii circuitelor combinat, ionale, semnalele se comport similar cu
variabile din limbajul C: îs, i modic valoarea imediat ce i-a fost atribuit o nou valoare.
Ca exemplu, se consider un circuit combinat, ional care genereaz numerele lui Fibonacci. Circuitul com-
binat, ional primes, te la intrare un num r între 0 s, i 31 (reprezentat pe 5 bit, i). Pe baza acestui index, circuitul
genereaz combinat, ional num rul cu indexul corespunz tor din s, irul lui Fibonacci.
Matematic, numerele Fibonacci sunt denite prin urm toarea relat, ie de recurent, :
F0 = 0, F1 = 1, Fi = Fi−1 + Fi−2 , pentru i ≥ 2.
Astfel, ecare num r Fibonacci este suma celor dou numere Fibonacci anterioare, rezultând secvent, a:
Conceptual, este un circuit logic combinat, ional cu 5 intr ri s, i 21 de ies, iri. Num rul de bit, i de ies, ire (21)
a fost determinat ca ind num rul minim de bit, i necesari pentru reprezentarea celei mai mari valori, F31 =
1.346.269 < 221 = 2.097.152.
Îns funct, ia de transfer nu este simplu de exprimat cu operatori Verilog.
3.2. Not, iuni teoretice 41
Codul Verilog care modeleaz un circuit combinat, ional ce genereaz num rul Fibonacci asociat indexului de
la intrare prezint o specicat, ie always ce cont, ine o specicat, ie de select, ie case:
• Dac i = 0, F0 = 0,
• Dac i = 1, F1 = 1,
module f i b o n a c c i (
input [5 − 1:0] f i b _ i d x , // index al termenului
output reg [ 2 1 − 1:0] v a l o a r e // valoare termen
);
reg [6 − 1:0] i ;
reg [ 2 1 − 1:0] v a l o a r e 0 ; // prima valoare
reg [ 2 1 − 1:0] v a l o a r e 1 ; // a doua valoare
always @( ∗ )
case ( f i b _ i d x )
' d0 : v a l o a r e = ' d0 ;
42 LECT, IA 3. Modelarea circuitelor logice combinat, ionale
' d1 : v a l o a r e = ' d1 ;
default : begin
v a l o a r e 0 = ' d0 ;
v a l o a r e 1 = ' d1 ;
valoare = ' d1 ;
for ( i =2; i<=f i b _ i d x ; i=i +1) begin
valoare = valoare1 + valoare0 ;
valoare0 = valoare1 ;
valoare1 = valoare ;
end
end
endcase
endmodule // fibonacci
Un circuit combinat, ional cu N intr ri are 2N combinat, ii de intrare în care trebuie testat. Se poate concepe un
modul generator de semnal care genereaz toate aceste combinat, ii. În cadrul modulului de test se instant, iaz
modulul de testat s, i generatorul de semnal. Ies, irile generatorului de semnal se conecteaz la intr rile circuitului
combinat, ional. În cazul unui num r mic de intr ri, vericarea se poate face pe forme de und . Pentru un num r
mare de intr ri, este necesar conceperea unui monitor de vericare a datelor.
Modulul propus are parametrii pentru num rul de bit, i prezentat, i la ies, ire s, i pentru timpul dintre dou
schimb ri succesive ale combinat, iei de ies, ire. Combinat, iile sunt generate în ordine de la 00 . . . 0 pân la 11 . . . 1.
Exist un semnal (enable) care valideaz aparit, ia combinat, iilor de ies, ire (combinat, iile încep imediat ce enable
= 1). Circuitul semnaleaz terminarea combinat, iilor prin activarea semnalului nish = 1. Acest semnal poate
utilizat în mediul de testare pentru a termina rularea.
Formele de und care caracterizeaz generatorul de combinat, ii sunt prezentate în gura 3.3.
Simul rile din aceast lect, ie necesit instant, ierea unui modul care genereaz toate combinat, iile de intrare ale
circuitelor combinat, ionale testate. Acest modul, denumit generator_combinatii, se poate instat, ia (cu parametrii
potrivit, i) al turi de modulul de testat, într-un mediu de testare realizat de c tre student, i.
3.4.1 Multiplexor
• Vericat, i comportamentul circuitului multiplexor 2:1 prin simularea mediului de testare mux2x1_test ce
instant, iaz modulul mux2x1 s, i generatorul de combinat, ii generator_combinatii. Parametrul WIDTH al
generatorului de combinat, ii trebuie s aib valoarea 3 (deoarece sunt 3 intr ri în modulul de testat: o
intrare de select, ie s, i dou intr ri de date). Intrarea de select, ie este conectat pe bitul cel mai semnicativ
al generatorului de combinat, ii.
Observat, i în fereastra formelor de und (gura 3.4) c , dac select, ia este 0, ies, irea multiplexorului copiaz
forma de und a intr rii 0 iar, dac select, ia este 1, ies, irea multiplexorului copiaz forma de und a intr rii
1.
mux4x1,
• Multiplexoare cu select, ie one-hot. În cazul acestor multiplexoare, select, ia este reprezentat pe acelas, i
num r de bit, i ca num rul de date dintre care se face select, ia. Datele selectate vor avea bitul de select, ie
egal cu 1. Este obligatoriu de îndeplinit condit, ia ca în vectorul de select, ie s existe cel mult un singur bit
egal cu 1. Avantajul acestor multiplexoare const în faptul c poate selecta dintr-un set de date cu un
num r diferit de o putere a lui 2.
Interfat, a unui asemenea multiplexor one-hot (cu 5 intr ri de date selectate) este prezentat în continuare.
module mux5x1_onehot (
input [5 − 1:0] sel , // selectie , 5 biti , one− h o t
input [5 − 1:0] data_in , // data de intrare , 5 biti
output reg data_out // data de iesire
);
3.4.2 Demultiplexor
• Modelat, i un mediu de testare s, i vericat, i comportamentul circuitului demultiplexor 1:2 prin simularea
modulului dmux1x2 conectat la generatorul de combinat, ii generator_combinatii. Parametrul WIDTH al
generatorului de combinat, ii trebuie s aib valoarea 2 (deoarece sunt 2 intr ri în modulul de testat, o
intrare de select, ie s, i o intrare de date). Intrarea de select, ie este conectat pe bitul cel mai semnicativ al
generatorului de combinat, ii.
• Completat, i modulul encoder_onehot cu specicat, iile care modeleaz comportamental codicatorul prio-
ritar one-hot. Vericat, i modelul prin simulare.
• Modicat, i modulul bonacci.v pentru a genera primele 256 de numere ale lui Fibonnaci (index reprezentat
pe 8 bit, i). Cât, i bit, i sunt necesari pentru a reprezenta valoarea F255 ?
• Modicat, i mediul de testare existent pentru a genera cele 256 combinat, ii de intrare.
• Realizat, i o modalitate de a verica datele generate de modelul Verilog (MatLab, Excel, C).
Lect, ia 4
Aceast lect, ie prezint modelarea bistabilelor s, i a unor circuite implementate cu bistabile s, i port, i logice.
Se vor modela bistabilele D, T, RS, JK. Se va prezenta modelarea semnalului de reset sincron s, i asincron.
În limba englez , circuitul bistabil este denumit "ip-op" (prescurtat "FF").
4.2.1 Bistabilul D
Bistabilul D stocheaz un bit de informat, ie în intervalul de timp dintre dou fronturi active succesive ale
semnalului de ceas. În momentul determinat de aparit, ia frontului activ de ceas, bistabilul D es, antioneaz
intrarea s, i o "memoreaz " pân la momentul urm torului front activ de ceas. Bistabilul poate comuta e pe
front cresc tor, e pe front c z tor, îns nu pe ambele fronturi. În continuare, se va considera c toate bistabilele
comut pe frontul activ cresc tor (CK =↑).
În tabelul care descrie funct, ionarea bistabilului D s-a notat cu Q starea prezent s, i Q+ starea viitoare a
bistabilului.
Dac CK =↑, bistabilul copiaz starea intr rii D s, i o ment, ine pe durata unei perioade de ceas.
CK D Q+ Act, iune
↑ 0 0 copiaz intrarea, în momentul frontului cresc tor al ceasului
↑ 1 1 copiaz intrarea, în momentul frontului cresc tor al ceasului
0/1 − Q p streaz starea, între dou fronturi active ale semnalului de ceas
45
46 LECT, IA 4. Modelarea circuitelor cu bistabile
Modelul Verilog pentru DFF este prezentat în continuare. Condit, ia "front cresc tor de ceas" este modelat
cu specicat, ia:
always @( posedge c l k )
module d f f (
input clk , // semnal de ceas , activ pe frontul crescator
input d , // intrare D
output reg q // iesire Q
);
always @( posedge c l k )
q <= d ;
endmodule // dff
Într-un sistem sincron, bistabilul D întârzie semnalul între intrare s, i ies, ire cu un tact. As, a se justic
denumirea "D" (engl. "Delay = Întârziere"). O aplicat, ie a bistabilului D const din realizarea unei linii de
întârziere a semnalelor cu un anumit num r de perioade de tact prin conectarea în serie a mai multor bistabile
(ies, irea Q a unui bistabil la intrarea D a urm torului bistabil).
Bistabilele pot avea facilitatea de init, ializare asincron într-o anumit stare logic . Intr rile asincrone (de set
sau de reset) sunt prioritare fat, de semnalul de ceas (îs, i realizeaz funct, ia independent de aparit, ia frontului
activ al semnalului de ceas). În simbolurile bloc, exist intr ri dedicate pentru intr rile asincrone de reset.
Intr rile asincrone pot active e în starea 1, e în starea 0.
Modelul Verilog pentru DFF cu reset asincron activ în starea 0 este prezentat în continuare. Condit, ia "front
este modelat cu specicat, ia:
cresc tor de ceas sau front negativ al semnalului de reset"
module d f f r (
input clk , // semnal de ceas , activ pe frontul crescator
input rst_n , // semnal de reset asincron activ in 0
input d , // intrare D
output reg q // iesire Q
);
endmodule // dffr
Reset-ul sincron reprezint aducerea bistabilului în starea 0, în momentul frontului activ de ceas, datorit
unui semnal prioritar ce condit, ioneaz intrarea D. Modelul Verilog pentru DFF cu reset asincron dar s, i un
semnal de reset sincron este prezentat în continuare.
module d f f _ r r (
input clk , // semnal de ceas , activ pe frontul crescator
input rst_async , // semnal de reset asincron activ in 1
input rst_sync , // semnal de reset sincron activ in 1
input d , // intrare D
output reg q // iesire Q
);
q <= d ;
endmodule // dff_rr
Circuitul bistabil cu reset asincron s, i reset sincron cont, ine un bistabil cu reset asincron s, i o logic adit, ional
pentru realizarea reset rii sincrone, implementat e cu multiplexor, e cu port, i logice, as, a cum este prezentat
în gura 4.1.
Figura 4.1 Bistabil cu reset asincron si reset sincron realizat cu multiplexor sau cu porti logice.
, ,
Bistabilul D poate avea o intrare suplimentar de validare a funct, ion rii. Dac E = 1 (engl. "Enable = a
permite, a valida"), bistabilul D cu validare funct, ioneaz ca un bistabil D convent, ional. Altfel, dac E = 0,
bistabilul D cu validare îs, i p streaz starea, indiferent de intrarea D. Tabelul ce descrie funct, ionarea bistabilului
D cu validare este urm torul:
CK E D Q+ Act, iune
↑ 1 0 0 copiaz intrarea, în momentul frontului cresc tor al ceasului
↑ 1 1 1 copiaz intrarea, în momentul frontului cresc tor al ceasului
↑ 0 − Q p streaz starea, indiferent de intrarea D (este invalidat)
0/1 − − Q p streaz starea, între dou fronturi active ale semnalului de ceas
endmodule // dffe
Intrarea de validare poate interpretat s, i ca intrare care valideaz înc rcarea datelor în bistabil (datele ind
ment, inute mai multe perioade de tact, între dou pulsuri succesive de înc rcare).
Extensia paralel a unui bistabil poart numele de registru. Modelul unui registru paralel-paralel este similar
celui al bistabilului D. L t, imea registrului poate parametrizat cu specicat, ia:
48 LECT, IA 4. Modelarea circuitelor cu bistabile
module reg_param #(
parameter WIDTH = ' d8 // latimea registrului
)(
input clk , // semnal de ceas , activ pe frontul crescator
input rst_n , // semnal de reset asincron activ in 0
input [WIDTH− 1 : 0 ] d , // intrare D
output reg [WIDTH− 1 : 0 ] q // iesire Q
);
endmodule // reg_param
4.2.2 Bistabilul RS
Bistabilul RS are dou intr ri de date care permit în mod explicit trecerea bistabilului în cele dou st ri 0
(reset) s, i 1 (set). Funct, ionarea bistabilului RS este descris de tabelul urm tor:
CK R S Q+ Act, iune
↑ 1 − 0 reseteaz starea, 0
↑ 0 1 1 seteaz starea, 1
↑ 0 0 Q p streaz starea.
0/1 − − Q p streaz starea, între dou fronturi active ale semnalului de ceas
Bistabilul RS se utilizeaz pentru cazurile în care trecerea între st rile 0 s, i 1 se face pe baza a dou comenzi
diferite, independente. Se observ în tabel c (în acest caz) intrarea de reset este prioritar fat, cea de set
(ies, irea trece în 0 dac R = 1, indiferent de valoarea logic a lui S ).
Interfat, a modelul Verilog pentru RSFF este prezentat în continuare.
module r s f f (
input clk , // semnal de ceas , activ pe frontul crescator
input rst_n , // semnal de reset asincron activ in 0
input r , // i n t r a r e R, reset sincron
input s , // intrare S, set sincron
output reg q // iesire Q
);
4.2.3 Bistabilul T
Bistabilul T, ca orice bistabil, comut exclusiv pe frontul activ al semnalului de ceas. Regula de comutare
este prezentat în tabelul urm tor:
4.2. Not, iuni teoretice 49
CK T Q+ Act, iune
↑ 0 Q p streaz starea
↑ 1 Q complementeaz starea
0/1 − Q p streaz starea, între dou fronturi active ale semnalului de ceas
Funct, ionarea bistabilului T (engl. "Toggle = Comutare") se poate descrie astfel: dac T = 0 bistabilul îs, i
p streaz starea, iar dac T = 1 bistabilul îs, i complementeaz /neag starea.
Se remarc faptul c bistabilul T are nevoie de a se init, ializa asincron într-o stare cunoscut .
Modelul Verilog pentru TFF este prezentat în continuare.
module t f f (
input clk , // semnal de ceas , activ pe frontul crescator
input rst_n , // semnal de reset asincron activ in 0
input t , // intrare T
output reg q // iesire Q
);
endmodule // tff
O aplicat, ie a bistabilului T const în obt, inerea unui semnal cu perioad dubl fat, de semnalul de ceas, prin
conectarea acestuia cu intrarea T = 1. Aceast proprietate este folosit s, i la realizarea num r toarelor binare.
4.2.4 Bistabilul JK
Bistabilul JK combin functionalitatea unui bistabil RS cu cea a unui bistabil T. Regula de comutare este
,
CK J K Q+ Act, iune
↑ 0 0 Q p streaz starea.
↑ 0 1 0 reseteaz starea, 0
↑ 1 0 1 seteaz starea, 1
↑ 1 1 Q complementeaz starea.
0/1 − − Q p streaz starea, între dou fronturi active ale semnalului de ceas
Pentru simularea circuitelor cu bistabile este necesar un semnal de ceas. Modelarea semnalului de ceas periodic
se poate descrie conform specicat, iei: "are init, ial valoarea 0 s, i îs, i complementeaz valoarea la ecare jum tate
de perioad ". Acest lucru este modelat în Verilog astfel:
Semnalul de reset asincron se recomand a avea valoarea init, ial inactiv s, i a se activa ulterior timpului zero
de simulare. Des, i modeleaz un semnal asincron (independent de semnalul de ceas) se recomand ca semnalul
de reset s comute în momente determinate de frontul activ de ceas iar durata de activare s e mai mare de o
perioad de ceas.
Codul urm tor prezint modelul integral pentru un generator de semnal de ceas s, i de reset asincron.
module ck_rst_tb #(
parameter CK_SEMIPERIOD = ' d10 // semi − p e r i o a d a semnalului de ceas
)(
output reg clk , // ceas
output reg rst_n // reset asincron activ 0
);
initial
begin
c l k = 1 ' b0 ; // valoare initiala 0
forever #CK_SEMIPERIOD // valoare complementata la fiecare semi − p e r i o a d a
clk = ~clk ;
end
i n i t i a l begin
rst_n <= 1 ' b1 ; // initial inactiv
@( posedge c l k ) ;
rst_n <= 1 ' b0 ; // activare sincrona
@( posedge c l k ) ;
@( posedge c l k ) ;
rst_n <= 1 ' b1 ; // inactivare dupa doua perioade de ceas
@( posedge c l k ) ; // ramane inactiv pentru totdeauna
end
endmodule // ck_rst_tb
Figura 4.2 Forme de und ale generatorului de semnal de ceas si de reset asincron.
,
Un generator de semnale pentru circuite cu bistabile trebuie s modeleze schimbarea semnalelor exclusiv pe
frontul activ al semnalului de ceas. Pentru aceasta, se recomand ca timpul s nu e modelat cu întârzieri
absolute (de exemplu #10) ci cu întârzieri multiple ale perioadei de ceas: @(posedge clk).
De exemplu, port, iunea de cod urm toare modeleaz forma de und prezentat în gura 4.3.
i n i t i a l begin
d <= 1 ' bx ; // valoare initiala x
v a l <= 4 ' bx ; // valoare initiala x
@( negedge rst_n ) ; // asteapta activarea resetului asincron
d <= 1 ' b0 ; // atribuie valoari initiale datorate resetului
v a l <= 4 ' b0 ;
@( posedge rst_n ) ; // asteapta inactivarea resetului asincron
@( posedge c l k ) ; // asteapta un front activ de ceas
// modifica valori
d <= 1 ' b1 ;
4.3. Activit t, i practice 51
@( posedge c l k ) ;
v a l <= 4 ' d1 ;
@( posedge c l k ) ;
@( posedge c l k ) ;
d <= 1 ' b0 ;
v a l <= 4 ' d10 ;
repeat ( 5 ) @( posedge c l k ) ;
d <= 1 ' b1 ;
@( posedge c l k ) ;
@( posedge c l k ) ;
v a l <= 4 ' d7 ;
@( posedge c l k ) ;
@( posedge c l k ) ;
$display ( "%M %0t INFO : F i n a l s i m u l a r e . " , $time ) ;
$stop ;
end
Figura 4.3 Forme de und ale generatorului de semnal de date sincrone: proiectate si rezultate prin simulare.
,
Simul rile din aceast lect, ie necesit instant, ierea unui modul care genereaz semnale de ceas s, i de reset. Se
poate instant, ia modulul ck_rst_tb.v prezentat în sect, iunea 4.2. Modulele generatoare de date se vor modela
conform recomand rilor prezentate în sect, iunea 4.2.
• Vericat, i prin simulare comportamentul unui bistabil D, utilizând modulul d.v. Modelat, i un generator
de semnal pentru intrarea D pentru a testa diverse scenarii.
• Vericat, i prin simulare comportamentul unui bistabil D cu reset asincron, utilizând modulul dr.v.
Modelat, i resetul asincron conform formelor de und prezentate în gura 4.4.
• Vericat, i prin simulare comportamentul unui bistabil D cu validare, utilizând modulul de.v.
• Vericat, i prin simulare comportamentul unui bistabil T, utilizând modulul t.v. Studiat, i efectul lipsei
specicat, iei de init, ializare a bistabilului (prin reset asincron) prin comentarea specicat, iei:
i f (~ rst_n ) q <= 1 ' b0 ; el se
• Vericat, i prin simulare comportamentul unui bistabil RS, utilizând modulul rs.v. Cum se comport
bistabilul în cazul în care ambele intr ri sunt activate simultan S = R = 1? Modelat, i stimulii potrivit, i
pentru a verica modul în care se comport bistabilul. Completat, i în gura 4.5 forma de und as, teptat
pentru ies, irea bistabilului, modelat, i stimulii RS corespunz tori s, i apoi vericat, i forma de und a ies, irii
prin simulare.
Figura 4.5 Forme de und pentru vericarea bistabilului RS. De completat forma de und pentru iesirea q . ,
• Modicat, i modelul de bistabil D prin extindere paralel pentru a realiza un registru. Parametrizat, i l t, imea
registrului. Modicat, i mediul de testare al bistabilului D pentru a testa un registru de 4 bit, i.
Figura 4.6 Forme de und pentru compararea comportamentului în cazul resetului asincron cu comportamentul în cazul
resetului sincron. De completat forma de und pentru iesirea q .
,
• Set de registre. Modelat, i un set de 16 registre de câte 32 de bit, i. Vericat, i prin simulare accesarea
setului de registre în scriere s, i în citire. Interfat, a modulului este urm toarea:
module r e g _ f i l e _ 1 6 x 3 2 (
input clk , // semnal de ceas , activ pe frontul crescator
input rst_n , // semnal de reset asincron activ in 0
input [ 3 : 0 ] addr , // adresa registrului accesat
4.3. Activit t, i practice 53
Registrul trebuie s e capabil s memoreze 16 date de câte 32 de bit, i. Datele prezente la intrarea data_in
sunt scrise la adresa addr dac wr=1. Dac wr=0, datele stocate la adresa addr sunt prezentate în ciclul
de ceas urm tor pe ies, irea data_out.
Pentru vericare, modelat, i formele de und prezentate în gura 4.7.
Figura 4.7 Forme de und pentru vericarea setului de registre. De completat forma de und pentru iesirea data_out.
,
a)
b)
Modelati circuitele.
,
Modelati un mediu de vericare pentru circuite. Concepeti generatoare de secvente care pun în
, , ,
determinat.
a)
b)
Figura 4.9 Forme de und pentru circuitele cu bistabile. De completat formele de und .
• Proiectat, i un circuit logic secvent, ial care accept la intrare 4 bit, i la ecare perioad de ceas. Circuitul
semnaleaz la ies, ire dac , în dou tacte succesive, num rul zecimal asociat intr rii este strict mai mare
decât 11.
Desenati circuitul proiectat cu porti logice si bistabile.
, , ,
Modelati un mediu de vericare pentru circuit. Concepeti un generator de secvente care acoper
, , ,
• Proiectat, i un circuit secvent, ial sincron care l t, es, te cu trei perioade de ceas palierul de 1 al unui semnal
de intrare. Palierul de 0 al semnalului este de minimum 6 perioade de tact.
Desenati circuitul proiectat cu porti logice si bistabile.
, , ,
Modelati un mediu de vericare pentru circuit. Concepeti un generator de secvente care acoper
, , ,
Aceast lect, ie prezint modelarea unor construct, ii utilizate exclusiv pentru vericarea modelelor hardware.
Se vor prezenta specicat, ia initial s, i funct, ii de sistem utilizate frecvent. Pentru exemplicare, se vor considera
dou protocoale de interfat, are utilizate frecvent pentru comunicarea între dou module hardware:
• Prezentarea specicat, iilor utilizate pentru modelarea unor generatoare de vectori complexe (specicat, ia
initial, task-uri pentru generare de stimuli).
• Prezentarea unor funct, ii sistem utilizate în depanare ($display, $stop, $random).
Verilog are dou specicat, ii concurente (se execut în paralel, ordinea în cod este indiferent ) care modeleaz
resurse hardware sintetizabile: assign s, i always.
Specicat, ia assign permite atribuirea de valori c tre semnale declarate de tip wire în mod continuu (la orice
modicare a semnalelor ce determin valoarea semnalului atribuit).
Specicat, ia always este o specicat, ie concurent care înglobeaz specicat, ii secvent, iale s, i care permite
atribuirea de valori c tre semnale declarate de tip reg. Specicat, iile secvent, iale incluse în specicat, ia always
se execut în ordinea în care apar în cod. Dup execut, ia ultimei specicat, ii, s, irul specicat, iilor se reia cu prima
specicat, ie în mod permanent, pe toat durata rul rii timpului de simulare.
Specicat, ia initial este similar cu specicat, ia always din punctul de vedere al comportamentului legat
de execut, ia specicat, iilor secvent, iale. Spre deosebire de specicat, ia always, specicat, iile incluse în specicat, ia
initial sunt executate o singur dat . Dup execut, ia ultimei specicat, ii incluse în initial, specicat, ia
initial îs, i termin denitiv efectul, pân la încheierea simul rii. Din acest motiv, specicat, ia initial nu
modeleaz resurse hardware reale s, i, ca efect, nu este sintetizabil . Specicat, ia initial se foloses, te exclu-
siv pentru a modela comportamentul semnalelor utilizate pentru a servi ca intr ri pentru modulele hardware
simulate.
Specicat, ia initial îs, i începe execut, ia la timpul 0. În cadrul specicat, iei initial pot introduse întârzieri
de timp e ca timp absolut (#10 înseamn "o întârziere de 10 unit t, i de timp"), e care timp relativ la un
55
56 LECT, IA 5. Modelarea mediului de testare HDL
eveniment asociat unui semnal (@(posedge clk) înseamn "as, teapt pân la aparit, ia unui front prozitiv al
semnalului clk").
În cadrul unui modul ce modeleaz un mediu de testare pot coexista oricâte specicat, ii initial. Toate îs, i
încep execut, ia la momentul 0 al simul rii, indiferent de ordinea acestora în cod. Finalizarea specicat, iilor poate
avea loc la momente de timp diferite, în funct, ie de clauzele de timp ale ec rei specicat, ii.
De remarcat c , similar cu specicat, ia always, ecare specicat, ie initial în care este atribuit un semnal
devine o "surs " (engl. "driver") pentru acel semnal. Deci, dac un semnal este atribuit în dou specicat, ii
initial este foarte probabil s apar conicte datorit existent, ei surselor multiple pentru semnal.
Ca exemplicare, sunt prezentate în continuare modurile de modelare a unor semnale utilizate ca intr ri în
orice sistem secvent, ial sincron: semnalul de ceas s, i semnalul de reset.
initial
begin
c l k = 1 ' b0 ; // valoare initiala 0
forever #CK_SEMIPERIOD // valoare complementata la fiecare semi − p e r i o a d a
clk = ~clk ;
end
i n i t i a l begin
rst_n <= 1 ' b1 ; // initial inactiv
@( posedge c l k ) ;
rst_n <= 1 ' b0 ; // activare sincrona
@( posedge c l k ) ;
@( posedge c l k ) ;
rst_n <= 1 ' b1 ; // inactivare dupa doua perioade de ceas
@( posedge c l k ) ; // ramane inactiv pentru totdeauna
end
Se observ c cele dou semnale au fost modelate cu dou specicat, ii initial independente.
În cazul specicat, iei care modeleaz semnalul de ceas, prima specicat, ie atribuie valoarea init, ial a semnalului
de ceas (clk = 1'b0;), iar a doua modeleaz regula de complementare a semnalului, pentru totdeauna, cu o în-
târziere între comut ri: (forever #CK_SEMIPERIOD clk = ~clk;). Specicat, ia forever va face ca specicat, ia
initial s nu se nalizeze niciodat .
În cazul specicat, iei care modeleaz semnalul de reset, prima specicat, ie atribuie valoarea init, ial a semnalului
de reset (rst_n <= 1'b1;), iar urm toarele specicat, ii sunt întârziate cu momente de timp relative la semnalul
de ceas (@(posedge clk);). În acest mod, forma de und a semnalului de reset este p strat corelat cu cea
a semnalului de ceas, chiar dac ulterior semnalul de ceas îs, i modic perioada prin schimbarea parametrului
CK_SEMIPERIOD. Specicat, ia initial se va naliza dup execut, ia ultimei specicat, ii secvent, iale incluse. Se
modeleaz astfel un semnal ce este activat init, ial s, i apoi este l sat inactiv pân la nalizarea simul rii.
Figura 5.1 prezint formele de und ale semnalelor de ceas s, i de reset denite de specicat, ia initial prezen-
tat , pentru dou valori ale parametrului: CK_SEMIPERIOD=10 s, i CK_SEMIPERIOD=15. Se observ scalarea formei
de und a semnalului de reset fat, de semnalul de ceas.
Specicat, ia initial permite modelarea unor forme de und complexe pentru semnale de intrare a c ror
tranzit, ii s e condit, ionate de un semnal de ceas. Urm toarea port, iune de cod modeleaz cu specicat, ie
initial formele de und prezentate în gura 5.3.
i n i t i a l begin
req <= 1 ' b0 ;
ack <= 1 ' b0 ;
req_data <= ' bx ;
ack_data <= ' bx ;
@( negedge rst_n ) ;
@( posedge rst_n ) ;
@( posedge clk );
5.2. Not, iuni teoretice 57
Figura 5.1 Formele de und ale semnalelor de ceas si de reset, pentru CK_SEMIPERIOD=10 si CK_SEMIPERIOD=15.
, ,
În acest mod, proiectantul poate rula simularea pentru un timp indenit, simularea oprindu-se în momentul
când s-au epuizat modic rile stimulilor de intrare.
$display
Funct, ia $display permite as, area unor mesaje ce pot particularizate prin utilizarea unor variabile. As, area
variabilelor este determinat de opt, iunea existent în cadrul s, irului as, at. Ordinea variabilelor trebuie s
corespund opt, iunilor din lista de argumente. Lista de argumente este delimitat de caractere apostrof dublu
(").
5.2. Not, iuni teoretice 59
Caracterul special procent (%) indic faptul c în s, irul as, at va prezent valoarea unei variabile. Specicarea
formatului de as, are a unei variabile se face cu una din opt, iunile prezentate în tabelul urm tor.
Pentru as, area caracterului procent (%) se va scrie caracterul procent dublu: (%%).
Dac opt, iunea este precedat de "0", atunci se vor elimina valorile de 0 din partea mai semnicativ (stâng )
a numerelor.
Un caz particular îl constituie opt, iunea %m, care este singura opt, iune f r argumente. Se recomand utilizarea
acestei opt, iuni pentru a identica numele modulului care a generat mesajul. Acest lucru este de foarte mare
ajutor în proiecte mari, compuse dintr-un num r mare de module.
Funct, ia $write se comport similar cu funct, ia $display cu diferent, a c $display adaug la nalul s, irului
caracterul "linie nou ", în timp ce $write nu scrie acest caracter.
De exemplu, codul urm tor:
module code ;
i n i t i a l begin
#1;
endmodule // code
$stop s, i $finish
Funct, iile $stop s, i $finish sunt utilizate pentru a opri simularea la timpul la care sunt apelate. Diferent, a dintre
cele dou funct, ii const în act, iunea realizat dup oprirea simul rii.
Funct, ia $finish întrerupe simularea s, i închide simulatorul. Ea este recomandat a utilizat pentru -
nalizarea simul rii în cazul rul rii la linie de comand .
Funct, ia $stop opres, te simularea s, i pune simulatorul în mod de depanare. Este permis reluarea simul rii de
la timpul curent, cu simulatorul în mod grac.
În cazul lect, iilor, se va face depanarea modulelor. Se recomand utilizarea funct, iei $stop în momentul în care
stimulii sunt nalizat, i. În acest mod, un proiectant poate rula simularea cu comanda run all f r a cunoas, te
durata necesar pentru simulare.
Este recomandat ca înainte de apelul funct, iei $stop s existe un apel de funct, ie $display prin care s se
precizeze motivul pentru care s-a oprit simularea. De exemplu:
$display ( "%M %0t INFO : F i n a l s i m u l a r e . " , $time ) ;
$stop ;
$random
Funct, ia $random se utilizeaz pentru a genera numere aleatorii, necesare pentru stimulii de intrare în scopul veri-
c rii modulelor proiectate. Desigur, funct, ia nu este sintetizabil s, i se foloses, te exclusiv în modulele generatoare
de stimuli.
Funct, ia $random genereaz numere pseudo-aleatorii. Adic , un modul ce cont, ine un apel al funct, iei $random,
simulat pe acelas, i simulator, va produce de ecare dat aceeas, i secvent, de numere aleatorii. Rularea codului
pe alt simulator nu garanteaz aceeas, i succesiune de numere aleatorii.
Funct, ia $random produce un num r aleatoriu reprezentat ca întreg pe 32 de bit, i. Dac se doresc numere
aleatorii în domenii cu anumite restrict, ii, funct, ia se apeleaz împreun cu alte construct, ii sintactice. Exemplele
urm toare prezint modalit t, i de generare a numerelor aleatorii cu constrângerile mai frecvente.
module a l e a t o r i u ;
reg c l k ;
i n i t i a l begin
clk = 0;
forever #10 c l k = ~ c l k ;
end
reg we ;
reg [ 1 6 − 1:0] data ;
reg [ 8 − 1:0] addr_8b ;
integer addr_int ;
reg [ 3 1 : 0 ] numar_1 ;
integer numar_2 ;
5.2. Not, iuni teoretice 61
integer numar_3 ;
integer num_10_20 ;
integer num_10_20__30_40 ;
i n i t i a l begin
@( posedge c l k ) ;
Efectul codului de generare de numere aleatorii este prezentat în continuare, as, a cum este generat în fereastra
Transcript:
62 LECT, IA 5. Modelarea mediului de testare HDL
Protocolul "cerere-conrmare" (engl. "request-acknowledge") este un protocol lent pentru comunicarea unor
informat, ii de control sau date de volum mic între dou module. Protocolul accept cereri al turate în timp
(engl. "back-to-back"), îns cea mai rapid vitez de transmisie este o dat la ecare dou tacte succesive.
Avantajul protocolului îl constituie simplitatea acestuia.
Parametrii s, i porturile necesare unei interfet, e "request-acknowledge" sunt prezentate în tabelul urm tor.
5.2. Not, iuni teoretice 63
Vericarea respect rii protocolului poate realizat de module specice care monitorizeaz toate semnalele.
Un modul de vericare de protocol (engl. "checker") are doar porturi de intrare s, i nu atribuie valori niciunui
semnal. Modulul face exclusiv veric ri asupra corelat, iei semnalelor ("asert, ii"), conform protocolului stabilit,
s, i lanseaz mesaje de noticare c tre proiectant.
În gura 5.2 sunt prezentate scenarii corecte pentru utilizarea protocolului "request-acknowledge".
• La momentul 2, modulul master activeaz cererea req = 1, simultan cu datele req _D0. Datele sunt
64 LECT, IA 5. Modelarea mediului de testare HDL
ment, inute constante pân la primirea conm rii (momentul 5). Modulul slave observ cererea la momentul
3, o proceseaz s, i activeaz conrmarea la momentul 4. Conrmarea este es, antionat de modulul master la
momentul 5, moment la care decide dezactivarea cererii req = 0. Modulul slave dezactiveaz conrmarea
dup un tact de la activarea acesteia, la momentul 5.
• La momentul 6, modulul master activeaz cererea req = 1, simultan cu datele req _D1. În acest caz,
modulul slave are cea mai rapid react, ie: observ cererea la momentul 7 s, i la acelas, i moment activeaz
conrmarea. Modulul master observ conrmarea la dou tacte de la activarea cererii (la momentul 8).
• La momentul 10, modulul master activeaz cererea req = 1, simultan cu datele req _D2. La momentul 12,
modulul observ conrmarea s, i decide s init, ieze o nou cerere "back-to-back" prin ment, inerea req = 1,
dar cu modicarea datelor req _D3. Cele dou cereri sunt conrmate ecare în parte.
• La momentul 2, modulul master activeaz cererea req = 1, simultan cu datele req _D0. Cererea este
abandonat la momentul 5, f r a exista conrmare, generând o eroare de protocol.
• La momentul 6, modulul slave activeaz conrmarea ack = 1, f r a exista o cerere, generând o eroare de
protocol.
• La momentul 9, modulul slave activeaz cererea req = 1, îns în acelas, i timp se activeaz s, i conrmarea
ack = 1. Este o eroare de protocol determinat de modulul slave deoarece în momentul 9, când a
activat conrmarea, acesta nu a es, antionat cererea activ req = 1. Es, antionarea cererii în momentul 9 ar
determina valoarea req = 0.
• Cererea init, iat în momentul 11 este nalizat corect, îns modulul slave nu dezactiveaz conrmarea la
un tact dup activare, producând o eroare de protocol similar cu cea de la momentul 7: conrmare f r
cerere.
• La momentul 15, modulul master activeaz cererea req = 1, simultan cu datele req _D4, îns produce o
eroare de protocol prin modicarea datelor în req _D5 înainte de primi conrmarea. Eroarea de protocol
poate observat la momentul 17, când datele sunt diferite de cele de la momentul 16, des, i cererea nu a
fost conrmat . Modulul master trebuia s ment, in aceleas, i date pân la primirea conrm rii.
• La momentul 20, modulul master activeaz cererea req = 1, simultan cu datele req _D6. Modulul mas-
ter primes, te corect conrmarea la momentul 22. Îns , cererea "back-to-back" de la momentul 22 este
abandonat ulterior la momentul 23, f r conrmare, cauzând o eroare de protocol similar cu cea de la
momentul 5.
5.2. Not, iuni teoretice 65
Pe o interfat, valid-ready, datele se transmit într-un singur sens. Modulul emit, tor este cel care controleaz
semnalul val. Modulul receptor este cel care controleaz semnalul rdy .
Modulele emit, tor s, i receptor lucreaz independent, act, iunile unui modul nu trebuie s e condit, ionate de
starea celuilalt modul. Emit, torul trebuie s activeze val = 1 când are date valide, necondit, ionat de starea
receptorului. Receptorul trebuie s activeze rdy = 1 când este disponibil s primeasc date, necondit, ionat de
existent, a datelor valide dinspre emit, tor.
Odat ce a activat val = 1, emit, torul trebuie s t, in datele valide s, i constante pân când acestea sunt
preluate de c tre receptor. Preluarea datelor se face în ciclul în care val = 1 s, i rdy = 1 simultan.
Receptorul are voie s activeze s, i s dezactiveze rdy oricând. Obligat, ia lui este de a prelua datele în cazul în
care val = 1 s, i rdy = 1 simultan.
Simultan cu val = 1, modulul emit, tor depune pe portul data datele ce trebuie transferate spre modulul
receptor. Portul de date data are l t, ime parametrizabil . Datele pot structurate pentru a r spunde diverselor
cerint, e de proiectare. De exemplu, în cazul trimiterii unui ux de date ce descriu o imagine, se pot dedica
anumit, i bit, i de date pentru semnale de control (SOL/EOL - start/end of line, SOF/EOF - start/end of frame)
iar anumit, i bit, i pentru valoarea pixelului (sau a mai multor pixeli).
66 LECT, IA 5. Modelarea mediului de testare HDL
Datele trebuie ment, inute stabile (f r a se modica) pe toat durata unei cereri val = 1. Modicarea datelor
când val = 1, când emit, torul nu este gata (rdy = 0), reprezint o eroare de protocol. Inactivarea cererii
val = 0 în lipsa primirii datelor de c tre receptor (rdy = 1) reprezint o eroare de protocol. Altfel spus, val
comut din 1 în 0 exclusiv când rdy = 1.
Modulul receptor poate s îs, i declare disponibilitatea de a primi date (rdy = 1) chiar dac emit, torul nu are
date disponibile (val = 0). Receptorul are dreptul oricând s decid c nu mai primes, te date, chiar dac a fost
disponibil dar nu a primit nicio dat . Altfel spus, rdy comut din 1 în 0 indiferent de val.
Protocolul "valid-ready" permite ca val = 1 s, i rdy = 1 s e activate simultan, neind condit, ionate. În
aceast situat, ie, datele sunt preluate de receptor cu o întârziere de un tact fat, de momentul când au fost
depuse de emit, tor.
Rezult c , în cazul când atât emit, torul cât s, i receptorul permit (val = 1 s, i rdy = 1), datele se pot transfera
în ecare ciclu de tact.
Un modulul emit, tor poate capabil de a lansa cereri succesive f r pauz între ele (cereri "back-to-back").
În cazul cererilor "back-to-back", cererea din partea emit, torului este continu (val = 1) pentru mai multe
transferuri f r a se dezactiva (val = 0) între acestea.
Vericarea respect rii protocolului poate realizat de module specice care monitorizeaz toate semnalele.
Un modul de vericare de protocol (engl. "checker") are doar porturi de intrare s, i nu atribuie valori niciunui
semnal. Modulul face exclusiv veric ri asupra corelat, iei semnalelor ("asert, ii"), conform protocolului stabilit,
s, i lanseaz mesaje de noticare c tre proiectant.
În gura 5.4 sunt prezentate scenarii corecte pentru utilizarea protocolului "valid-ready".
• La momentul 2, modulul emit, tor activeaz val = 1 simultan cu datele D0. Datele sunt ment, inute
constante pân la momentul când sunt preluate (momentul 5, val = 1 s, i rdy = 1 simultan). În momentul
5, modulul emit, tor decide c nu mai are date de transmis s, i dezactiveaz val = 0. Simultan (independent
de emit, tor), modulul receptor decide la momentul 5 c nu mai poate primi alte date s, i dezactiveaz
rdy = 0.
• La momentul 6, modulul receptor devine disponibil s primeasc noi date s, i activeaz rdy = 1. La
momentul 8, emit, torul are noi date de transmis s, i activeaz val = 1. Din aceste motive, la momentul 9,
val = 1 s, i rdy = 1 simultan, datele sunt transferate de la emit, tor la receptor.
• La momentul 9, modulul emit, tor decide c nu mai are alte date, dar modulul receptor r mâne în con-
tinuare disponibil s primeasc date.
• La momentul 11, emit, torul transmite noi date D2 care vor preluate imediat la momentul 12. La
momentele 12 s, i 13, modulul emit, tor sesizeaz c datele curente au fost preluate s, i init, iaz alte cereri de
transfer (cu date modicate) "back-to-back". La momentele 12, 13, 14 se transfer date succesive, ind
ambele module disponibile (val = 1 s, i rdy = 1 simultan).
• La momentul 14, receptorul devine indisponibil (rdy = 0). Emit, torul este nevoit s ment, in datele valide
pân acestea sunt preluate, la momentul 16.
• La momentul 17 receptorul devine disponibil pentru un singur tact (rdy = 1). La momentul 18 receptorul
se declar indisponibil (rdy = 0), chiar dac nu a primit date în timp ce a fost disponibil. Este posibil
ca modulul emit, tor s fac alte act, iuni care s nu îi mai permit s primeasc date. De exemplu, un
controller de memorie DRAM care declans, eaz act, iunea de refresh devine indisponibil pentru cereri din
partea modulului client.
• La momentul 19, f r a corelate, cele dou module activeaz simultan val = 1 s, i rdy = 1. În acest caz,
datele sunt imediat preluate la momentul 20.
În gura 5.4 sunt marcate cu o s geat vertical momentele când are loc transferul efectiv al datelor de la
emit, tor la receptor.
În gura 5.5 sunt prezentate erori ale protocolului "valid-ready".
5.3. Activit t, i practice 67
• La momentul 2, modulul emit, tor activeaz cererea val = 1 simultan cu datele D0. Cererea este abando-
nat la momentul 5, f r ca datele s e preluate (rdy = 1), generând o eroare de protocol.
• La momentul 6, modulul receptor devine disponibil s, i apoi, la momentul 7, devine indisponibil, f r a
date transferate. Acest comportament este acceptabil, neind o eroare de protocol.
• La momentul 8, modulul emit, tor activeaz cererea val = 1 cu datele D1. La momentul 10, f r ca datele
D1 s e preluate, modulul emit, tor modic datele în D2. Aceasta este o eroare de protocol a modulului
emit, tor care a modicat datele f r ca receptorul s le primeasc (rdy = 1).
Realizat, i o simulare conform gurii 5.6. Modulul de top cont, ine urm toarele module:
Modicat, i mediul de testare prin instant, ierea unui modul de vericare a protocolului "request-acknowledge".
Modulul de vericare (checker_rq_ack.v) trebuie conectat cu intr rile pe semnalele interfet, ei, as, a ca în gura
68 LECT, IA 5. Modelarea mediului de testare HDL
5.7.
În modulele de referint, master_rq_ack.v s, i slave_rq_ack.v nu sunt erori. Din acest motiv, nu exist
garant, ia c modulul de vericare chiar funct, ioneaz . Pentru a "verica modulul de vericare" ar trebui generate
cazuri de eroare intent, ionate.
Modulul scenarios_rq_ack.v este un modul de simulare, nesintetizabil, care genereaz un set de erori de
protocol "request-acknowledge". Conectat, i acest modul la modulul de vericare pentru a valida corectitudinea
modulului de vericare prin observarea detect rii erorilor introduse intent, ionat. Realizat, i un mediu de testare
similar cu cel prezentat în gura 5.8.
Ad ugat, i în modulul scenarios_rq_ack.v specicat, ii pentru vericarea altor scenarii posibile ale semnalelor
din interfat, a "request-acknowledge".
5.3. Activit t, i practice 69
• Cât timp nu a sosit conrmarea (ack = 0), as, teapt urm torul front de ceas.
• Dac nu urmeaz o cerere "back-to-back", dezactiveaz cererea (req = 1), pune datele în stare indiferent
(reqdata = x) s, i as, teapt num rul de perioade de ceas de pauz între cererile succesive.
Din algoritm se observ c sunt necesari 2 parametrii: valoarea datelor s, i durata pauzei între cereri. Se
consider c dac durata pauzei este 0, urm toarea cerere este "back-to-back". Task-ul poate descris de codul
urm tor:
task send_req ;
input [REQDATA_WIDTH − 1:0] data_p ; // date transmise
input [ 3 2 − 1:0] delay_p ; // pauza intre cereri succesive
begin
r e q <= 1 ' b1 ;
req_data <= data_p ;
@( posedge c l k ) ;
while (~ ack ) @( posedge c l k ) ;
i f ( delay_p != ' d0 ) begin
r e q <= 1 ' b0 ;
req_data <= ' bx ;
70 LECT, IA 5. Modelarea mediului de testare HDL
Se observ faptul c intr rile task-ului (data_p s, i delay_p) sunt similare unor argumente formale ale unei
funct, ii. Aceste intr ri vor primi valori în momentul apel rii task-ului.
Urm toarea secvent, , din cadrul unei specicat, ii initial, reprezint apeluri multiple ale task-ului:
send_req ( ' d0 , ' d2 ) ;
send_req ( ' d1 , ' d3 ) ;
send_req ( ' d2 , ' d0 ) ;
send_req ( ' d3 , ' d1 ) ;
Îmbun t t, i task-ul ment, ionat pentru a face s, i vericarea datelor conrmate. Algoritmul ar trebui s includ :
• Când a sosit conrmarea (ack = 1), veric datele conrmate ackdata c sunt conform celor as, teptate
(introduse ca intrare în task).
• Scriet, i un modul slave (sintetizabil) care controleaz accesul la o memorie pe o interfat, "valid-ready".
• Realizat, i un mediu de testare care s instant, ieze urm toarele module, conform gurii 5.9:
// scriere
always @( posedge c l k )
i f ( c e & we & be ) mem[ addr ] <= wr_data ;
5.3. Activit t, i practice 71
// citire
always @( posedge c l k )
i f ( c e & (~we ) ) rd_data <= mem[ addr ] ; el se
rd_data <= 8 ' bx ;
endmodule // mem256x8
Lect, ia 6
Modelarea num r toarelor
Aceast lect, ie prezint modelarea num r toarelor în Verilog. Se vor modela diverse num r toare: cu presetare,
cu num rare în sens cresc tor sau descresc tor, cu num rare modulo parametrizabil, cu indicatoare de stare
(dep s, ire, limitare, zero).
Se vor prezenta circuitele LFSR (engl. Linear Feedback Shift Register), ca un caz particular de num r toare.
Num r toarele sunt circuite logice secventiale la care starea urm toare este determinat exclusiv pe baza
,
st rii prezente, printr-o funct, ie de num rare. Structura "clasic " a unui num r tor sincron este prezentat în
gura 6.1. În cazul implement rii cu registru D, structura este similar cu a unui semi-automat pentru care
circuitul logic care determin starea urm toare este realizat cu un sumator care incrementeaz starea prezent .
Adit, ional funct, iei clasice de num rare, num r toarele pot avea diverse intr ri care controleaz funct, ia de
num rare:
Pe lâng starea curent , num r toarele mai pot furniza informat, ii adit, ionale despre starea valorii curente:
• atingerea num rului maxim ce poate reprezentat pe num rul nit de bit, i (engl. overow).
73
74 LECT, IA 6. Modelarea num r toarelor
Figura 6.2 prezint simbolul unui num r tor clasic, cu num r de bit, i parametrizabil. Num r torul are o in-
trare de ceas s, i o intrare de reset asincron. Resetarea este necesar pentru init, ializarea st rii num r torului.
Num rarea va avea 2W IDT H st ri (între 0 s, i 2W IDT H − 1).
Num r torul cu simbolul bloc prezentat în gura 6.3 are suplimentar o intrare de validare (ce = Count Enable)
care condit, ionez comutarea. În cazul în care intrarea nu este valid (ce = 0) num r torul îs, i p streaz starea.
Num r torul cu simbolul bloc prezentat în gura 6.4 are o intrare a c rei activare (ld = 1) determin aducerea
num r torului într-o stare denit de intrarea data_in. Utilizând aceast facilitate, împreun cu un circuit
adit, ional, se poate realiza un num r tor modulo, cu un num r de st ri care nu este putere a lui 2.
De exemplu, presupunând W IDT H = 5, dac circuitul extern implementeaz funct, ia ld = (data_out == 27),
iar data_in = 5′ b00000, atunci num r torul va avea 28 de st ri s, i va cicla între 0 s, i 27.
Dac data_in = 5′ b00011, atunci num r torul va cicla între 3 s, i 27.
În gura 6.5 este prezentat simbolul bloc al unui num r tor capabil de a num ra atât în sens cresc tor cât s, i
în sens descresc tor, pe baza unor comenzi independente. Tabelul de funct, ionare este urm torul:
6.2. Not, iuni teoretice 75
ld cu cd data_out+ Funct, ie
1 - - data_in presetare
0 1 - data_out + 1 num r în sens cresc tor
0 0 1 data_out − 1 num r în sens descresc tor
0 0 0 data_out p streaz starea
Un num r tor clasic pe N bit, i prezint o secvent, cu un num r maxim de 2N st ri (num rare între 0 s, i
2 − 1). Pentru a genera secvent, a de lungime maxim , în ordinea de num rare clasic (starea comut din
N
unu în unu), num r torul utilizeaz un sumator de N bit, i. Datorit complexit t, ii circuitului combinat, ional
care implementeaz funct, ia aritmetic de adunare, acest sumator va limita frecvent, a maxim de operare a
num r torului. Exist aplicat, ii în care nu este necesar num rarea în ordine clasic ci este necesar doar
generarea unei secvent, e de o lungime mare (raportat la num rul de bit, i ai num r torului). Un exemplu îl
constituie aplicat, iile de generare a unor secvent, e de comezi sau de num rare a unui num r x de st ri (chiar
76 LECT, IA 6. Modelarea num r toarelor
Figura 6.5 Simbol bloc pentru un num r tor cu presetare si num rare în sens cresc tor si descresc tor.
, ,
dac num rul nu este o putere a lui 2). Acest tip de comportament se poate obt, ine cu o logic mai mic decât
un sumator (care va funct, iona la o frecvent, mai mare) dac se renunt, la constrângerea de num rare clasic
în favoarea unei num r ri pseudo-aleatorii.
Num rarea pseudo-aleatorie este o num rare determinist , dar care pare aleatorie dac este realizat pe un
num r mare de bit, i s, i este es, antionat într-un num r mic de valori. Pentru anumite polinoame caracteristice,
circuitele LFSR pe N bit, i prezint o secvent, de num rare de lungime maxim 2N − 1.
Registrul de deplasare cu react, ie liniar reprezint o modalitate de obt, inere a unei secvent, e de num rare
lungi cu un num r mic de bistabile s, i care s funct, ioneze la frecvent, mare (cu un circuit logic combinat, ional
minimal). În structura unui LSFR de N bit, i exist N bistabile. Starea viitoare a celor mai put, in semnicativi
N − 1 bit, i se obt, ine prin preluarea bit, ilor de index superior ai st rii curente. Un singur bistabil, cel mai
semnicativ, primes, te la intrare o funct, ie logic XOR determinat pe baza unor bit, i mai put, ini semnicativi.
Determinarea bit, ilor care intr în calculul valorii viitoare a bitului cel mai semnicativ se face pe baza unui
polinom. Gradul polinomului caracteristic al unui circuit LFSR desemneaz num rul de bistabile din cadrul
acestuia. Polinomul grupeaz variabilele cu puterile egale cu indecs, ii bit, ilor care determin valoarea viitoare a
celui mai semnicativ bit.
De exemplu, în cazul unui LFSR de 4 bit, i, având structura prezentat în gura 6.6, polinomul caracteristic
este X 4 + X 3 + 1. Polinomul are gradul 4 deoarece circuitul are 4 bit, i. Valoarea viitoare a bitului cel mai
semnicativ este determinat prin funct, ia XOR între bitul 0 s, i bitul 3 (deoarece în polinom apare X 3 s, i X 0 ).
Secvent, a va avea 24 − 1 = 15 st ri.
Se remarc urm toarele:
• Starea 000...0 este o stare de blocare. Starea de blocare este ment, inut pân la aparit, ia unei comenzi
explicite de init, ializare într-o alt stare.
• Nu orice polinom produce secvent, e de num rare de lungime maxim . În funct, ie de polinomul ales, se pot
obt, ine mai multe secvent, e de num rare de lungimi mai mici decât lungimea maxim .
• Un circuit LFSR poate considerat un generator de numere pseudo-aleatorii, dac are o secvent,
de num rare foarte lung (num r mare de bit, i) s, i se utilizeaz un num r mic de es, antioane succesive. De
exemplu, urm toarele secvent, e de num rare pseudo-aleatorie fac parte dn secvent, a de num rare a unui
LFSR pe 10 bit, i, caracterizat de polinomul X 10 + X 7 + 1. Secvent, a are o lungime total de 210 − 1 = 1023
st ri.
6.2. Not, iuni teoretice 77
Polinom X 10 + X 7 + 1
Secvent, a 1 Secvent, a 2
Baza 10 Baza 2 Baza 10 Baza 2
... .......... ... ..........
572 1000111100 846 1101001110
286 0100011110 423 0110100111
143 0010001111 211 0011010011
71 0001000111 105 0001101001
547 1000100011 564 1000110100
785 1100010001 282 0100011010
904 1110001000 141 0010001101
964 1111000100 70 0001000110
994 1111100010 35 0000100011
009 1111110001 529 1000010001
504 0111111000 776 1100001000
764 1011111100 388 0110000100
894 1101111110 706 1011000010
447 0110111111 865 1101100001
223 0011011111 944 1110110000
111 0001101111 984 1111011000
567 1000110111 1004 1111101100
795 1100011011 1014 1111110110
909 1110001101 1019 1111111011
454 0111000110 509 0111111101
... .......... ... ..........
Se observ c , în cazul consider rii a numai 20 numere, acestea pot considerate aleatorii. De remarcat
valorile binare ale secvent, elor pseudo-aleatorii: cu except, ia bitului din stânga (cel mai semnicativ) tot, i
bit, ii preiau valoarea din starea anterioar a bitului de index superior (deplasare spre dreapta). Bitul din
stânga (cel mai semnicativ) al st rii viitoare se obt, ine prin funct, ia logic XOR între bit, ii 7 s, i 0 ai st rii
curente.
endmodule // lfsr_4
module l f s r _ 1 0 (
input clk , // semnal de ceas ,
input rst_n , // semnal de reset asincron activ 0
output reg [ 9 : 0 ] data_o // iesirea lfsr
);
endmodule // lfsr_10
Num rul de bit, i ai parametrului POLINOM trebuie s e egal cu valoarea parametrului WIDTH. Valoarea poli-
nomul prezint bitul egal cu 1 dac indexul respectiv este cont, inut de polinom.
Pentru polinomul X 4 + X 3 + 1, WIDTH=4 s, i POLINOM=4'b1001.
Pentru polinomul X 10 + X 7 + 1, WIDTH=10 s, i POLINOM=10'b00_1000_0001.
Modelarea se bazeaz pe observat, iile:
• Fiecare bit, cu except, ia celui mai semnicativ, îs, i preia valoarea viitoare din valoarea curent a bitului de
index superior.
6.3. Activit t, i practice 79
• O operat, ie AND pe bit, i între tot, i bit, ii valorii curente s, i polinom determin un s, ir de bit, i în care diferit, i
de zero sunt doar bit, ii din polinom cu valoarea 1. Altfel spus, parametrul POLINOM realizeaz prin funct, ia
logic AND mascarea bit, ilor care nu intr în calculul bitului cel mai semnicativ.
• Operat, ia XOR pe baza bit, ilor mascat, i determin valoarea urm toare a bitului cel mai semnicativ.
Proiectat, i un circuit pe baz de num r tor presetabil care implementeaz un divizor de frecvent, cu 15 s, i factor
de umplere 7/15. Justicat, i proiectarea.
Vericat, i proiectarea prin simulare.
Lect, ia 7
Modelarea FSM
Aceast lect, ie prezint modelarea în Verilog a automatelor secvent, iale cu un num r nit de st ri.
Se vor prezenta diverse moduri de modelare pentru FSM.
• Modelarea FSM.
• Vericarea FSM.
7.2.1 Automate
Automatele secvent, iale cu num r nit de st ri (engl. FSM = Finite State Machine) au în structura lor un
registru pentru memorarea st rii curente s, i un circuit combinat, ional pentru determinarea st rii urm toare.
Automatele au ca element esent, ial o bucl realizat prin faptul c determinarea st rii viitoare se face pe baza
st rii prezente.
Un automat care nu prezint ies, iri se numes, te semi-automat. Structura aceastuia este prezentat în gura
7.1. Se observ registrul de stare care are la ies, ire codul st rii prezente s, i la intrare codul st rii viitoare. Starea
viitoare este determinat prin circuitul combinat, ional, pe baza st rii prezente s, i a intr rilor.
În funct, ie de modul de determinare a ies, irilor automatului, automatele se clasic în:
• automate Moore, cu simbolul bloc prezentat în gura 7.2 a), pentru care ies, irea este dependent exclusiv
de starea prezent s, i
• automate Mealy, cu simbolul bloc prezentat în gura 7.2 b), pentru care ies, irea este dependent atât
de starea prezent cât s, i de intr ri.
81
82 LECT, IA 7. Modelarea FSM
Modelarea este f cut pentru sintez . Este posibil ca sintetizatoarele s nu accepte (sau s nu interpreteze
corect) toate variantele de modelare. De cele mai multe ori, produc torii de software EDA (engl. Electronic
Design Automation) pentru sintez recomand anumite tipuri de modelare. Exist îns câteva tipuri unanim
acceptate. Acestea sunt prezentate în continuarea lect, iei.
Trebuie t, inut cont s, i de faptul ca automatele cu multe st ri s, i multe condit, ii de comutare între st ri sunt
dicil de testat integral. Mentenant, a s, i simplitatea de depanare a codului reprezint criterii importante pentru
alegerea modalit t, ii de modelare a FSM.
Pentru exemplicarea model rii FSM se consider graful de tranzit, ii (engl. state chart) din gura 7.3.
Automatul are 4 st ri, denumite generic idle, initial, iterate s, i nal, posibil de codicat pe un num r minim
de 2 bit, i (22 ≤ 4).
Automatul are dou intr ri, denumite start s, i zero.
Ies, irile automatului, denumite ready s, i do_iter, depind exclusiv de starea prezent (numele lor apar în sim-
bolurile de stare, noduri, sub numele st rii în care este activ ). Este un automat de tip Moore. Arcul marcat
cu 'x' desemneaz o tranzit, ie în care intr rile sunt indiferente.
a) b)
Figura 7.2 Scheme bloc ale automatelor: a) automat Moore (iesirile depind exclusiv de starea prezent ), b) automat
,
endmodule // fsm_1
84 LECT, IA 7. Modelarea FSM
Se observ codicarea explicit a st rilor, cu un num r minim de bit, i, realizat cu specicat, ii localparam. În
acest mod, codurile st rilor nu sunt expuse interfet, ei exterioare a modulului s, i nu se pot modica la instant, ierea
modulului.
localparam s_idle = 2 ' b00 ;
localparam s_initial = 2 ' b01 ;
localparam s_iterate = 2 ' b10 ;
localparam s_final = 2 ' b11 ;
Un alt tip de modelare acceptat de toate sintetizatoarele presupune modelarea semi-automatului cu dou
specicat, ii always.
O specicat, ie always @(posedge clk) secvent, ial modeleaz registrul de stare, ca un registru de tip D.
O alt specicat, ie always @(*) modeleaz circuitul combinat, ional care implementeaz funct, ia de tranzit, ie a
st rii, as, a ca în gura 7.5.
Codul asociat model rii cu dou specicat, ii always este urm torul:
module fsm_2 (
input clk , // semnal de ceas ,
input rst_n , // semnal de reset asincron activ 0
input start , // start operatie
input zero , // indicator de stare
output do_iter , // comanda pentru o iteratie
7.2. Not, iuni teoretice 85
reg [ 1 : 0 ] s t a r e _ p r e z e n t a ;
reg [ 1 : 0 ] s t a r e _ v i i t o a r e ;
Figura 7.5 Modelarea semi-automatului cu o specicatie always secvential pentru registru si o specicatie always
, , , ,
endmodule // fsm_2
Se observ c , în acest caz, sunt denite explicit semnale pentru starea viitoare (atribuite din specicatia ,
always combinational ) si pentru starea prezent (atribuite din specicatia always secvential ):
, , , ,
reg [ 1 : 0 ] s t a r e _ p r e z e n t a ;
reg [ 1 : 0 ] s t a r e _ v i i t o a r e ;
7.2. Not, iuni teoretice 87
Modelarea cu st ri codicate "one-hot" are avantajul producerii unui circuit care lucreaz la frecvent, maxim ,
datorit simplit t, ii circuitului combinat, ional care implementeaz funct, ia de tranzit, ie a st rii. Fiec rei st ri îi
este asociat un bistabil. La un moment dat, un singur bistabil are valoare 1, acesta având semnicat, ia de stare
curent . Fiecare bistabil, împreun cu logica ce îi determin starea urm toare, este modelat cu o specicat, ie
always @(posedge clk), as, a cum se prezint în gura 7.6.
Condit, iile în care un bistabil se seteaz se deduc din descrierea arcelor care intr în nodul asociat st rii
respective. De exemplu, se ajunge în starea iterate (s_iterate<= 1'b1) dac starea prezent este initial s, i
zero=1'b0 sau dac starea prezent este iterate s, i zero=1'b0.
Figura 7.6 Modelarea semi-automatului cu codare st rilor "one-hot". Fiecare specicatie always modeleaz un bit de
,
reg s_initial ;
reg s_iterate ;
reg s_final ;
endmodule // fsm_3
Se observ c nu exist coduri asociate st rilor dar exist semnale asociate pentru ecare stare în parte.
Dezavantajul model rii cu codarea st rilor "one-hot" îl constituie riscul asumat de proiectant. Dac ecuat, iile
st rilor urm toare sunt gres, ite, este posibil ca doi sau mai mult, i bit, i de stare s ajung simultan egali cu 1 în
mod eronat. Aceast eroare nu este semnalat de simulator. Ar trebui ca proiectantul s adauge cod suplimentar
pentru aceast vericare: "în orice moment exist un singur bit de stare diferit de zero".
i n i t i a l begin
@( negedge rst_n ) ;
@( posedge rst_n ) ;
forever begin
@( posedge c l k )
i f ( ( s _ i d l e + s _ i n i t i a l + s _ i t e r a t e + s _ f i n a l ) != ' d1 ) begin
$display ( "%M %0t EROARE s t a r e one−hot ( s t a r e=%b%b%b%b ) " , $time ,
s_idle , s _ i n i t i a l , s_iterate , s_final ) ;
$stop ;
end
end
end
Realizat, i un mediu de vericare în care s se instant, ieze toate cele 3 tipuri de modelare FSM, ca în gura 7.7.
Atât semnalele de ceas s, i de reset cât s, i semnalele de intrare, start s, i zero, provin din aceleas, i surse. Semnalele
de ies, ire ale celor 3 instant, e sunt diferite.
Observat, i comportamentul ies, irilor celor 3 automate. Observat, i codurile celor 3 tipuri de modele s, i faptul c
7.3. Activit t, i practice 89
Figura 7.7 Mediu de testare pentru FSM cu 3 instante de modele pentru acelasi FSM.
, ,
ies, irile sunt identice chiar dac în interior automatele au st ri codicate diferit. Altfel spus, comportamentul
ies, irilor nu trebuie s depind de tipul de modelare s, i nici de tipul de codicare a st rilor.
Observat, i c stimulii propus, i în s, ierul fsm_test.v nu veric tranzit, ia st rii din starea initial în starea nal.
Modicat, i mediul de testare pentru a verica tranzit, ia st rii din initial în nal.
Observat, i us, urint, a interpret rii st rii în cazul "one-hot" în fereastra de forme de und a simulatorului (gura
7.8). Modelul cont, ine semnale cu nume ce sugereaz st rile. Starea este interpretat rapid de un proiectant
prin observarea semnalului de stare egal cu 1.
Pentru instant, ele cu modelare cu codicare cu num r minim de bit, i, ad ugat, i specicat, ii pasive (semnale
care nu determin ale semnale) pentru us, urarea depan rii. De exemplu:
Figura 7.8 prezint forme de und cu simularea mediului din gura 7.7. Se observ c semnalele de ies, ire
sunt identice (ready s, i do_iter), des, i în interior cele 3 instant, e au semnale de stare diferite.
90 LECT, IA 7. Modelarea FSM
Figura 7.8 Forme de und obtinute prin simularea celor 3 tipuri de modelare ale unui FSM.
,
Pornind de la un model existent pentru graful prezentat în gura 7.3, modicat, i codul pentru a modela un
automat a c rui comportament este descris de graful prezentat în gura 7.9.
Automatul are 5 st ri: idle, initial, left, middle s, i right.
Automatul nu are ies, iri explicite. Automatul expune starea spre exterior.
Se remarc faptul c anumite intr ri au nume similare cu numele generice ale unor st ri. Ies, irile sunt porturi
pentru modul s, i trebuie p strate ca în specicat, ii. Numele generice ale st rilor nu apar ca porturi ale modulului
s, i sunt alese de c tre proiectant. Se recomand modelarea cu specicat, ii localparam a unor coduri asociate cu
nume ce sugereaz numele generice ale st rilor.
Se presupune c în starea initial o singur intrare din cele 3 (go_left, go_middle s, i go_right) este activ
(adic go_left + go_middle + go_right = 1, în acest context simbolul '+' desemneaz suma aritmetic ).
Modelat, i automatul cu comportamentul descris de graful din gura 7.9. Asigurat, i-v c în mediul de testare
at, i vericat toate tranzit, iile asociate arcelor prezente în graf.
module fsm_casex (
input clk , // semnal de ceas ,
input rst_n , // semnal de reset asincron activ 0
// intrari
input start ,
input sfarsit ,
input jos ,
input mijloc ,
input sus ,
output reg [ 2 : 0 ] stare // registru de stare si iesirea
);
endmodule // fsm_casex
Figura 7.11 Modelarea unui semi-automat, cu o singur specicatie always ce înglobeaz o specicatie casex.
, ,
Lect, ia 8
Modelarea memoriilor
Aceast lect, ie prezint aspecte specice model rii memoriilor: sintax , init, ializare s, i lucru cu s, iere.
8.2.1 Memorii
Dup modul în care sunt efectuate act, iunile de c tre o memorie (citire s, i scriere), memoriile pot clasicate în:
• memorii sincrone, pentru care accesarea datelor se face sincron cu frontul activ al unui semnal de ceas,
sau
• memorii asincrone, pentru care accesarea datelor se face la activarea unor semnale de control specice
(citire sau scriere).
Num rul de porturi ale memoriei este reprezentat de num rul de adrese pe baza c rora se poate accesa
memoria, la un moment dat. Dup num rul s, i tipul porturilor, memoriile pot clasicate astfel:
• 1RW - memoria single-port, un sigur port prin care se face atât citirea cât s, i scrierea (poate face o singur
act, iune odat , e citire, e scriere),
95
96 LECT, IA 8. Modelarea memoriilor
• 1R1W - memoria cu dou porturi independente, unul de scriere s, i altul de citire (poate face simultan o
citire s, i o scriere la adrese diferite),
• 2RW - memoria cu dou porturi independente prin care se pot face atât act, iuni de citire cât s, i de scriere
(pot realizate orice dou act, iuni simultan, inclusiv dou scrieri la adrese diferite).
Se pot imagina diverse tipuri de memorii, cu mai multe porturi sincrone pe acelas, i semnal de ceas sau pe
semnale de ceas asincrone (ecare port cu ceasul propriu).
În aceast lect, ie, se vor ment, iona exclusiv memoriile mai des utilizate: memoriile single-port, 1RW, cu o
singur adres , capabile s acceseze la un moment dat o singur locat, ie de memorie, e pentru citire, e pentru
scriere (dar nu simultan scriere s, i citire).
Simbolul bloc al memoriei single-port este prezentat în gura 8.1.
Figurile 8.2 s, i 8.3 prezint simbolurile bloc al memoriilor 1R1W s, i 2RW.
Figura 8.2 Simbol bloc pentru memoria 1R1W (un port de citire si unul de scriere).
,
Memoria are date de l time WORD_BYTES bytes, adic 8*WORD_BYTES biti. Adâncimea memoriei este de
, ,
Modelul de memorie mem_1rw descrie parametrii memoriei, interfat, a s, i act, iunile de citire s, i de scriere efectuate
asupra matricii de memorie.
8.2. Not, iuni teoretice 97
Figura 8.3 Simbol bloc pentru memoria 2RW (engl. "true dual-port").
module mem_1rw #(
parameter ADDR_WIDTH = 8 ,
parameter MEM_DEPTH = 256 , // MEM_DEPTH <= 2^ADDR_WIDTH
parameter WORD_BYTES = 8 // latimea datelor ( biti ) = 8 ∗ WORD_BYTES
)(
input clk , // ceas ( front pozitiv )
input ce , // chip enable ( activ 1)
input we , // write enable ( activ 1)
input [ADDR_WIDTH −1 : 0] addr , // adresa
input [ 8 ∗WORD_BYTES −1 : 0] wr_data , // date scrise
input [WORD_BYTES −1 : 0] be , // byte enable , ( activ 1)
output reg [ 8 ∗WORD_BYTES −1 : 0] rd_data // date citite
);
// scriere memorie
always @( posedge c l k )
i f ( c e & we )
mem[ addr ] <= (mem[ addr ] & (~ be ) ) | // pastreaza datele nescrise
( wr_data & be ) ; // modifica datele scrise
// citire memorie
always @( posedge c l k )
i f ( c e & (~we ) ) rd_data <= mem[ addr ] ; el se // date citite
rd_data <= ' bx ; // date necunoscute
endmodule // mem_1rw
98 LECT, IA 8. Modelarea memoriilor
În mod normal, o memorie se scrie prin circuit înainte de a citit . Din acest motiv, nu este nevoie ca memoria
s e init, ializat cu date cunoscute. Dac nu este init, ializat , ca orice variabil Verilog, se poate considera c
valorile memorate sunt toate 'bx.
Exist îns cazuri când este necesar init, ializarea memoriilor. Exemple de memorii ce trebuie init, ializate sunt
memoriile ROM sau modulele LUT (engl. "Look-Up Table").
Alteori, module de memorie RAM (deci care se scriu înainte de a citite) sunt utilizate pentru a testa
exclusiv circuitul care preia date din memorie. Se poate presupune c datele au fost scrise anterior (de c tre un
alt modul) s, i nu se dores, te simularea perioadei de scriere a memoriei. De exemplu, dac se testeaz un circuit
care preia datele din memorie pentru a as, ate ("driver video").
Init, ializarea variabilelor bidimensionale care modeleaz memoriile este un proces exclusiv de simulare (nu are
corespondent în hardware real).
Init, ializarea tuturor locat, iilor memoriei cu aceeas, i valoare constant se poate face într-o specicat, ie initial
în care toate locat, iile sunt init, ializate secvent, ial, una câte una, la timpul 0 de simulare, cu valoarea constant :
integer idx ; // index
i n i t i a l begin
end
Funct, iile Verilog $readmemb s, i $readmemh init, ializeaz o matrice de memorie (variabil bidimensional ) cu valori
dintr-un s, ier extern. Fis, ierul cont, ine caractere ASCII ce reprezint valori binare ("0" sau "1") sau în baza 16
("0-9", "A-F"). Valorile trebuie s aib aceeas, i l t, ime cu cea a memoriei (exprimat în bit, i) s, i s e separate
cu spat, ii. Valorile adreselor de început s, i de sfârs, it sunt valori în baza 16 (atât pentru $readmemb cât pentru s, i
$readmemh) precedate de caracterul "@".
Sintaxa specicat, iilor de init, ializare a memoriilor este:
$readmemb ( " nume_file " , mem) ;
$readmemh ( " nume_file " , mem) ;
Pentru memoria mem_1rw, init, ializarea cu specicat, ie $readmemh se realizeaz prin includerea acesteia într-o
specicat, ie initial:
i n i t i a l begin
end
Verilog permite accesul la s, ierele de pe calculatorul local pentru a us, ura împlementarea unor medii de vericare
complexe s, i pentru a înlesni depanarea. Specicat, iile de acces la s, iere nu sunt sintetizabile s, i trebuie utilizate
exclusiv în module ce modeleaz mediul de vericare.
8.2. Not, iuni teoretice 99
Funct, ii de acces la s, ierele de pe mediul de stocare al calculatorului sunt apelate prin funct, ii specice Verilog.
Numele acestor funct, ii este precedat de simbolul $. Un s, ier local, identicat prin cale s, i nume în sistemul
de s, iere al calculatorului, este asociat cu un descriptor de s, ier în Verilog. Calea s, ierului se recomand a
relativ la directorul de simulare pentru a asigura portabilitatea modelului.
Sintaxa asocierii dintre un s, ier s, i un descriptor este urm toarea:
integer f i l e _ i d ; // d e s c r i p t o r d e fisier
f i l e _ i d = $fopen ( " file_name " [ , type ] ) ;
Tipul s, ierului semnic scopul pentru care este deschis s, ierul. Cele mai utilizate tipuri sunt ment, ionate în
tabelul urm tor:
$fopen deschide un s, ier s, i îi asociaz un descriptor, declarat ca un întreg pe 32 de bit, i. Descriptorul va
utilizat ulterior de c tre specicat, iile de acces la s, ier. În caz de eroare, descriptorul are valoarea zero. Se
recomand ca dup o specicat, ie de deschidere de s, ier s se verice dac s, ierul a putut deschis, prin testarea
descriptorului de s, ier:
i f ( d a t a _ f i l e == 0 ) begin
$display ( "Nu s e p o a t e d e s c h i d e f i s i e r u l <c a l e /nume f i s i e r >." ) ;
$stop ;
end
Caracterul "b" prezent în tipul s, ierului desemneaz un "s, ier binar" (cont, ine valori binare). În lipsa acestuia,
s, ierul este de tip text (cont, ine caractere ASCII).
Comanda de închidere a unui s, ier este:
$fclose ( f i l e _ i d ) ;
Pentru citirea din sier exist comenzi specice. Scrierea în sier se poate face cu comenzile $display sau
, ,
$fdisplay. Scrierea se face temporar într-un buer de iesire. Buerul este depus în sier e cu comenzi explicite
, ,
$flush(file_id); e la întreruperea sau nalul simul rii. Exist si comenzi de control pentru lucru cu siere.
, ,
reg [ 7 : 0 ] ch ;
string str ;
integer status ;
reg [ 7 : 0 ] mem [ 7 : 0 ] ;
100 LECT, IA 8. Modelarea memoriilor
Comand Descriere
Citire din sier ,
Funct, iile de init, ializare a memoriilor $readmemb s, i $readmemh au ca argument un s, ier extern ce cont, ine
caractere ASCII. Dac se dores, te init, ializarea unei memorii dintr-un s, ier binar (de exemplu o imagine în
format .raw) aceast opt, iune nu este potrivit .
În schimb, se poate deschide s, ierul în citire ca ind de tip binar (opt, iunea "rb - read, binar") s, i atribui câte
o valoare ec rei locat, ii de memorie.
integer file_id ; // handler fisier
i n i t i a l begin
De multe ori este necesar inspectarea cont, inutului unui memorii la un anumit timp de simulare. Eventual, este
nevoie de interpretarea datelor existente în memorie (de exemplu ca ind o imagine în format .raw). Solut, ia
const din transferul cont, inutului memoriei într-un s, ier binar. Fis, ierul se va deschide pentru scriere de tip
binar (opt, iunea "wb - write, binar"). Printr-o specicat, ie for se poate copia în s, ier ecare locat, ie de memorie,
formatat cu opt, iunea "%c" (caracter).
integer file_id ; // handler fisier
8.3. Activit t, i practice 101
i n i t i a l begin
// scrie memoria destinatie in fisier binar
file_id = $fopen ( " output_data /mem_map_32x32 . raw" , "wb" ) ;
i f ( f i l e _ i d == 0 ) begin
$display ( "Nu s e p o a t e d e s c h i d e f i s i e r output_data /mem_map_32x32 . raw" ) ;
$stop ;
end
for ( i d x =0; idx < ( 3 2 ∗ 3 2 ) ; i d x=i d x +1)
$fwrite ( f i l e _ i d , "%c " , i_mem_1rw_32x32x8 .mem[ i d x ] ) ;
$fclose ( f i l e _ i d ) ;
end
Prima instant, de memorie are capacitatea de memorare 215 × 8 s, i poate stoca o imagine de dimensiune
256 × 128, cu pixelii reprezentat, i pe 8 bit, i.
A doua instant, de memorie are capacitatea de memorare 210 × 8 s, i poate stoca o imagine de dimensiune
32 × 32, cu pixelii reprezentat, i pe 8 bit, i.
• Simulat, i mediul de testare furnizat în lect, ie (mem_crop_test.v) s, i observat, i structurile de date asociate
memoriilor prin inspectarea ferestrelor ModelSim.
102 LECT, IA 8. Modelarea memoriilor
• Inspectat, i codul surs al modului de test mem_crop_test.v s, i observat, i ce regiune din memoria mare
este transferat în memoria mic .
• Modicat, i mediul de testare pentru a decupa din imaginea mare o port, iune de 20 × 20 pixeli aat, i cu
colt, ul din stânga sus la coordonatele (189, 63) s, i a depune imaginea rezultat în memoria mic , cu colt, ul
din stânga sus la coordonatele (0, 0).
• Modicat, i mediul de testare pentru a genera secvent, e de control potrivite pentru transferul datelor ca
în realitate. Specicat, ia care modeleaz mediul de testare trebuie s atribuie valori c tre porturile ce s, i
addr ale ambelor instant, e. Celelate porturi trebuie legate la valori constante, cum este prezentat în gura
8.4.
• Plasat, i anumite locat, ii de memorii în fereastra de forme de und a simulatorului s, i observat, i modicarea
datelor de la acele locat, ii, în corelat, ie cu semnalele de control.
Identicat, i specicat, iile de accesare a s, ierelor în codul surs . Identicat, i s, ierele de intrare s, i de ies, ire.
Fis, ierele generate au extensii potrivite pentru tipul de date stocate.
• Fis, ierele cu extensia .raw cont, in date care reprezint imagini. Aceste s, iere pot deschise cu un editor
de imagini, de exemplu IrfanView . Este necesar cunoas, terea dimensiunii imaginii stocate.
• Aceleas, i s, iere cu extensia .raw pot deschise cu un editor binar, de exemplu HxD Edit .
• Fis, ierele cu extensia .hex sau .bin sunt s, iere cu caractere ASCII asociate valorilor numerice. Aceste
Modicat, i mediul de testare pentru a transfera în s, iere cont, inutul ambelor memorii, imediat ce a fost
transferat a zecea dat . Vericat, i funct, ionarea inspectând s, ierele generate.
8.3. Activit t, i practice 103
// codul aici
endmodule // fib
• Utilizat, i o memorie single-port mem_1rw initializat dintr-un s, ier binar extern. Generat, i cont, inutul
s, ierului extern prin export dintr-un tabel Excel.
• Determinat, i l t, imea necesar pentru a reprezenta primele 20 de numere ale lui Fibonacci.
• Modicat, i modelul pentru a capabil s genereze primele 100 de numere ale lui Fibonacci. Ce trebuie
schimbat? Explicat, i limit rile programului Excel în a calcula corect numerele lui Fibonacci.
Lect, ia 9
Aceast lect, ie propune student, ilor realizarea unui exercit, iu de modelare a unui sistem digital ale c rui specicat, ii
sunt prezentare sub forma unui desen RTL.
• Deprinderea student, ilor cu modelarea unor sisteme digitale complexe, cu specicat, ii prezentate sub form
de structur RTL.
• Utilizarea not, iunilor legate de testarea sistemelor digitale modelate în Verilog: generatoare de stimuli
complexe, monitoare de vericare, lucru cu s, iere.
105
106 LECT, IA 9. Modelarea circuite digitale cu HDL
Figura 9.1 Simbol bloc pentru multiplicatorul secvential cu interfat request-acknowledge si algoritm de adunare
, , ,
repetat .
LD CD Q++ Funct, ie
1 - D Înc rcare cu D
0 1 Q-1 Num rare în sens descresc tor
0 0 Q P streaz starea
op1 si op2 provin din intrarea req_data, op1 ind partea mai semnicativ .
,
module seq_mul #(
parameter DATA_WIDTH = ' d4 // Numar d e biti ai operanzilor
)(
input clk , // semnal de ceas ,
input rst_n , // reset asincron activ 0
input req , // cerere
output reg ack , // confirmare , puls activ 1
input [DATA_WIDTH+DATA_WIDTH − 1:0] req_data , // { op1 , op2 }
output reg [ 2 ∗DATA_WIDTH − 1:0] ack_data // rezultat
);
Modelul va cont, ine câte o specicat, ie always pentru ecare registru (sau bistabil). Circuitele combinat, ionale
care genereaz semnalele prezente în schem se vor modela cu specicat, ie assign.
9.3. Activit t, i practice 107
• instant, a multiplicatorului testat seq_mul, cu parametrul DATA_WIDTH preluat din valoarea parametrului
cu acelas, i nume al mediului de vericare;
• instant, a modulului ck_rst_tb care genereaz semnalele de ceas s, i de reset;
• instant, a modulului checker_rq_ack care veric protocolul request-acknowledge.
În modelul de top, se va deni un task utilizat pentru trimiterea de comenzi spre multiplicator s, i vericarea
datelor. Task-ul accept ca intr ri dou valori asociate operanzilor înmult, irii s, i un num r reprezentând intervalul
de timp (exprimat în perioade de ceas) pân la urm toarea comand . Dac aceast ultim valoare este zero,
comanda ce va urma se va lansa back-to-back.
Vericarea rezultatelor se va face prin compararea valorii as, teptate (calculate în task ca produs al operanzilor
lansat, i pentru multiplicator) cu valoarea produs de multiplicator. Compararea se va face în momentul primirii
conrm rii (ack=1).
task send_req ;
input [DATA_WIDTH − 1:0] op1 ; // date transmise
input [DATA_WIDTH − 1:0] op2 ; // date transmise
input [ 3 2 − 1:0] delay_p ; // pauza intre cereri succesive
begin
// activeaza cererea
req <= 1 ' b1 ;
req_data <= {op1 , op2 } ;
@( posedge c l k ) ;
// asteapta confirmarea
while (~ ack ) @( posedge c l k ) ;
// verifica datele
108 LECT, IA 9. Modelarea circuite digitale cu HDL
send_req ( 2 , 3, 1);
send_req ( 3 , 2, 1);
send_req ( 5 , 0, 1);
send_req ( 4 , 2, 1);
send_req ( 0 , 6, 1);
Apelat, i task-ul cu parametrii determinis, ti asfel încât s vericat, i cazurile exterme (engl. corner cases):
Apelat, i task-ul de multiple ori, cu parametrii aleatorii pentru vericarea intensiv a modulului.
Apelat, i task-ul pentru a verica în mod determinist toate cazurile pentru valorile operatorilor modulului de
multiplicare.
···
seq_mul #(
.DATA_WIDTH (DATA_WIDTH)
Calitatea unui algoritm de înmult, ire se poate aprecia prin timpul necesar pentru efectuarea unui set de înmult, iri.
Pentru a putea compara divers, i algoritmi, trebuie s existe o m rime cantitativ care s caracterizeze ecare
algoritm.
Pentru cazul multiplicatorului secvent, ial, se propune ca metric intervalul de timp (exprimat în perioade de
ceas) dintre momentul de început s, i momentul de nalizare a unui set de înmult, iri. Desigur, pentru un num r
mare de înmult, iri este necesar determinarea automat a valorii acestei metrici. În codul modulului de vericare
pot incluse specicat, ii prin care s se raporteze num rul de perioade de timp între dou repere temporale.
Implementat, i un mecanism de m surare a timpului de execut, ie a unui set de înmult, iri.
Vericat, i relevant, a m sur torii timpului. Intervalul de timp de pauz între cereri trebuie exclus din m sur -
toarea de performant, . Modicat, i mediul de testare pentru a init, ia exclusiv cereri back-to-back.
Îmbun t t, it, i mediul de testare cu facilitatea de a scrie într-un s, ier datele (cuplul de operatori) care au fost
vericate. De exemplu, pentru ecare înmult, ire, în s, ier se va scrie o line având cont, inutul:
< operator1 > < operator2 >
Îmbun t t, it, i mediul de testare cu facilitatea de a citi un s, ier cu formatul similar celui scris s, i a init, ia cereri
de înmult, ire pentru acelas, i set de operatori.
Anexa A
Teme laborator
Aceast anex prezint exemple de teme posibil de abordat de c tre student, i dup însus, irea not, iunilor de baz
ale sintaxei limbajului Verilog.
Temele prezint sisteme digitale simple, cu o funct, ionalitate us, or de înt, eles. Interfet, ele circuitelor sunt impuse,
îns algoritmul implementat s, i structura intern sunt l sate la latitudinea proiectatului.
Circuitele propuse au anumit, i parametrii pentru a putea utilizate pentru diverse aplicat, ii.
Cerinte ,
Recomand ri
• Fiecare modul se va stoca într-un s, ier individual. Numele s, ierului va coincide cu numele modulului
cont, inut.
• Fiecare s, ier va avea un antet (comentariu Verilog) în care va ment, ionat descrierea modulului.
• Codul Verilog va cont, ine comentarii justicative incluse în cod s, i în afara acestuia.
• Structura modelat va însot, it de justic ri.
• Se vor respecta strict denumirile, tipurile s, i dimensiunile porturilor specicate pentru circuitul primit.
• Comentariile se vor referi la modalitatea de modelare aleas .
• Numele alese pentru module s, i semnale vor sugera rolul acestora.
• În cadrul s, ierului, alinierea se va face cu dou spat, ii albe (tasta SPACE) nu cu TAB.
• Fis, ierele cu modelele Verilog vor vericate prin simulare cu simulatorul ModelSim.
111
112 LECT, IA A. Teme laborator
• Coad de date. Datele sunt scrise în memorie în ordinea sosirii s, i citite în aceeas, i ordine. Scrierea s, i
citirea pot la momente de timp diferite, necorelate.
• Linie de întârziere. Pentru situat, iile când este nevoie de întârzierea cu mai multe perioade de ceas a
unui ux de date.
Memoria FIFO este caracterizat de adâncimea memoriei, adic num rul maxim de date ce pot stocate în
caz c datele nu sunt citite.
Memoria FIFO gestioneaz singur (în interior) adresa de accesare a memoriei.
Simbolul memoriei FIFO este prezentat în gura A.1.
• Memoria stiv . Datele citite sunt ultimele date scrise. Este implementarea hardware care ofer suport
pentru saltul programelor rulate de microprocesoare la apelarea funct, iilor sau pentru tratarea întrerupe-
rilor.
Memoria LIFO este caracterizat de adâncimea memoriei, adic num rul maxim de date ce pot stocate în
caz c datele nu sunt citite.
Memoria LIFO gestioneaz singur (în interior) adresa de accesare a memoriei.
Simbolul memorie LIFO este prezentat în gura A.2.
Figura A.3 Simbolul circuitului pentru determinarea maximului unor date, implementare pipeline.
În sistemele mai mari, arbitrului de bus nu este prezentat ca modul ci ca un bus având mai multe surse s, i
eventual mai multe destinat, ii, as, a ca în gura A.6. Cu linie punctat este marcat pozit, ia arbitrului de bus.
În sistemele mai mari, arbitrului de bus nu este prezentat ca modul ci ca un bus având mai multe surse s, i
eventual mai multe destinat, ii, as, a ca în gura A.8. Cu linie punctat este marcat pozit, ia arbitrului de bus.
120 LECT, IA A. Teme laborator
Figura A.10 prezint forme de und caracteristice pentru circuitul watchdog. Se observ înc rcarea valorii
prestabilite delay_preset=7, cu comanda ld_delay=1, lansat în timp ce circuitul nu este activat enable=0.
Cu except, ia acestui moment, valoarea delay_preset este indiferent . Apoi circuitul este activat enable=1. La
activare, începe num rarea intern în sens descresc tor, de la valoarea prestabilit (7). În cursul num r rii, apar
dou pulsuri de triggerare (trigger=1 care determin reluarea num r rii de la valoarea maxim prestabilit
(7). Dup o num rare complet (valoarea num r torului intern ajunge la zero), num rarea se opres, te s, i se
activeaz întreruperea int=1. Întreruperea este dezactivat în momentul deactiv rii circuitului enable=0.
O nou activare a circutului enable=1 determin reluarea num r rii în sens descresc tor de la valoarea
maxim prestabilit (7).
Simbolul circuitului de înmult, ire secvent, ial , cu interfat, request-acknowledge, este prezentat în gura A.11.
Interfat, a circuitelor de înmult, ire, cu protocol request-acknowledge, este prezentat în tabelele urm toare.
În continuare sunt prezentat, i algoritmi de înmult, ire. Pentru simplicare, au fost notat, i operanzii cu A s, i B
iar produsul cu P. La nalul operat, iei, produsul se va aa în registrul P.
Simbolul circuitului de împ rt, ire secvent, ial , cu interfat, request-acknowledge, este prezentat în gura A.14.
Interfat, a circuitelor de împ rt, ire, cu protocol request-acknowledge, este prezentat în tabelele urm toare.
În continuare sunt prezentat, i algoritmi de împ rt, ire. Pentru simplicare, au fost notat, i operanzii cu A s, i B
iar un registru intermediar cu P. La nalul operat, iei, restul se va aa în registrul P iar câtul în registrul A.
De remarcat c , în cazul numerelor întregi, restul are acelas, i semn ca deîmp rt, itul.
gativ)
Deîmp rt, it: pozitiv
Împ rt, itor: negativ
Cât: negativ (acelas, i semn cu împ rt, itorul)
Rest: pozitiv (acelasi semn cu deîmp rt, itul)
- P <= P + B
- repet de n ori
- dac P este pozitiv (MSB=0) atunci
- deplaseaz cu o pozit, ie stânga P (LSB P = MSB A)
- P <= P + B
altfel
- deplaseaz cu o pozit, ie stânga P (LSB P = MSB A)
- P <= P + (-B)
- deplaseaz cu o pozit, ie stânga A (LSB A = MSB P)
Figura A.18 Algoritm de împ rtire f r restaurare (deîmp rtit pozitiv, împ rtitor negativ). 6 : (−1) si 7 : (−2).
, , , ,
134 LECT, IA A. Teme laborator
Figura A.19 Algoritm de împ rtire f r restaurare (deîmp rtit pozitiv, împ rtitor negativ). (7 : (−3)).
, , ,
Anexa B
Proiect
Proiectul const în scrierea unui model Verilog pentru un sistem de procesare de imagini s, i implementarea
acestuia în tehnologie FPGA, pe o plac de dezvoltare.
Sistemul este denumit generic ipu - Image Procesing Unit.
Plac de dezvoltare recomandat este Spartan-3E Starter Board produs de rma Digilent, îns orice
plac similar este posibil de utilizat.
Caracteristicile acestei pl ci de dezvoltare sunt prezentate pe site-ul produc torului:
http://store.digilentinc.com/spartan-3e-starter-board-limited-time/
Foaia de catalog a pl cii "Spartan-3E Starter Kit Board User Guide" prezint detalii de implementare despre
toate perifericele cu care este conectat dispozitivul FPGA pe placa de dezvoltare. Documentul poate accesat
de pe site-ul produc torului:
https://reference.digilentinc.com/_media/s3e:s3estarter_ug.pdf
Spartan-3E Starter Board este echipat cu un dispozitiv Xilinx FPGA XC3S200FT256 (aproximativ 200K
port, i logice echivalente).
Tema de proiect o reprezint proiectarea s, i implementarea pe FPGA a unui sistem de prelucrare de imagini
s, i as, area acestora pe un display VGA. Student, ii primesc anumite module pentru a re-utilizate. Ei trebuie
s modeleze modulele care particularizeaz mira as, at s, i diferite funct, ii de control.
135
136 LECT, IA B. Proiect
1. Sistem sincron, cu ceas 50MHz, preluat de la circuitul oscilator de pe placa Spartan, conform descrierii
g site în capitolul Clock Sources al "Spartan-3E Starter Kit Board User Guide".
3. Interfat, cu buton rotativ s, i switch-uri utilizate pentru congurarea sistemului, conform descrierii
din capitolul Switches, Buttons and Knob al "Spartan-3E Starter Kit Board User Guide".
• Butonul rotativ selecteaz registrul curent care se scrie (cu valori de la switch-uri) s, i se as, eaz pe
LCD.
• Butonul central determin , prin ap sare, momentul scrierii registrului selectat.
• Switch-urile determin valorile scrise în registrul selectat în momentul ap s rii pe butonul rotativ
central.
4. Interfat, VGA, 640x480, RGB (3 bit, i de culoare). Culorile rezultate din codarea RGB sunt prezentate
în gura B.1.
5. Interfat, cu LCD. Pe rândul de sus se as, eaz numele registrului de congurare curent selectat. Pe
rândul de jos se as, eaz valoarea registrului în binar s, i în zecimal. Exemple sunt prezentate în gura B.2.
6. Sursa imaginii as, ate se va selecta prin registrele de congurare. Imaginea as, at provine e de la
ies, irea e de la una din intr rile modului de procesare de imagine.
7. Congurarea. Registrele de congurare au l t, ime de 4 bit, i. Registrul curent (la care se face scriere s, i
de la care se face as, area pe LCD) se modic prin butonul rotativ. Valoarea congurat se modic
prin switch-uri. Prin ap sarea butonului rotativ central se face scrierea în registrul selectat a valorii de la
switch-uri. Valoarea registrului selectat este as, at pe LCD.
B.2. Module reutilizate 137
• lcdDriver - Driver LCD. Modulul genereaz semnalele de control pentru as, ajul LCD. Interfat, a cu
sistemul intern este de tip request-acknowledge (lcdDriver este modul slave). Dispozitivul ce dores, te s
scrie pe LCD lanseaz spre lcdDriver o cerere. Simultan cu cererea, modulul master furnizeaz codul
caracterului as, at s, i rândul s, i coloana pe care se va as, a caracterul. LCD-ul as, eaz 2 rânduri s, i 16
coloane dintr-un buer de 40 de coloane. Detaliile de interfat, are între FPGA s, i display-ul LCD se g sesc
în capitolul Character LCD Screen al "Spartan-3E Starter Kit Board User Guide".
• debounce - Circuit de eliminare a perturbat, iilor care apar din cauza comutatoarelor mecanice.
Butoane s, i switch-urile mecanice pot produce perturbat, ii care trebuie eliminate înainte de preluarea s, i
prelucrarea semnalului generat. Modulul debounce realizeaz cur t, irea unui semnal provenit de la un
comutator mecanic de zgomotele existente. Modulul debounce are un port de intrare s, i un port de ies, ire.
138 LECT, IA B. Proiect
Cerint, ele generale sunt completate de cerint, e specice care individualizeaz tema ec rui student în parte.
Rubrica "opt, ional" din tabelele urm toare prezint sugestii pentru îmbun t t, iri posibil de implementat în
sisteme mai complexe.
1 1 Complementare Congurabilitate:
procesare sau bypass
2 1 Complementare Congurabilitate:
procesare sau bypass
3 1 Complementare Congurabilitate:
procesare sau bypass
4 2 AND Congurabilitate:
funct, ii logice multiple
5 2 AND Congurabilitate:
funct, ii logice multiple
6 2 AND Congurabilitate:
funct, ii logice multiple
B.3. Cerint, e specice 139
7 2 OR Congurabilitate:
funct, ii logice multiple
8 2 OR Congurabilitate:
funct, ii logice multiple
9 2 OR Congurabilitate:
funct, ii logice multiple
10 2 XOR Congurabilitate:
funct, ii logice multiple
11 2 XOR Congurabilitate:
funct, ii logice multiple
140 LECT, IA B. Proiect
12 2 XOR Congurabilitate:
funct, ii logice multiple
18 2 Sum Congurabilitate: cu
saturare sau overow
19 2 Sum Congurabilitate: cu
saturare sau overow
20 2 Diferent, Congurabilitate: cu
saturare sau overow
142 LECT, IA B. Proiect
B.4 Interfat ,
În etapa a 2-a, ecranul trebuie s se prezinte ca în gura B.7: dung vertical ros, ie pe fond verde.
În etapa a 3-a sistemul este suplimentat cu înc o instant, iere a modulului patternGen modicat astfel încât s
genereze dou pattern-uri, selectate pe baza unei intr ri provenite de la un switch.
Cele dou instant, eri ale modulului patternGen sunt parametrizate diferit: una cu congurare 0, alta cu
congurare 1.
Se adaug un multiplexor 2:1 cu select, ia provenind de la un switch. Intrarea de la switch se va trece printr-un
circuit debouncer, as, a ca în gura B.8.
În etapa a 3-a, ecranul trebuie s se prezinte ca în gura B.7: dung vertical ros, ie pe fond verde sau dung
orizontal albastr pe fond cyan, în funct, ie de pozit, ia switch-ului.
În etapa a 4-a, ecranul trebuie s se prezinte ca în gura B.9: trei tipuri de imagini, în funct, ie de starea
switch-urilor. În cazul celui de-al treilea tip de ecran, culoarea este calculat pe baza culorilor celorlalte dou
ecrane, printr-o funct, ie logic (gura B.11).
• rotire stânga,
• rotire dreapta,
• ap sare.
Suplimentar, regFile are posibilitatea de a actualiza caracterele pe as, ajul LCD la ap sarea pe butonul rotativ
central.
Figura B.6 Etapa a 2-a: Mir cu dung vertical rosie pe fond verde.
,
B.5. Etape de realizare 147
Figura B.9 Ecranul VGA dup etapa a 3-a: dung vertical rosie pe fond verde sau dung orizontal albastr pe fond
,
Figura B.11 Ecranul VGA dup etapa a 4-a: trei tipuri de ecran (în functie de starea unui switch).
,
www.DanNicula.ro/books/verilog
151