Documente Academic
Documente Profesional
Documente Cultură
1/6
descrierea structural - porile logice sunt legate ntre ele, asemntor cu o schem logic, pentru a obine funcionalitatea dorit; aceasta este subiectul pe care n vom aborda n laboratorul de fa. descrierea comportamental - se folosesc constuciile de nivel nalt (ex. if, for, while etc.) pentru a descrie funcionalitatea dorit; vom aborda acest subiect n laboratoarele viitoare.
Primitive
Pentru descrierea structural a circuitelor, Verilog ofer o serie de primitive (eng. built-in primitives) asociate porilor logice de baz (nu exist primitive secveniale predefinite). O list abreviat a primitivelor predefinte poate fi consultat n Tab. 1. N intrri N ieiri or buf and not nor nand xor xnor Tab. 1: Primitive Verilog Fiecare primitiv are porturi, prin care este conectat n exterior. Primitivele predefinite ofer posibilitatea conectrii mai multor intrri (ex. or, and, xor etc.) sau mai multor ieiri (ex. buf, not).
AC Wiki - http://elf.cs.pub.ro/ac/wiki/
lab:lab01
http://elf.cs.pub.ro/ac/wiki/lab/lab01
Folosirea unei primitive se face prin instanierea cu lista de semnale care vor fi conectate la porturile ei. Pentru primitivele predefinite porturile de ieire sunt declarate naintea porturilor de intrare. Tab. 2 ofer cteva exemple de instaniere a unor pori n Verilog. Pentru primitivele predefinite numele instanei este opional. Schema Cod or(out, a, b, c);
Wires
n Verilog, specificarea semnalelor dintr-o diagram structural se face prin wires. Acestea se declar prin cuvntul cheie wire.
wire y1, y2; xor(out, y1, y2); and(y1, in1, in2); nand(y2, in3, in4, in5);
n exemplul anterior y1 i y2 sunt nite semnale de cte 1 bit care leag ieirile porilor and (y1) i nand (y2) la intrrile porii xor. Pentru a declara semnale pe mai muli bii se pot folosi vectori precum n declaraiile urmtoare; m reprezint un semnal de 8 bii cu bitul cel mai puin semnificativ (eng. least significant bit - LSB) aflat n dreapta, iar n reprezint un semnal de 5 bii cu bitul cel mai semnificativ (eng. most significant bit MSB) aflat n dreapta. wire[7:0] m; wire[0:4] n; // 8 biti, LSB n dreapta // 5 biti, MSB n dreapta
n mod implicit semnalele care nu sunt declarate sunt considerate ca fiind de tip wire i avnd 1 bit (ex. in1, in2 etc.).
http://elf.cs.pub.ro/ac/wiki/ Printed on 2013/10/30 19:08
2013/10/30 19:08
3/6
Module
Limbajul Verilog necesit ca toate elementele prezentate anterior (primitive i wires) s fie declarate ntr-un modul. Scopul modulului este s ncapsuleze funcionalitatea i interfaa unui circuit. Pentru a declara un modul se folosesc cuvintele cheie module i endmodule. Pe lng aceste cuvinte cheie, declaraia unui modul mai conine:
G G
numele acestuia lista de porturi (pentru interfaa cu exteriorul) - pot fi de intrare (input), ieire (output) sau intrare-ieire (inout) i pot avea mai muli bii
Exemplu declarare modul module exemplu(output o, input a, input[3:0] b); /* descrierea funcionalitii */ endmodule
Click pentru un mod alternativ de declarare a unui modul Exemplu declarare modul n Verilog 1995) module exemplu(o, a, b); output o; input a; input[3:0] b; /* descrierea funcionalitii */ endmodule
Spre deosebire de primitive, ordinea porturilor unui modul nu este restricionat. Intrrile i ieirile pot fi declarate n orice ordine, ns, pentru consisten, se prefer folosirea regulii de la primitive. Implicit, toate porturile sunt de tip wire, ns acest lucru poate fi modificat pentru porturile de ieire (porturile de intrare nu pot fi modificate).
Instaniere module
Descrierea funcionalitii unui modul poate folosi, pe lng primitive, i instane ale altor module. Acest lucru se face asemnntor cu instanierea unei primitive, cu diferena c, n acest caz, numele instanei nu este opional. Exemplu instantiere modul
AC Wiki - http://elf.cs.pub.ro/ac/wiki/
lab:lab01
http://elf.cs.pub.ro/ac/wiki/lab/lab01
module mux8_1(output out, input[7:0] in, input[2:0] sel); mux4_1 m1(out30, in[3:0], sel[1:0]); mux4_1 m2(out74, in[7:4], sel[1:0]); not(n_sel2, sel[2]); and(y1, out30, n_sel2); and(y2, out74, sel[2]); or(out, y1, y2); endmodule module mux4_1(output out, input[3:0] in, input[1:0] sel); // implementare multiplexor 4:1 endmodule
n exemplul anterior definiia modulului modul1 folosete o instan a unui modul de tip modul2, denumit m. Semnalele x, a i s ale modulului modul1 sunt legate la porturile y, i i, respectiv, j ale instanei m, asemntor cu apelul unei funcii n C. Click pentru un mod alternativ de instaniere a unui modul n Verilog, legtura dintre porturile unei instanei i semnalele legate la aceste porturi poate fi fcut i pe baza numelor, nu doar a poziei. Aceast metod de instaniere a unui modul poate fi observat n exemplul urmtor. Exemplu instantiere modul module mux8_1(output out, input[7:0] in, input[2:0] sel); mux4_1 m1(.out(out30), .in(in[3:0]), .sel(sel[1:0])); mux4_1 m2(.sel(sel[1:0]), .in(in[7:4]), .out(out74)); not(n_sel2, sel[2]); and(y1, out30, n_sel2); and(y2, out74, sel[2]); or(out, y1, y2); endmodule module mux4_1(output out, input[3:0] in, input[1:0] sel); // implementare multiplexor 4:1 endmodule
Aceast metod de instaniere nu este suportat pentru primitive, porturile acestora neavnd asociate nume.
Proiectarea Top-Down Proiectarea top-down se refer la partiionarea sistematic i repetat a unui sistem complex n uniti funcionale mai simple, a cror proiectare poate fi fcut mai facil. O partiionare i organizare la nivel nalt a unui sistem reprezint arhitectura acestuia. Unitile funcionale individuale ce rezult
http://elf.cs.pub.ro/ac/wiki/ Printed on 2013/10/30 19:08
2013/10/30 19:08
5/6
n urma partiionrii sunt mai uor de proiectat i de testat dect ntregul sistem. Strategia divide-et-impera a proiectrii top-down ne pemite proiectarea de circuite care conin milioane de pori. Instanierea unui modul n definiia unui alt modul este numit mbricare (eng. nested module). Modulele imbricate reprezint mecanismul oferit de Verilog pentru proiectarea top-down, deoarece imbricarea creeaz automat o parionare a sistemului.
Sintax
G G
Verilog este un limbaj case-sensitive; x_in i x_In sunt tratate ca dou semnale diferite. Numele identificatorilor (ex. nume de module, semnale i porturi) pot conine doar litere, cifre, _ i $; ele trebuie s nceap cu _ sau cu o liter. Comentariile se marcheaz cu // sau se ncadreaz ntre /* i */.
Xilinx ISE
n cadrul laboratorului vom folosi mediul de dezvoltare Xilinx ISE, varianta WebPACK, pentru simularea codului Verilog i programarea plcilor cu FPGA. WebPACK este versiunea gratuit a Xilinx ISE disponibil pentru download pe site-ul Xilinx. Un tutorial pentru instalarea versiunii 14.6 (folosite n laborator) gsii n seciunea tutoriale. Sistemul de operare Windows 8 nu este suportat n mod oficial. Pentru crearea proiectelor i modulelor folosind Xilinx ISE urmrii tutorialul de pe wiki.
Exerciii
1. (3p) Implementai i simulai un sumator elementar complet. Hint: Folosii scheletul de cod pentru exerciiul 1 i completai TODO-urile. Hint: Consultai laboratorul 0 pentru implementarea unui sumator elementar complet. Hint: Scheletul de cod conine deja un proiect Xilinx ISE i un modul de testare. Hint: Urmrii tutorialul pentru a realiza simularea (srii peste adugarea modulului de test, deoarece este deja adugat). 2. (3p) Implementai i simulai un multiplexor 4:1. Urmrii diagrama de semnale generat. Hint: Consultai laboratorul 0 pentru implementarea unui multiplexor 4:1. Hint: Respectai interfaa cerut n scheletul de cod. 3. (2p) Implementai un sumator pe 4 bii. Verificai corectitudinea sumatorului vizualiznd semnalele n baza 10. Hint: Consultai laboratorul 0 pentru implementarea unui sumator pe mai muli bii. Hint: Folosii sumatorul implementat la exerciiul 1, adugndu-l la proiect din meniul ProjectAdd Copy of Source . Hint: Modificai afiarea unui semnal cu click-dreaptaRadixUnsigned Decimal. 4. (2p) Implementai i simulai un sumator pe 6 bii. Folosii un sumator pe 4 bii i dou sumatoare pe 1 bit. Hint: Respectai interfaa cerut n scheletul de cod.
H H H H H H H H H H
AC Wiki - http://elf.cs.pub.ro/ac/wiki/
lab:lab01
http://elf.cs.pub.ro/ac/wiki/lab/lab01
Resurse
G G G
Referine
G
Ciletti, Michael D. Advanced digital design with the Verilog HDL. Prentice Hall, 2011
From: http://elf.cs.pub.ro/ac/wiki/ - AC Wiki Permanent link: http://elf.cs.pub.ro/ac/wiki/lab/lab01 Last update: 2013/10/17 13:19
http://elf.cs.pub.ro/ac/wiki/