Sunteți pe pagina 1din 37

Universitatea Tehnică Gh.

Asachi Iași
Facultatea de Electronică ,Telecomunicații și Tehnologia
Informației

Proiect PACSAD

 Numărul temei de proiect: 2

 Numele circuitelor:

Partea I – Proiectarea şi analiza dinamică în SPICE a


circuitului JKFFS

Partea II - VHDL

 Tehnologia CMOS: CMOS_IBM_013_T51P.txt

 Anul de studiu: III

 Numele studentului: Armene Georgiana-Elena

 Grupa: 5313

 Cadrul didactic: Asistent Doctor Inginer Roxana Amariutei

 An universitar: 2021-2022

Partea I – Proiectarea şi analiza dinamică în SPICE a circuitului JKFFS

1. Să se dimensioneze tranzistoarele MOS corespunzător tehnologiei


date şi să se scrie netlist-ul SPICE al circuitului. (Netlist-ul se va scrie ierarhic
folosind subcircuite).
2. Să se efectueze analiza tranzitorie a circuitului pentru a pune în
evidenţă funcţionarea sa. La fiecare ieşire a circuitului se va considera cîte o
capacitate de sarcină. Valorile pentru tensiunea de alimentare VDD, timpii de
tranziţie TR ai formelor de undă de la intrări şi, respectiv, capacităţile de
sarcină CL se vor adopta în funcţie de tehnologia impusă conform tabelului
următor:

Tehnologie 0.13 0.18μ 0.25μ 0.35μ 0.50μ


CMOS μm m m m m

VDD 1.2V 1.8V 2.5V 3.3V 5V

0.15n
TR 0.1ns 0.2ns 0.3ns 0.4n
s

0.06p 0.07p 0.08p 0.09p


CL 0.1pF
F F F F

3. Determinaţi prin simulare timpii de propagare intrinsecă a circuitului de la


intrarea de clock la ieşiri şi coeficientul K load de variaţie a acestor timpi cu
capacitatea de sarcină. Timpul de propagare total este dat de următoarea
relaţie:

tptotal = tpintrinsec + Kload*CL

Timpul de propagare intrinsec al circuitului se obţine pentru CL = 0 pF. Se


va completa un tabel de felul următor:

tpLH tpHL
Descriere
tpLHintrinsec Kload tpHLintrinsec Kload

CK → Q

CK → QN
4. Determinaţi prin simulare parametrii de constrângere SETUP_TIME,
HOLD_TIME şi durata minimă a pulsului MINPW pentru pinii de intrare
specificaţi în tabelul următor:

Pin Durata interval


Parametru constrângere
intrare [ns]

SETUP_TIME_LH → CK

SETUP_TIME_HL → CK
D
HOLD_TIME_LH → CK

HOLD_TIME_HL → CK

MINPW_HIGH
CK
MINPW_LOW

Pentru simulările efectuate la fiecare din punctele 2, 3 şi 4 se vor


prezenta schema de test, fişierul SPICE (.cir) şi formele de undă sau
caracteristicile reprezentative pe baza cărora s-au determinat parametrii ceruţi
în tabele.

Mai jos sunt prezentate descrierea, schema bloc şi tabelul de


funcţionare al circuitului.
Partea I

Proiectarea şi analiza dinamică în SPICE a circuitului JKFFS

Schema la nivel de poartă logica pentru circuitul JKFFS conţine porţi logice de 4 tipuri :
NOR cu 2 intrări, NAND cu 2 intrări, inversoare şi inversoare tristate. Aceste circuite pot fi descrise
la rândul lor la nivel de tranzistor după scheme cunoscute. Tranzistoarele MOS din componenţa
porţilor logice se vor dimensiona conform tehnologiei de 0.13 μm.

În general, pentru dimensionarea tranzistoarelor dintr-un model de


poartă logică se pleacă de la următoarea constrângere : curentul din ieşire
nu trebuie să-şi modifice valorea la tranziţii diferite ale tensiunii din ieşire.
Acest lucru impune ca rezistenţa văzută în ieşire să rămână constantă la
diferite tranziţii ale ieşirii. In urma acestui deziderat rezulta 2 situatii
limita :
R =R P
1. out=0 : d

2. out=1 :
Ru =2⋅R N

Egalitatea curenţilor în cele 2 situaţii impune o relaţie de egalitate între cele 2 rezistenţe :
Rd =Ru . Cunoscând formulele de calcul pentru rezitenţele tranzistoarelor în funcţie de
parametrii tehnologici şi înlocuind în relaţia de egalitate se rezolvă problema dimensionării.

Poartă NOR cu 2 intrări

În acest caz folosim relatia:


2∗RP=RN ¿} RP=

¿
LP
} }
¿¿⇒ LN WP Un
}
¿ ⋅ =Kn/Kp ¿ ¿¿⇒¿ =3.3 8>1¿ ¿¿⇒¿¿⇒W =2.6 μm ¿¿
WP⋅KP⋅(Vd −|VT|) 2∗L W
P N Up P

Poartă NAND cu 2 intrări:

În acest caz folosim relaţiile:

LP
} LP
RP=2⋅RN ¿}RP= ¿ ¿ ⇒ = ⋅ ⇔¿⇔ =2⋅ ⋅ ¿
1 LN KN LN W P
WP⋅KP⋅(V d −|VT|) WP⋅KP⋅(Vd −|VT|) 2 WN⋅KN⋅(V d −|V T|) KP LP WN
1 uN W P
}
⋅ = ¿ ¿ ¿⇒W P=1/2∗
2 uP W N
uN∗Wn
uP
=0.65u,W N =0.39um¿

Poartă inversoare:

Vdd
(2)

MP

(1)
IN (3) OUT

MN

(0)

În acest caz folosim relaţiile:

RP=RN ¿}RP=

¿
LP
} } } L
W P⋅KP⋅(Vd −|VT|) L W W
N W
P N
P W
¿ ¿¿⇒ ⋅ ≃2 ¿ ¿¿⇒¿ P =3.3 8 ¿ ¿¿⇒¿¿⇒W =1.3 μm ¿¿
N
P
Poartă inversoare tristate:

(2) Vdd
CN (5)

MP1
(7)

MP2
IN (1) (3) OUT

MN1

(6)
MN2
C (4)
(0)

În acest caz folosim relaţiile:

2∗RP=2∗RN ¿}RP=

¿
LP
} } }
¿¿ ⇒ LN⋅W P ≃2.5 ¿ ¿¿⇒¿ W P=3.3 8 ¿ ¿¿⇒¿¿⇒W =1.3μm ¿¿
W P⋅KP⋅(V d −|V T|) L W W
P N N
P
Poartă AND cu 2 intrări:

R P /2=R N

Wp= 0.6 um

Wn=0.39 um

Subcircuitul bistabilului JKFFS, precum si a portilor folosite, este scris in fisierul BIST_JK.txt.

*subcircuitul JKFFS

*J K SN CK VDD Q QN

.SUBCKT JKFFS 1 3 9 15 18 13 14

* in1 in2 vdd out

XNAND21 7 9 18 8 NAND2

XNAND22 10 9 18 11 NAND2

* in1 in2 vdd out

XNOR2 2 3 18 5 NOR2

* in vdd out
XINV1 11 18 2 INV

XINV2 2 18 13 INV

XINV3 11 18 14 INV

XINV4 15 18 16 INV

XINV5 16 18 17 INV

* in vdd out cn c

XINVC11 5 18 7 17 16 INVC

XINVC12 8 18 7 16 17 INVC

XINVC13 8 18 10 16 17 INVC

XINVC14 11 18 10 17 16 INVC

* in1 in2 vdd out

XAND2 1 2 18 4 AND2

.ENDS

//

*in1 in2 in3 vdd out

.SUBCKT INVC 1 5 4 2 3

MP1 7 1 2 2 CMOSP L=0.13u W=1.3u

MP2 3 5 7 7 CMOSP L=0.13u W=1.3u

MN1 3 4 6 6 CMOSN L=0.13u W=0.39u

MN2 6 1 0 0 CMOSN L=0.13u W=0.39u

.ENDS
*in vdd out

.SUBCKT INV 1 2 3

MP1 3 1 2 2 CMOSP L=0.13u W=1.3u

MN1 3 1 0 0 CMOSN L=0.13u W=0.39u

.ENDS

* in1 in2 vdd out

.SUBCKT NAND2 1 2 3 4

MP1 4 1 3 3 CMOSP L=0.13u W=0.65u

MP2 4 2 3 3 CMOSP L=0.13u W=0.65u

MN1 4 1 5 5 CMOSN L=0.13u W=0.39u

MN2 5 2 0 0 CMOSN L=0.13u W=0.39u

.ENDS

* in1 in2 vdd out

.SUBCKT NOR2 1 2 3 5

MP1 4 1 3 3 CMOSP l=0.13u w=2.6u

MP2 5 2 4 4 CMOSP l=0.13u w=2.6u

MN1 5 1 0 0 CMOSN l=0.13u w=0.39u

MN2 5 2 0 0 CMOSN l=0.13u w=0.39u

.ENDS

*in1 in2 vdd out

.SUBCKT AND2 1 2 3 5

MP1 0 1 5 5 CMOSP L=0.13u W=0.6u

MP2 0 2 5 5 CMOSP L=0.13u W=0.6u


MN1 3 1 4 4 CMOSN L=0.13u W=0.39u

MN2 4 2 5 5 CMOSN L=0.13u W=0.39u

.ENDS

In tehnologia MOS cu L=0.13um alegem : Vdd=1.2V, TR=TF=0.1ns, CL=0.06pF.

Pentru analiza tranzitorie circuitul este:

*TEST_JKFFS

.inc subcircuite.txt

.inc CMOS_IBM_013_T51P.txt

* J K SN CK VDD Q QN

XJKFFS 1 3 9 15 18 13 14 JKFFS

VDD 18 0 1.2v

VJ 1 0 pulse(0 1.2 0 0.1n 0.1n 10n 20n)

VK 3 0 pulse(0 1.2 0 0.1n 0.1n 10n 20n)

VSN 9 0 pulse(0 1.2 0 0.1n 0.1n 20n 43n)

VCK 15 0 pulse(0 1.2 0 0.1n 0.1n 5n 10n)

CQ 13 0 0.06p

CQN 14 0 0.06p
.TRAN 1n 60n 0 0.13n

.PROBE VJ(1),VK(3),VSN(9),VCK(15),VQ(13),VQN(14)

.END

2.Analiza tranzitorie a circuitului

In urma efectuǎrii analizei au rezultat urmǎtoarele forme de undǎ:


3. Determinarea timpilor de propagare intrinseca

Voi determina prin simulare timpii de propagare intrinseci ai circuitului de la intrarea de


clock la iesiri si coeficientul K load de variatie a acestor timpi cu capacitatea de sarcina.

Timpul de propagare total este dat de relatia urmatoare:

tp total=tp int rin sec +K load⋅Cl


Timpul de propagare intrinsec al circuitului se obţine pentru CL = 0 pF.

In continuare sunt prezentate circuitul de simulare si formele de unda pentru timpii de


propagare totali obtinuti prin simulare. Se folosesc functiile tplh si tphl pentru a calcula distanta
dintre mijlocul frontului crescator (activ) al clk-ului si mijlocul frontului crescator sau descrescator
in functie de caz al semnalelor Q si QN.

Pentru calcularea timpilor totali de propagare nodul RN al subcircuitului DFFR se conectează


la alimentare :

Functiile tplh si tphl sunt descrise mai jos.

*TEST_JKFFS

.inc subcircuite.txt

.inc CMOS_IBM_013_T51P.txt
* J K SN CK VDD Q QN

XJKFFS 1 3 9 15 18 13 14 JKFFS

VDD 18 0 1.2v

VJ 1 0 pulse(0 1.2 0 0.1n 0.1n 10n 20n)

VK 3 0 pulse(0 1.2 0 0.1n 0.1n 10n 20n)

VSN 9 0 pulse(0 1.2 0 0.1n 0.1n 20n 43n)

VCK 15 0 pulse(0 1.2 0 0.1n 0.1n 5n 10n)

CQ 13 0 0.06p

CQN 14 0 0.06p

.TRAN 1n 60n 0 0.13n

.PROBE

.END

→ functia tplh

tpLH (1,2)=x2-x1

1| search forward level (50%,n) !1;

2| search forward level (50%,p) !2;

}
→ functia tpHL

tpHL (1,2)=x2-x1

1| search forward level (50%,p) !1;

2| search forward level (50%,n) !2;

1.26V

1.00V

(20.051n,606.549m) (20.616n,601.286m)

0.50V

0V
19.843ns 20.000ns 20.200ns 20.400ns 20.600ns 20.800ns
V1(Vck) V1(C1)
Time

Timpul total de propagare:


