1. Scopul lucrrii Continuarea prezentrii unor programe Verilog HDL pentru structuri secveniale, care s exemplifice utilizarea principalelor elemente de sintax ale limbajului. Verificarea funcionrii circuitelor sintetizate n mediul ISE se face cu ajutorul mediului ModelSim.
2. Aparate necesare - calculator compatibil Pentium, minim 500MHz, minim 128MB RAM - mediul de programare ISE (Integrated Software Environment)-versiunea 8.1i, furnizat de firma Xilinx, instalat pe o platform Windows 2000 (SP2 sau SP3) sau XP. Programul poate fi instalat i pe sistemele de operare Linux sau Solaris. Se poate folosi i versiunea free ISE WebPack, care poate fi descarcat de pe site-ul firmei Xilinx. - mediul ModelSim de la Mentor Graphics, care poate fi descarcat de pe site- ul firmei Xilinx.
3. Consideraii teoretice Bistabilul de tip D este folosit ca element de memorie aproape n orice circuit secvenial. Structura circuitului cu declanare pe front cresctor de ceas (semnalul CLK) i reset asincron (semnalul RST) este prezentat n figura 3.1. n aceeai figur s-a reprezentat i tabelul tranziiilor, folosit n modelarea Verilog din continuare. Aici observm c modificarea valorii de la ieirea bistabilului, notat cu q, are loc fie n momentul apariiei unui front cresctor de ceas (posedge clk), caz n care intrarea d este memorat la ieirea q, fie la activarea semnalului de reset pe 1 logic (posedge rst), indiferent de semnalul de ceas, caz n care ieirea q devine 0 logic. Disjuncia or din lista de senzitiviti a specificaiei always este doar un "liant" pentru semnale i nu semnific operatorul logic SAU. Este clar c modelul nu reprezint un circuit real. De fapt, bistabilele discrete mai conin n general i intrarea de SET (activarea ei pe 1 logic seteaz asincron ieirea q pe 1 logic). Cum se modific modelul nostru n acest caz?
D CLK Q R D RST CLK Q CLK D R Q 0 0 0 0 1 1 x x 1 0 +
Fig. 3.1 Bistabilul D cu basculare pe front pozitiv i reset asincron 1
module D_flipflop(q, d, rst, clk);
input d, rst, clk; output q;
reg q;
always @(posedge clk or posedge rst) if (rst) q = 0; else q = d;
endmodule
Numrtorul sincron este o structur secvenial care conine mai multe bistabile. Schema din figura 3.2 reprezint un numrtor cu o singur cifr BCD, adic ieirea are 4 bii care se modific n ritmul semnalului de ceas, semnal care reprezint singura intrare n circuit. Secvena de la ieire este 0 ? 1 ? 2 ? ... ? 8 ? 9 ? 0 i aa mai departe. Numrtorul BCD sincron cresctor ar putea fi modelat n Verilog HDL folosind secvena de instruciuni de mai jos. Semnalul de ceas clk este singura intrare n circuit, iar cifra BCD pe 4 bii, numit digit, este singurul vector de ieire. Specificaia initial este o specificaie concurent care, spre deosebire de always, este executat o singur dat:
x y Automat finit clock reset S 0 y = 0 S 3 y = 1 S 1 y = 0 S 2 y = 0 reset 0 0 0 0 1 1 1 1
Fig. 3.4 Exemplu de automat finit
Automatul finit reprezentat n figura 3.4 se poate modela n Verilog HDL (la fel ca i n VHDL) folosind separarea funcional n cele dou elemente componente: logica combinaional i logica secvenial (vezi figura 3.3). Descrierea circuitului este n mare parte asemntoare cu descrierea fcut n limbajul VHDL. Noutile care apar n aceste linii de cod sunt comentariile, care urmeaz dup simbolul dublu "//" i care nu sunt luate n considerare la compilare, dar care ne ajut s nelegem programul. Un alt cuvnt cheie nou introdus este parameter, necesar pentru definirea codurilor celor 4 stri. n VHDL nu am fost preocupai de codificarea strilor, aceasta fcndu-se automat prin declaraia de tip de date TYPE.
module fsm(clk, reset, x, y);
input clk, reset, x; output y;
//adoptam coduri binare minimale pentru cele 4 stari parameter S0 = 2'b00; parameter S1 = 2'b01; parameter S2 = 2'b11; parameter S3 = 2'b10;
3 //registrul de stare always @(posedge clk or posedge reset) if (reset) stare_prezenta = S0; else stare_prezenta = stare_viitoare;
//circuitul combinational pentru starea viitoare si iesire always @(stare_prezenta or x) begin case(stare_prezenta) S0: begin y = 0; if (x) stare_viitoare = S1; else stare_viitoare = S0; end
S1: begin y = 0; if (x) stare_viitoare = S2; else stare_viitoare = S1; end
S2: begin y = 0; if (x) stare_viitoare = S3; else stare_viitoare = S2; end S3: begin y = 1; if (x) stare_viitoare = S0; else stare_viitoare = S3; end
endcase end
endmodule
4. Modul de lucru 4.1. Se face sinteza Verilog HDL a bistabilului de tip D prezentat n figura 3.1 i se verific funcionarea circuitului folosind mediul ISE i simulatorul ModelSim. Se modific codul surs prin introducerea semnalului asincron de SET. Verificai tabelul tranziiilor pentru bistabilul de tip D care are codul 4013, din seria CMOS 4000, i construii modelul Verilog pentru acest circuit. Codul pentru semnalul SET ar putea fi:
input d, set, reset, clock; output q, q_negat; reg q;
always @(posedge clock or posedge set or posedge reset) if (set) #1 q = 1; else if (reset) #1 q = 0; else if(clock) #2 q = d;
assign #1 q_negat = ~q;
endmodule
4.2. Se face sinteza Verilog HDL a numrtorului sincron BCD prezentat n figura 3.2 i se verific funcionarea circuitului folosind mediul ISE i simulatorul ModelSim.
4.3. Se face sinteza Verilog HDL a automatului finit prezentat n figura 3.4 i se verific funcionarea circuitului folosind mediul ISE i simulatorul ModelSim.
4.4. S se implementeze n Verilog HDL un bistabil JK cu basculare pe front cresctor de ceas, avnd semnale asincrone de set i reset, active pe 1 logic, i dou ieiri complementare, Q i non_Q. Codul Verilog ar putea fi cel de mai jos. Refacei modelul pentru circuitul integrat CMOS 4027.
module JK_ff(Q, non_Q, j, k, set, reset, clock);
input j, k, set, reset, clock; output Q, non_Q;
reg Q;
always @(posedge clock or posedge set or posedge reset) if (set) Q = 1; else if (reset) Q = 0; else if(clock) case ({j,k}) 2'b00: Q = Q; 2'b01: Q = 0; 2'b10: Q = 1; 2'b11: Q = ~Q; endcase
assign non_Q = ~Q;
endmodule
5 4.5. Folosind modelul bistabilului JK de la problema anterioar, s se implementeze n Verilog HDL un numrtor sincron cresctor modulo 5, conform schemei logice din figura de mai jos.
J CLK Q Q S R K J CLK Q Q S R K J CLK Q Q S R K 1 4 2 reset clock Q 2 Q 1 Q 4 1 1
Fig. 4.1 Numrtor sincron modulo 5, realizat cu bistabile JK
Putem face o descriere structural a circuitului. Dac folosim modelul bistabilului JK descris la 4.4, atunci secvena de instruciuni care modeleaz circuitul ar putea fi urmtoarea: