This is an old revision of the document!


Acest laborator va fi disponibil incepand cu 11/10/2021

Spre deosebire de primitive, ordinea porturilor unui modul nu este restricționată. Intrările și ieșirile pot fi declarate în orice ordine, însă, pentru consistență, se preferă folosirea convenției de la primitive: prima dată se declară ieșirile, apoi intrările.

Implicit, toate porturile sunt de tip wire, însă acest lucru poate fi modificat pentru porturile de ieșire (porturile de intrare nu pot fi modificate). Vom discuta acest aspect în laboratoarele următoare.

Instanțiere module

Descrierea funcționalității unui modul poate folosi, pe lângă primitive, și instanțe ale altor module. Acest lucru se face asemănător cu instanțierea unei primitive, cu diferența că, în acest caz, numele instanței nu este opțional.

Exemplu instanțiere modul
module mux4_1(output out, input[3:0] in, input[1:0] sel);
    // implementare multiplexor 4:1
endmodule
 
module mux8_1(output out, input[7:0] in, input[2:0] sel);
    mux4_1 m1(out30, in[3:0], sel[1:0]);    // instantiere mux4_1
    mux4_1 m2(out47, in[7:4], sel[1:0]);    // alta instantiere mux4_1
    // logica aditionala
    not(n_sel2, sel[2]);
    and(y1, out30, n_sel2);
    and(y2, out47, sel[2]);
    or(out, y1, y2);
endmodule

În exemplul anterior definiția modulului mux8_1 folosește instanțe ale modulului mux4_1, denumite m1 și m2. Semnalele out30, in[3:0] și sel[1:0] sunt legate la porturile out, in și, respectiv, sel ale instanței m1, asemănător cu apelul unei funcții în C.

<imgcaption mux81 center |Multiplexorul 8:1></imgcaption>

<hidden Click pentru un mod alternativ de instanțiere a unui modul>

În Verilog, legătura dintre porturile unei instanțe și semnalele legate la aceste porturi poate fi făcută și pe baza numelor, nu doar a poziției. Această metodă de instanțiere a unui modul poate fi observată în exemplul următor.

Exemplu instanțiere modul
module mux4_1(output out, input[3:0] in, input[1:0] sel);
    // implementare multiplexor 4:1
endmodule
 
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]));   // instantiere mux4_1
    mux4_1 m2(.sel(sel[1:0]), .in(in[7:4]), .out(out74));   // alta instantiere mux4_1
    // logica aditionala
    not(n_sel2, sel[2]);
    and(y1, out30, n_sel2);
    and(y2, out74, sel[2]);
    or(out, y1, y2);
endmodule

Această metodă de instanțiere nu este suportată pentru primitive, porturile acestora neavând asociate nume. </hidden>

Proiectarea Top-Down

Proiectarea top-down se referă la partiționarea sistematică și repetată a unui sistem complex în unități funcționale mai simple, a căror proiectare poate fi făcută mai facil. O partiționare și organizare la nivel înalt a unui sistem reprezintă arhitectura acestuia. Unitățile funcționale individuale ce rezultă în urma partiționării sunt mai ușor de proiectat și de testat decât întregul sistem. Strategia divide-et-impera a proiectării top-down ne permite proiectarea de circuite care conțin milioane de porți.

Instanțierea unui modul în definiția unui alt modul este numită imbricare (eng. nested module). Modulele imbricate reprezintă mecanismul oferit de Verilog pentru proiectarea top-down, deoarece imbricarea creează automat o partiționare a sistemului.

Sintaxă

* 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 conține doar litere, cifre, _ și $; ele trebuie să înceapă cu _ sau cu o literă. * Comentariile se marchează cu // sau se încadrează între /.

Xilinx ISE

În cadrul laboratorului vom folosi mediul de dezvoltare Xilinx ISE, varianta WebPACK, pentru simularea codului Verilog și programarea plăcilor 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) găsiți în secțiunea tutoriale. :!: Sistemul de operare Windows 8 nu este suportat în mod oficial.

Pentru crearea proiectelor și modulelor folosind Xilinx ISE urmăriți tutorialul de pe wiki.

Exerciții
  1. (3p) Simulați sumatorul elementar complet din scheletul de cod. Corectați cele 6 erori de sintaxă din implementare.
    • Hint: Descărcați scheletul de cod pentru exerciții.
    • Hint: Scheletul de cod conține deja un proiect Xilinx ISE și un modul de testare.
    • Hint: Urmăriți tutorialul pentru a realiza simularea (săriți peste adăugarea modulului de test, pașii 2-6, deoarece acesta este deja adăugat). Simularea nu va fi realizată din prima deoarece codul conține erori de sintaxă.
    • Hint: Comanda de verificare a sintaxei, Behavioral Check Syntax, situată deasupra celei de simulare, este utilă pentru detectarea mai rapidă a erorilor. :!: Rulați comanda selectând în prealabil fișierul full_adder.v.
    • Hint: Erorile de sintaxă găsite vor apărea în fereastra Errors.
    • Hint: Este bine să începeți rezolvarea cu prima eroare, deoarece toate erorile următoare pot fi cauzate de aceasta. Navigați la începutul ferestrei de erori și citiți primul mesaj. Apăsând pe link-ul roz veți fi duși la linia de cod care a cauzat eroarea.
  2. (3p) Implementați și simulați un multiplexor 4:1. Urmăriți diagrama de semnale generată.
    • Hint: Consultați laboratorul 0 pentru implementarea unui multiplexor 4:1.
    • Hint: Respectați interfața cerută în scheletul de cod.
  3. (2p) Implementați un sumator pe 4 biți. Verificați corectitudinea sumatorului vizualizând semnalele în baza 10.
    • Hint: Consultați laboratorul 0 pentru implementarea unui sumator pe mai mulți biți.
    • Hint: Folosiți sumatorul implementat la exercițiul 1, adăugându-l la proiect din meniul Project→Add Copy of Source… .
    • Hint: Modificați afișarea unui semnal cu click-dreapta→Radix→Unsigned Decimal.
  4. (2p) Implementați și simulați un sumator pe 6 biți. Folosiți un sumator pe 4 biți și două sumatoare pe 1 bit.
    • Hint: Respectați interfața cerută în scheletul de cod.
  5. (2p) Implementați și simulați un comparator pe un bit. Acesta are două intrări și 3 ieșiri (pentru mai mic, egal și mai mare).
    • Hint: Respectați interfața cerută în scheletul de cod.
Resurse
Referințe
  • Ciletti, Michael D. “Advanced digital design with the Verilog HDL”. Prentice Hall, 2011

</hidden>

ac-is/lab/lab01.1632165329.txt.gz · Last modified: 2021/09/20 22:15 by ionut.pascal
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0