tpLH total (CK , Q)=0. 565 ns

1.244V

1.000V

(10.051n,606.581m) (10.840n,605.143m)

0.500V

0V

10.0ns 10.2ns 10.4ns 10.6ns 10.8ns 11.0ns


V1(Vck) V1(C1)
Time
Timpul total de propagare:
tpHLtotal (CK ,Q )=0 . 789n

1.21V

1.00V

(10.050n,600.685m) (10.800n,603.810m)

0.50V

0V
9.80ns 10.00ns 10.20ns 10.40ns 10.60ns 10.80ns 11.00ns 11.20ns
V1(Vck) V1(C2)
Time

Timpul total de propagare:


tpLH total (CK , QN )=0 . 750n

1.21V

1.00V

(20.050n,600.457m) (20.559n,600.457m)

0.50V

0V
19.60ns 19.80ns 20.00ns 20.20ns 20.40ns 20.60ns 20.80ns 21.00ns
V1(Vck) V1(C2)
Time

Timpul total de propagare:


tpHLtotal (CK ,QN )=0 .509n
Timpul de propagare intrinsec al circuitului se obţine pentru CL = 0 pF.

Pentru calculul timpilor de propagare intrinseci se eliminǎ condensatoarele, circuitul CIR


arǎtând astfel:

*TEST_JKFFS

.inc subcircuite.txt

.inc CMOS_IBM_013_T51P.txt

* J K SN CK VDD Q QN

XJKFFS 1 3 9 15 18 13 14 JKFFS

VDD 18 0 1.2v

VJ 1 0 pulse(0 1.2 0 0.1n 0.1n 10n 20n)

VK 3 0 pulse(0 1.2 0 0.1n 0.1n 10n 20n)

VSN 9 0 pulse(0 1.2 0 0.1n 0.1n 20n 43n)

VCK 15 0 pulse(0 1.2 0 0.1n 0.1n 5n 10n)

CQ 13 0 0.06p

CQN 14 0 0.06p

.TRAN 1n 60n 0 0.13n

.PROBE

.END

Timpul de propagare intrinsec:


tpLH total (CK , Q)=0. 623ns :
1.21V

1.00V

(30.050n,600.457m) (30.673n,600.457m)

0.50V

0V
29.901ns 30.000ns 30.200ns 30.400ns 30.600ns 30.800ns 30.943ns
V1(Vck) V(6)
Time

Timpul total de propagare:


tpHLtotal (CK ,Q )=0 . 431ns

1.21V

1.00V

(20.050n,600.457m) (20.481n,600.457m)

0.50V

0V
19.800ns 20.000ns 20.200ns 20.400ns 20.600ns 20.732ns
V1(Vck) V(6)
Time
Timpul total de propagare:
tpLH total (CK , QN )=0 . 498ns :

1.21V

1.00V

(20.050n,599.258m) (20.548n,599.258m)

0.50V

0V
19.922ns 20.000ns 20.100ns 20.200ns 20.300ns 20.400ns 20.500ns 20.600ns 20.700ns
V1(Vck) V(5)
Time

Timpul total de propagare:


tpHLtotal (CK ,QN )=0 .683n s :

1.21V

1.00V

(30.050n,600.457m) (30.733n,600.457m)

0.50V

0V
29.901ns 30.000ns 30.200ns 30.400ns 30.600ns 30.800ns 30.943ns
V1(Vck) V(5)
Time

Se completeaza tabelul de mai jos folosind formula :


tp total−tp int rin sec
tp total=tp int rin sec +K load⋅C L ⇔ K load =
CL

tpLH tpHL
Descriere
tpLH intrinsec Kload tpHL intrinsec Kload

CK -> Q 0.623 ns 9666 0.431 ns 5966

CK -> QN 0.498 ns 4200 0.683 ns 2900

4. Determinarea parametrilor de constrangere SETUP_TIME,

HOLD_TIME si durata minima a pulsului MINPW

4.1 Determinarea SETUP_TIME_LHCK si SETUP_TIME_HLCK

Timpul minim dinaintea frontului activ de ceas in care este obligatoriu ca semnalul de intrare
sa fie stabil se numeste setup_time. Pentru determinarea acestui timp se va face o analiza
parametrica asupra componentei td a semnalului de intrare D. Acestă variabilă va lua valori de
timp apropiate de momentul unui front activ de ceas, dinaintea acestuia. Pentru fiecare valoare de
timp se va urmări comportarea ieşirii.

