420 likes | 527 Vues
CID2 curs 2. Verilog Folosirea şabloanelor de limbaj în Xilinx ISE. Coresponden ţ e. Schemă logică. Netlist (model structural). Tabel de adevăr. UDP (primitive definite de utilizator). Ecuaţii logice. assign (instrucţiunea). modul. module proiectul_meu(lista_porturi);
E N D
Verilog • Folosirea şabloanelor de limbaj în Xilinx ISE CID2 curs 2
Corespondenţe Schemă logică Netlist (model structural) Tabel de adevăr UDP (primitive definite de utilizator) Ecuaţii logice assign (instrucţiunea) CID2 curs 2
modul module proiectul_meu(lista_porturi); ……//declaraţi aici porturile ……//apoi daţi detaliile funcţionale endmodule CID2 curs 2
Primitive • modele funcţionale predefinite în limbajul Verilog • (cele mai simple obiecte din care se poate compune un design) • 26 de primitive: • 6 porţi combinaţionale cu intrări multiple • 6 porţi cu ieşiri multiple (buffere) • comutatoare, tranzistoare de trecere etc. CID2 curs 2
Primitive CID2 curs 2
….. nand gate(y, a, b, c); // sau nand(y, a, b, c); …. a b y c Atenţie! La primitive obligatoriu primul în lista de porturi este ieşirea (eventual, iesirile) *** nu e necesar pentru orice modul CID2 curs 2
Inversoare şi buffere not(out1, out2…., outN, in); bufif0(out1 , out2…., outN, in, ctrl); //pentru 0 este deschis notif1(out1, out2…., outN, in, ctrl); //pentru1 este deschis (inversor) CID2 curs 2
Logică cu 4 valori • 0 • 1 • x (valoare necunoscută) (roşu) • z (impedanţă înaltă) (verde) • alte simboluri: b (binar), ? (0, 1 sau x) Toate tipurile de semnale şi variabile sunt definite implicit x sau z CID2 curs 2
Tabele (logică cu 4 stări) CID2 curs 2
Câteva reguli • Fiecare linie se încheie cu ; • există excepţii! • case-sensitive • comentariile incep cu // • comentarii pe mai multe linii: /*…… ……………..………*/ CID2 curs 2
…şi o chestiune de stil • Alegeţi nume semnificative pentru module • Folosiţi comentarii! • Daţi nume semnificative porturilor • Documentaţi conştiincios fişierele şi proiectele! CID2 curs 2
Identificatori (nume) • nume de semnale, module • litere, cifre (0-9), _, $ maxim 1024 de caractere! • numele unei variabile nu poate incepe cu $ sau o cifra • (funcţiile de sistem predefinite încep cu $) CID2 curs 2
Proiectarea ierarhică în Verilog • în interiorul unui modul se poate apela un alt modul (se creează automat o partiţie a designului) • evitaţi module incluse unele într-altele şi apelarea recursivă! CID2 curs 2
dacă am definit un modul, numele său poate fi folosit ca şi cuvânt-cheie ex: module scanner_taste(….); INSTANŢIERE alte module ale aceluiaşi proiect pot conţine cuvântul scanner_taste(…acelaşi număr şi tip de porturi); CID2 curs 2
Proiectare ierarhică • nivelul cel mai de sus: structural (top-level) • nivelurile intermediare: module definite comportamental, apelând module din ce în ce mai simple • ultimul nivel: primitive şi/sau module care nu mai conţin detalii ierarhice (unele pot fi definite structural) CID2 curs 2
fiecare modul trebuie plasat într-unul sau mai multe fişiere • compilate împreună, toate acestea descriu complet funcţionalitatea modulului top-level • nu contează cum este distribuit codul sursă în fişiere (compilatorul le selectează în ordine) CID2 curs 2
Proiectele (project) • majoritatea simulatoarelor folosesc “proiecte” • un fel de “directoare” care conţin toate fişierele necesare CID2 curs 2
Vectorii în Verilog • ex: numar[15:0]sau numar[0:15] • când se face corespondenţa în zecimal MSB este în stânga • se pot face apelări parţiale numar[5:2] CID2 curs 2
net, netlist orice identificator nedeclarat este considerat wire conectivitatea structurală CID2 curs 2
Tipuri de date net CID2 curs 2
Tipuri de date net (2) CID2 curs 2
Porturi: reguli • conexiuni interne şi externe CID2 curs 2
Porturi • input (intrări): intern sunt net-uri, pot fi conectate la net sau reg • inout (bidirecţionale): net-uri • output (ieşiri): intern sunt reg sau net, extern trebuie conectate ca net-uri CID2 curs 2
Verificarea designuluiMetodologie de testare (modulele de test)
definire modul compilare (verificare sintaxa) strategie test verificare funcţională CID2 curs 2
Testbench (platforma de testare)DUTB (disign_unit_test_bench) Generator semnal test Unit_under_test (UUT) stimul Monitorizare răspuns CID2 curs 2
Simulatorul: 3 operaţii de bază • verificarea codului sursă • raportează încălcarea regulilor de sintaxă • simulează comportamentul circuitului atunci când sunt aplicaţi anumiţi stimuli CID2 curs 2
Generatoare de semnal pentru platformele de test cod special care introduce forme de undă initial begin…. end # Atenţie!!! folosiţi doar atribuiri procedurale iniţial toate valorile sunt x CID2 curs 2
Evenimente • eveniment = schimbarea valorii unui semnal • event-driven simulation @ (at) always / forever $monitor CID2 curs 2
Şablon pentru platforma de test module DUTB(); reg…; wire….; parameter time_out= ; UUT nume(lista porturi); initial $monitor(); initial #time_out $stop; initial …. begin … end endmodule CID2 curs 2
Întârzierişi timpi de propagare • pentru primitive, implicit tp=0 • bibliotecile de componente standard definesc cu acurateţe parametrii • ex: xorf201, nandf301, invf101 CID2 curs 2
and #1 (out, in1, in2) • and #(3,6) (out, in1, in2) //rise, fall • bufif0 #(3,6,5) (out, in, en) //rise, fall, turn-off • 3:4:5 //minim tipic maxim CID2 curs 2
Tabele de adevăr table // a b y 0 0 : 0 0 1 : 1 1 0 : 0 1 1 : 0 endtable CID2 curs 2
UDP - primitive primitive nume_functie(y, a, b); output y; input a,b; table // a b y 0 0 : 0 0 1 : 1 1 0 : 0 1 1 : 0 endtable endprimitive CID2 curs 2
Atenţie!!! iesirea unei primitive UDP este scalară (1 bit) se folosesc frecvent tabele compactate CID2 curs 2
Atribuirea continuă assign assign y = ~a&b; modelare data-flow de câte ori se modifică a sau b este reevaluată CID2 curs 2
Ecuaţii logice ~ not & and | or assign out=enable? a:b; (dacă enable=1, out = a dacă enable=0, out = b) if-then-else CID2 curs 2
Schemă logică Model structural Tabel de adevăr UDP Ecuaţii logice assign CID2 curs 2
Subiecte posibile de examen • definiţi ca primitivă un multiplexor 4:1 • un modul Verilog pe care sa îl explicaţi • găsiţi greşelile într-un modul! CID2 curs 2
exemplu test module nota_finala(nota, proiect, partial, examen); input partial, examen; inout proiect; output nota; reg [3:0] partial, examen, proiect; // nota este zecimala ….. endmodule CID2 curs 2