Język VERILOG w praktyce
Język VERILOG Przykłady syntezy blokowej
Elementy systemu cyfrowego magistrala danych Dane Extern magistrala zegar R 1 R 2 Rk R 1 R 1 R 2 R 2 Rk Rk in out in out in out Układ sterujący funkcja Rys. 7.60. System cyfrowy złożony z k-rejestrów połączonych z magistralą danych
Elementy systemu cyfrowego magistrala danych cd. Rys. 7.61. Połączenie rejestrów z magistralą z użyciem buforów trójstanowych
Elementy systemu cyfrowego magistrala danych cd. module regn (R, Rin, Clock, Q); parameter n = 8; input [n-1:0] R; input Rin, Clock; // Rin - zezwolenie output [n-1:0] Q; reg [n-1:0] Q; always @(posedge Clock) if (Rin) Q <= R; endmodule Rys. 7.66. Specyfikacja n-bitowego rejestru (konstrukcja jak na rys. 7.61)
Elementy systemu cyfrowego magistrala danych cd. module trin (Y, E, F); parameter n = 8; input [n-1:0] Y; input E; // zezwolenie output [n-1:0] F; wire [n-1:0] F; assign F = E ? Y : 'bz; // bz – stan „trzeci” endmodule Rys. 7.67. Specyfikacja n-bitowego modułu trójstanowego
Elementy systemu cyfrowego magistrala danych cd. 2 , R 3 R 1 , R 2 R 3 , R 1 out in out in out in w D Q D Q D Q Zegar Q Q Q Reset Rys. 7.62. Rejestr przesuwający - przykład układu sterującego wymianą danych w systemie z rys. 7.60
Elementy systemu cyfrowego magistrala danych cd. module shiftr (Resetn, w, Clock, Q); parameter m = 4; input Resetn, w, Clock; output [1:m] Q; reg [1:m] Q; integer k; always @(negedge Resetn or posedge Clock) if (!Resetn) Q <= 0; else begin for (k = m; k > 1; k = k-1) Q[k] <= Q[k-1]; Q[1] <= w; end endmodule Rys. 7.68. Specyfikacja rejestru z rys. 7.62
Elementy systemu cyfrowego magistrala danych cd. Rys. 7.69. Specyfikacja systemu cyfrowego z rys. 7.60
Elementy systemu cyfrowego magistrala danych cd. 1 R 2 Rk in R 1 in R 2 in Rk Zegar Dane S Multipleksery S j – 1 Rys. 7.65. Magistrala danych z multiplekserami
Elementy systemu cyfrowego magistrala danych cd. Rys. 7.70. Specyfikacja magistrali danych z multiplekserami
Elementy systemu cyfrowego magistrala danych cd. Rys. 7.71. Uproszczona wersja specyfikacji z rys. 7.70
Przykład systemu cyfrowego: prosty procesor Rys. 7.73. Schemat blokowy prostego procesora
Przykład systemu cyfrowego: prosty procesor Operacja Realizowana funkcja Load Rx, Data Rx Data Move Rx, Ry Rx Ry Add Rx, Ry Rx Rx + Ry _ Sub Rx, Ry Rx Rx Ry Tablica 7.2. Operacje wykonywane przez procesor
Przykład systemu cyfrowego: prosty procesor cd. 1 2 3 y y y y 1 2 3 dekoder2-na-4 w w En 1 1 Q Q Zegar 1 Licznik (up) Clear Reset Rys. 7.74. Fragment układu sterowania – fazy taktowania
Przykład systemu cyfrowego: prosty procesor cd. I I I I X X X X Y Y Y Y 1 2 3 1 2 3 1 2 3 y y y y y y y y y y y y 1 2 3 1 2 3 1 2 3 Dekoder 2-na-4 Dekoder 2-na-4 Dekoder 2-na-4 w w En w w En w w En 1 1 1 1 1 1 Zegar Rejestr funkcji FR in f f Rx Rx Ry Ry 1 1 1 Funkcja Rys. 7.75. Układu sterowania – pomocnicze sygnały wyboru funkcji
Przykład systemu cyfrowego: prosty procesor cd. Clear = wT0 + Done; FRin = wT0 Extern = I0T1 Done = (I0 + I1)T1 + (I2 + I3)T3 Ain = (I2 + I3) T1 Gin = (I2 + I3)T2 Gout = (I2 + I3) T3 AddSub = I3 ¯ Rys. 7.75a. Specyfikacja sygnałów sterujących procesora
Przykład systemu cyfrowego: prosty procesor cd. R0in = (I0 + I1)T1X0 + (I2 + I3)T3X0 R0out = I1 T1Y0 + (I2 + I3)(T1X0 + T2Y0) Tablica. 7.3. Sygnały sterujące wymagane w każdej operacji/fazie działania
Przykład systemu cyfrowego: prosty procesor cd. module upcount (Clear, Clock, Q); input Clear, Clock; output [1:0] Q; reg [1:0] Q; always @(posedge Clock) if (Clear) Q <= 0; else Q <= Q + 1; endmodule Rys. 7.76. Pomocniczy licznik (up-count) z synchronicznym resetem
Przykład systemu cyfrowego: prosty procesor cd. Rys. 7.77. Specyfikacja procesora (część a)
Przykład systemu cyfrowego: prosty procesor cd. Rys. 7.77. Specyfikacja procesora (część b.)
Przykład systemu cyfrowego: prosty procesor cd. Rys. 7.78. Alternatywna specyfikacja procesora (część a)
Przykład systemu cyfrowego: prosty procesor cd. Rys. 7.78. Alternatywna specyfikacja procesora (część b)
Przykład systemu cyfrowego: prosty procesor cd. Rys. 7.78. Alternatywna specyfikacja procesora (część c)
Przykład systemu cyfrowego: miernik czasu reakcji Wyświetlacze 7-segmentowe V V DD DD przełącznik R R L LED c c c 9 1 a b g a b g w Konwertor Konwertor licznik 10-bitowy Zegar w w w w w w w w 1 2 3 1 2 3 D Q 1 1 (a) Dzielnik zegara c 9 Q BCD BCD 1 E Dwucyfrowy licznik BCD Zerowanie Clear (b) Przełącznik, dioda LED, wyświetlacz 7-segmentowy Rys. 7.80 Układ do pomiaru czasu reakcji
Przykład systemu cyfrowego: miernik czasu reakcji cd. Rys. 7.81 Specyfikacja dwucyfrowego licznika BCD
VERILOG – specyfikacja automatów z 1 = ¤ Reset B A w Rys. 8.3 Graf stanów prostego automatu (typ Moore’a)
VERILOG – specyfikacja automatów cd. module simple (Clock, Resetn, w, z); input Clock, Resetn, w; output z; reg [2:1] y, Y; parameter [2:1] A = 2'b00, B = 2'b01, C = 2'b10; // kodowanie stanów automatu // Określenie stanu następnego – część kombinacyjna always @(w or y) case (y) A: if (w) Y = B; else Y = A; B: if (w) Y = C; C: if (w) Y = C; default: Y = 2'bxx; endcase // Określenie bloku sekwencyjnego always @(negedge Resetn or posedge Clock) if (Resetn == 0) y <= A; else y <= Y; // Określenie wyjścia assign z = (y == C); endmodule Rys. 8.29 Specyfikacja automatu z rys. 8.3
VERILOG – specyfikacja automatów cd. module simple (Clock, Resetn, w, z); input Clock, Resetn, w; output z; reg z; reg [2:1] y, Y; parameter [2:1] A = 2'b00, B = 2'b01, C = 2'b10; // Kodowanie stanów automatu // Określenie stanu następnego – część kombinacyjna always @(w or y) begin case (y) A: if (w) Y = B; else Y = A; B: if (w) Y = C; C: if (w) Y = C; default: Y = 2'bxx; endcase z = (y == C); //Określenie wyjścia end // Określenie bloku sekwencyjnego always @(negedge Resetn or posedge Clock) if (Resetn == 0) y <= A; else y <= Y; endmodule Rys. 8.33 Druga wersja specyfikacji automatu z rys. 8.3
VERILOG – specyfikacja automatów cd. module simple (Clock, Resetn, w, z); input Clock, Resetn, w; output z; reg [2:1] y; parameter [2:1] A = 2'b00, B = 2'b01, C = 2'b10; // Kodowanie stanów automatu // Określenie bloku sekwencyjnego always @(negedge Resetn or posedge Clock) if (Resetn == 0) y <= A; else case (y) A: if (w) y <= B; else y <= A; B: if (w) y <= C; C: if (w) y <= C; default: y <= 2'bxx; endcase // Określenie wyjścia assign z = (y == C); endmodule Rys. 8.34 Uproszczona wersja specyfikacji automatu z rys. 8.3
VERILOG – specyfikacja automatów cd. = z ¤ 1 B Reset Rys. 8.34 Specyfikacja automatu Mealy’ego z rys. 8.23
Przykład : sumator sekwencyjny Rejestr przes. QA Automat Sterujący sumator s Rejestr przesuw. Rejestr przes. QB b Sum = A + B B Zegar Rys. 8.39 Schemat sumatora sekwencyjnego
Przykład : sumator sekwencyjny cd. Rys. 8.40 Graf stanów automatu sterującego sumatora
Przykład : sumator sekwencyjny cd. Stan następny Wyjście Stan bieżący ab =00 01 10 11 00 01 10 11 y Y s (G) 0 1 1 1 (H) 1 1 1 1 1 1 Y = ab + ay + by S = a b y Rys. 8.40 Zakodowana tablica p-w automatu sterującego
Przykład : sumator sekwencyjny cd. module shiftrne (R, L, E, w, Clock, Q); parameter n = 8; input [n-1:0] R; // Wejście równoległe input L, E, w, Clock; // L – ładowanie z we R, w – wejście szeregowe output [n-1:0] Q; reg [n-1:0] Q; integer k; always @(posedge Clock) if (L) // Ładowanie Q <= R; else if (E) begin for (k = n-1; k > 0; k = k-1) Q[k-1] <= Q[k]; // Przesuwanie w prawo Q[n-1] <= w; // Wsuwanie do wejścia rejestru (Q[n-1]) end endmodule Rys. 8.48 Pomocniczy rejestr przesuwający w prawo z wejściem zezwolenia En
Przykład : sumator sekwencyjny cd. 1 a a D D D D 7 3 2 1 L E Licznik L w Rejestr Q Q Q Q 3 2 1 1 E Automat sumatora b b 7 Run L w Rejestr 1 E L w Rejestr E Zegar Reset Sum Sum 7 Rys. 8.50 Szczegółowy schemat funkcjonalny sumatora sekwencyjnego
Przykład : sumator sekwencyjny cd. Rys. 8.49 Specyfikacja sumatora sekwencyjnego
Przykład : licznik jedynek w słowie B = ; while A do if a = 1 then B = B + 1 ; end if; Right-shift A ; end while; Rys. 10.9 Algorytm licznika jedynek i schemat funkcjonalny (część operacyjna)
Przykład : licznik jedynek w słowie cd. Rys. 10.9 Sieć działań układu sterującego licznika
Przykład : licznik jedynek w słowie cd. Rys. 10.13 Specyfikacja układu licznika jedynek cz. a.
Przykład : licznik jedynek w słowie cd. Rys. 10.13 Specyfikacja układu licznika jedynek cz. b.