Circuitul care descrie aceasta analiza este :

*TEST_JKFFS

.inc subcircuite.txt

.inc CMOS_IBM_013_T51P.txt

* J K SN CK VDD Q QN

XJKFFS 1 3 9 15 18 13 14 JKFFS

VDD 18 0 1.2v
VJ 1 0 pulse(0 1.2 0 0.1n 0.1n 10n 20n)

VK 3 0 pulse(0 1.2 0 0.1n 0.1n 10n 20n)

VSN 9 0 pulse(0 1.2 0 0.1n 0.1n 20n 43n)

VCK 15 0 pulse(0 1.2 0 0.1n 0.1n 5n 10n)

CQ 13 0 0.06p

CQN 14 0 0.06p

.TRAN 1n 60n 0 0.13n

.PROBE

.END

Masuram timpul pentru Q si QN la jumatatea frontului si timpul corespunzator frontului de


ceas la jumatatea frontului pozitiv. Timpii SETUP_TIME_LHCK si SETUP_TIME_HLCK se obtin ca
diferenta dintre cei doi timpi.

tsLH=10.050ns-9.750ns=0.3ns
1.5V

1.0V

(9.750n,600.000m)

0.5V

0V
V1(Vk)
1.2V

0.8V
(10.050n,602.198m)

0.4V

SEL>>
0V
8.85ns 9.00ns 9.20ns 9.40ns 9.60ns 9.80ns 10.00ns 10.20ns 10.40ns
V1(Vck)
Time

tsHL=20.050ns-19.650ns=0.4n

1.3V

1.0V

(19.850n,601.562m)

0.5V

SEL>>
0V
V1(Vk)
1.2V

0.8V (20.050n,603.077m)

0.4V

0V
18.30ns 18.50ns 19.00ns 19.50ns 20.00ns 20.50ns 21.00ns 21.49ns
V1(Vck)
Time

4.2 Determinarea HOLD_TIME_LHCK si HOLD_TIME_HLCK

Timpul minim de dupa frontul activ de ceas in care este obligatoriu ca semnalul de intrare sa
fie stabil se numeste hold_time.Pentru determinarea acestui timp se va face o analiza parametrica
tot asupra componentei td a semnalului pulse de pe intrarea D.Valorile lui td vor fi momente de
timp de dupa frontul activ, apropiate de acesta.

Circuitul care descrie aceasta analiza este :

*TEST_JKFFS

.inc subcircuite.txt

.inc CMOS_IBM_013_T51P.txt

* J K SN CK VDD Q QN

XJKFFS 1 3 9 15 18 13 14 JKFFS

VDD 18 0 1.2v

VJ 1 0 pulse(0 1.2 0 0.1n 0.1n 10n 20n)

VK 3 0 pulse(0 1.2 0 0.1n 0.1n 10n 20n)

VSN 9 0 pulse(0 1.2 0 0.1n 0.1n 20n 43n)

VCK 15 0 pulse(0 1.2 0 0.1n 0.1n 5n 10n)

CQ 13 0 0.06p

CQN 14 0 0.06p

.TRAN 1n 60n 0 0.13n

.PROBE

.END
Masuram timpul pentru Q si QN la jumatatea frontului si timpul corespunzator frontului de
ceas la jumatatea frontului pozitiv. Timpii HOLD_TIME_LHCK si HOLD_TIME_HLCK se obtine ca
diferenta dintre cei doi timpi.

thLH =10.350ns-10.050ns=0.3ns

1.5V

1.0V

(10.350n,600.000m)

0.5V

SEL>>
0V
V1(Vk)
1.2V

0.8V
(10.050n,602.198m)

0.4V

0V
9.4ns 9.6ns 9.8ns 10.0ns 10.2ns 10.4ns 10.6ns 10.8ns 11.0ns
V1(Vck)
Time

thHL = 20.450ns-20.050ns=0.4ns
1.5V

1.0V

(20.450n,600.000m)

0.5V

0V
V1(Vk)
1.2V

0.8V
(20.050n,602.198m)

0.4V

SEL>>
0V
19.4ns 19.6ns 19.8ns 20.0ns 20.2ns 20.4ns 20.6ns 20.8ns 21.0ns
V1(Vck)
Time

4.3 Determinarea duratei minime a pulsului MINPW_HIGH si MINPW_LOW

