Extras din laborator
1.Scopul lucrării:
Să se descrie multiplicatorul pe 4 biţi prin metoda flux de date.
2.Date teoretice
Verilog HDL reprezintă un limbaj utilizat pentru descrierea sistemelor digitale. Sistemele digitale pot fi calculatoare, componenete ale acestora sau alte structuri care manipulează informaţie digitala.
Verilog poate fi utilizat pentru descrierea sisemelor digitale din punct de vedere comportamental, structural şi flux de date:
Descrierea comportamentală este legată de modul în care operează sistemul şi utilizează construcţii ale limbajelor traditionale de programare, de exemplu if sau atribuiri.
Descrierea structurală exprimă modul în care entităţile/componentele logice ce alcătuiesc sistemul sunt interconectate în vedeea realizării comportamentului dorit.
Descriera prin metoda fulx de date - acest stil e similar ecuaţiilor logice, cu toate că nu e limitat numai la valori logice. Metoda constă în expresii ale semnalelor de intrare asociate ieşirii. În cele mai multe cazuri, o asemenea descriere uşor poate fi transformată într-o structură şi apoi implementată
Un exemplu simplu de utilizare a metodei flux de date este sescrierea unei porti logice NAND prin această metodă:
module NAND(in1, in2, out);
input in1, in2;
output out;
// instructiune de atribuire continuă
assign out = ~(in1 & in2);
endmodule
Porturile in1, in2 şi out sunt etichete pe fire. Atribuirea continuă assign urmăreşte în permanenţă eventualele modificări ale variabilelor din membrul drept, pentru reevaluarea expresiei şi pentru propagarea rezultatului în membrul stâng (out).
În acest caz, instrucţiunea efectuiază produsul semnalelor de pe firele in1 şi in2, neagă rezultatul şi comandă continutul la firul out:
assign out = ~(in1 & in2);
Atribuirile continue comandă variabile de tip wire şi sunt evaluate şi actualizate atunci când un operand de intrare îşi modifică valoarea.
NOTĂ: Metoda flux de date este utilizată pentru a modela logica combinaţională.
Multiplicatorul
Circuitele de deplasare ne permit realizarea multiplicării numai cu puterile întregi ale lui 2. Pentru a realiza orice înmulţire vor fi necesare circuite mai elaborate. Funcţia de multiplicare poate fi realizată în mai multe moduri. Pe lângă soluţia combinaţională, ce va fi prezentată în continuare, există şi soluţii secvenţiale sau soluţii programate. Cea combinaţională oferă varianta cea mai rapidă. Preţul plătit va include, în consecinţă, şi o "taxă de urgenţă", sub forma unui produs dimensiune - adâncime mare.
Fig. 1 Circuitul de înmulţire elementar, a. Structura internă, b. Simbolul logic. înmulţitorul elementar
Vom începe prin a prezenta structura unui înmulţitor elementar, IE, a unui circuit care realizează înmulţirea a două cuvinte de un bit. Structura acestui circuit va trebui să satisfacă trei cerinţe:
1. Să realizeze operaţia propriuzisă de înmulţire a celor doi biţi.
2. Să asigure operaţia de adunare presupusă de algoritmul de înmulţire al numerelor reprezentate pe mai mulţi biţi.
3. Să permită interconectarea într-o reţea bidimensională care asigură propagarea operanzilor şi a rezultatelor parţiale astfel încât să se poate realiza combinational operaţia de înmulţire.
Rezultă structura din Figura 1, unde:
• circuitul AND realizează operaţia propriuzisă de înmulţire a biţilor a şi b (produsul ia valoarea 1 numai dacă biţii a şi b au ambii valoarea 1),
• sumatorul complet de un bit SC care adună produsul realizat local cu cel realizat de bitul mai puţin semnificativ şi cu depăşirea obţinută de la sumari anterioare,
• biţilor a şi b trebuie să le fie asigurată propagarea către alte IE.
Înmulţitorul combinational
Pentru a proiecta un înmulţitor combinational pentru cuvinte de n biţi va trebui să interconectăm n2 IE într-o matrice bidimensională sugerată de algoritmul de înmulţire binară a două cuvinte de n biţi.
Fig. 2 Înmulţitor de 4 biţi.
Factorii produsului sunt a3 ... a0 şi b3 ... b0. iar câtul este x7 ... x0. înmulţitorul elementar aibj realizează produsul biţilor ai şi bj pe care-1 sumează la produsul ai-1 x bj-1 ţinând cont de depăşirea dată de sumarea realizată de înmulţitorul elementar ai-1bj
Implementarea multiplicatorului in VERILOG HDL:
Vom defini iniţial un multiplicator elementar, care este prezentat în figura 1:
module mule(cout,sout,a,b,cin,sin);
input a,b,cin,sin;
output cout,sout;
wire p;
assign p=a&b; // atribuie lui p produsul a şi b
assign {cout,sout}=p+sin+cin;
endmodule
Pentru a face un multiplicator pe mai mulţi biţi, trebuie să interconectăm mai multe multiplicatoare elementare cum e arătat în figura 2. În limbajul VERILOG HDL, acest lucru se fac în modul următor:
module mul_4(p,a,b);
input [3:0] a,b;
output [7:0] p;
mule m00(cout00, sout00, a[0], b[0], 1'b0, 1'b0);
mule m01(cout01, sout01, a[0], b[1], 1'b0, 1'b0);
mule m02(cout02, sout02, a[0], b[2], 1'b0, 1'b0);
mule m03(cout03, sout03, a[0], b[3], 1'b0, 1'b0);
mule m10(cout10, sout10, a[1], b[0], cout00, sout01);
mule m11(cout11, sout11, a[1], b[1], cout01, sout02);
mule m12(cout12, sout12, a[1], b[2], cout02, sout03);
mule m13(cout13, sout13, a[1], b[3], cout03, 1'b0);
mule m20(cout20, sout20, a[2], b[0], cout10, sout11);
mule m21(cout21, sout21, a[2], b[1], cout11, sout12);
mule m22(cout22, sout22, a[2], b[2], cout12, sout13);
mule m23(cout23, sout23, a[2], b[3], cout13, 1'b0);
mule m30(cout30, sout30, a[3], b[0], cout20, sout21);
mule m31(cout31, sout31, a[3], b[1], cout21, sout22);
mule m32(cout32, sout32, a[3], b[2], cout22, sout23);
mule m33(cout33, sout33, a[3], b[3], cout23, 1'b0);
assign p[3:0]={sout30,sout20,sout10,sout00};
assign p[7:4]={cout33,cout32,cout31,cout30}+{sout33,sout32,sout31}.
Preview document
Conținut arhivă zip
- compile
- contents.lib~lab_2_SEP
- lab_2_SEP.epr
- lab_2_SEP.erf
- lab_2_SEP.opt
- lab_2_SEP.opv
- sources.sth
- vcp_cmd.log
- vsim.log
- lab_2_sep
- css
- hde.css
- lst.css
- images
- bde
- back.gif
- bar.gif
- blank.gif
- code.gif
- codedown.gif
- codeover.gif
- fit.gif
- fitdown.gif
- fitover.gif
- frame.gif
- full.gif
- fulldown.gif
- fullover.gif
- goto.gif
- gotodown.gif
- gotoover.gif
- newwindow.gif
- newwindowdown.gif
- newwindowover.gif
- panmode.gif
- panmodedown.gif
- panmodeover.gif
- pop.gif
- popdown.gif
- popover.gif
- prev.gif
- prevdown.gif
- prevover.gif
- print.gif
- printdown.gif
- printover.gif
- selectmode.gif
- selectmodedown.gif
- selectmodeover.gif
- tbl.gif
- tbldown.gif
- tblover.gif
- xprev.gif
- zoomin.gif
- zoomindown.gif
- zoominover.gif
- zoommode.gif
- zoommodedown.gif
- zoommodeover.gif
- zoomout.gif
- zoomoutdown.gif
- zoomoutover.gif
- ext
- acp.gif
- acpselected.gif
- ahw.gif
- ahwselected.gif
- asf.gif
- asfselected.gif
- awf.gif
- awfselected.gif
- bas.gif
- basselected.gif
- bde.gif
- bdeselected.gif
- conf.gif
- confselected.gif
- cpp.gif
- cppselected.gif
- dlm.gif
- dlmselected.gif
- do.gif
- doselected.gif
- drw.gif
- drwselected.gif
- edn.gif
- ednselected.gif
- hp.gif
- hpselected.gif
- htm.gif
- htmselected.gif
- lst.gif
- lstselected.gif
- pl.gif
- plselected.gif
- sdf.gif
- sdfselected.gif
- symb.gif
- symbselected.gif
- tcl.gif
- tclselected.gif
- txt.gif
- txtselected.gif
- und.gif
- undef.gif
- undefselected.gif
- undselected.gif
- v.gif
- vhd.gif
- vhdselected.gif
- vls.gif
- vlsselected.gif
- vselected.gif
- vtb.gif
- vtbselected.gif
- xnf.gif
- xnfselected.gif
- fsm
- bar.gif
- code.gif
- codedown.gif
- codeover.gif
- fit.gif
- fitdown.gif
- fitover.gif
- frame.gif
- full.gif
- fulldown.gif
- fullover.gif
- newwindow.gif
- newwindowdown.gif
- newwindowover.gif
- prev.gif
- prevdown.gif
- prevover.gif
- print.gif
- printdown.gif
- printover.gif
- zoomin.gif
- zoomindown.gif
- zoominover.gif
- zoomout.gif
- zoomoutdown.gif
- zoomoutover.gif
- ico
- ahdl.ico
- itab
- back.bmp
- empty.gif
- left_n.bmp
- left_s.bmp
- n_n.bmp
- n_nr.gif
- n_s.bmp
- right_n.bmp
- right_s.bmp
- s_n.bmp
- tab_n.bmp
- tab_s.bmp
- lst
- in.gif
- out.gif
- sig.bmp
- sig.gif
- var.gif
- menu
- win
- blank.gif
- folderclosed.gif
- folderopen.gif
- join.gif
- joinbottom.gif
- jointop.gif
- line.gif
- minus.gif
- minusbottom.gif
- minusonly.gif
- minustop.gif
- plus.gif
- plusbottom.gif
- plusonly.gif
- plustop.gif
- doc.gif
- msie_doc.gif
- msie_doc_mo.gif
- msie_doc_sel.gif
- ns_doc.gif
- ns_doc_mo.gif
- ns_doc_sel.gif
- menucntrl
- collapseall.gif
- collapseall_f2.gif
- expandall.gif
- expandall_f2.gif
- home.gif
- home_f2.gif
- shim.gif
- set
- coll.gif
- exp.gif
- norm.gif
- tab
- back.bmp
- empty.gif
- left_n.bmp
- left_s.bmp
- n_n.bmp
- n_s.bmp
- right_n.bmp
- right_s.bmp
- s_n.bmp
- tab_n.bmp
- tab_s.bmp
- tree
- empty.gif
- folder_c.gif
- folder_o.gif
- join.gif
- join_b.gif
- join_l.gif
- join_t.gif
- line.gif
- minus.gif
- minus_b.gif
- minus_o.gif
- minus_t.gif
- plus.gif
- plus_b.gif
- plus_o.gif
- plus_t.gif
- project.gif
- wfm
- back.gif
- bar.gif
- down.gif
- downdown.gif
- downover.gif
- first.gif
- firstdown.gif
- firstover.gif
- last.gif
- lastdown.gif
- lastover.gif
- next.gif
- nextdown.gif
- nextover.gif
- prev.gif
- prevdown.gif
- prevover.gif
- up.gif
- updown.gif
- upover.gif
- aldec.gif
- logo.gif
- logoback.bmp
- logoback.gif
- info
- index.htm
- splash
- AhdlRegular.bmp
- aldecpdffooter.txt
- info.htm
- src
- MERGE
- lab_2_SEP.v
- index.htm
- mule.v
- index.htm
- mul_4.v
- index.htm
- test_mule.v
- index.htm
- test_mul_4.v
- index.htm
- struct
- aldec.htm
- bdetools.js
- fsmtools.js
- is.js
- map.htm
- map.js
- navig.js
- noexport.htm
- settings.htm
- index.htm
- menu.htm
- menucntrl.htm
- log
- console.log
- src
- MERGE
- lab_2_SEP.v
- mule.v
- mul_4.v
- test_mule.v
- test_mul_4.v
- wave.asdb
- 0lab_2_SEP.mgf
- 1.jpg
- 1lab_2_SEP.mgf
- 3lab_2_SEP.mgf
- Advdataflow.png
- bde.set
- compilation.order
- compile.cfg
- default_compile.do
- Edfmap.ini
- elaboration.log
- exp2html.dat
- lab_2_SEP.adf
- lab_2_SEP.aws
- lab_2_SEP.doc
- lab_2_SEP.LIB
- lab_2_SEP.rlb
- lab_2_SEP.wsp
- lab_2_SEP_0.rep
- library.cfg
- mule.png
- projlib.cfg
- synthesis.order