Sunteți pe pagina 1din 6

SINTEZA CIRCUITELOR FOLOSIND

LIMBAJUL VERILOG HDL (II)





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:

module counter(digit, clk);

input clk;
output[3:0] digit;

reg[3:0] digit;

initial
digit = 0;

always @(posedge clk)
if (digit == 9)
digit = 0;
else
digit = digit + 1;

endmodule

clk
Numarator BCD
digit (3:0)
CLK
OUT


Fig. 3.2 Numrtor BCD sincron cresctor de 4 bii
2
Logica combinationala
Logica secventiala
intrare
iesire
stare_prezenta stare_viitoare
clock
reset


Fig. 3.3 Separarea funcional a unui automat finit

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;

reg[1:0] stare_prezenta;
reg[1:0] stare_viitoare;
reg y;


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:

4

module D_flipflop(q, q_negat, d, set, reset, clock);

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:

module sync_counter(Q4, Q2, Q1, clock, reset);

input clock, reset;
output Q4, Q2, Q1;
wire w1, non_Q4;

and poarta_SI(w1, Q1, Q2);

JK_ff ff_4(Q4, non_Q4, w1, 1, 0, reset, clock),
ff_2(Q2, non_Q2, Q1, Q1, 0, reset, clock),
ff_1(Q1,non_Q1,non_Q4, 1, 0, reset, clock);

endmodule

Evident c este posibil i o descrie comportamental. Construii modelul
comportamental n Verilog.



6

S-ar putea să vă placă și