Pentru determinarea parametrului minpw_high se face o analiza parametrica dupa “PW”(PULSE


WIDTH) din semnalul de clock de tip pulse. Acesta se va micsora pana cand iesirea nu mai
urmareste tranzitiile intrarii.

Circuitul care descrie aceasta analiza este :

*TEST_JKFFS

VDD 7 0 1.2v

VJ 1 0 pulse(0 1.2 0n 0.1n 0.1n 10n 20n)

VK 3 0 pulse(0 1.2 10n 0.1n 0.1n 10n 20n)

VSN 9 0 pulse(0 1.2 10n 0.1n 0.1n 20n 30n)

VCK 15 0 pulse(0 1.2 0 0.1n 0.1n {pw} 10n)

.param pw=5n

.step param pw LIST 4.8n 4.6n 4.3n 4.0n 3.5n 3.3n

CQ 13 0 0.06p

CQN 14 0 0.06p
X1 1 2 3 7 4 5 6 JKFFS

.inc "BIST_JK.txt"

.TRAN 1n 60n 0.13n

.PROBE

.END
2.0V

0V

SEL>>
-2.0V
V1(C1)
2.0V

1.0V

0V
V1(Vj) V1(Vk)
2.0V

1.0V

0V
0s 10ns 20ns 30ns 40ns 50ns 60ns
V1(Vck)
Time

Din anliza facuta am observat ca oricat de mic ar fi {pw},iesirea tot urmareste tranzitiile
intrarii,deci minpw_high nu poate fi determinat.

Pentru determinarea minpw_low se pastreaza “pw” constant şi se face o analiza


parametrica dupa perioada clock-ului. Deoarece PW este constant, perioada minimă este
5n+0.1n+0.1n = 5.2n

VDD 7 0 1.2v

VJ 1 0 pulse(0 1.2 0n 0.1n 0.1n 10n 20n)

VK 3 0 pulse(0 1.2 10n 0.1n 0.1n 10n 20n)

VSN 9 0 pulse(0 1.2 10n 0.1n 0.1n 20n 30n)

VCK 15 0 pulse(0 1.2 0 0.1n 0.1n 5n {per})

.param per=11n
.step param per LIST 5.4n 5.8n 6n

CQ 13 0 0.06p

CQN 14 0 0.06p

X1 1 2 3 7 4 5 6 JKFFS

.inc "BIST_JK.txt"

.TRAN 1n 60n 0.13n

.PROBE

.END

2.5V
0V

SEL>>
-4.8V
V1(C1)
2.0V

1.0V

0V
V1(Vk) V1(Vj)
2.0V

1.0V

0V
13.3ns 16.0ns 20.0ns 24.0ns 28.0ns 32.0ns 36.0ns 40.0ns 44.0ns 48.0ns
V1(Vck)
Time

Durata interval
Prin intrare Parametru constrangere
[ns]

SETUP_TIME_LH->CK 0.3ns

SETUP_TIME_HL->CK 0.4ns
K
HOLD_TIME_LH->CK 0.3ns

HOLD_TIME_HL->CK 0.4ns

MINPW_HIGH
CK
MINPW_LOW
Partea II – VHDL – Verilog

A. i) Să se implementeze în VHDL un model comportamental pentru circuitul proiectat


şi analizat dinamic în Partea I. În cadrul modelului se vor defini si utiliza constante
generice
pentru parametrii dinamici determinaţi prin simulare (timpi de propagare
clock→ieşire,
setup_time şi hold_time).
ii) Să se implementeze o entitate de test şi să se simuleze modelul de la punctul i)
B. Să se rezolve aceleaşi cerinţe de la pct. A în limbajul Verilog.

C. Denumirea circuitului: Circuit de selecţie şi comandă a unui sistem de două lifturi


