1 / 47

CID2 curs 3

CID2 curs 3. 26 octombrie 2006. UDP (primitive definite de utilizator) continuare latch-uri şi bistabile definite în Verilog variabile de tip reg, atribuiri. UDP. User Defined Primitive primitive(out, in1,…,inn); ….declaratii… table …. endtable endprimitive.

ailani
Download Presentation

CID2 curs 3

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CID2 curs 3 26 octombrie 2006

  2. UDP (primitive definite de utilizator) • continuare • latch-uri şi bistabile definite în Verilog • variabile de tip reg, atribuiri CID2 curs 3

  3. UDP User Defined Primitive primitive(out, in1,…,inn); ….declaratii… table …. endtable endprimitive CID2 curs 3

  4. UDP (continuare) • tipuri • combinaţionale • secvenţiale • diferă de module ca structură şi definire • au o singură ieşire (scalară) • se definesc întotdeauna prin tabele ATENŢIE! intrările nu pot fi vectori ieşirea are un singur bit CID2 curs 3

  5. 1. UDP combinaţionale tabele compactate

  6. Exemplu. Multiplexor 2:1 i0 i1 s MUX y CID2 curs 3

  7. Tabele logice – tabele combinaţionale CID2 curs 3

  8. Definirea unui tabel compactat în Verilog (logică cu 4 valori) primitive mux_2_to_1(y, s, i0, i1); output out; input s, i0, i1; table//s i0 i1 y 0 0 ? : 0;// ? inseamna 0,1 sau x 0 1 ? : 1; 1 ? 0 : 0; 1 ? 1 : 1; end table endprimitive CID2 curs 3

  9. Important • ordinea varibilelor din tabel este ordinea definirii intrărilor • nu se admit valori z • combinaţie nedefinită → ieşirea estex CID2 curs 3

  10. tabelul se reevaluează de câte ori se modifică o intrare • se parcurg liniile în ordine până la prima configuraţie similară intrării actuale primitivele NU se definesc în interiorul modulelor CID2 curs 3

  11. Regulile de compactare • nu se compactează niciodată ieşirea! • este bine să nu ignorăm valorile x (ex la multiplexor cu x pe i1 cand s=0, y=i0) CID2 curs 3

  12. 0 0 0 : 0 0 0 1 : 0 0 0 x : 0 0 1 0 : 1 0 1 1 : 1 0 1 x : 1 0 x 0 : x 0 x 1 : x 0 x x : x 0 0 ? : 0 0 1 ? : 1 0 x ? : x (evaluare implicită) Logică cu 4 stări:exemplu - multiplexor CID2 curs 3

  13. Tabel combinaţional (final) CID2 curs 3

  14. Atenţie!!! dacă ignorăm i1=x, pentru s=0 multiplexorul nu va funcţiona corect dacă ignorăm i0=x, pentru s=1 multiplexorul nu va funcţiona corect CID2 curs 3

  15. 2 UDP secvenţiale tabele de tranziţie fronturi

  16. Primitive (UDP) secvenţiale • pot conţine opţional un câmp de iniţializare • ne ajută să definim, de exemplu, latch-uri • tabelul conţine: intrări : starea curentă : starea următoare • simbolul – pentru menţinerea stării curente CID2 curs 3

  17. Exemplu: latch D cu reset asincron • Pentru CK = 0 se menţine starea • Pentru CK = 1 latch-ul este transparent • Dacă RST = 1 → Q=0 CK D RST Q CID2 curs 3

  18. funcţionarea latch-ului reset latch blocat (memorează) latch transparent (Q=D) CID2 curs 3

  19. primitive latch_D (Q, RST, D, CK); output Q; reg Q; input RST, D, CK; table 1 ? ? : ? : 0;// resetare 0 0 1 : ? : 0; 0 1 1 : ? : 1; 0 ? 0 : ? : - ; // mentinerea starii curente endtable endprimitive CID2 curs 3

  20. Iniţializare • NUMAI pentru primitivele secvenţiale (după definirea porturilor) • sintaxa: initial q=0; • aici putem spune că instrucţiunea initial “iniţializează” CID2 curs 3

  21. fronturi? • la latch-ul anterior ceasul este activ pe palier • pentru fronturi este necesar un mod de reprezentare • posedge, negedge (similar cu funcţiile logice elementare, pentru care avem simboluri diferite pentru operanţii în expresii logice sau instrucţiuni assign) ! si ~, & si && etc… CID2 curs 3

  22. pereche de valori ex (01) SAU simboluri reprezentarea fronturilor CID2 curs 3

  23. Bistabil D cu CLR ceasul este activ pe front CLR prioritar, activ pe 0, resetează bistabilul pe fiecare front activ al ceasului, Q=D D CLR CK Q CID2 curs 3

  24. Definire prin tabel primitive bistabil_D(Q, D, CK, CLR); output Q; reg Q; input D, CK, CLR; initial Q=0; // echivalent cu initializarea la pornire table // D CK CLR : Q : Q+ ? ? 0 : ? : 0; 0 r 1 : ? : 0; 1 r 1 : ? : 1; ? n 1 : ? : -; * ? 1 : ? : -; ? ? p : ? : -; endtable endprimitive CID2 curs 3

  25. Reguli • este ilegal să se definească 2 fronturi pe aceeaşi linie • starea se defineşte ca registru • nu avem voie sa avem două ieşiri (Q şi Q’) • iniţializarea este opţională CID2 curs 3

  26. Folosirea primitivelor (UDP) • se aplică mai degrabă în modele structurale • necesită instrucţiunea ‘include (directivă pentru compilator) CID2 curs 3

  27. 3 Latch-uri şi bistabile Modele comportamentale

  28. Latch cu assign latch cu 2 porţi nand 1. definire structurală (funcţionează) 2. definire data-flow assign q = set ~& nq; assign nq = reset ~& q; NU funcţionează!!! reset set q nq CID2 curs 3

  29. Latch transparent (cu assign) module latch_CA(q_out, data_in, enable); output q_out; input data_in, enable; assign q_out = enable ? data_in : q_out; endmodule CID2 curs 3

  30. module test_latch_ca; reg data, enable; wire q; initial begin enable = 0; #10 enable = 1; #60 enable = 0; #20 enable = 1; #50 $stop; end initial begin data = 0; forever #5 data = ~data; end latch_CA my_latch(q, data, enable); endmodule CID2 curs 3

  31. CID2 curs 3

  32. Alt exemplu module latch_reset(q_out, data_in, enable, reset); output q_out; input data_in, enable, reset; assign q_out = !reset ? 0 : enable? data in : q_out; endmodule explicaţi funcţionarea acestui latch! CID2 curs 3

  33. Modele comportamentale ciclice(pentru latch-uri şi bistabile) • instrucţiunea assign modelează comportamentul sensibil la nivelurile logice • NU poate modela fronturile (comportamentul determinat de tranziţiile semnalelor) • circuitele SINCRONE (definiţie): toate evenimentele se produc ca urmare a frontului activ al ceasului CID2 curs 3

  34. exemplu de latch always @(posedge <clock> or posedge <reset>) begin if (<reset>) begin <reg> <= 1'b0; end else begin <reg> <= <signal>; end CID2 curs 3

  35. Exemplu de latch (2) always @(posedge <clock>) begin if (<reset>) begin <reg> <= 1'b0; end else if (<clock_enable>) begin <reg> <= <signal>; end CID2 curs 3

  36. 4 Variabile de tip reg tipuri atribuiri

  37. Variabile de tip reg • net-urile nu sunt suficiente! • de ce? • pentru că driverul trebuie să fie activ tot timpul • pentru că nu pot implementa algoritmi Variabilele reg memorează valorile între două atriburi succesive CID2 curs 3

  38. reg Definiţie:O variabilă reg este o abstracţie a unui element de stocare a datelor. (este analog variabilelor în limbajele de programare C sau Pascal) Nu este analogul unui registru fizic, deoarece nu există semnal de ceas. Valoarea stocată este memorată până la următoarea atribuire explicită. Până la prima atribuire, are valoarea x (până la prima atribuire, neturile au valoarea z). CID2 curs 3

  39. 5 tipuri de variabile reg… CID2 curs 3

  40. Atribuiri • pentru semnale, variabile… • assign (atribuire continuă), pentru net-uri • = atribuire folosită pentru reg-uri • <=non-blocking (tot pentru reg-uri) CID2 curs 3

  41. Diferenţa dintre = şi <= CID2 curs 3

  42. always@(posedge clk or posedge rst) begin if (rst) begin A=0;B=0;C=0;D=0; else begin A=B; B=C; C=D; D=E; end end always@(posedge clk or posedge rst) begin if (rst) begin A=0;B=0;C=0;D=0; else begin D=E; C=D; B=C; A=B; end end Registru de deplasare CORECT GREŞIT!!! CID2 curs 3

  43. always@(posedge clk or posedge rst) begin if (rst) begin A<=0;B<=0;C<=0;D<=0; else begin A<=B; // D<=E B<=C; // C<=D C<=D; // B<=C D<=E; // A<=B end end Ambele variante conduc la acelaşi circuit, după sinteză CID2 curs 3

  44. EXERCIŢII

  45. Posibile subiecte de examen • Comentaţi următorul modul Verilog (explicaţi ce face fiecare linie): primitive bistabil_D(Q, D, CK, CLR); output Q; reg Q; input D, CK, CLR; initial Q=0; // echivalent cu initializarea la pornire table // D CK CLR : Q : Q+ ? ? 0 : ? : 0; 0 r 1 : ? : 0; 1 r 1 : ? : 1; ? n 1 : ? : -; * ? 1 : ? : -; ? ? p : ? : -; endtable endprimitive CID2 curs 3

  46. … sau… • Cât sunt valorile variabilelor A,B,C,D, E după o anumită secvenţă de atribuiri proecedurale secvenţiale şi continue? initial A = 0; B = 1; E = 0; A=B; C=D; D=A; B=E; // D=A; B=E; C=D; A=B; // A<=B; C<=D; D<=A; B<=E; // D<=A; B<=E; C<=D; A<=B; CID2 curs 3

  47. … sau … • Definiţi un bistabil JK • ca primitivă (cu tabel) • ca modul (cu instrucţiunea always) • Definiţi un bistabil T • ca primitivă • ca modul CID2 curs 3

More Related