Documente Academic
Documente Profesional
Documente Cultură
Asachi Iași
Facultatea de Electronică ,Telecomunicații și Tehnologia
Informației
Proiect PACSAD
Numele circuitelor:
Partea II - VHDL
Grupa: 5313
An universitar: 2021-2022
0.15n
TR 0.1ns 0.2ns 0.3ns 0.4n
s
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:
SETUP_TIME_LH → CK
SETUP_TIME_HL → CK
D
HOLD_TIME_LH → CK
HOLD_TIME_HL → CK
MINPW_HIGH
CK
MINPW_LOW
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.
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.
¿
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
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)
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)
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
XNAND21 7 9 18 8 NAND2
XNAND22 10 9 18 11 NAND2
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
XAND2 1 2 18 4 AND2
.ENDS
//
.SUBCKT INVC 1 5 4 2 3
.ENDS
*in vdd out
.SUBCKT INV 1 2 3
.ENDS
.SUBCKT NAND2 1 2 3 4
.ENDS
.SUBCKT NOR2 1 2 3 5
.ENDS
.SUBCKT AND2 1 2 3 5
.ENDS
*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
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
*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
CQ 13 0 0.06p
CQN 14 0 0.06p
.PROBE
.END
→ functia tplh
tpLH (1,2)=x2-x1
}
→ functia tpHL
tpHL (1,2)=x2-x1
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
1.244V
1.000V
(10.051n,606.581m) (10.840n,605.143m)
0.500V
0V
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
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
*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
CQ 13 0 0.06p
CQN 14 0 0.06p
.PROBE
.END
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
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
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
tpLH tpHL
Descriere
tpLH intrinsec Kload tpHL intrinsec Kload
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.
*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)
CQ 13 0 0.06p
CQN 14 0 0.06p
.PROBE
.END
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
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.
*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
CQ 13 0 0.06p
CQN 14 0 0.06p
.PROBE
.END
Masuram timpul pentru Q si QN la jumatatea frontului si timpul corespunzator frontului de
ceas la jumatatea frontului pozitiv. Timpii HOLD_TIME_LHCK si HOLD_TIME_HLCK 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
*TEST_JKFFS
VDD 7 0 1.2v
.param pw=5n
CQ 13 0 0.06p
CQN 14 0 0.06p
X1 1 2 3 7 4 5 6 JKFFS
.inc "BIST_JK.txt"
.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.
VDD 7 0 1.2v
.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"
.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
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;
begin
JKFFS: process(CK,SN) is
begin
if(SN='0') then
Q<='1';
QN<='0';
Q<=J;
QN<=K;
end if;
end process JKFFS;
end;
TEST_JKFFS:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
component JKFFS
port(SN,J,K,CK: in BIT;
end component;
begin
Stimulus:
process
begin
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;
end loop;
wait;
end process;
end;
VERILOG:
module JKFFS(J,K,SN,CK,Q,QN);
input J,K,SN,CK;
output Q,QN;
reg Q,QN;
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