Sunteți pe pagina 1din 6

2013/10/30 19:08

1/6

Laboratorul 1 - Limbajul Verilog: Introducere

Laboratorul 1 - Limbajul Verilog: Introducere


Verilog
n cadrul laboratorului de Arhitectura Calculatoarelor vom studia un limbaj de descriere a hardware-ului (eng. Hardware Description Language - HDL) numit Verilog. Limbajele de descriere a hardware-ului sunt folosite n industrie pentru proiectarea i implementarea circuitelor digitale (eng. Aplication-Specific Integrated Circuit - ASIC). Cele mai folosite limbaje de descriere a hardware-ului sunt Verilog i VHDL. Din punct de vedere al sintaxei ele se aseamn cu limbajele de programare de uz general (ex. C/C++/Java) ns ofer n plus anumite faciliti pentru modelarea i simularea logicii combinaionale i secveniale. Proiectarea unui circuit digital ntr-un HDL ncepe printr-o descriere textual a circuitului. Aceasta este compilat pentru a verifica sintaxa i a genera un model al circuitului iar apoi modelul poate fi rulat ntr-un simulator pentru a verifica funcionalitatea descrierii. O alternativ la rularea n simulator este sintetizarea unei configuraii pentru programarea unui chip FPGA i testarea acestuia. Verilog ofer mai multe alternative pentru descrierea unui circuit. Dou dintre aceste alternative pe care le vom folosi n cadrul laboratorului sunt:
G

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/

Last update: 2013/10/17 13:19

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);

not(o1, o2, i);

nand n1(z, x, y); Tab. 2: Exemple de instaniere a primitivelor

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

Laboratorul 1 - Limbajul Verilog: Introducere

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/

Last update: 2013/10/17 13:19

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

Laboratorul 1 - Limbajul Verilog: Introducere

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/

Last update: 2013/10/17 13:19

lab:lab01

http://elf.cs.pub.ro/ac/wiki/lab/lab01

Resurse
G G G

Schelet de cod PDF laborator Soluie laborator (disponibil ncepnd cu 16.10.2013)

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/

Printed on 2013/10/30 19:08

S-ar putea să vă placă și