Descriere circuit:
Circuitul selectează şi comandă un sistem de două lifturi, A şi B, dintr-o clădire cu 8
nivele (parter + 7 etaje) în urma unei cereri de chemare.
La fiecare etaj există un singur buton pentru chemarea unuia din cele două lifturi.
Când la un anumit etaj s-a apăsat butonul de chemare a liftului, circuitul va determina
şi va
selecta liftul situat cel mai aproape de locul chemării şi, totodată, va transmite acestuia
sensul şi numărul de nivele pe care trebuie să le parcurgă până la locul chemării. Dacă
lifturile se află la aceeaşi distanţă faţă de locul chemării, atunci va fi selectat liftul A.
Pentru simplitate se va presupune că întotdeauna când este apăsat un buton de
chemare, lifturile staţionează.
Pentru circuit se vor considera următoarele porturi:
Denumire Mod Semnificaţie
R[0:7] intrare Semnal pe 8 biţi corespunzător butoanelor de la fiecare etaj
pentru chemarea unui lift. Exemplu: când R(5) ia valoarea ‘1’ se
consideră că la etajul 5 s-a apăsat butonul pentru chemarea unui
lift.
PLA[2:0] intrare Semnal pe 3 biţi care indică valoarea în binar a poziţiei (etajului)
unde este situat liftul A. Exemplu: dacă PLA=”010”, liftul A este
la etajul 2.
PLB[2:0] intrare Semnal pe 3 biţi care indică valoarea în binar a poziţiei liftului B.
SELA ieşire Port pentru selecţia liftului A. Dacă SELA=’1’, liftul A este
selectat pentru a se deplasa la locul chemării.
SELB ieşire Port pentru selecţia liftului B. Similar ca SELA.
SENS ieşire Port care indică sensul în care trebuie să se deplaseze liftul
selectat: ‘1’ – urcare; ‘0’ – coborâre.
DIST[2:0] ieşire Port care indică în binar numărul de nivele pe care trebuie să le
parcurgă liftul selectat până la locul chemării.
Cerinţe:
i) Să se realizeze un model comportamental în VHDL a circuitului.
ii) Să se implementeze un testbench pentru verificarea modelului circuitului. În
cadrul simulării se vor aplica tranziţii la intrări astfel încât să se testeze răspunsul
circuitului pentru câteva din situaţiile posibile.

Partea 2:

library IEEE;

use IEEE.STD_LOGIC_1164.all;

entity JKFFS is

port(

SN:in BIT;

J:in BIT;

K:in BIT;

CK:in BIT;

Q:out BIT;

QN:out BIT);

end entity;

architecture Driver of JKFFS is

begin

JKFFS: process(CK,SN) is

begin

if(SN='0') then

Q<='1';

QN<='0';

elsif (CK'Event and CK='1') then

Q<=J;

QN<=K;

end if;
end process JKFFS;

end;

TEST_JKFFS:

library IEEE;

use IEEE.STD_LOGIC_1164.all;

entity Test_JKFFS is end;

architecture Driver of Test_JKFFS is

component JKFFS

port(SN,J,K,CK: in BIT;

Q, QN: out BIT);

end component;

signal SSN, SJ, SK, SCK, SQ, SQN: BIT;

--for all: JKFFS use entity

begin

UUT: JKFFS port map(SSN,SJ, SK, SCK, SQ, SQN);

Stimulus:

process

begin

SSN<='0', '1' after 10 ns;

SJ<='0', '1' after 15 ns, '0' after 20 ns, '1' after 25 ns, '0' after 30 ns, '1' after 35
ns, '0' after 40 ns, '1' after 45 ns;

SK<='0', '1' after 20 ns, '0' after 23 ns, '1' after 26 ns, '0' after 29 ns, '1' after 33
ns, '0' after 37 ns, '1' after 41 ns;

for i in 1 to 10 loop
SCK<='0', '1' after 3 ns;

wait for 7 ns;

end loop;

wait;

end process;

end;

REZULTATE SIMULARE VHDL:

VERILOG:

module JKFFS(J,K,SN,CK,Q,QN);

input J,K,SN,CK;

output Q,QN;

reg Q,QN;

always @(posedge CK)


if(SN==0)

begin

Q <=1;

QN <=0;

end

else

begin

if(J==0)

begin

if(K==0)

begin

Q<=Q;

QN<=Q;

end

else

begin

Q<=0;

QN<=1;

end

end

else

begin

if(K==1)

begin
if(J==1)

begin

if(K==0)

begin

Q<=1;

QN<=0;

end

else

begin

Q<=Q;

QN<=Q;

end

end

end

end

endmodule

TEST VERILOG:

module TEST_B()

wire J,K,SN,CK;

reg Q,QN;
B DUT(J,K,SN,CK,Q,QN);

initial begin

J<=0,K<=0,SN<=0,CK<=0;

end

always 10CK=CK;

endmodule

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