You are on page 1of 196

1

Li gii thiu
Khai thc, nghin cu c bn cng ngh mi l b-c khng th thiu trong
vic ci tin, nng cao, cng nh- ch to mi cc trang thit b qun s v dn s
nhm p ng vic hin i ho cng nghip ho ca t n-c. Cng vi s pht
trin v-t bc ca nghnh cng ngh thng tin, cc cng ngh mi v cc mch tch
hp vi in t, cc mch t hp logic lp trnh -c ra i lm cho cc sn phm
qun s cng nh- dn s ngy cng hon thin v -u vit hn. tin mt b-c xa
hn trong vic ci tin, ch to kh ti qun s nhm p ng chin tranh in t
hin i vi tc x l cc k cao, i hi phi c cng ngh tin tin ph hp vi
tnh hnh chung ca th gii.
Trn c s pht trin t cc chp PLA, hin nay cng ngh na n -c -a
vo ch to cc mch tch hp lp trnh -c FPGA v CPLD, n lm cho
mch tch hp logic ln n hng chc triu cng, tc ng h ln n 500 MHz.
ng dng cng ngh mi vo trong thit k ch to cc thit b in t lp trnh
PLIC l mt b-c cn thit cho t-ng lai vi mt n-c ang pht trin nh- Vit
Nam. p ng -c tnh bo mt trong qun s cng nh- tnh phn ng nhanh
trong chin tranh hin i cng vi nhu cu chuyn dng ho, ti -u ho (thi gian,
khng gian, gi thnh), tnh ch ng trong cng vic... ngy cng i hi kht
khe. Vic -a ra cng ngh mi trong lnh vc ch to mch in t p ng
nhng yu cu trn l hon ton cp thit mang tnh thc t cao. Cng ngh FPGA
(Field Programmable Gate Array) v CPLD (Complex Programmable Logic
Device) -c cc hng ln tp trung nghin cu v ch to, in hnh l Xilinx v
Altera. lm ch cng ngh mi v t chc thit k sn xut cng ngh FPGA
ca Xilinx cho php chng ta t thit k nhng vi mch ring, nhng b x l s
ring dnh cho ng dng ca chng ta. c bit trong lnh vc x l tn hiu s, cc
mch tch hp dng nhn dng m thanh, hnh nh, cm bin ... vi tnh mm do
cao v gi thnh thp.
Mc d cng ngh FPGA xut hin t nm 1985, xong i vi n-c ta th
n vn cn rt mi. Do vy tm hiu, lm ch v cng ngh FPGA l vic lm hon
ton cn thit. N khng ch c ngha i vi cc lnh vc in t - Vin thng,

cng ngh thng tin... m n c ngha c bit quan trng trong lnh vc an ninh
quc phng.
Xut pht t thc t i hi cp bch , b mn T ng v K thut tnh
Khoa K thut iu khin Hc Vin K thut qun s cho xut bn cun sch
Thit k thit b in t lp trnh s dng cng ngh FPGA v CPLD, ti liu ny
nm trong lot cc ti liu -c b mn n hnh, bao gm Cu trc my tnh,
Cu trc v lp trnh cho cc h x l tn hiu s, cu trc v lp trnh h vi iu
khin.
Ti kiu gii thiu ph-ng php thit k CPLD, FPGA cng nh- ngn ng lp
trnh, t i su nghin cu cc gii php c lin quan cng nh- cc cng c h
tr thit k, sau p dng thit k, tch hp vo loi CPLD v FPGA c th . Ti
liu -c chia thnh 4 ch-ng:
- Ch-ng 1: Gii thiu tng quan t chc phn cng ca ASIC. Gii thiu
tng quan t chc cc h thit b cng nh- cu trc ca chng (ti liu gii thiu cu
trc ASIC ca hng Xilinx).
- Ch-ng 2: Gii php v t chc phn mm m bo. Gii thiu cc phn
mm h tr thit k, ngn ng lp trnh.
- Ch-ng 3: Ngn ng lp trnh VHDL
- Ch-ng 4: Thit k ng dng c bn. Ch-ng ny -c thc hin vi vic
tch hp cc mch in t trn c s s dng ngn ng VHDL, thit k b iu
khin ng c b-c trn hai h thit b CPLD v FPGA.
Cun sch -c dng lm gio trnh ging dy bc i hc v sau i hc
chuyn ngnh in, in t hoc lm ti liu tham kho cho cc nghin cu sinh v
cho nhng ai quan tm n cu trc v lp trnh ASIC.
Cun sch -c bin son bi PGS. TS. Nguyn Tng C-ng v TS. Phan
Quc Thng, ThS. Phm Tun Hi, KS L Trng Ngha, do PGS. TS. Nguyn Tng
C-ng ch bin.
Nhn dp ny, tp th tc gi xin by t li cm n chn thnh nht n nhng
ng-i c nhiu ng gp trong qu trnh hon thnh ti liu, n cc anh ch em
B mn T ng v K thut tnh thuc Khoa K thut iu khin, Hc vin K
thut Qun s, c bit phi k n s h tr hiu qu ca TS. nh Ngha.
Do kinh nghim v thi gian hn ch, ti liu ny chc chn khng th trnh

khi nhng thiu st. Rt mong nhn -c cc kin ng gp v xy dng ca bn


c gn xa. kin ng gp xin gi v a ch: B mn T ng v K thut tnh,
Khoa K thut iu khin, Hc vin K thut Qun s, 100 Hong Quc Vit, H
ni; in thoi (04)7542281, email: tcuong@hn.vnn.vn.
H Ni, Ngy 1 thng 10 nm 2005
Tp th tc gi

Ch-ng 1 : Gii thiu tng quan


t chc phn cng ca FPGA v CPLD
1.1 Gii thiu cng ngh v gii php ca Xilinx
Vo cui nhng nm 70, cc bng mch -c thit k sn cng vi cc thit b
chun logic -c -a chung v thnh hnh . Sau mt s cu hi -c -a ra rng
" iu g s xy ra nu chng ta -a cho nhng ng-i thit k kh nng thc hin
kt ni gia cc thit b chun logic khc nhau trong mt thit b ln hn ? ". iu
ny cho php nhng ng-i thit k tch hp -c nhiu thit b chun logic hn vo
trong mt thit b. c -c s linh hot trong thit k, Ron Cline ng-i ca hng
SigneticsTM -a ra t-ng bao gm hai s cho php ng-i thit k c th lp
trnh -c.
Hai s ny cung cp bt k t hp logic no ca cc cng "AND" v "OR"
m chng c th -c dng chung vi mt s gii hn cng "AND " thng qua cc
cng "OR". Cu trc ny tr nn rt mm do, nh-ng ti thi im lp m
hnh hc 10 m to ra s gi chm gia u vo v u ra rt ln, chnh iu ny
lm cho thit b hot ng t-ng i chm. V cu trc ny -c gi l cu trc
ca PLA (Programmable Logic Array).

Hnh 1.1. Cu trc ca PLA (Programmable Logic Array)


Hng MMI (Sau b mua bi hng AMD TM) hp tc vi hng SigneticsTM
v l ni cung cp ngun ti liu th hai cho h thng mng logic lp trnh PLA
(Programmable Logic Array). Nh-ng sau khi sn xut, cu trc ny b thay i
v tr thnh cu trc logic mng lp trnh -c PAL (Programmable Array Logic),

bi vic c nh mt mng v ch cho php lp trnh trn mt mng cn li. Cu trc


PAL mi ny rt khc vi cu trc ca PLA ch l mt mng lp trnh -c b
gn c nh - mng cc cng OR . Tuy nhin, cu trc PAL (Programmable Array
Logic) ny cng c li l thi gian gi chm -ng truyn t u vo n u ra
ngn hn v phn mm t phc tp hn. Tuy nhin chng khng mm do bng cu
trc PLA (Programmable Logic Array) . Cc cu trc khc cng -c -a ra, chng
hn nh- PLD (Programmable Logic Device) - thit b logic lp trnh -c. Loi thit
b ny th-ng -c gi l thit b logic lp trnh -c n gin SPLD ( Simple
Programmable Logic Device) v tn ny -c gi chung cho tt c cc thit b logic
lp trnh -c nh- : PALs, CPLDs, FPGAs. Cu trc ca PAL (Programmable Array
Logic) .

Hnh 1.2. Cu trc ca PAL (Programmable Array Logic)


Cu trc ny c cc mt l-i ca cc -ng ni theo chiu ngang v chiu
ng. Ti mi im giao nhau, chng -c ni vi nhau bng mt cu tr. Vi s tr
gip ca cc cng c phn mm, ng-i thit k c th la chn mi ni, mi no
khng -c ni th cu tr ti im s b hu i (B nung nng v thi t). iu
ny -c thc hin bi mt b np ch-ng trnh.
Theo hnh 1.2 cc chn u vo -c ni vo cc -ng theo chiu ng, cc
-ng nm ngang -c ni vi cc cng AND - OR, ln l-t cc -ng ny -c
ni vi cc Flip-Flop chuyn dng (Chng hn nh- Flip-Flop loi D, T, RS). Cc
PLDs (Programmable Logic Device) trong mt IC ng gi n c s cng nhiu
hn 50 ln cc thit b logic chuyn bit. iu ny n th hin mt s tin b r
rt, y l ch-a cp n mt s thit b cn phi -c gin l-c ho c tin

cy cao hn cc thit b chun logic .


Cng ngh PLD pht trin t nhng ngy cn rt sm, chng hn nh- cng
ty Xilinx, h -a ra sn phm CMOS vi ngun tiu th siu thp da trn cng
ngh b nh flash. Cc PLD flash cho php kh nng lp trnh v xo bng in cho
thit b nhiu ln tr nn thch hp hn so vi cc chp th h c, cc loi chip m
vi thi gian xo ch-ng trnh hn 20 pht bng tia cc tm .
1.1.1. Complex Programmable Logic Devices (CPLDs)
Tm dch l cc thit b logic cho php lp trnh phc hp, h thit b ny l
kt qu ca vic tng mt ca h SPLDs (Programmable Logic Device) ln nhiu
ln. Khi nim ny -c hiu nh- sau : tng mt s khi PLD hoc cc macrocell
(xin -c nguyn ngha v gii thch phn cu trc ca CPLD) trong mt
thit b n cng vi cc -ng ni lin a nng gia chng. Cc -ng ni ca cc
n v logic n c th -c thc thi trong mt khi n ( a single block ). Nhiu
logic phc tp yu cu cn nhiu khi v s dng cc -ng ni a nng gia chng
to nn cc kt ni phc tp hn.

Hnh 1.3. Cu trc ca CPLD


Cc CPLDs rt thch hp trong vic din t cc cng logic phc tp vi tc
lm vic ln hn 200 Mhz ( t-ng -ng 5 ns ). Khun mu thi gian cho CPLD rt
d tnh ton, bi th tr-c khi bt u thit k bn c th tnh ton cc tc t u
vo n u ra ca mnh da trn khun mu ny. CPLDs -a ra cch n gin nht
thc hin mt thit k, mt thit k c th -c m t bi cc s nguyn l

hoc nhp vo mt HDL ( Hardware Description Language - Ngn ng m t phn


cng). n gin khi s dng cc cng c pht trin ti -u ho, np v m phng
thit k. Cc cng c thit k s to ra mt file m file ny (chnh l mt file ch-ng
trnh) -c dng -a thm cc chun logic vo trong mt chip CPLD cng vi
chc nng mong mun. Chnh v vy n cung cp mt chun phn cng m cho
php cc qu trnh x l, g ri c th thc hin ngay t khi bt u cng vic thit
k. Gi s nu bn cn c mt mt s thay i v thit k, bn c th -a s thay
i thit k vo trong cng c pht trin CPLD v thc thi trn n, sau bn c
th kim tra -c tc th ngay sau bng mt phn mm m phng. CPLD c mc
tch hp rt cao (c ngha l mt s l-ng ln cc cng trn mt din tch) v -c
ng gi trong mt khun dng rt nh. iu ny -a ra mt gii php tuyt vi
cho nhng ng-i thit k cn sn phm ca mnh -c ng gi nh gn vi din
tch bo mch b gii hn v khng gian. H Xilinx CoolRunner CPLDs lun c mt
trong cc ng gi cng vi cc chip i mi. Chng hn nh- chip CP56 CPLD c
khong cch cc chn l 0,5 mm v vi kch th-c bao nh khng ng k 6x6mm
v iu ny cho php -a ra mt sn phm nh gn cng vi mc tiu th ngun
thp .
1.1.2. Field Programmable Gate Arrays ( FPGAs)
Mng cng cho php lp trnh -c. Nm 1985, cng ty Xilinx -a ra mt
t-ng mi : l s kt hp gia nhng iu khin ng-i dng, thi gian -a sn
phm PLD (Programmable Logic Device) ra th tr-ng cng vi mt tch hp,
gi ca cc ma trn cng. iu ny cho ra i thit b FPGA v cho n nay
Xilinx vn l nh phn phi s 1 trn ton th gii v h thit b ny. Mt FPGA c
cu trc ca cc Logic Cell hoc cc Module v cc -ng ni (Xem hnh 1.4), cc
-ng ni ny nm d-i s iu khin ca ng-i thit k. C ngha l bn c th
thit k, lp trnh v thay i mch ca bn bt c khi no bn mun . Vi h FPGA
ngy nay kh nng tch hp ca n v-t qua gii hn 10 triu cng ( H Xilinx
VirtexTM- II v VirtexTM- 4 FPGA hin ang gi k lc).Vi s gii thiu ca h sn
phm Spartan FPGA hin nay, Xilinx c th cnh tranh v ma trn cng mi kha
cnh nh- gi c, s l-ng cng, s l-ng vo ra cng nh- hiu qu v gi thnh. Gi

s ly Spartan - IIE FPGA vi s l-ng 300.000 cng lm chun ca gi thnh, n


c th cho php thay th cc sn phm ng dng theo chun chuyn dng.
C hai loi FPGA c bn : Loi SRAM (Static Random Access Memory) c
th lp trnh li nhiu ln v loi OTP (One - Time Programmable) lp trnh mt ln.

Hnh 1.4. Cu trc ca FPGA


Hai loi ny khc nhau ch thc hin ca cc logic cell v k thut to s
kt ni gia chng trong thit b. Loi hay -c dng hn c l loi SRAM, v n c
th lp trnh -c nhiu ln. Thc t th SRAM FPGA -c np cu hnh li mi khi
bt ngun, bi v FPGA loi ny thc cht l mt chp nh theo mun. C mt cu
hi t ra l " Ti sao li cn mt chip PROM ni tip hoc b nh h thng? "
cng vi mi SRAM FPGA . Xem cu trc ca hai loi vi hnh v 1.5 v 1.6:

Hnh 1.5. Cu trc SRAM FPGA ( SRAM Logic Cell)

- Loi SRAM c th lp trnh li :


+ SRAM xc nh cc -ng kt ni.
+ SRAM xc nh n v logic trong bng LUT ( Look Up Table )
( Mi mt LUT l mt b to chc nng hay b to hm vi N u vo v mt
u ra, c th thc hin bt c chc nng logic no vi N u vo ca n. N th-ng
nm gia 2 v 6, thng th-ng cc LUT c 4 u vo ).

Hnh 1.6 . Cu trc ca OTP FPGA (OTP Logic Cell)


- Loi OTP cho php lp trnh mt ln :
+ Cc -ng ni khng -c php ni nh- dng cu ch ( Ni c nh ).
+ Logic l cc cng truyn thng .
Trong SRAM Logic Cell, thay v cc cng thng th-ng, mt LUT ( b to
hm ) s xc nh cc u ra da vo gi tr cu cc u vo. Nh- hnh 1.5 ta thy
su t hp khc nhau ca bn bt vo xc nh cc gi tr ca u ra, cc bit ny
cng -c dng thc thi cc kt ni. Trong OTP FPGAs s dng kt ni gia
cc -ng theo dng ni ng-c ( C ngha ng-c vi cu tr, s kt ni -c to ra
v khng b nng chy trong sut thi gian np ch-ng trnh), nhm to ra cc kt
ni c nh trong chip. Hn na, OTP FPGA khng cn SPROM no khc, iu
c ngha l np cu hnh vo thng FPGA. Tuy nhin mi ln thay i mt thit k
bn phi vt b i mt chip. Loi OTP Logic Cell c cu trc t-ng t nh- h PLD
(Programmable Logic Device), bao gm cc cng v flip - flop chuyn dng nhFlip-Flop loi D , T , hay RS .

10

1.2. Gii thiu cc h thit b ca Xilinx


Xilinx chia sn phm ca mnh ra rt nhiu h nh-ng ti liu s tp trung
chnh vo vic gii thiu hai loi FPGA v CPLD c bn, xem hnh v (Hnh2.1).
l lai thit b CoolRunner - XPLA3 CPLD, v Spartan 3 FPGA.

Hnh1.7. S l-c cc h thit b ca Xilinx


1.2.1. H Platform FPGAs
Hnh 1.7 cho ta thy -c tng quan cc h sn phm chnh cu Xilinx. y
xin ch gii thiu tng quan v -a ra cc a ch cn tra cu v chi tit k thut ca
chng trn trang Web ca hng Xilinx.
H Virtex FPGAs : Sn phm Virtex-II l hin thn u tin ca Platform
FPGA. N to ra mt im du mi trong s thc thi, cng thm hng lot cc
tnh nng mi ca thit b m t tr-c ch-a c. y l thi k m Xilinx m rng
tm chin l-c ca mnh bng vic kt hp vi cc hng IBM, Wind River,
Conexant, RocketChipsTM, The MathWorks, v cc nh ng u cng ngh khc

11

trn th gii. Platform FPGA -a ra cc c tnh sau :


- Cc giao tip vo ra h thng lm gim nh bt cc tiu chun khng cn
thit khc.
- XtremeDSPTM da trn FPGA, gii php cho s thc hin DSP ch-a tng c
(Nhanh gp 100 ln b x l DSP hng u).
- Empower ! K thut x l dnh cho x l h thng i hi s thc hin cao
v mm do.
Vi di mt t 40.000 n 10 triu cng h thng , Virtex-II -a ra b nh
h thng -c m rng v b DSP flash thng qua kt cu nhng IP (Li s hu tr
tu). H Xilinx Virtex l h u tin ca FPGA m n -a ra mt triu cng h
thng v -c gii thiu vo nm 1998. Dng sn phm Virtex v c bn -c
nh ngha li tt c cc n v logic lp trnh bi vic m rng cc kh nng ca
FPGA truyn thng c c tnh mnh hn, n -c dng cho cc thit k h
thng thc thi cao. Cc thit b mi nht -c -a ra vi h sn phm Virtex-E v
-c cng b nm 1999 vi hn ba triu cng h thng. Virtex-EM gii thiu nm
2000 v l h FPGA u tin -c sn xut vi qui trnh m ng -c ci tin
v thm vo b nh trong chip dng trong cc ng dng chuyn mch mng.
H Spartan FPGAs :
H Spartan FPGA l t-ng dng cho cc ng dng vi s l-ng ln, gi
thnh thp, chng -c -a vo cc thit b ch nhm thay th cc chip logic c
nh v cc sn phm chuyn dng, chng hn nh- cc chip giao tip bus. Nm
thnh vin ca h ny l Spartan-3 (1.2v), Spartan-IIE (1.8 v), Spartan-II (2.5 v) v
SpartanXL (3.3v), Spartan(5v). ti liu ny xin gii thiu h sn phm Spartan-3.
- Spartan-3 FPGAs (1.2v, 90nm) : Vi h ny, n khng ch c gi thnh thp
m cn oc tch hp vi mt s tnh cht mi v cu trc, cc tnh cht ny -c
kt hp vi cc n v logic cho php lp trnh. S kt hp gia gi thnh thp vi
cc tnh cht mi to ra s thay th cc chip ASIC v cc thit b chuyn dng
khc. V d mt chip Spartan-3 FPGA trong h thng a ph-ng tin truyn thng
trong xe hi c th tp hp -c rt nhiu chc nng ca h thng, bao gm cc li
IP nhng, giao tip h thng khch hng, DSP v cc n v logic khc. N bao gm

12

cc thnh phn chnh sau:


+/ Cc khi SRL16 ( thanhghi dch 16 bit) :
* Mi khi Logic nh cu hnh -c (CLB LUT- Configurable Logic Block LookUp
Table) lm vic nh- mt thanh ghi dch nhanh 16 bit. (Mi CLB c cha 2 hoc 4
LUT v 2 hoc 4 Flip Flop ).
* Ni tng cc LUT ( B to chc nng ) to nn thanh ghi dch di hn .
* S dng cc thanh ghi -ng ng cho cc b m dnh cho Video v cc kt ni
khng dy.
+/ B nh RAM chn c th -c cp ti 520Kb
* Mi LUT lm vic nh- b RAM/ROM n cng hoc l-ng cng.
* Ni tng cc LUT to b nh ln hn .
* Cc ng dng c th thay i kch th-c b nh mt cch mm do, FIFO, v cc
b m.
+/ Khi RAM nhng ti 1.87Mb
* Nhng ti 104 khi RAM ng b bng vic ni tng cc khi RAM 18Kb.
* Mi khi RAM 18Kb coi nh- mt RAM n cng hoc l-ng cng .
* Cung cp cc bi s ca t s t-ng quan, chuyn i rng d liu, tnh chn
l.
* Cung cp cho cc ng dng gm: b m d liu, FIFO, v cc b m khc.
+/ Giao tip b nh
* Cho php giao tip in vi cc chun nh- HSTL, SSTL, cho php thc hin kt
ni vi b nh thng th-ng.
+/ Cc b nhn
* Cho php cc php tnh ton hc v s hc n gin cng nh- cc chc nng nng
cao ca DSP.
* Cung cp 104 b nhn 18x18 vi cc php nhn18 bit du hoc 17 bit khng du,
cho php ni tng tng rng s bit.
* Cc b nhn h s hng : B nh on - Chip v cc Logic Cell lm vic cht ch vi
nhau xy dng cc b nhn vi cc ton hng l hng s.
* B nhn Logic cell : Thc hin thut ton thng th-ng chng hn nh- Baugh

13

Wooly, Booth, cy Wallance ...


* Cc b DCM (Digital Clock Manager - B qun l ng h s) thc hin vic
qun l ng h s phc tp m khng b nh h-ng ca cc tc nhn kch thch
mang tnh h thng nh-, nhit , s bin thin in p, v cc vn khc m v d
in hnh l th-ng xy ra vi cc b PLL (Phase Lock Loop - cc vng kho pha)
-c tch hp trong FPGA.
* B to tn s mm do t 25 MHz n 325 MHz.
* iu khin dch pha cc gc 1/4.
*To cc chu k chnh xc 50/50.
* B nhit.
+/ K thut tr khng iu khin -c XCITE
(Xilinx Controlled Impedance Technology)
*Cc u cui I/O cn bo ton tnh nguyn dng cu tn hiu, vi hng trm u
I/O v vi cc k thut ng gi ci tin, cc in tr u cui m rng khng cn
b bin i.
* Cc u cui I/O b loi tr s thay i theo qu trnh nh- nhit , dao ng ca
in p.
Bng 1.1. Tng quan h Spartan-3 FPGA

14

Cc c tnh v cng dng ca chng -c nu trong bng 1.2 :


Bng 1.2. Cc c tnh chnh ca Spartan-3
Cc c tnh ca Spartan -3

Cng dng

Kt cu v nh tuyn FPGA ln ti - Cho php thc hin cc khi chc nng


5.000.000 cng h thng.

mc h thng, kt ni on - chip cao, -a


vo cc cu hnh h thng cao .

Khi RAM - c cc Block 18K

- Cho php thc hin cc b m ln,


cc FIFO, cc b m kt ni.

Ch thanh ghi dch ( SRL 16 )

- t-ng thanh ghi dch 16 bit dnh


cho cc ng dng tc cao, hoc d
liu c dng th -c l-u tr trong DSP
v cc ng dng m ho, x l -ng
ng nhanh .

Cc khi nhn 18x18 .

- Dng cho vic x l DSP tc cao;


S s dng cc b nhn kt hp vi kt
cu khung d liu cho php thc hin
DSP song song siu nhanh.

Tn hiu u cui (ln ti 622 Mbps) - Cho php kt ni cc chp ang dng
nh dng theo cc chun LVTTL, vi cc chip, b nh khc, v t cc chip
LVCMOS, GTL, GTL+, PCI, HSTL-I, II, ang dng ti cc chun tn hiu mch
III, SSTL- I, II .

phn hi, loi bt s cn nhiu IC


chuyn i .

B qun l ng h s ( DCM )

- Loi tr s gi chm ng h mc
board v on-chip, nhn chia tc th, c
th gim -c tc ng h ph hp
mc board, gim s b ng h trn bo
mch. C th iu chnh pha ng h
m bo chnh xc cao .

C cc ti nguyn -c nh tuyn ton - S phn phi cc clock v cc tn hiu


cc.

khc cng vi cc h s phn chia u ra

15

cao trn ton thit b.


iu khin u ra cho php lp trnh .

- Nng cao tnh ton vn ca thit b

1.2.2. H Xilinx CPLDs


Hin nay Xilinx -a ra cc sn phm CPLD hai loi thit b : XC9500 v
CoolRunner. chn CPLD ph hp, bn cn xem qua cc c tnh cu n nhn
dng h sn phm m n ph hp vi ng dng ca bn.
- Vi h XC9500 : l h cc thit b cho php lp trnh phc tp vi s thc thi
cao, cc c tnh mi, linh hot. H thit b ny -a ra tc dn u trong nn
cng nghip, n cung cp s linh hot trong cu trc kho chn vi ng-i dng. H
sn phm ny -c dng cho cc thit k cn tc cao, gi thnh thp.
- H CoolRunner : H thit b tiu th ngun cc k thp, to ra s dn u
trong th tr-ng cc thit b xch tay. Hot ng trong ch ch mc Micro
ampe, tiu th ngun nh nht khi lm vic, v vy n ph hp vi cc ng dng m
cn quan tm ngun, chng hn nh- ngun c qui, cc ng dng xch tay. quyt
nh chn lai thit b no ph hp vi tiu chun thit k, cn phi xem thm cc
thng tin chi tit v loi thit b m bn cn, chng hn nh- : Mt cng, s thanh
ghi, s chn vo ra, tc yu cu, ng gi chn, tiu th ngun, chc nng mc
h thng...
H XC9500 ISP ( H ny cho php lp trnh mc h thng )
H XC9500 vi s thc thi cao, gi thnh thp l mc tiu cho cc ng dng
c nhu cu pht trin, nng cp thit k. H XC9500 c di mt t 36 n 288
Macrocell (Xin gii thch phn cu trc CPLD v FPGA mc 1.3 ch-ng I), lm

16

vic in p 2.5 Volt (XC9500 XV), 3.3 Volt (XC9500 XL), 5 Volt (XC9500 ).
Cc thit b ny cho php lp trnh mc h thng ISP, iu ny cho php s
dng li cc thit k trong sut thi gian th mu, g ri h thng, nng cp, test
tr-c khi xut x-ng.
Da vo cc k thut x l tin tin, h XC9500 -a ra s bo hnh nhanh
(Ch cn file ch-ng trnh -c ng gi v np li), cho php kho chn ng-i
dng, giao tip -c vi chun JTAG. Tt c cc h XC9500 c c tnh tin cy
tuyt vi vi 10.000 ln np xo v l-u tr d liu trong vng 20 nm.
- H XC9500 5 V : L mt trong s 6 thit b di t 36 n 288 Macrocell vi
cc kiu ng gi chn a dng. Cc chn vo ra cho php giao tip trc tip vi h
thng 3V v 5 V (VccIO - chn giao tip ng-i dng), vi cc phin bn mi n tr
nn rt d s dng vi cc ng gi theo kiu CSP (Chip Scale Package), BGA (Ball
Grid Array) v cho php truy cp n 192 tn hiu.
* Cu trc kho chn linh hot :
Cng vi phn mm fitter -a ra kh nng nh tuyn ln nht, mm do
trong thc thi. Vi cu trc c giu c tnh, cho php -a ra nhiu tch s nhn
ring bit, c ba b ng h ton cc, c nhiu tch s nhn trn u ra hn cc loi
CPLD khc.
Cc tnh nng v cu trc ca loi ny rt thch nghi vi vic sa i thit k
trong qu trnh thit k.
* Tr gip g ri v pht trin giao tip vi JTAG IEEE 1149.1: Giao tip
JTAG ca h XC9500 thng minh hn bt c h CPLD no c mt trn th tr-ng.
N c cc c tnh chun h tr k thut hi vng, ly mu, kim tra m rng.
Hn na n gm c cc ch dn qut bin m cc loi CPLD khc khng c,
n bao gm INTEST (dng cho kim tra chc nng ca thit b ), HIGHZ ( dng
cho k thut hi vng ).
H XC9500 5V ny -a ra nhiu chun cng nghip pht trin th h th ba,
cc cng c g ri nh- Corelis , JTAG, Assert Intertech.
Cc cng c ny cho php bn pht trin cc vc t test vng bin phn tch
s nh h-ng ln nhau, test, g ri li h thng.

17

Bng 1.3. Tng quan h XC9500 5V

- H XC9500XL 3.3 V: H XC9500 XL -c ng dng trong cc h thng mi


nhn cn s pht trin tip theo v kh nng nng cp thit k. H ny -a ra s
thc thi ch-a tng c vi tin cy lp trnh cao nht, gi thnh thp nht. H
XC9500 XL b sung mt cao hn Xilinx FPGA -a ra gii php logic tng
th trong mi tr-ng pht trin tch hp . Cc c tnh chnh ca h ny nh- sau :
* im mnh chnh :
+/ Gi thnh thp nht trn mi Macrocell.
+/ Cu trc kho chn tin tin nht hin c .
+/ Kh nng lp trnh cao nht, gim s ri ro h thng
+/ B sung cho h Xilinx 3.3 V FPGA.
* S thc thi :
+/ Tc truyn tn hiu gia chn ti chn 5ns .
+/ Tn s h thng 222 MHz .
* Tnh nng cu trc mnh:
+/ C cc khi chc nng ln ti 54 u vo .
+/ C ti 90 tch s nhn trn mi Macrocell.
+/ Cho php nh tuyn nhanh thng qua ma trn chuyn mch
CONNECTTM II.
+/ C ba b ng h ton cc v cho php chuyn i v tr gia chng.

18

+/ C -ng OE (Output Enable) trn mi u ra ring bit, cho php


chuyn i v tr .
* tin cy cao nht
+/ Kh nng chu -c 10.000 chu k np xo
+/ L-u d liu -c 20 nm
+/ Cho php b qua ch li m kho ISP .

Bng 1.4. Cc h XC9500 XV v XC9500 XL:

H CoolRunner Low - Power CPLD:


C hai thnh vin chnh trong h CoolRunner l CoolRunner XPLA3(3.3v) v
CoolRunner II (1.8V). ti liu ny gii thiu CoolRunner XPLA (3.3 v).
H CoolRunner CPLD l s kt hp ca s tiu th ngun thp v tc cao,

19

mt cao, s -ng vo ra cao trong mt chip n. H CoolRunner 3.3v c mt


t 32 n 512 Macrocell. CoolRunner CPLD c nt c bit ca k thut ngun
khng, cho php thit b khng tiu th ngun ch Standby. c tnh ny rt
ph hp vi cc thit b in t xch tay, nh- Laptop PCs, in thoi di ng, cc
thit b c nhn s ... H CPLD ny s dng ngun ng t hn nhiu khi hot ng
so vi CPLD truyn thng. Mt iu quan trng hn c l chng dng cho ng dng
cn s thc thi vi tc cao, nhy cm v nhit, chng hn nh- chuyn mch ca
tng i, h thng m phng ....
Mi thnh vin ca h CoolRunner XPLA3 c cha k thut thit k ngun
khng m n l s kt hp ngun nng l-ng thp v tc cao. Vi k thut thit
k ny h CoolRunner XPLA3 -a ra tc truyn t chn ti chn l 5ns. Khi
-c cp ngun vi dng nh hn 100 A ( ch standby) khng cn bit
"Powerdown" v bit ny c th nh h-ng xu n s thc hin ca thit b. Bng
vic thay th cc ph-ng php khuych i truyn thng, ph-ng php cc tch s
nhn vi mt lot s ni tng ca cc cng CMOS thun tu. Ngun ng cng
-c thay th bng ngun thp hn bt k loi CPLD no khc. H CoolRunner
hon ton l loi PLD CMOS, v vy chng s dng k thut x l CMOS v k
thut thit k ngun khng CMOS .
Bng 1.5. Cc c tnh ca h CoolRunner:
c tnh

Cng dng

Cu trc hon ton CMOS cng vi k - Dng tiu th tng v dng ch


thut thit k ngun khng FZP

STANBY thp nht trong s h CPLD, v


vy tui th ca c qui s cao hn, tin
cy tng, to nhit t hn.

C th chn thit b c cha 32 n 512 - Ph hp vi nhiu thit k v cc ng


Macrocell.

dng, c th chuyn mt ln hoc


xung tu thuc vo pht trin thit k
ln hay rt bt.

Chun vo ra thay i ( C th dao dng - n gin trong thit k, c nhiu mc


t 3.3 n 5V).

in p v d chuyn i mc.

20

H thng Bus vo ra thun tin.

- C in tr treo u cui .

S chn la clock a nng.

- Mm do trong thit k .

C cc thanh ghi u vo tc ng nhanh - Giao tip trc tip vi bus tc cao


-c.
VFM (Variable Function Mux) b chn - Qu trnh ti -u ho mnh hn v d
knh chc nng cho php thay i.

iu chnh thit k, chi ph thp hn khi


dng vo cc ng dng nh.

ng gi nh gn vi cc khong cch - Cc chn nh nht, tit kim khong


chn l 0,8 mm v 0,5 mm.

mch in, ph hp vi cc thit b cm


tay.

Di nhit chun theo cng nghip v - C th s dng trong cc ng dng


th-ng mi .

cc lnh vc khc nhau, nh- y hc...


Bng 1.6. Tng quan h CoolRunner :

Gii thch k hiu CoolRunner CPLD:

21

1.2.3. H Xilinx ng dng trong hng khng v v tr


Xilinx l nh cung cp hng u cc h PLD vi tin cy cao cho th tr-ng
hng khng v tr v qun s . Cc thit b ny, chng -c s dng rng ri trong
cc ng dng nh- chin tranh in t, tn la dn -ng, tn la hnh trnh, Radar,
truyn thng siu m, x l tn hiu, khoa hc in t hng khng v v tinh. H
QproTM vi cc sn phm QML gm, plastic -a ra cc gii php lp trnh logic
nng cao cho cc thit k th h tip theo. H QproTM cng c cc sn phm chn,
chu nhit s dng trong v tinh v cc ng dng khng gian khc. Chng hn
nh- h XQ4000E/EX thuc h FPGA, QPro - XC1700D - PROM , XQ17V6 PROM, XQ18V04 - Flash PROM -c s dng trong lnh vc qun s .
a ch tham kho : ( http://www.dscc.dla.mis/v/va/smd/smdsrch.html ).

1.3. Cu trc ca FPGA v CPLD Xilinx


Vi mi h khc nhau cu trc cu chng khc nhau, tuy nhin chng vn c
nhng im chung, ti liu ny xin gii thiu mt h c th. Vi h ca FPGA tc
gi xin gii thiu cu trc ca Spartan-IIE FPGA, vi h CPLD xin gi thiu h
CoolRunner XPLA3.
1.3.1. Cu trc ca Spartan-IIE ( 1.8V) FPGA
H Spartan-IIE (Li 1.8V) ca FPGA -a ra cc k thut FPGA pht trin nht
ngy nay, bao gm cho php lp trnh vi nhiu chun vo ra nh- LVDS, LVPECL,
HSTL, cc khi RAM on-chip, cc vng kho gi chm cho php qun l clock
mc board v mc chip. Hn na h Spartan-IIE c mt ngha gi tr khc l
n loi b s cn thit cc sn phm tiu chun chuyn dng (ASSP) vi cc ng

22

dng n gin, chng hn nh- vng kho pha, FIFO, cc b chuyn i vo ra, iu
khin Bus h thng, cc thnh phn ny khng th thiu hon thin mt thit
k m n -c dng tr-c y.
- H Spartan-IIE l n by c bn cho cc tnh nng v cu trc ca Virtex-E
-a ra nhng tnh nng ni tri hn. Cu trc CLB (Configurable Logic Block Khi logic cho php nh cu hnh) c cha RAM -c phn phi thc hin cc
chc nng logic c bn.
- Bn DLL ( Delay Locked Loop ) vng kho gi chm -c s dng cho
b qun l ng h v c th thc hin clock i xng lch v cc php nhn clock,
chia clock. Clock i xng lch c th -c thc hin bn ngoi (Mc board) hoc
bn trong chip ( Mc c bn ).
- Cc khi Block RAM gm 4Kb cho mi khi c th -c sp xp rng t
1 n 16 bit.
- c tnh Select I/O cho php giao tip vi nhiu chun khc nhau thc thi
trong cc vng kt ni vi cc chip c chun IO khc nhau, kt ni chip vi b nh,
kt ni chip vi cc giao tip n.

Hnh 1.8. Cu trc ca Spartan - IIE


- H Spartan-IIE FPGA -c thc thi vi cu trc CLB cho php lp trnh linh

23

hot, thng dng, m cc CLB ny -c bao bi mt vng cc khi I/O lp trnh


-c, cc -ng ni -c kt ni bi cc ngun ti nguyn nh tuyn a nng. Cu
trc ny cng -a ra cc chc nng -c nng cao chng hn nh- khi RAM v cc
khi iu khin clock.

Hnh 1.9. S khi ca Spartan -IIE

Hnh 1.10. Khi Input/Output Spartan -IIE (I/OB)


I/O Block:

24

- Cc c tnh I/OB ca cc u vo v u ra -c h tr ti 19 cc chun tn


hiu khc nhau, bao gm LVDS, BLVDS, LVPECL, LVCMOS, HSTL, SSTL v
GTL .
- Cc u vo ra tc cao ny c kh nng h tr vi tt c cc b nh hin
i v giao tip bus khc. Chng gm ba thanh ghi chc nng hoc l cc flip - flop
loi D -c kch hot bng s-n hoc l cc b cht nhy mc Hnh 1.10.
- Mi mt IOB c mt -ng CLK -c -a ti ba thanh ghi theo mt -ng
dng chung v cc -ng CE cho mi thanh ghi hon ton c lp xem Hnh 1.10.
Ngoi cc -ng CLK, CE, mi thanh ghi u c chung mt -ng
SET/RESET. Vi mi thanh ghi bn c th t tn hiu Set/Reset ny nh- tn hiu
Set ng b, Reset ng b, Preset khng ng b hoc mt tn hiu xo (Clear)
khng ng b.
- Trong mt s cc chun I/O yu cu in p Vcco hoc Vref, cc in p ny
chng -c ni ti cc chn ca thit b khi thit k, cc chn ny chng to thnh
tng nhm ca cc khi vo ra v chng -c gi l Bank.
- Chnh v vy, s hn ch v cc chun vo ca mt thit b s do cc Bank
quyt nh. Tm Bank vo ra -c tch theo mi cnh ca FPGA v -c chia thnh
hai Bank chnh (hnh 1.11). Mi Bank c nhiu chn in p Vcco v tt c chng
u -c ni ti cng mt -ng in p. in p ny -c xc nh bi cc chun
u ra ng-i dng.

Hnh 1.11. Cc Bank chun vo ra I/O ca Spartan -IIE


- Mt s chun u vo mong mun mt in p ng-ng no m n -c

25

cung cp bi ng-i dng chng hn nh- Vref. Tr-ng hp ny, cc chn I/O ng-i
dng -c xp t t ng nh- cc u vo cho in p ly mu Vref. Khong mt
trong 6 cc chn vo ra ca cc Bank ng vai tr ny.
- Cc chn Vref trong mt bank -c ni bn trong v v vy ch mt in p
Vref c th -c s dng trong mi bank .Tt c cc chn Vref trong cc bank cn
phi -c ni vi ngun in p bn ngoi chng hot ng ng.
c s trao i nhanh gia cc tn hiu, cc chn tn hiu u vo cn phi
-c cung cp tr-c khi ngun cp vo chn Vccint v chn Vcco v phi m bo
khng c -ng dn dng ng-c t cc chn I/O quay v in p ngun cung cp
Vccint v Vcco (C ngha l m bo cho thit b c th hot ng mt in p v
giao tip mt in p, hai in p ny c th khc nhau ).
Configurable Logic Blok v Logic Cell:
- Cc n v c bn ca CLB (Khi logc cho php nh cu hnh) thuc h
thit b Spartan-IIE chnh l cc Logic Cell ( LC - Xem hnh 1.5 v hnh 1.6 mc 1.1
ch-ng I ). Mi mt Logic Cell bao gm mt b to chc nng (Hay b to hm)
gm 4 u vo, phn t logic nh v phn t l-u tr (Flip-Flop loi D).
- u ra ca b to chc nng ca mi Logic Cell iu khin c u ra CLB
hoc u vo D ca Flip-Flop.
- Mi mt CLB c cha bn Logic Cell v -c t chc thnh hai Slice t-ng
t nhau, mt slice n c dng nh- (hnh 1.12).
- Thm vo bn b LC c bn, cc CLB ca Spartan-IIE c cha phn t logic
m n kt hp vi cc b to chc nng -a ra cc chc nng 5 hoc 6 u vo .
Look-Up tables (LUT):
- Cc b to chc nng ca Spartan -IIE thc hin nh- LUT c bn u vo.
hot ng nh- mt b to chc nng, mi mt LUT c th cung cp mt RAM
16x1bit ng b.
- Hn na hai LUT trong mt Slice c th -c kt hp to mt RAM 16x2
bit hoc 32x1 bit ng b .
Storage Element:

26

Hnh 1.12 .Cu trc Logic Cell hay mt Slice n trong Spartan -IIE
- Cc phn t l-u tr trong slice ca Spartan-IIE c th -c xem nh- mt
Flip-Flop loi D kch hot bng s-n, hoc nh- mt b cht nhy mc. Cc u vo
D c th -c iu khin hoc bi b to chc nng trong slice hoc trc tip t u
vo cc slice (b qua b to chc nng). Thm vo cc -ng Clock (CLK) v Clock
Enable (CE) (hnh 1.12), mi Slice c cc tn hiu set v reset ng b (SR v BY).
-ng SR p cc phn t l-u tr v trng thi khi to, c bit trong tr-ng hp
nhi cu hnh. -ng BY p phn t l-u tr v trng thi ng-c li. C th la chn
hai -ng ny chng hot ng khng ng b.
Tt c cc tn hiu iu khin c th o ng-c mt cch hon ton c lp v
chng -c chia s bi hai Flip-Flop trong mt Slice.
Arithmetic Logic: B dn knh F5IN trong mi Slice -c kt hp vi cc
u ra b to chc nng -c ch ra hnh 1.13.

27

Hnh 1.13. B dn knh F5 v F6


S kt hp ny s -a ra hoc mt b to hm m n c th thc thi bt k 5
u vo chc nng no, hoc mt b dn knh 4:1 hoc cc chc nng -c chn
la ca chn u vo. T-ng t, b dn knh F6 kt hp cc u ra ca bn b to
chc nng trong CLB bng vic chn mt trong hai u ra ca b dn knh F5. iu
ny cho php thc thi bt k mt hm 6 u vo no, mt b dn knh 8:1, hoc
chc nng -c chn la ln n 19 u vo.
Block RAM: H Spartan-IIE FPGA hp nht mt vi b nh RAM theo khi
thnh khi ln hn (gi l SelectRAM +), c ngha l cn phi b xung thm cc
LUT RAM -c dng. Kin trc b nh khng bn vng ny -c thc hin
trong cc CLB. Cc khi b nh RAM Block chng -c t chc theo cc ct . Hu
ht h Spartan -IIE c cha hai ct nh- nhau, mi mt ct -c b tr dc theo chiu
ng . H XC2S400E c bn ct RAM khi, mi ct ny -c ko di ht chiu cao
ca chip. Mi mt khi nh chnh gm bn CLB cao v v vy mi Spartan-IIE c 8
CLB cao s cha hai khi nh trn mi ct v tng cng c bn khi .
Delay - locked loop (DLL): -c kt hp vi mi b m u vo clock ton
cc v l mt vng kho gi chm s DLL m n loi tr -c s lch gia b
m u vo clock v cc chn u vo clock bn trong thit b. B DLL gim st
ton b clock u vo v clock -c phn phi, t ng iu chnh phn t gi
chm clock. Hn na gi chm -c hiu l s-n ca clock -a ti Flip-Flop

28

bn trong, vi chnh xc trong mt chu k ng h sau khi chng -c -a n


u vo. Chu trnh kn ny loi tr nh h-ng gi chm do phn phi clock bng
vic m bo cc s-n ca clock -a n cc flip-flop bn trong ng b vi cc
s-n clock n ti cc chn vo. loi tr s gi chm do phn chia clock, DLL
-a ra tn hiu iu khin hiu chnh cc khong clock khc nhau. DLL cung cp
cc pha vung 900 ca clock ngun m c th nhn i, hoc chia bi cc h s 1.5 ,
2, 2.5 , 3, 4 , 5 , 8 hoc 16 (Xem hnh d-i).

Hnh 1.14. Vng gi chm DLL

Hnh 1.15. Cc c tnh u ra ca DLL

29

1.3.2. Cu trc ca CoolRunner -XPLA3 CPLD


Cu trc ca XPLA3 mang nt c tr-ng ca mt thanh ghi u vo, nhiu
thnh phn clock, lp trnh qua JTAG, cc -ng vo ra dao ng 5V v bao gm
mt cu trc PLA (Programmable Logic Array) y . Vi s phn phi logic linh
hot cng vi cc c tnh m rng ny -a ra tc cao gp i, kt qu l n
to ra kh nng thay i thit k m khng cn thay i cc chn u ra. Cu trc
ca n bao gm mt tp hp 48 tch s nhn m c th phn phi ti bt k
Macrocell no trong khi logic. S kt hp ny cho php cc php tnh logic -c
phn phi hiu qu trn ton khi logic v h tr nhiu tch s nhn cn thit trn
mi Macrocell. Cu trc tng qut ca mt CPLD -c -a ra hnh 1.16,1.17.

Hnh 1.16. Cu trc tng qut mc cao ca XPLA3 - CPLD

Hnh 1.17 Cu trc khi ca CoolRunner XPLA3 CPLD

30

Hnh 1.18. Cu trc chc nng ca CoolRunner XPLA3


Hnh 1.16 ch ra s khi mc cao ca mt thit b 128 macrocell thc
hin cu trc XPLA3. Cu trc XPLA3 bao gm cc khi chc nng (Function
Block) hay khi logic -c ni lin vi nhau thng qua ma trn ni ngun khng
(ZIA). Thc cht ZIA l mt chuyn mch im -c nh tuyn. Mi khi chc
nng c 36 u vo t khi ZIA v 16 Macrocell (MC). Vi h XPLA3 duy nht ch
l s phn chia logic nm bn trong mi khi chc nng v k thut thit k -c s
dng thc hin cc khi chc nng ny.
Theo hnh 1.18 ta thy mi khi chc nng c cha mt ma trn PLA, m n
to ra cc -ng iu khin, -ng clock v cc logic cell dng cho vic s dng
cc clock khng ng b, reset, preset v Output Enable (Cho php u ra). Mt
PLA rt khc mt PAL (Programmable Array Logic), v vy m PLA c mt ma
trn cc cng AND cho php lp trnh hon ton thng qua lp trnh cc cng OR .
Mt ma trn PAL b c nh bi ma trn cc cng OR ( xem hnh 1.1 v 1.2
Mc 1.1), ma trn PLA nhn cc u vo ca n trc tip t ZIA. C 36 cp u vo
v cc u vo b xung t ZIA, cc u vo ny -c cung cp ti 48 tch s nhn
trong ma trn. Bn tm -ng tch s nhn ny, th trong c 8 -ng iu khin

31

cc b (LCT [0:7]) -c php s dng nh- cc tn hiu iu khin ti mi Macrocell


(MC) dng khi s dng cc clock khng ng b, reset, preset v cho php u ra
(OE) Output Enable.
Nu khng dng 8 -ng iu khin ny th chng -c nhp vi 40 tch s
nhn cn li to ngun logic. Trong mi khi chc nng c 8 -ng phn hi
NAND -c dng tng hp v tng mt logic, h tr cc hm logic ln hn.
c tnh ny c th -c php hoc khng c th do phn mm ng-i s dng
qui nh. Cng vi cc tch s nhn, -ng iu khin v cc -ng phn hi khng
-c s dng n, cc -ng ny chng li c th gp li v -c dng nh- mt
ngun ti nguyn logic. Nu c ln hn mt php tnh logic nhn, h s n ti mi
MC th 47 tch s nhn na s -c gp li tr-c to ra VFM ( Variable Function
Multiplexer - B chn knh chc nng bin i ).
B VFM tng s ti -u ho logic bng vic thc hin mt vi chc nng logic
u vo tr-c khi i vo Macrocell xem hnh 1.19.

Hnh 1.19 Cu trc ca mt MacroCell

32

Hnh 1.20. B dn knh chc nng VFM


Cu trc MacroCell:
Hnh 1.20 ch ra cu trc ca MacroCell (MC) -c s dng trong CoolRunner
XPLA3, bt c mt MC no u c th reset hoc preset khi bt ngun.
Mi thanh ghi ca MC c th -c xem nh- mt flip-flop kiu D, T hoc kiu
cht hoc b qua nu MC -c coi l mt hm logic t hp. Mi flip - flop ny c
th nhn -ng Clk t bt k mt trong 8 ngun clock hoc phn b xung ca
chng (hnh 1.20).
C hai -ng Clk ng b ton cc m chng -c ly t 4 chn clk bn
ngoi. Ti y c mt -ng CLK chung v cc tn hiu u vo CT [4:7] (Local
Control Terms). C hai -ng phn hi ti khi ZIA thng qua b Mux, mt b
Mux s chn hoc u ra ca VFM hoc t u ra ca thanh ghi, mt b Mux cn
li s chn hoc l t u ra ca thanh ghi hoc t -ng dn I/O ca MC.
Khi cc chn I/O -c s dng nh- mt u ra, b m u ra -c php chn
v -ng phn hi MC c th -c s dng lm -ng b xung logic trong MC. Khi
chn I/O -c s dng lm u vo th cc chn u ra s l ba trng thi v tn hiu
u vo s -c -a n ZIA thng qua -ng phn hi I/O. Cc php Logic b m
-c thc hin trong MC c th -a n ZIA thng qua -ng phn hi ca MC.
Nu mt chn ca MC -c t nh- mt u vo, th ti c mt -ng dn
trc tip ti thanh ghi to thi gian thit lp u vo nhanh. Nu MC -c xp
t l mt b cht th u vo clock ca thanh ghi s to chc nng cho php cht v
cht chc chn nht khi tn hiu ny l cao. -ng Clock -c ni cng s khng
-c s dng khi m MC -c thc hin nh- mt b cht .

33

I/O Cell :

Hnh 1.21. Cu trc I/O Cell


-ng OE ca b chn knh c tm kh nng xy ra ( Xem bng gii m -c
ch ra trong hnh trn ). Khi cc I/O cell -c t nh- mt u vo (hoc u ra ba
trng thi), -ng OE ny ko u vo ln cao (thng qua mt b treo mc yu)
nu u vo b th ni v v-t ng-ng. iu ny nhm to ra s bo v u vo v-t
khi vng m vng ny chnh l nguyn nhn gy ra vic tiu th ngun ln. Chc
nng nh- ca b treo mc yu c th thc hin bng phn mm, chng hn nh- n
s lun lun -c bt khi I/O cell -c xem nh- mt u vo. iu ny s lm b
treo t ng bt khi mt chn khng -c s dng trong thit k. Cc I/O cell l 5v
(hoc 3.3 V) khi m thit b -c cp ngun . Mi u ra c mt b iu khin tc
c lp (Nhanh hoc chm - cho php t trong phn mm), iu ny s gip lm
gim s pht ra nhiu in t tr-ng. L-u rng mt I/O ca MC khi s dng
mt php logc -c thc hin bn trong n th n khng c chn I/O -c s dng
cho u vo m n coi chn khng -c s dng v cc in tr treo s -c ni.
C th ni rng, tt c cc chn ca XPLA3 khng -c s dng th khng -c
ni. Cc chn u vo m -c s dng cho mt mc ch ring no
(CLKx/INx) th khng c in tr treo, v vy cc chn u vo ny cn c u cui
pha ngoi . Nh- tt c h CMOS khng cho php cc chn u vo th ni .
Timing Model : " Khun mu xc nh thi gian ", cu trc ny cho php

34

khun mu thi gian tin nh trong thit k v thit k li .

Hnh 1.22. Cc khun mu thi gian trong CoolRunner XPLA3


C ba khun mu thi gian chnh l TPD, TSU, TCO. Trong cc cu trc khc ta
c th -a thit k vo trong CPLD nh-ng khng m bo -c yu cu v thi gian
ca h thng c t -c hay khng v c tho mn hay khng cho n khi thit k
-c dch v np vo trong thit b . Chnh v vy khun mu xc nh thi gian
ca cc cu trc khc rt phc tp v rt nhiu th cn quan tm, chng hn nh- s
ph thuc ca thi gian vo s b m rng song song m-n, s b m rng chia s,
s thay i s knh nh tuyn X , Y...
Trong XPLA3 c th bit tr-c thit k c ph hp vi yu cu thi gian ca
h thng hay khng v n c khun mu xp xp thi gian chun.

1.4. Quy trnh thit k c bn


* Cc b-c thit k:
Vi tnh nng ca cc sn phm -a ra cu Xilinx, phn mm ISE (Integrated
software Environment) lm cho vic thit k d dng hn vi logic lp trnh
-c. Cc thit k c th -c m t mt cch d dng v nhanh chng bng vic s
dng ngn ng m t ALBEL, VHDL, VerilogTM, hoc vi mt ng gi t cc s
nguyn l. Vic ly thit k t s nguyn l chnh l ph-ng php truyn
thng m nhng ng-i thit k s dng n nh mng cc cng v cc thit b
logic lp trnh -c. N l cng c ho v cho php n nh chnh xc cc cng
-c yu cu v cch ni chng nh- th no.

35

D-i y l bn b-c c bn ca mt thit k s dng t s nguyn l :


1. Sau khi la chn cng c to s nguyn l v th- vin cc thit b, bt
u xy dng mch bng vic ti cc cng mong mun t th- vin -c chn. C
th s dng bt k mt t hp cng cn thit no. Lc ny cn phi chn mt thvin h cc thit b phn phi r rng, nh-ng c th khng cn phi bit thit b no
trong h . V c bn, ch s dng vi s quan tm v ng gi v tc ca
chng l .
2. Ni cc cng li vi nhau bng vic s dng cc mng v dy ni. Hon tt
vic iu khin ni cc cng theo bt c cu hnh no m cn cho ng dng .
3. -a thm v t tn cho cc b m u vo v u ra , cc nhn ny s ch
r cc chn trong ng gi vo ra ca thit b .
4. To danh sch cc mng cc -ng ni ca mch.
Hnh 1.23 d-i y m t lung thit k vi cc PLDs .

Hnh 1.23. Cc b-c thit k mt PLD theo s nguyn l


Mt danh sch mng kt ni ( Netlist ) l mt file dng text m t kt ni ca
mt mch. N -c to ra bi cc cng c thit k, chng hn nh- ch-ng trnh ly
s nguyn l ECS. Netslist l mt file c ng, ngn gn cc ch-ng trnh
khc c th hiu -c cng no -c ni trong mch v chng -c ni vi nhau
nh- th no, cc tn ca chn vo ra l g. Trong mt v d d-i y, Netlist phn

36

nh mt c php thc t ca mt mch theo dng s . l mt -ng ni cho


mi linh kin v mt -ng cho mt trong cc mng dy ni. L-u rng ch-ng
trnh my tnh s gn cc tn cho mi linh kin ( G1 n G4 ) v cc -ng ni N1
n N8, hnh 1.24 . Khi thc thi thit k ny, n s ng gi cc chn u vo l A,
B, C, D v cc chn u ra l Q, R, S. EDIF ( Electronic Data Interchange Formatnh dng trao i d liu in t ) theo chun cng nghip cho vic n nh cc
thit k logic dng text v mt dng khc na l XNF (Xilinx Netlist Format nh dng Netlist ca Xilinx). Gi s bn c trong tay mt Netlist, nh- vy bn
c tt c nhng g bn cn xc nh ci m mch ca bn nh thit k.

Hnh 1.24. Netlist ca mt thit k


V d trn y l mt v d n gin v r rng. Nh- chng ta thy, th m
t mt thit k thc t vi 10.000 cng. Mt trang s nguyn l c cha khong
200 cng, v vy n s cn 50 trang s to ra mt thit k 10.000 cng. Mi
mt trang cn thc hin theo tt c cc b-c k trn. iu ny s tiu tn rt nhiu
thi gian, c bit nu mun to mt thit k c 20.000 hoc 50.000 v c th cc
thit k ln hn na. Bn th hnh dung s tiu tn bao nhiu thi gian nu bn to
mt th- vin phn phi linh kin v nu cn sa i chng. C mt cch tt hn
thc hin iu ny v n -c gi l thit k mc cao (HLD-High Level Design),
hot ng (Behavioral) ca thit k, hoc l ngn ng m t phn cng (HDL).
t-ng dng ngn ng bc cao m t mch dng file vn bn ny hay hn vic

37

m t cc cng dng ho rt nhiu. Thut ng hot ng (Behavioral) y


-c dng bi v trong ngn ng bc cao chng ta c th m t hm hoc phn
ng ca mch bng li hn l -a ra hnh v ca cc cng t-ng ng m n cn
-c to trong ng dng. C hai ngn ng chnh trong ngn ng HDL l : VHDL
v Verilog. Xt mt v d khc, hy thit k mt b nhn 16x16 vi m t bng file
HDL v ch-ng trnh to t s nguyn l ECS. Vi mt b nhn, thng th-ng l
mt s xp t rt phc tp ca cc b cng, cc thanh ghi v mt s cc cng. V
d ca chng ta cn hai u vo 16 bit ( u vo A v B ) v mt u ra b nhn 32
bit ( Y= AxB ) nh- vy tng cng c 64 -ng vo ra v t-ng -ng vi khong
gn 6000 cng.Trong vic thc hin bng s nguyn l, s cng yu cu cn phi
-c ti vo, t trong trang thit k mch v cn phi -c ni vi nhau, cng thm
cc b m vo ra. Cng vic ny chim mt khong ba ngy. Khi thc hin bng
HDL, mt khong 8 dng text v c th hon thnh trong ba pht. File Netlist -c
to ra v n c cha tt c cc thng tin cn thit ca mt b nhn 16x16.

Hnh 1.25. Cc thng s ca mt thit k b nhn


* Kim tra thit k : Cc thit k logic lp trnh, -c kim tra bng vic s
dng mt b m phng m thc cht n l mt ch-ng trnh phn mm, ch-ng
trnh ny xc nhn tt c cc chc nng hoc thi gian hot ng cu mt mch. Cc
nh dng cng nghip tiu chun -c s dng m bo mt iu rng cc thit
k c th -c ti s dng. Nu nh- c s thay i th- vin ca nh phn phi th

38

thit k ch cn bin dch li qu trnh tng hp nu l cn thit. Li IP (Li s


hu tr tu ) th-ng cho php khun dng HDL, chng rt d thay i v s dng
vi nh phn phi thit b khc nhau. Sau khi hon tt cc chi tit ca mt thit k,
iu cn phi bit l liu mch thc t c hot ng ng nh- mc ch ca thit k
khng. Chnh cu hi ny tr li cho mc ch ca vic kim tra thit k.
B m phng s m phng thit k, v vy cn phi cung cp y thng tin
ca thit k (Thng qua file Netlist sau khi s dng ch-ng trnh ECS hoc thng
qua qu trnh tng hp bng phn mm ) v cc mu u vo c th, hoc thng qua
cc vc t kim tra. B m phng s ly thng tin t xc nh cc u ra ca
mch. Xem hnh sau:

Hnh 1.26. Qu trnh thit k mt PLD

39

M t tm tt:
- M phng chc nng : Ti giai on ny, s phng chc nng ch kim tra
nhng t hp ng ca khng v mt m mch nguyn l -a ra. Ng-i thit k s
-a ra ch dn s m phng v thi gian ngay sau theo cc b-c trong lung thit
k ny. Nu nh- c chc nng no khng ng, cn phi quay li s nguyn l
hoc file HDL (Xem hnh 1.26) v sa i li, to li file Netlist v sau cho chy
li b m phng. Nhng ng-i thit k th-ng mt khong 50% thi gian vo vic
sa i i qua b-c ny cho n khi thit k t theo yu cu mong mun . Vic
s dng file HDL c rt nhiu thun li khi kim tra thit k : Ng-i thit k c th
m phng trc tip t file ngun HDL, iu ny cho php b qua thi gian tiu tn
trong qu trnh tng hp m thi gian ny th-ng -c yu cu mi khi thay i
thit k. Mt thit k khi lm vic ng, chy cng c tng hp to ra file
Netlist cho cc b-c tip theo trong qu trnh thit k .
- Thc thi trn thit b : Mt file Netlist cu thit k m t hon ton y
mt thit k m thit k ny s dng th- vin cc cng ca nh phn phi ca mt
h thit b no v t nht n cng i qua b-c kim tra. n lc -a file
ny vo trong mt chip v iu ny -c xem nh- s thc hin trn thit b.
Bin dch bao s gm nhiu ch-ng trnh s -c s dng, cc ch-ng trnh
ny nhp file Netlist ca thit k -c dch v dng n b tr, xp xp cc
cng logic. Cc ch-ng trnh ny s khc nhau vi cc nh phn phi th- vin khc
nhau.
Cc ch-ng trnh tham gia vo qu trnh bin dch bao gm: Ch-ng trnh ti
-u ho, dch cc phn t ca thit b vt l, kim tra cc qui lut thit k vi thit b
c th no (xem n c v-t qua s b m Clock cho php trong thit b ny
khng ?... ).
Trong sut giai on thit k, ng-i thit k s -c hi chn thit b ch,
ng gi, cp v cc chn la khc i vi thit b -c n nh . Thng th-ng
qu trnh bin dch kt thc vi mt bo co kt qu bao hm ton b cc ch-ng
trnh -c thc hin. Thm vo cc cnh bo li, dng bn k ca thit b v
vic s sng cc -ng vo ra. Chnh iu ny gip ng-i thit k la chn -c

40

thit b ch tt nht.
- Lp t trn thit b: i vi h CPLD th b-c ny -c gi l lp t, c
ngha l -a thit k vo trong thit b ch (iu chnh cho ph hp vi ngun ti
nguyn ca thit b ch). Trong hnh v 1.26 trn, c mt phn ca thit k -c
gi l lp t vo trong CPLD. Cc CPLD c cu trc c nh , v th nn phn mm
cn ly cc cng v cc -ng ni ph hp vi mch thit k. Cng vic ny th-ng
-c phn mm x l rt nhanh bng phn mm. Mt vn khc na c kh nng
xy ra l vic gn v tr ca cc chn vo ra (Th-ng -c gi l s kho chn I/O)
c th b thc hin tr-c. Th-ng th iu ny hay xy ra khi dng li mt thit
k m thit k ny -c tha h-ng, hoc thit k ny -c np vo board mch
in ca thit k no .
Cc cu trc m n cung cp vic kho cc chn vo ra (chng hn nh- XC
9500, CoolRunner CPLDs ) c s thun tin rt ln . Chng cho php gi li cc
chn vo ra gc, bt k thit k thay i hay c s tn dng no , hoc c s thc
hin theo yu cu no . S kho chn rt quan trng khi s dng ISP (In system
Programmable Device - Cho php lp trnh trong h thng), nu mch in v v
ni vi cc chn vo ra, sau thit k b thay i v np li ch-ng trnh, bn hy
yn tm l cc chn ny vn -c gi nguyn .
- Sp t v nh tuyn :
Vi h FPGA, ch-ng trnh xp t v nh tuyn -c chy sau khi bin dch.
Xp t chnh l qu trnh chn la cc module c th hoc cc khi logic trong
FPGA ni m cc cng ca thit k s nm trong .
nh tuyn n mang ng ngha ca n, chnh l vic ni vt l cc -ng
ni gia cc khi logic. Hu ht cc nh phn phi cung cp cng c t ng sp t
v nh tuyn, v th bn khng phi lo lng v cc chi tit kh hiu phc tp ca
cu trc thit b.
Mt s nh phn phi -a ra cng c cho php bn sp t v nh tuyn bng
tay nhng phn then cht nht ca thit k, c th thu -c s thc hin tt hn
cng c t ng.
B to s mt bng b tr cc phn t logic l mt kiu ca cng c s dng

41

bng tay.
Ch-ng trnh sp t v nh tuyn cn nhiu thi gian nht hon thin
thnh cng mt thit k, bi v n l cng vic rt phc tp xc nh ni t
nhng thit k ln v m bo rng chng -c ni vi nhau chnh xc v p ng
-c s thc hin nh- mong mun.
Tuy nhin cc ch-ng trnh ny ch c th lm vic tt nu cu trc ca thit b
ch c s nh tuyn ph hp vi thit k.
Bn khng th sa m ch-ng trnh b mt cu trc -c hnh thnh sai
lch, c bit nu cu trc ca thit b khng nh tuyn cc -ng ni. Nu
nh- gp phi vn ny, th gii php chung nht l chn mt thit b ch ln hn.
Mt b phn tch thi gian tnh thng th-ng l mt phn ca phn mm thc
thi ca nh phn phi. N cung cp thng tin v thi gian ca cc -ng dn trong
thit k, thng tin ny rt chnh xc v c th hin th theo nhiu cch khc nhau.
Chng hn nh- hin th tt c cc -ng ni v xp loi chng t gi chm
di nht n gi chm ngn nht.
Hn na khi ny bn c th s dng thng tin xp t -c chi tit ho sau
khi nh dng v quay tr v b m phng -c chn vi cc thng tin chi tit v
thi gian.
Qa trnh ny -c gi l ch thch ng-c (hay thng tin phn hi), n c s
thun li trong vic cung cp chnh xc thi gian ca s thc hin cc s khng v
cc s mt trong thit k cu bn. Trong c hai tr-ng hp, thi gian phn nh s
gi chm ca cc khi logic cng nh- cc -ng ni.
B-c thc hin cui cui cng l ti hay np cu hnh xung thit b.
- Ti hay np ch-ng trnh:
Ti ch-ng trnh nhn chung -c xem nh- l ti thng tin xung thit b d
bin i nh- SRAM FPGA . ng vi tn gi ca n, bn ti thng tin cu hnh
thit b vo trong b nh ca thit b.
Lung cc bit m n -c truyn i c cha tt c cc thng tin nh ngha
logic v cc -ng ni cu thit k, thng tin ny s l khc nhau i vi thit k
khc nhau. Xem hnh 1.27.

42

Hnh 1.27. Gii thch phn bit np ch-ng trnh v ti cu hnh


Do v cc thit b SRAM mt i cu hnh khi mt ngun, v th lung cc bit
cn phi ct u gii quyt vn ny.
Mt ni th-ng -c dng ct thng tin cu hnh thit b, l PROM ni
tip. y l thnh phn kt hp vi phn cng m n ni t my tnh ti bo mch
m bo mch ny c cha thit b ch.
Np ch-ng trnh -c dng cho lp ch-ng trnh cho tt c cc thit b
logic c th lp trnh -c khng b thay i, chng hn nh- PROM ni tip.
Vic np ch-ng trnh thc hin chc nng ging nh- ti ch-ng trnh, ring
cc thng tin v cu hnh vn cn sau khi mt in.
Vi cc thit b m c kiu kt ni ng-c vi mt cu tr (kt ni mt ln), th
vic np ch-ng trnh ch c th thc hin -c mt ln trn thit b hay c th gi
theo thut ng khc : "Cho php lp trnh mt ln ".
Vic np ch-ng trnh i vi cc CPLD ca Xilinx c th thc hin trn h
thng thng qua cp JTAG hoc cng vi b np ch-ng trnh truyn thng.
Qut bin JTAG -c hiu thng th-ng nh- mt chun IEEE/ANSI 1149.11190, n l mt dy cc qui lut thit k m cc qui lut ny d kim tra, d np
ch-ng trnh cho thit b v g ri trn chip, trn bo mch mc h thng.
Np ch-ng trnh trn h thng c rt nhiu thun li, v vy thit b c th
-c hn trc tip trn bo mch in, v nu c thay i thit k th thit b khng cn
phi tho khi mch m vn lp trnh li trn h thng mt cch n gin .

43

Ch-ng II
Gii php v t chc phn mm m bo
2.1. Gii thiu s l-c
Thit k logic lp trnh -c -a ra k nguyn m trong mt ca thit
b n v hng triu cng, s thc hin ca h thng tc hng trm MHz.
Xilinx -a ra cc cng c thit k in t hon ton y m n cho php
thc hin cc thit k trong h PLD ca Xilinx. Cc gii php pht trin kt hp vi
cc k thut mnh to ra mt s linh hot, mm do, giao tip ho d s dng
gip bn c -c cc thit k tt nht c th trong mt d n ln - m khng cn
quan tm n kinh nghim ca bn. Cng c phn mm thit k ISE (Integrated
Sofware Enviroment- Mi tr-ng phn mm tch hp) l cng c thit k tng th,
bao hm cc cng c phn mm thit k chuyn dng khc nhau v y cng l
cng c -c s dng nhiu nht trong thit k cc PLD (Programmable Logic
Device) ca Xilinx.

2.2. Cc cng c thit k


Phn mm ISE ci thin ng k thi gian -a mt sn phm ra th tr-ng bi
vic tng tc qu trnh nhp thit k. Cc b-c thc hin mt thit k -c cung cp
trong phn mm ISE, ngoi ra chng cn -c h tr thm bi cc phn mm b
xung khc. tin cho vic nm bt v phn loi cc loi phn mm chng ta s i
m t phn ny theo th t thc hin ca mt thit k .
2.2.1 Nhp thit k
Cc cng c h tr cc ph-ng php ph bin nht ngy nay vic to ra mt
thit k bao gm : Nhp thit k bng s , bng ngn ng HDL, bng vic tch
hp cc li IP, h tr mnh m vic ti s dng cc li IP. S a dng ca vic nhp
mt thit k -a ra mt mi tr-ng thit k d s dng nht v cho php vi tt
c cc thit k logic. N bao gm cc cng c thit k sau: Schematic Editor, HDL
Editor, State Diagram Editor, Core Generator

System, PACE (Pinout and Area

Constraint Editor), Architecture Wizard (DCM-Digital Clock Management, MGTMulti_Gigabit Transceiver), Xilinx System Generator for DSP.

44

2.2.2. Tng hp thit k . ISE ci tin b my tng hp HDL -a ra kt


qu ti -u ho cho vic tng hp trn cc PLD, y l mt trong cc b-c c bn
nht trong ph-ng php thit k. N ly cc nh ngha ca thit k trn HDL v to
ra s m t vt l hoc logic cho thit b silicon ch.
B my tng hp tin tin -a ra mt kt qu ti -u ho cao vi mt thi gian
iu chnh v thi gian dch nhanh. ph hp vi yu cu ny, b my tng hp
cn phi -c tch hp cht ch vi cng c thc hin vt l, hn na s b qua vic
thm d gia thng tin thit k vt l v m thit k HDL ci thin -c thi gian
bin i thit k.
Phn mm ISE -a ra mt s tch hp gn lin vi cc b my tng hp ch
o nh- : Mentor Graphics Leonardo Spectrum, Exempla, Synopsys v Synplicity
Synplify/Pro, ABEL, XST ( Xilinx Synthesis Technology ) .
2.2.3. Thc thi v np cu hnh
Vic thc hin thit k logic lp trnh -c l gn cc chc nng logic -c to
trong sut qu trnh nhp thit k v tng hp chng vo trong ti nguyn vt l c
th. Thut ng " Xp t v nh tuyn " -c s dng m t qu trnh thc hin
cho FPGA, cn " Lp t " -c s dng cho CPLD. Thc thi chnh l np cu hnh
cho thit b, m s thc thi ny chnh l to v ti mt lung cc bit -c to ra t
thng tin xp t v nh tuyn vo trong cc thit b ch PLD. thc hin phn
ny c cc cng c h tr sau: FloorPlanner, Constraints Editor, Timing Driven
Place & Route, Modular Design, Timing Improvent Wizard .
2.2.4. Tch hp mc Board. Phn mm ISE -a ra s h tr mnh m gip
ng-i thit k m bo thit k logic lp trnh lm vic trong mt h thng. Xilinx
d bo tr-c -c cc kt qu chnh, chng hn nh- vic xp t mt board mch
phc tp, tch hp cc tn hiu, giao tip Bus tc cao, rng di thng vo ra,
cc nhiu in t cho ng-i thit k mc h thng. c th d dng thc hin cc
b-c ny Xilinx cung cp cc k thut ch o cho FPGA:
- XCITE ( Tr khng iu khin -c s ).
- DCM B qun l ng h s cho thi gian ca h thng .
- EMI B qun l nhiu in t tr-ng .

45

- Thng tin ng gi cho s tch hp mc Board .


- Kim tra mc Board ISE.
N bao gm cc phn mm sau:
- IBIS Models.
- STAMP Models.
- LMG Models.
- ChipScope ILA
2.2.5. Cc k thut kim tra
Phn mm ISE -a ra vic kim tra m n h tr trong tt c cc giai on ca
thit k, t khi vo thit k cho n khi tch hp chng trn board.
* Kim tra tnh : Cng c kim tra tnh cho php ng-i thit k kim tra thit
k ngoi yu cu. Vic kim tra c th thc hin mi kha cnh hoc kim tra theo
s chn la, cho php tm li trong qu trnh thc thi. Cng c kim tra tnh cng
-a ra cc kh nng g ri v phn tch mnh m. Cc cng c kim tra tnh :
- Constraint Editor
- Delay Calculator
- Trace
- Timing Analyzer
- Prime Time
- XPower
- Formality
- Conformal LEC
- DRC
- Chip Viewer
* Kim tra ng : Bao gm cc cng c sau
- HDL Bencher
- ModelSim XE
- State Bench
- HDL Simulation Libraries

46

* Kim tra mc Board :


Vic s dng cng c kim tra ti mc board nhm m bo rng thit k
thc hin ng theo d nh v chng -c tch hp vi phn cn li ca h thng.
Cc cng c ny bao gm :
- IBIS Models
- Tau
- BLAST
- Stamp Models
- Impact
2.2.6 Cng c phn mm nhng cho Virtex-II Pro FPGAs
Cc tu chn vi thit k nng cao ca phn mm ISE chnh l nhm to ra cc
thit k vi mt cao, d dng -c gn kt cc phn t logic nh nht.
Thut ng " Cng c phn mm nhng " thng th-ng -c ng dng cho cc
cng c -c yu cu dng to, son tho, dch, ti v g ri cc m ngn ng
bc cao nh- C, C++ , -c dng thc hin trong mt b my x l no . C th
ly mc ch cho cc modul thit k vi Virtex-II Pro Platform FPGA, c th hoc
l mt chip phn cng silicon hoc l cc ng dng phn mm, bn c th chy b
x l mt li cng PowerPC -c nhng trong .
Khi ni n s pht trin phn mm nhng, Xilinx -a ra s h tr rt nhiu
mc. Xilinx h tr cc b vi x l nhng trong Virtex-II Pro Platform FPGA vi cc
phin bn ca Xilinx, cc cng c ny -c dng lm mu cho cc ng dng thc
hin cao v gi thnh thp.
Vi cc k s- phn cng, h mun pht trin cc modul thit k vo trong
phn mm v chy trong li PowerPC, th Virtex-II Pro l mt gii php rt n
gin v chi ph thp ca Xilinx.
Vi cc k s- phn mm, h mun c mi tr-ng vi cc c tnh phong ph
c th pht trin cc ng dng phc tp hn, Xilinx cung cp kh nng truy cp
cc cng c tt nht dng cho mc ch chuyn dng ho t cc nh dn u cng
nghip nhng. Bn c th -a cc thit k m bn -c tha h-ng (Tn dng li)
mt cch d dng vo trong Virtex-II Pro Platform FPGA.

47

2.3. Li s hu tr tu ca Xilinx ( IP_Core )


Cc Website ca Xilinx c mt c s d liu tng hp ca tt c cc li logic
(LogicCore) m cc li ny -c kim tra v chy th . Bn c th tham kho ti
trang Web ca trung tm IP ( Intellectual Property ) www.Xilinx.com/ipcenter.
Cng c CORE Generator t Xilinx -a ra cc li logic -c ti -u ho cao,
t-ng thch vi cc ph-ng php thit k tiu chun cho Xilinx FPGA. Cng c ny
rt d s dng to ra cc li linh hot, thc hin cao vi mt mc cho php
nh tr-c.

2.4. Gii thiu v lp trnh ng dng trn phn


mm WebPack ISE 6.2
2.4.1. Tng quan ISE v cc cng c tng hp
Phn mm thit k ISE c kh nng -a thit k vo trong cc PLD
(Programmable Logic Device) -c chn la cng nh- cc b-c thc hin thit k
-a dng. Nhn chung cc b-c tin hnh thit k cho FPGA v CPLD l ging nhau,
ng-i thit k c th nhp vo mt thit k d-i dng mt s hoc dng HDL
(VHDL, Verilog, hoc ABEL).
Mt thit k c th bao gm c d-i dng s v HDL. Phn mm ISE -c
kt hp vi b m phng MXE -a ra kh nng m phng v kim tra chc nng
ca VHDL. B m phng MXE -a ra mt biu kim tra, n cho php ng-i
dng -a ra cc mu th test cc chc nng trong qu trnh tng hp (-c gi l
TestBencher). Qu trnh tng hp mt thit k -c thc hin theo lung cc b-c
nh- hnh 2.1 d-i y.

48

Hnh 2.1. Lung thit k c bn ca CPLD v FPGA


Biu trn ch ra s ging nhau v khc nhau ca cc b-c thc hin thit k
mt FPGA v mt CPLD. Khi mt thit k hon thnh, kt qu c th -c m
phng v ti xung thit b. c mt cch nhn tng quan v thc hin tip cn cc
b-c thit k mt cch nhanh nht, trong mc ny ch -a ra mt khi qut s l-c
c bn nht v cc mc tip theo xin -c trnh by mt v d c th v cc b-c
tin hnh thit k trn FPGA v CPLD.
Vi FPGA : Qu trnh thc hin bao gm bn b-c c bn sau:
1. Translate - Dch thit k v cho chy kim tra theo qui lut thit k .
2. Map - Tnh ton v cp pht ti nguyn trong thit b ch.
3. Place and Route - Xp t cc khi logic, nh cu hnh ph hp vi cc v
tr logic v s dng cc ti nguyn nh tuyn .
4. Generate Programming File - to ra dng cc bit ch-ng trnh (To file.Bit).
Vi CPLD: Qu trnh thc hin bao gm ba b-c c bn sau :
1. Translate - Dch thit k v cho chy kim tra theo qui lut thit k

49

2. Fit - Cp pht ti nguyn v kt ni .


3. Generate Programming File : To file JED cho ch-ng trnh .
Cc cng c phn mm tng hp thit k ca ISE :
* Vic nhp thit k c vi cch khc nhau v cng c tng hp thit k
chnh l tng hp m ngun -c vit d-i dng VHDL, Verilog, ABEL sang dng
file netlist. Cc thit k d-i dng s -c chuyn i sang m ngun VHDL
hoc Verilog m cc m ngun ny -c tng hp bng XST theo dng thng
th-ng.
* StateCAD l mt cng c phn mm cho php nhp thit k d-i dng
ho theo nhm cc trng thi, nhm cc trng thi ny s -c dch ra HDL v -c
nh vo trong phn mm ISE.
* B m phng MXE c th -c s dng cho vic m phng c v thi gian
v chc nng .
* HDL Bencher : To ra cc biu kim tra cho php m phng thit k
dng test.
* Implemention : Cng c thc thi ny c mt vi b-c v s -c gii thiu
k hn trong cc phn sau thng qua v d c th .
* iMPACT Programmer : Modul ny cho php np ch-ng trnh vo thit b
ch ( Lc ny cp JTAG cn phi -c ni vi cng song song ca my tnh. )
* CHIP VIEWER : Cng c ny -c s dng kim tra thit k sau khi
thc thi cu hnh, ch ra vic kt ni gia cc chn ca thit b .
* Xpower : Cho php tnh ton kh nng tiu th ngun ca thit k khi chy
trong thit b ch .

2.4.2 . Thit k v thc hin thit k trn CPLD v FPGA


tip cn nhanh hn cc cng c phn mm tng hp thit k, y chng
ta s tin hnh thit k trn mt v d c th. Trong mc ny xin gii thiu mt v
d chnh :
"Thit k b iu khin n tn hiu giao thng thc hin trn CoolRunner-II
CPLD v Spartan-3 FPGA"
2.4.2.1 Thit k trn VHDL v StateCAD

50

1. Nhp thit k: Chn Start-> Program-> Xilinx ISE 6-> Project Navigator.
Chn New Project trong menu File, t project l Traffic v t trong th- mc
Traffic.

Hnh 2.2. Ca s nhp tn Project


Nhn nt Next ca s sau s xut hin, chn thit b v cc property nh- hnh
d-i . y ta chn CoolRunner II CPLD - xc2c256.

Hnh 2.3 Ca s nhp New Project


Nhp next v chn New Source nh- ca s sau. Chn VHDL modul v t tn
file l Counter .

51

Hnh 2.4. Ca s chn m son tho ch-ng trnh


Nhp chut vo nt Next v t cc cng vo ra nh- sau:
- clock : in
- reset : in
- count : inout [3 down to 0] -- B m 4 bit.
Sau nhp nt Next , Next , Finish .

Hnh 2.5. Ca s nhp u vo ra


Ca s Project Navigator s hin ra nh- sau:

52

Hnh 2.6. Ca s son tho m ch-ng trnh


Nhp p chut vo Counter.vhd trong ca s Sources in Project bn s
-c ch-ng trnh to ra mt khung gm cc t kho trong ca s Editor. Bn c th
s dng cc mu ch-ng trnh c sn trong th- vin ca Xilinx. Mu ny -c gi
l " Language Template". Mu ny l cng c hu dng, n tr gip cho bn trong
khi vit code ch-ng trnh. N bao gm cc modul chc nng thng dng nh- b
m , b chn knh, b gii m, thanh ghi dch ... m cc modul mu bn kch
chut vo menu Edit chn Language Template, ca s sau xut hin.

53

Hnh 2.7. Ca s ly cc mu modul chun


Chn VHDL v kch chut vo du cng ca dng Synthesis Template, chn
modul counter, ko v th chng vo gia Begin v End ca khung ch-ng trnh,
sau thot Language Template. Vo Edit chn Replate v thay clk bng clock .
Xo phn sau y v ch li on code nh- hnh 3.8.
if CE='1' then
if LOAD='1' then
COUNT <= DIN;
else
if DIR='1' then
COUNT <= COUNT + 1;
else
COUNT <= COUNT - 1;
end if;
end if;
end if;

54

Hnh 2.8. Ca s m ch-ng trnh b Counter


Nh- vy trong ch-ng trnh s gm hai -ng vo l clock v reset, mt bus
u ra count ra 4 bit (3 downto 0). Chc nng ca b m ny l m tin khi c
mi xung Clock u vo d-ng. Tn hiu reset khng ng b v n -c xem xt
tr-c khi xung clock hot ng. Nhn nt save ghi li Project.
2. M phng chc nng ca b m:
T Project Menu chn New Source, chn Test Bench Waveform v t tn
cho file ny l counter_tb nh- hnh d-i.

Hnh 2.9 Ca s chn m ngun son tho

55

Nhp nt Next, ca s khi to timer hin ra v chn nh- ca s d-i y,


nhn ok, biu kch thch hin ra chun b cho m phng chc nng ca b
m.

Hnh 2.10. Ca s khi to Clock

Hnh 2.11. Ca s khi to kch thch u vo ra cho TestBench


Thit lp cc kch thch vo ra nh- sau:
- t -ng Reset chu k th nht ln1

56

- t -ng Reset chu k th hai xung 0


- Kch chut vo mu vng ca COUNT[3:0] ti chu k th nht v kch
vo nt Pattern ca s Pattern Wizard hin ra nh- sau :

Hnh 2.12. Ca s thit lp b m


Nhn nt OK , lc ny biu sng kch thch s hin ra :

Hnh 2.13. Ca s khi to kch thch vo ra cho TestBench


Kch vo Save ghi li biu sng. Nu mun thay i bn c th kch p
chut vo file counter_tb.tbw khi biu sng s hin ra cho bn sa i. By

57

gi bn cho chy th biu sng ca b m . Chn file counter_tb.tbw trong ca


s Sources in Project ca mi tr-ng ISE, kch chut phi vo Simulate
Behavioral VHDL Model chn Properties, trong tr-ng Simulation Run Time g
"-all" bm OK. Trong ca s Processes for Source kch p chut vo dng
Simulate Behavioral VHDL Model, dng sng ca b m s -c hin ra nhsau:

Hnh 2.14. Biu sng u ra ca b m


Kch vo nt Save ghi li dng sng d-i dng file ".do" kch vo nt Close
thot ch-ng trnh.
3. B son tho my trng thi ( StateCAD )
Vi thit k b iu khin n tn hiu giao thng, b m ng vai tr nhmt timer xc nh thi gian chuyn trng thi . My trng thi bao gm bn
trng thi nh- sau:
- Trng thi mt : n sng (Red Light)
- Trng thi hai : n v n vng sng ( Red and Amber light )
- Trng thi ba : n xanh sng ( Green Light )
- Trng thi th t- : n vng sng ( Amber Light )
gi b son tho nhm trng thi, chn New Source t Project Menu. Chn

58

Modul State Diagram v t tn file l stat_mac.dia, kch nt Next sau nhn


finish. Ca s New Source hin ra nh- sau:

Hnh 2.15. Ca s chn m ngun son tho


Mi tr-ng son tho nhm trng thi hin ra nh- hnh v:

Hnh 2.16. Ca s son tho my trng thi


Kch chut vo biu t-ng d-i c nhn Draw State Machines, sau ca s
State Machine Wizard hin ra nh- hnh 3.17.

59

Hnh 2.17. Ca s to nhm cc trng thi my


Chn s trng thi l 4, nhp nt Next sau chn ch reset l
synchronous, nhp nt Next vo ca s chuyn trng thi, y trong hp
chuyn trng thi ta g TIMER .

Hnh 2.18. Ca s thit lp cc kch thch chuyn trng thi


Kch chut vo nt Finish v v cc nhm trng thi trong trang son tho. Khi
nhn nt finish mt khung vung xut hin cng vi mi tn ca con chut v bn
ch vic v mt khung trn nn son tho. Lc ny bn trng thi xut hin v by
gi ta i son cc trng thi . Kch p chut vo Reset State 0 mu vng v thay
i tn ca trng thi ny thnh "RED", sau nhn vo nt "output Wizard".

60

Hnh 2.19 Ca s son tho trng thi n


Thit k s bao gm ba u ra -c t tn l RD, AMB, GRN. Trong tr-ng
DOUT ca hp thoi d-i y ta g vo RD khai bo u ra, t u ra ny vi
hng l "1" v chn l u ra ca thanh ghi .

Kch chut vo nt OK quay v hp thoi Edit State, lm t-ng t vi ba


trng thi cn li .
- i tn State1 thnh "REDAMB" v s dng "Output Wizard" thit lp
RD =1 v mt u ra mi vi tn l AMB =1 v u ra l mt thanh ghi.
- i tn State 2 thnh "GREEN" v s dng "Output Wizard" thit lp
mt u ra mi vi tn l GRN =1 v u ra cng chn l thanh ghi.
- i tn State 3 thnh "AMBER" v s dng "Output Wizard" thit lp
mt u ra AMBER =1, u ra cng chn l thanh ghi.. Khi ny nhm trng thi
phi c nh- hnh 3.20:

61

Hnh 2.20. Cc nhm trng thi trong b son tho StateMachine


Kch p chut vo -ng chuyn trng thi gia trng thi "RED" v
"REDAMB", lc ny bn phi thit lp b Timer hin ra nh- ca s hnh 3.21, sau
nhn OK .
Lm t-ng t nh- trn vi ba -ng cn li:
- -ng gia REDAMB v GREEN , TIMER = "0100"
- -ng gia GREEN v AMBER , TIMER = "0011"
- -ng gia AMBER v RED , TIMER = "0000"

Hnh 2.21. To iu kin kch thch u ra


Cui cng bn phi khai bo mt vector Timer bi vic kch vo nt bn tri

62

ca ca s sn tho nhm trng thi c biu t-ng

.Ko v th vo ca s

son tho, kch p vo chng v i tn vector thnh TIMER nh- ca s sau.

Hnh 2.22. Ca s to vc t chuyn trng thi


Kch nt OK , khi ny ca s son tho ca bn phi c hnh 3.23.

Hnh 2.23. Cc nhm trng thi sau khi son tho xong
Kch chut vo nt Generate HDL c biu t-ng

. Hp thoi thng bo

kt qu s xut hin, ch dng ch "Compiled Perfectly" ng hp thoi ny, ghi


v ng ch-ng trnh son tho nhm trng thi li. Nhm cc trng thi ny by
gi -c nh vo ch-ng trnh ISE ca chng ta. Quay li ISE ta thy ch-ng
trnh n giao thng bao gm hai modul chnh l Counter.vhd v Stat_mac.vhd .

63

4. Thit k VHDL mc cao: Nh- vy trong ch-ng trnh ca chng ta gm hai


modul chnh, by gi chng ta phi th hin hai modul ny trong mt lp trn cng
m c cha hai modul ny, hay cn -c gi l th hin chng trong lp chnh-lp
Top. T Project Menu chn New Source v t tn cho chng l top.vhd

Trong ca s Source chn file counter.vhd, trong ca s Process nhp p


chut vo dng View VHDL Instantiation Template trong phn Design Entry
Utilities. Copy phn sau v dn vo phn khai bo component v phn
Instantiation ca file top.vhd.
COMPONENT counter
PORT (

clock : IN std_logic;

reset : IN std_logic;
count : INOUT std_logic_vector(3 downto 0));
END COMPONENT;

64

Inst_counter: counter PORT MAP (clock => ,


reset => ,
count => );

Tip tc, thc hin t-ng t trong ca s Sources in Project chn file
stat_mac.vhd, trong ca s Source nhy p vo View VHDL Instantiation
Template. Copy phn khai bo Component v phn Instantiation dn vo file
top.vhd. Khai bo mt Signal timer : std_logic_vector (3 downto 0) d-i khai bo
cu trc . Sau khi thc hin cc b-c ta s c ch-ng trnh ca lp top nh- sau.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity top is
Port ( clock : in std_logic;
reset : in std_logic;
red_light : out std_logic;
amber_light : out std_logic;
green_light : out std_logic);
end top;
architecture Behavioral of top is
signal timer : std_logic_vector (3 downto 0);
COMPONENT counter
PORT (

clock : IN std_logic;

reset : IN std_logic;
count : INOUT std_logic_vector(3 downto 0));
END COMPONENT;
COMPONENT stat_mac
PORT (TIMER : IN std_logic_vector(3 downto 0);
CLK : IN std_logic;
RESET : IN std_logic;
AMB : OUT std_logic;

65

GRN : OUT std_logic;


RD : OUT std_logic);
END COMPONENT;
begin
Inst_counter: counter PORT MAP (
clock => clock,
reset => reset,
count => timer);
Inst_stat_mac: stat_mac PORT MAP (
TIMER => timer,
CLK => clock,
RESET => reset,
AMB => amber_light,
GRN => green_light,
RD => red_light);
end Behavioral;

Sau khi c -c ch-ng trnh nh- trn bn nhp nt Save, lc ny trong ca s


Sources in Project s t ng xp xp theo th t. Lp top.vhd l lp trn cng c
cha hai modul con.

Hnh 2.24. Ca s Source ca Project Traffic


By gi ta c th i m phng ton b thit k, chn file top.vhd v trong
menu Project chn New Source, t file m phng l top_tb.tbw. Lc ny cn phi
cho cc kch thch u vo ca thit k. Vi -ng tn hiu vo Reset, trong chu k
mt t l High, t chu k th hai l low . Ko -ng sc ng mu xanh n chu

66

k th 64, hoc bm chut phi vo -ng sc xanh v chn Set End of


Testbench. Ghi li file testbench ny vi tn file l top_tb.tbw, ng ca s son
tho biu kim tra li. Trong ca s Sources in Project chn file top_tb.tbw.
Trong ca s Processes for Source nhy p vo dng Simulate Behavioral
VHDL Model lc ny ta thu -c gin sng ca thit k nh- hnh 3.25.

Hnh 2.25. Dng sng u ra ca Project Traffic


n y chng ta c th b-c sang phn thc thi trn thit b , xong y xin
gii thiu mt ph-ng php khc c th thc hin -c thit k ny.
3.2.2 Thit k trn S ( Schematic Design )
i khi cho d hnh dung -c thit k, ng-i ta dng ph-ng php thit k
trn s . y chng ta xy dng thit k theo s mc top, kt ni cc khi
trong chng v s dng cng c ECS Schematic.
Gi s ta xy dng -c hai modul l counter.vhd v stat_mac.vhd nhhnh 3.26.
Trong mi tr-ng ISE chn menu Project, chn New Source v t tn cho
thit k lp nh l Top_SCH.

67

Hnh 2.26. To Project Traffic bi Schematic


Nhp nt NEXT , lc ny b son tho ECS xut hin nh- sau:

Hnh 2.27. Ca s son tho ECS


Quay tr li vi mi tr-ng ISE Project Navigator trong ca s Source chn
file counter.vhd, trong ca s Process, kch p vo dng Creat Schematic
Symbol. Thc hin t-ng t vi file stat_mac.vhd, quay tr li vi mi tr-ng ECS
ta s thy hai biu t-ng counter v stat_mac trong th- vin symbol.

68

Trong ca s th- vin nhy p vo counter v t tr chut vo trong mi


tr-ng son tho, lm t-ng t vi stat_mac ta s thy hai symbol th hin trong file
top_sch nh- sau.

Chn cng c Add Wire bng vic kch vo biu t-ng

, sau ni hai

-ng clock v reset ca hai khi li, -ng count ni vi -ng timer. Sau chn
Add Net Name c biu t-ng ch abc

, lc ny nhp Net xut hin, ta g

clock sau n Enter, t vo net clock, lm t-ng t vi cc net cn li .

Hnh 2.28. Project Traffic trong ECS


Tip theo phi i t cc im du vo ra. T menu thanh cng c chn Add
I/O Marker, lc ny trong Tab Option s hin Add an input, Add an output. Nu
Marker l u vo th phi chn y l Add an input sau t vo -ng clock
v reset. Ghi li v thot khi b son tho ECS. Quay tr li Project Navigator ta
thy top_sch -c xp xp ln trn cng. By gi bn c th nhn thy s th
hin ca top_sch d-i dng VHDL bng cch chn file top_sch trong ca s
Source sau ch vic nhy p vo dng View VHDL Functional Model trong
th- mc Design Entry Utilities ca ca s Processes. Tip tc i m phng
top_sch, lm t-ng t nh- phn tr-c ta cng thu -c biu xung nh- hnh 3.25 .

2.4.3. Thc thi trn CPLD


2.4.3.1. Tng hp v thc thi trn CPLD
Sau khi m phng thnh cng thit k, qu trnh tng hp s chuyn cc

69

thit k dng text sang file nestlist c ui ".NGC". File ny bn khng th c


-c, v y l file m t mch thc t v n -c thc thi mc thp. Thi im
thc thi s s dng file Nestlist v file rng buc ng-i dng c ui ".ucf". B-c
u tin chng ta cn thc hin l dch thit k. B-c ny s kim tra thit k v
m bo rng Nestlist ph hp vi cu trc -c chn, vic bin dch cng kim tra
file UCF xem c ch no khng ph hp vi cu trc ca CPLD. Sau vic ghp
ni vo thit b ch ( Fitter) s to ra file Jedec v np ch-ng trnh vo thit b ch
hoc board mch thng qua cp song song JTAG.Trong ca s Source chn file
top.vhd hoc chn top_sch, cn trong ca s Processes nhy p vo Check
Syntax. Qu trnh tng hp s t n nhn ra hai modul c th t thp hn l file
Counter.vhd v stat_mac.vhd .Sau khi thc hin Check Syntax xong phi m bo
khng c li no xut hin v phi c ch V mu xanh bn tri dng SynthesizeXST trong th- mc ca Implement Design. Trong mc Synthesize-XST bm
chut phi v chn Properties, kim tra mc Add I/O Buffer trong tab Xilinx
Specific Options c -c chn hay khng, sau bm OK. to file ".UCF", cn
phi c s rng buc v chn v v thi gian ca thit b ch. Gi s clock dng cho
thit b ch dng trong v d ca chng ta l 100 MHz v cc chn ra -c xc nh
tr-c trong CoolRunner-II. Trong ca s Source chn file top.vhd , trong project
chn New Source v t tn file ny l top_cosntraints. Chn file ny trong ca s
Source v trong ca s Processes chn Assign Package Pins.

Hnh 2.29 Chn v to file .UCF


Nhp p dng Assign Package Pins, lc ny ca s gn chn PACE s hin
ra nh- sau. Ghi li cng vic thc hin trn PACE v EXIT.

70

Hnh 2.30 Thit lp cc chn vo ra trong PACE


By gi ta c th xem li vic gn chn d-i dng file text, trong ca s Source
chn file top_cosntraints.ucf, trong ca s Processes kch p chut vo dng Edit
Constraints s thy ca s file ny d-i dng text.

Hnh 2.31 To file .UCF bng text


Tuy nhin cn phi b xung thm -ng tn hiu vo ti nguyn ton cc. V
vy b xung mt b m clock BUFG . G vo ca s text trn dng khai bo sau:
NET "clock" BUFG=CLK;
Ghi li v thot khi ca s son tho ny. B-c tip theo l gn s rng buc
v thi gian. Chn file UCF trong ca s Source, kch p vo dng Create Timing
Constraint trong ca s Processes . Ca s son tho gn s hin ra nh- hnh 3.32.

71

Hnh 2.32 Ca s gn rng buc thi gian v gn chn thit b


Nh- chng ta thy -ng clock -c b son tho gn nhn ra trong tr-ng
Clock Net Name, bm chut phi vo ch clock trong tr-ng ny v chn Period,
ca s Clock Period xut hin. Thit lp gi tr thi gian l 10nS , thi gian cao l
50% , thi gian thp l 50%.
Vic gn khong thi gian -c ghi vo file UCF m bn c th nhn thy
cui bn k trong ca s gn. Kch chut vo PORT tab ca b son tho gn, bn
s thy cc chn -c gn trong file UCF b-c thc hin tr-c -c nhp vo
trong ca s son tho. Dng phm Ctr chn cc u ra, sau g vo hp
Group Name ch lights.
Sau kch vo nt Create Group, trong hp Select Group chn lights v
kch vo nt Clock to Pad. Hp thoi s hin ra v thit lp thi gian theo yu cu
l 15nS, kch nt OK. Khi ny vic gn thi gian -c gn vo trong file UCF.
Kch chut vo nt Save v thot khi b son tho gn. Quay li vi mi
tr-ng ISE, nhn trong ca s Processes, b-c tip theo l phi cho ch-ng trnh
hon thnh vic thc thi thit k, c ngha l phi m bo c ch V mu xanh bn
tri dng Implement Design. Bm chut phi vo dng ny v chn Properties,
chn mc Fitting. v d ny chng ta chn Output Voltage Standard l
LVCMOS18 (Tc chun vo ra1,8V), nhn OK. Nhy p chut vo dng
Implement Design, lc ny ton b thit k ca chng ta s -c thc thi trn thit

72

b ch m khng c li.

Hnh 2.33. Cc thng bo hon thnh vic bin dch trong ca s Process
Khi ny b phn tch thi gian cng -c t ng thc hin v ch-ng trnh
-a ra cc thng bo ca Fitter v Timing. Lc ny bn c th xem cc thng bo v
li, v logic, u vo, u ra, danh sch cc chn...bng vic kch vo cc dng
thng bo bn tri trong ct Fitter Report.

Hnh 2.34. Cc thng bo sau bin dch ca CPLD


2.4.3.2. Np ch-ng trnh cho CPLD
Dng cp Parallel - JTAG v b np ch-ng trnh iMPACT ti cu hnh
xung thit b. Ch Jc ngun ca cp phi -c ni. Trong ca s Source chn
file top.vhd, nhy p vo dng Configure Device (iMPACT) trong ca s
Processes, ca s b np iMPACT hin ra v thc hin np ch-ng trnh.

2.4.4 Thc thi trn FPGA.


Sau khi m phng thnh cng thit k, qu trnh tng hp s chuyn i thit

73

k d-i dng VHDL sang file Nestlist c ui '.NGC '. B-c thc thi s ly file ny
v file rng buc ng-i dng to li thit k m n s dng cc ti nguyn cho
php trong FPGA. Sau qu trnh xp xp s phn chia thit k vi cc ti nguyn
cho php trong FPGA, n s dng file .UCF qun l thi gian -c gn v quyt
nh -a ra xem c th -a thm hoc ti to li cc n v logic ph hp vi thi
gian -c yu cu. Cc b-c thc thi trn FPGA gm bn b-c c bn sau y:
- Tng hp thit k
- Lp t
- M phng thi gian
- Np ch-ng trnh
Trong mc ny chng ta s tip tc i thc thi v d b iu khin n tn hiu
giao thng trn Spartan-3 FPGA. Quay li thit k vi CPLD trong ca s Sources
ca Project Navigator nhy p vo dng xc2c256-7tq144-XST VHDL v chn
cc thng s ca FPGA nh- hnh sau.

Thit k nguyn thu cho CPLD by gi tr thnh Project cho FPGA


Spartan-3, cc ch V mu xanh trong ca s Processes bin mt v thay vo l
nhng du hi chm mu vng, hin th thit k cn phi -c tng hp v thc thi
li.
2.4.4.1. Tng hp thit k.
Trong thit k ca chng ta cng c tng hp s nhn ra file top.vhd gm hai
khi c mc thp hn l "counter" v "stat_mac".Trong ca s Processes kch chut
vo du "+" v chn dng Check Syntax, kch p th ch V mu xanh -c hin

74

th, bi n -c kim tra trong phn thc thi ca CPLD.


Kch chut phi vo dng Synthesize v chn Properties vo tab ca HDL
Option chn mc FSM Encoding Algorithm t l one-hot. Trong tab ca Xilinx
Specific Option phi mc Add I/O Buffer -c chn, kch nt OK. Trong ca
s Processes kch p vo dng Synthesize v m bo rng c ch V mu xanh
bn tri -c hin ln. V ta t ch one-hot nn khi tng hp s c thng bo
cc trng thi ( red , amber, redamb, v green ) s -c gn ring thanh ghi mt bit.
Synthesizing Unit <SHELL_STAT_MAC>.
Related source file is D:/Traffic/Traffic/STAT_MAC.vhd.
Found 1-bit register for signal <RD>.
Found 1-bit register for signal <GRN>.
Found 1-bit register for signal <AMB>.
Found 1-bit register for signal <AMBER>.
Found 1-bit register for signal <GREEN>.
Found 1-bit register for signal <RED>.
Found 1-bit register for signal <REDAMB>.

2.4.4.2. File rng buc ng-i dng (.UCF).


c -c s thc hin cui cng trn thit b bn phi -a ra cng c thc
thi thc hin ci g v u. Vi thit k ny gi s -c thc hin vi clock c tn
s l 100 MHz, v cc chn ra -c xc nh trn FPGA. Trong mc ny file
top_constraints.ucf cn phi -c gn cc chn mi, v thit k c dng trong
CPLD. Trong ca s Source chn file ny, cn trong ca s Processes trong User
Constraints kch p vo dng Edit Constraints. Sa i v ghi li, ng ca s
Constraints. Kch p vo dng Assign Package Pins nh- hnh d-i.

75

Ca s PACE s -c khi to, chn cc chn gn cho u vo v ra nh- sau:

Hnh 2.35. Gn chn ng-i dng trong FPGA


Ghi li v thot khi ca s PACE. Kch p vo dng Create Timing
Constraints trong ca s processes, ca s Constraints Editor hin ra, lc ny cc
chn -c gn trong PACE -c nhp vo trong ca s ny. Nhy p vo
Period trong tab ca Port, lc ny ca s nh ngha chu k clock hin ra.

Hnh 2.36. Ca s nh ngha Clock


-a vo chu k l 10nS , kch chut vo nt OK.Trong tab cu Port ta thy
cc -ng vo ra -c nhp, dng phm Ctr chn cc u ra.Trong tr-ng
Group Name nhp vo ch lights, nhn Create Group.Trong hp Select Group
chn lights v nhn Clock to Pad.

76

Trong hp thoi Clock to Pad t Offset =15nS, kch nt OK. Lc ny tr-ng


Clock To Pad -c in t ng vo ca s pha d-i ca Constraints Editor .
Ghi v ng ca s Constraints Editor. Kch p vo Implement Design
trong ca s Processes ca Project Navigator, lc ny cc tch mu xanh hin th
dng Translate, Map, Place and Route . Thit k hon thnh giai on thc thi.

Mi mt giai on thc hin u c mt thng bo. Trong Translate s ch ra


thng bo v li thit k v li rong file UCF, cn trong Map s -a ra thng bo v
s xc nhn ti nguyn -c s dng trong FPGA....
2.4.4.3. Ti cu hnh xung FPGA.
Kch chut phi vo Generate Programming File v kch vo Properties
trong tab Startup Options, phi m bo rng clock khi ng phi -c t l

77

JTAG Clock, nhn OK. Kch p vo Generate Programming File , thao tc ny


s to ra file ".bit" s dng cho ch-ng trnh np iMPACT. M cng c
Generate Programming File kch p vo Configure Device (iMPACT), (Lc
ny phi m bo cp JTAG -c ni vi PC ). Nu nh- cc thng s trong thit
k khng -c t ng -a vo t cng c ISE th kch chut phi vo ca s ca
iMPACT v chn Add Xilinx Device, -a -ng dn ca thit k v chn file
top.bit sau kch vo biu t-ng ca thit b .
T Menu Operation chn Program, sau s -c thng bo vic np
thnh cng. Tuy nhin vi Board Spartan-3 bn cn l-u khi np ch-ng trnh , v
trn n bao gm mt Flash Rom ni tip bn s -c ch-ng trnh hi mt s cu
hi tr-c khi np.

78

Ch-ng III
Gii thiu ngn ng VHDL
3.1. Cc cu trc c bn ca ngn ng VHDL.
Cc thnh phn chnh xy dng trong ngn ng VHDL -c chia ra thnh nm
nhm c bn nh- sau:
- Entity
- Architecture
- Package
- Configuration.
- Library.
Entity: Trong mt h thng s, thng th-ng -c thit k theo mt s xp
chng cc modul, m mi Modul ny t-ng ng vi mt thc th thit k ( -c gi
l Entity ) trong VHDL. Mi mt Entity bao gm hai phn :
- Khai bo thc th ( Entity).
- Thn kin trc ( Architecture Bodies )
Mt khai bo Entity -c dng m t giao tip bn ngoi ca mt phn t
(component), n bao gm cc khai bo cc cng u vo, cc cng u ra ca phn
t . Phn thn ca kin trc -c dng m t s thc hin bn trong ca thc
th .
Packages: Cc ng gi ch ra thng tin dng chung, m cc thng tin ny
-c s dng bi mt vi Entity no .
Configuration: nh cu hnh, n cho php gn kt cc th hin ca phn t
no cn dng ca mt thit k no c dng mt cu trc v -a cc th hin
ny vo trong cp Entity v Architecture.
N cho php ng-i thit k c th th nghim thay i cc s thc thi khc
nhau trong mt thit k. Mi mt thit k dng VHDL bao gm mt vi n v thvin, m mt trong cc th- vin ny -c dch sn v ct trong mt th- vin thit k.

3.1.1 Khai bo Entity:

79

Nh- trn cp, phn khai bo Entity ch -a ra mt ci nhn pha bn


ngoi cu mt phn t m khng cung cp thng tin v s thc hin ca phn t
nh- th no. C php khai bo ca mt Entity nh- sau:
Entity entity_name is
[generic (generic_declaration);]
[port (port_declaration);]
{entity_declarative_item {constants, types, signals};}
end [entity_name];
[] : Du ngoc vung ch ra cc tham s c th la chn.
| : Du gch ng hin th mt s la chn trong s cc la chn khc.
{} : Khai bo mt hoc nhiu cc i t-ng, m cc i t-ng ny c th -c
nh ngha bi ng-i dng.
a. Khai bo Generic dng khai bo cc hng m chng c th -c dng
iu khin cu trc v s hot ng ca Entity. C php ca khai bo ny nhsau:
generic ( constant_name : type [:=init_value]
{;constant_name: type[:=init_value]});
y tn hng constant_name ch ra tn ca mt hng dng generic (hng
dng chung).
Kiu (Type) -c dng ch ra kiu d liu ca hng.
init_value : ch ra gi tr khi to cho hng.
b. Khai bo cng ( Port ): -c dng khai bo cc cng vo, ra ca Entity.
C php ca khai bo ny nh- sau:
Port ( port_name : [mode] type [:= init_value]
{; port_name:[mode] type [:=init_value]});
port_name -c dng ch ra tn ca mt cng, mode ch ra h-ng
vo ra ca tn hiu ti cng . Type ch ra kiu d liu ca mt cng v init_value
ch ra gi tr khi to cho cng .
Ch ! Vi VHDL khng phn bit ch hoa v ch th-ng, chng hn nh- :

80

xyz = xYz = XYZ.


* C bn mode -c s dng trong khai bo cng :
- in : ch c th -c c, n ch -c dng cho cc tn hiu u vo ( ch -c
php nm bn phi php gn )
- out : Ch -c dng gn gi tr, n ch -c dng cho cc cng u ra (
N ch -c nm bn tri ca php gn ).
- inout : C th -c dng c v gn gi tr. N c th c nhiu hn mt
h-ng iu khin ( C th nm bn tri hoc bn phi php gn ).
- Buffer : C th -c dng c v gn gi tr. ( C th nm bn tri hoc
bn phi php gn ).
inout l mt cng hai h-ng, cn Buffer l mt cng khng c h-ng.
c. entity_declarative_item : -c dng khai bo cc hng, kiu d liu,
hoc tn hiu m n c th -c s dng trong khi thc hin ca mt Entity.
d. V d :
* V d v khai bo cc cng vo ra:
entity xxx is
port ( A : in integer ;
B : in integer ;
C : out integer ;
D : inout integer ;
E : buffer integer) ;
end xxx;
architecture bhv of xxx is
begin
process (A,B)
begin
C <= A ; -- ( Cu lnh ng: A -c gn cho C ).
A <= B ; -- ( Cu lnh sai: A l mt u vo ).
E <= D + 1; -- ( Cu lnh ng: D mode inout v vy n c th -c gn v

81

c )
D <= C + 1; -- ( Cu lnh sai : C l cng u ra nn khng th -c c cho
u vo ).
end process;
end bhv;
* V d v khai bo Entity:
A

COUT

FULL_ADDER

CIN

SUM

Hnh trn ch ra mt giao din ca mt b cng mt bit. Tn Entity ca phn


t ny l FULL_ADDER. N bao gm cc cng u vo A, B v CIN.

Cc

cng ny c kiu d liu l kiu Bit, cn cc cng u ra SUM v COUT cng mang
kiu d liu l kiu BIT. Ngn ng VHDL dng din t giao din ny nh- sau:
Entity FULL_ADDER is
port ( A, B, CIN : in BIT;
SUM, COUT : out BIT );
End FULL_ADDER ;
Chng ta c th iu khin cu trc cng nh- thi gian ca mt Entity bi vic
s dng cc hng generic. V d sau s ch ra vic iu khin ny, trong v d ny
hng N -c dng ch ra s bt ca mt b cng. Trong qu trnh m phng hoc
qu trnh tng hp, gi tr thc t cho mi hng dng chung generic c th b thay
i.
entity ADDER is
generic (N : INTEGER := 4);

82

M : TIME := 10ns);
port ( A, B : in BIT_VECTOR (N -1 downto 0 );
CIN :in BIT;
SUM : out BIT_VECTOR (N-1 downto 0);
COUT : out BIT );
end ADDER;
Giao din m t b cng ny nh- sau:
A (3)

B (3)

COUT

A (2)

B (2)

A (1)

B (1)

A (0)

B (0)

CIN

FULL _ ADDER

SUM (3)

SUM (2)

SUM (1)

SUM (0)

3.1.2. Cc kiu kin trc ( ARCHITECTURES ):


Mt kin trc -a ra kt cu bn trong ca mt Entity. Mt Entity c th c
nhiu hn mt kin trc, n ch ra quan h gia cc u vo v u ra ca mt
Entity m quan h ny -c din t theo cc thut ng sau :
- Kiu hnh vi hot ng ( Behavioral ).
- Kiu hot ng ca cc lung d liu ( Dataflow ).
- Kiu cu trc ( Structure ).
Mt kin trc xc nh chc nng ca mt Entity. N bao gm phn khai bo (
Khai bo cc cc tn hiu, hng, khai bo cc kiu, cc phn t, cc phn t, tip
theo l cc pht biu ng thi ).
Khai bo mt kin trc s dng c php sau:

architecture architecture_name of entity_name is


{ architecture_declarative_part }
Begin
{concurrent_statement}

83

end [ architecture_name ];
3.1.2.1. Kin trc theo kiu hnh vi hot ng ( Behavioral ):
Mt kin trc kiu hnh vi hot ng ch ra cc hot ng m mt h thng
ring bit no phi thc hin trong mt ch-ng trnh, n ging nh- vic din t
cc qu trnh hot ng, nh-ng khng cung cp chi tit m thit k -c thc thi
nh- th no. Thnh phn ch yu ca vic din t theo kiu hnh vi trong VHDL l
process. D-i y l v d ch ra kiu din t theo kiu hnh vi ca mt b cng vi
tn l FULL_ADDER.

architecture BEHAVIOUR of FULL_ADDER is


begin
process (A,B,CIN)
begin
if ( A ='0' and B ='0' and CIN='0' ) then
SUM <= '0';
COUT <= '0' ;
elsif
(A='0' and B='0' and CIN='1') or
(A='0' and B='1' and CIN='0') or
(A='1' and B='0' and CIN='1') then
SUM <= '1';
COUT <= '0' ;
elsif (A='0' and B='1' and CIN='1') or
(A='1' and B='0' and CIN='1') or
(A='1' and B='1' and CIN='0') then
SUM <= '0';
COUT <= '1';
elsif (A='1' and B='1' and CIN='1') then
SUM <='1';
COUT <='1';
end if;
end process;
end BEHAVIOURAL;
3.1.2.2. Kin trc theo kiu hot ng ca cc lung d liu:
Mt kin trc kiu lung d liu ch ra mt h thng d-i dng m t ng
thi ca cc lung iu khin v dch chuyn ca d liu. N s dng theo mu

84

thng tin hoc mu hot ng ca lung d liu , hoc mu thi gian ca cc


chc nng logic t hp. Chng hn nh- cc b cng, b so snh, b gii m, v cc
cng logic nguyn thu.
V d :

architecture DATAFLOW of FULL_ADDER is


signal S : BIT;
begin
S <= A xor B ;
SUM <= S xor CIN after 10 ns;
COUT <= (A and B ) or (S and CIN) after 5ns;
end DATAFLOW;
3.1.2.3. Kin trc kiu cu trc:
Mt kin trc kiu cu trc ch ra s thc thi cu trc theo dng s dng cc
khai bo phn t v cc th hin ca phn t . V d d-i y ch ra s din t
cu trc ca mt b cng FULL_ADDER nh- trn gii thiu. Hai kiu phn t
-c s dng trong v d ny l HALF_ADDER v OR_GATE.

architecture STRUCTURE of FULL_ADDER is


component HALF_ADDER
port (L1, L2 : in BIT;
CARRY, SUM : out BIT);
end component;
component OR_GATE
port (L1, L2 : in BIT;
O: out BIT);
end component;
begin
HA1: HALF_ADDER port map (A,B,N1,N2);
HA2: HALF_ADDER port map (N2,CIN,N3,SUM);
OR1 : OR_GATE port map (N1, N3,COUT);
end STRUCTURE;
v d ny Entity mc cao nht s cha hai th hin ca HALF_ADDER v
mt th hin ca OR_GATE. Th hin HALF_ADDER c th b rng buc vi mt
Entity khc, m Entity ny bao gm mt cng XOR v mt cng AND. Giao tip
ca mt b cng HALF_ADDER c dng nh- sau:

85

L1

L2

X1

SUM

A1

CARRY

B cng ny gm c hai u vo L1 v L2 , u ra l SUM v CARRY. Kiu


BIT l kiu tin nh ngha ca ngn ng VHDL, n c kiu lit k dng ch k t
nh- '0' v '1'.

3.1.3. Cc kiu ng gi ( Packages ):


Mc ch chnh ca Package l tp hp cc phn t c th b chia s bi hai
hay nhiu n v thit k ( Hay cc phn t c th dng chung -c). N c cha
cc kiu d liu, cc hng, cc ch-ng trnh con c th dng chung gia cc thit
k. Mt Package c ch-a hai phn chnh:
- Phn khai bo Package.
- Phn thn Package.
3.1.3.1. Phn khai bo Package.
Mt khai bo Package -c dng ct gi hng lot cc khai bo dng
chung, chng hn nh- cc phn t, cc kiu, cc th tc, cc hm. Cc khai bo ny
c th nhp vo cc n v thit k khc bi vic s dng mt mnh use.
V d :

package EXAMPLE_PACK is
type SUMMER is ( MAY, JUN, JUL, AUG, SEP);
component D_FLIP_FLOP
port (D, CK:in BIT;
Q, QBAR: out BIT)
end component;
constant PIN2PIN_DELAY:TIME:=125ns;
function IN2BIT_VEC(INT_VALUE:INTEGER)
return BIT_VECTOR;
end EXAMPLE_PACK;
v d ny tn ca package -c khai bo l EXAMPLE_PACK. N c cha

86

cc khai bo kiu, phn t, hng, v hm. L-u rng hot ng ca hm


INT2BIT_VEC khng xut hin trong khai bo gi, m ch c giao tip ca hm
xut hin. Vic nh ngha, hay thn ca hm ch xut hin trong thn ca ng gi
( Body Package ).
Gi s rng ng gi ny -c dch v to thnh mt th- vin thit k v
-c gi l DESIGN _LIB . Xem xt vic dng mnh use s dng chng d-i
y:

library DESIGN_LIB;
use DESIGN_LIB.EXAMPLE_PACK.all
Entity RX is.........
Mnh library DESIGN_LIB cho php th- vin thit k DESIGN_LIB -c
php dng trong phn m t ny, iu c ngha l tn DESIGN_LIB c th -c
s dng. Mnh use tip theo s ly tt c cc khai bo c trong Package
EXAMPLE_PACK vo trong khai bo Entity ca RX. C ngha l ta c th chn
la cc khai bo t trong mt cc khai bo ca mt ng gi vo trong mt n v
thit k khc. V d :

library DESIGN_LIB;
use DESIGN_LIB.EXAMPLE_PACK.D_FLIP_FLOP;
use DESIGN_LIB.EXAMPLE_PACK.PIN2PIN_DELAY;
architecture RX_STRUCTURE of RX is.........
Hai mnh use v d ny nhm to ra khai bo cho D_FLIP_FLOP v khai
bo hng cho PIN2PIN_DELAY -c php s dng trong thn kin trc.
3.1.3.2. Phn khai bo thn Package.
S khc bit gia khai bo Package v thn Package c cng mc ch nhkhai bo ca mt Entity v phn thn kin trc Architecture ca chng. C php
khai bo ca Package -c khai bo nh- sau:
package package_name is
{package_declarative_item}
end [package_name ];
package body package_name is
{package_declarative_item}

87

end [package_name]
Mt thn package -c dng l-u cc nh ngha ca mt hm v th tc,
m cc hm v th tc ny chng -c khai bo trong phn khai bo package
t-ng ng. V vy phn thn package lun -c kt hp vi phn khai bo ca
chng, hn na mt phn khai bo package lun c t nht mt phn thn package
kt hp vi chng.
V d : package EX_PKG is
subtype INT8 is integer range 0 to 255;
constant zero : INT8:=0;
procedure Incrementer (variable Count : inout INT8);
end EX_PKG;
package body EX_PKG is
procedure Incrementer (variable Data : inout INT8) is
begin
if (Count >= MAX ) then
Count:=ZERO;
else Count:= Count +1;
end if;
end Incrementer;
end EX_PKG;

3.1.4. nh cu hnh ( Configurations ) :


Mi mt Entity bao gm nhiu kin trc khc nhau. Trong qu trnh thit k,
ng-i thit k c th mun th nghim vi cc s bin i khc nhau ca thit k
bng vic chn la cc kiu kin trc khc nhau. Configuration c th -c s dng
cung cp mt s thay th nhanh cc th hin ca cc phn t ( Component ) trong
mt thit k dng cu trc. C php khai bo ca Configuration ny nh- sau:

Configuration configuration_name of entity_name is


{configuration_decalarative_part}
For block_specification
{use_cluse}

88

{configuration_item}
end for;
Vi mt Entity ca b cng FULL_ADDER nh- gii thiu phn trn, v
d ny ta c th s dng chng trong php nh cu hnh nh- sau:
configuration FADD_CONFIG of FULL_ADDER is
For STRUCTURE
for

HA1,

HA2

HALF_ADDER

use

entity

burcin.HALF_ADDER(structure);
for OR1: OR_GATE use Entity burcin.OR_GATE;
end for;
end FADD_CONFIG;
y tn ca php nh cu hnh l tu , v d ny ta ly tn l
FADD_CONFIG, cn vi dng lnh For STRUCTURE ch ra kin trc -c nh
cu hnh v -c s dng vi thc th Entity FULL_ADDER. Gi s rng chng ta
dch hai thc th HALF_ADDER v OR_GATE thnh th- vin vi tn l burcin
v s dng chng trong v d trn.

3.1.5. Cc th- vin thit k :


Kt qu ca vic bin dch VHDL l chng -c ct gi bn trong cc th- vin
dng cho b-c m phng tip theo, iu ny ging nh- vic s dng mt phn t
-c khai bo trong mt thit k khc. Mt th- vin thit k c th cha cc n
v th- vin nh- sau:
- Cc ng gi (PACKAGES)
- Cc thc th Entity
- Cc kiu kin trc Architectures
- Cc php nh cu hnh Configurations.

Ch ! VHDL khng h tr cc th- vin theo th bc. Bn c th c


nhiu th- vin nh- theo mun nh-ng khng -c khai bo lng nhau!
m mt th- vin v truy cp chng nh- mt Entity -c bin dch trong
mt thit k VHDL mi, iu u tin cn lm l phi khai bo tn th- vin. C
php ca chng nh- sau:

89

Library library_name : [path/directory_name];


Bn c th truy cp cc n v -c bin dch t mt th- vin VHDL ti ba
mc nh- sau:
library_name.Package_name.item_name
V d: Gi s chng ta to mt ng gi ct mt hng m hng ny -c s
dng trong nhiu thit k, sau dch n v ct vo trong th- vin vi tn l burcin .

Package my_pkg is
constant delay: time:=10ns;
end my_pkg;
Tip n chng ta gi my_pkg s dng chng trong thit k d-i y:

architecture DATAFLOW of FULL_ADDER is


signal S : BIT;
begin
S <= A xor B;
SUM <= S xor CIN after burcin.my_pkg.delay;
COUT <= (A and B ) or (S and CIN) after 5ns;
end DATAFLOW;
3.2. Cc i t-ng d liu :
Mt i t-ng d liu gi mt gi tr ca mt kiu nht nh. Trong VHDL c
ba lp i t-ng d liu :
- Cc hng ( constants ).
- Cc bin ( Variables ).
- Cc tn hiu ( Signals ).
Lp cu mt i t-ng -c ch ra bi mt t kho v n -c ch ra im
bt u ca mt khai bo.

3.2.1. Cc hng ( Constant ):


Mt hng n l mt i t-ng m n -c khi to ch ra mt gi tr c
nh v n khng b thay i. Khai bo hng -c php khai bo trong cc ng gi,
cc Entity, cc kin trc, cc ch-ng trnh con, cc khi, v trong pht biu ca cc
qu trnh processes.

90

C php khai bo chng nh- sau :


Constant constant_name {constant_name}: type [:= value];
V d :

constant YES : BOOLEAN:= TRUE;


constant CHAR7: BIT_VECTOR (4 downto 0 ):="00111";
constant MSB: INTEGER:=5;
3.2.2. Cc bin :
Cc bin -c dng l-u d liu tm thi, chng ch -c php khai bo
trong pht biu Process hoc cc ch-ng trnh con.
V d :

variable X,Y : BIT;


variable TEMP: BIT_VECTOR (8 downto 0) ;
variable DELAY : INTERGER range 0 to 15:=5;
3.2.3. Cc kiu tn hiu ( Signal ):
Tn hiu -c dng kt ni cc Entity ca thit k li vi nhau v trao i
cc gi tr bin i trong pht biu process. Chng c th -c xem nh- cc dy
dn hay cc bus ni trong mch thc t. Tn hiu c th -c khai bo trong cc
ng gi ( Package ), trong cc khai bo Entity, trong khai bo kin trc
(Architecture), trong cc khi ( Block ). Vi cc tn hiu -c khai bo trong cc
package th tn hiu ny -c gi l tn hiu ton cc ( Cc thit k c th s dng
chng ), cc tn hiu -c khai bo trong Entity l tn hiu ton cc trong mt
Entity, t-ng t vi tn hiu -c khai bo trong mt kin trc, n l tn hiu dng
chung trong mt kin trc .
C php ca chng c dng nh- sau :
Signal Signal_name {,signal_name}: type [:=value];
V d :

signal BEEP : BIT:= '0';


signal TEMP: STD_LOGIC_VECTOR (8 downto 0);
signal COUNT: INTEGER range 0 to 100 :=5;

91

3.3. Cc kiu d liu:


Tt c cc i t-ng d liu trong VHDL cn phi -c nh ngha vi mt
kiu d liu. Mt khai bo kiu phi ch ra tn v di ca kiu . Khai bo kiu d
liu chng -c php khai bo trong phn khai bo cc ng gi, trong phn khai
bo Entity, trong phn khai bo kin trc, trong phn khai bo cc ch-ng trnh con
v trong phn khai bo cc Process. Cc kiu d liu bao gm cc kiu sau:
- Kiu lit k
- Kiu nguyn.
- Cc kiu d liu tin nh ngha.
- Kiu mng.
- Kiu bn ghi.
- Kiu d liu chun logic.
- Kiu d liu c du v khng du.
- Cc kiu ph.

3.3.1. Cc kiu lit k ( ENUMERATION ).


Mt kiu lit k -c ch ra bi vic lit k cc gi tr cho php ca kiu .
Tt c cc gi tr -c nh ngha bi ng-i dng c th l cc tn nh danh, hoc
cc cc kiu ch k t . Tn nh danh thc cht l mt tn do ng-i dng t ra,
chng hn nh- blue, ball, monday. Kiu ch k t l kiu ca cc k t c km theo
du ngoc n, chng hn nh- 'x', ' 0'...
C php khai bo cu chng nh- sau:
Type type_name is (enumerattion_literal {, enumeration_literal});
Vi type_name l mt tn nh danh v mi enumerattion_literal hoc l mt
tn nh danh hoc l mt ch k t.
V d :
type COLOR is (RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE);

type

DAY

is

TUESDAY,WEDNESDAY,THURDAY,FRIDAY);
type STD_LOGIC is ('U','X','0','1','Z','W','L','H','_');

(MONDAY,

92

Mi mt nh danh trong mt kiu u c mt v tr nht nh trong kiu,


chng -c xc nh bi th t xut hin cu chng trong kiu . Trong v d trn,
mc nh RED c v tr 0, ORANGE s c v tr 1 ..... Nu chng ta khai bo mt
i t-ng d liu vi kiu l COLOR v khng nh ngha gi tr khi to th i
t-ng d liu s -c khi to mc nh v tr u tin ca kiu lit k ( V tr
khng ), trong tr-ng hp ny COLOR s nhn gi tr RED.

3.3.2. Kiu nguyn :


Kiu nguyn l cc kiu s nguyn, chng -c dng cho cc php tnh, cc
ch s, cc iu khin s vng lp. Trong hu ht cc kiu thc thi trong VHDL c
di t - 2,147,483,647 n + 2, 147, 483,647. C php ca chng -c khai bo
nh- sau:
type type_name is range - 2,147,483,647 to + 2, 147, 483,647;
V d :
type INTEGER is range - 2,147,483,647 to + 2, 147, 483,647;
type COUNT is range 0 to 10;

3.3.3. Cc kiu d liu tin nh ngha trong VHDL :


IEEE nh ngha hai gi d liu STANDART v TEXTIO trong th- vin STD.
Mi mt gi d liu ny c cha mt lot cc kiu v cc php tnh chun . D-i
y l cc kiu d liu -c nh ngha trong gi STANDARD:
- BOOLEAN: Mt kiu lit k vi hai gi tr true v False, cc thao tc Logic
v cc php ton quan h s tr v gi tr Boolean.
- BIT : Mt kiu lit k vi hai gi tr '0' v '1' , cc php tnh logic c th ly
v tr v gi tr kiu BIT.
- CHARACTER: Kiu lit k ca cc m ASCII.
- INTEGER : -c dng miu t cc s m v d-ng. Di hot ng ca
chng -c n nh t - 2.147.438.647 n 2.147.438.647. Cc hm ton hc nhcng, tr ,nhn, chia -c h tr kiu nguyn.
- NATURE: Cc kiu con ca kiu nguyn c dng miu t cc s kiu
t nhin ( khng m ).
- POSITIVE: cc kiu con ca kiu nguyn -c dng miu t cc s

93

d-ng.
- BIT_VECTOR : -c dng miu t mt mng cc gi tr kiu BIT.
- STRING : Mt mng cc k t, mt gi tr kiu chui -c i km bi du
ngoc kp.
- REAL: -c dng m t cc kiu s thc, di hot ng t-1.0E+38 n
+1.0E+38.
- Kiu thi gian vt l : M t cc gi tr thi gian -c dng trong m phng.
C mt vi kiu d liu -c nh ngha trong gi STANDARD nh- sau:

Type BOOLEAN is ( fase, true);


Type BIT is ( '0', '1' );
Type SEVERITY_LEVEL is (note, warning, error, failure );
Type INTEGER is range -2147483648 to 2147483648;
Type REAL is Range -1.0E38 to 1.0E38;
Type CHARACTER is (nul, soh, stx, eot, enq, ack, bel,............);
3.3.4. Kiu mng :
Kiu mng l kiu ca nhm cc phn t c cng kiu ging nhau. C hai kiu
mng nh- sau:
- Kiu mng -c gn kiu .
- Kiu mng khng b gn kiu.
Kiu mng b gn kiu l kiu m cc ch s mng ca chng -c nh ngha
t-ng minh. C php ca chng nh- sau:
type array_type_name is array (discrete_range) of subtype_indication;
y array_type_name l tn ca kiu mng -c p kiu, discrete_range
kiu ph ca kiu nguyn khc hoc kiu lit k, subtype_indication chnh l kiu
ca mi phn t ca mng.
Kiu mng khng b gn kiu l kiu m ch s mng ca chng khng b ch
ra, nh-ng cc kiu ch s ca chng phi -c ch ra. C php ca chng -c ch ra
nh- sau:
type array_type_name is array (type_name range <>) of subtype_indication;

94

V d :
type A1 is array ( 0 to 31) of INTEGER;
type Bit_Vector is arrray (NATURAL range <>) of BIT;
type STRING is array (POSITIVE range <>) of CHARACTER;
A1 l mt mng gm ba hai phn t m trong mi phn t l mt kiu
nguyn. Mt v d khc ch ra kiu Bit_vector v kiu String -c to ra trong chun
cc gi STANDARD.
V d : subtype B1 is BIT_VECTOR ( 3 downto 0);
variable B2 : BIT_VECTOR (0 to 10);
Di ch s xc nh s phn t trong mng v h-ng ca chng ( low to high |
high to low ).
VHDL cho php khai bo cc mng nhiu chiu c th dng khai bo
cc mu RAM v ROM. Xem v d d-i y:
type Mat is array (0 to 7, 0 to 3) of BIT;
constant ROM : MAT : = (( '0', '1', '0', '1'),
('1', '1', '0', '1' ),
('0', '1', '1', '1' ),
('0', '1' , '0', '0' ),
('0', '0' ,'0' , '0'),
('1', '1' , '0', '0' ),
('1', '1' , '1', '1' ),
('1', '1' , '0', '0' );
X := ROM (4,3);
Bin X s ly gi tr '0' -c t m.

3.3.5. Kiu Record :


Kiu record l mt nhm c nhiu hn mt phn t c cc kiu khc nhau.
Phn t ca Record bao gm cc phn t ca bt c kiu no, n c th l cc kiu
mng hoc kiu Record.
V d :

95

type DATE_TYPE is ( SUN, MON, TUE , WED , THR , FRI , SAT) ;


type HOLIDAY is
record
YEAR : INTEGER range 1900 to 1999;
MONTH : INTEGER range 1 to 12 ;
DAY : INTEGER range 1 to 31;
DATE : DATE_TYPE;
end record ;
signal S : HOLIDAY;
variable T1: integer range 1900 to 1999;
variable T2 : DATE_TYPE;
T1: = S .YEAR;
T2:= S . DATE;
S . DAY <= 30;

3.3.6. Cc kiu STD_LOGIC :


to mu cc -ng tn hiu c nhiu hn hai gi tr ( '0' , '1' ), VHDL nh
ngha chn khong trong gi chun. Chn gi tr bao gm :
type STD_LOGIC is ( 'U' -- khng khi to gi tr
'X' -- Khng xc nh
'0' -- Kiu mc thp
'1' -- Kiu mc cao
'Z' -- Kiu tr khng cao
'W' -- Khng xc nh mc yu
'L' -- Mc thp yu
'H' -- Mc cao yu
'_' -- Khng quan tm n gi tr .);
T-ng t nh- kiu BIT v kiu BIT_VECTOR, VHDL cung cp mt kiu khc
gi l STD_LOGIC_VECTOR.
s dng cc nh ngha v cc hm trong gi chun logic, cc pht biu sau
y cn -c phi khai bo nh km theo ch-ng trnh .

96

Library IEEE;
USE IEEE.STD_LOGIC_1164.all;

3.3.7. Cc kiu d liu khng du v c du .


Cc kiu d liu c du v khng du chng -c ch ra trong cc gi chun
NUMERIC_BIT v NUMERIC_STD. Cc i t-ng vi kiu c du v khng du
chng -c hiu nh- l cc s nguyn binary khng du v cc i t-ng

vi kiu

c du v chng -c dch nh- cc nguyn b hai .


Vic nh ngha ca cc kiu d liu -c ch ra nh- sau:

type signed is array (NATURAL range <>) of BIT/STD_LOGIC;


Cc pht biu d-i y bao gm cc khai bo vic s dng ca cc kiu d
kiu c du v khng du.

Library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.NUMERIC_BIT.all;
use IEEE.NUMERIC_STD.all;
3.3.8. Cc kiu con .
VHDL cung cp cc cc kiu con m cc kiu con ny chng -c nh ngha
trong cc nh- cc tp ph trong mt kiu khc. Bt c u c mt khai bo kiu
th c th xut hin mt nh ngha kiu con. Kiu NATURAL v kiu
POSITIVE l mt kiu ph hay kiu con ca kiu nguyn v chng c th -c
dng vi bt k mt hm nguyn no.
V d :

subtype INT4 is INTEGER range 0 to 15;


subtype BIT_VECTOR6 is BIT_VECTOR (5 downto 0);
3.4. Cc ton t :
VHDL cung cp 6 lp ton t , mi mt ton t c mt mc -u tin nht nh.
Tt c cc ton t trong cng mt lp th c cng mt mc -u tin.

97

Mc -u
tin thp

Cc ton t

Cc ton hng

nht
.

and

Logical_operator

or
nand

Cng kiu
Cng kiu
Cng kiu

nor

Cng kiu

xor

Cng kiu

Cng kiu

/=

Cng kiu

<

Cng kiu

<=

Cng kiu

>

Cng kiu

>=

Cng kiu

.
.

Relational

operator

concatenation_op
erator

&
+

Cng kiu

arithmetic_operat

Cng kiu

arithmetic_operat

Bt k kiu s no

Bt k kiu s no

or
or
arithmetic_operat
or

Mc -u
tin cao

arithmetic_operat
or

nht
Logical_operator

3.4.1. Cc ton t logical .

Cng kiu

Cng kiu

mod

integer

rem

integer

**

Kiu m integer

abs

Bt k kiu s no

not

Cng kiu

98

Kiu ton t logic khng chp nhn cc ton hng l cc kiu tin nh ngha
nh- kiu BIT, BOOLEAN v cc kiu mng cc bit, cc ton hng cn phi l cng
kiu v cng di.
V d :

signal A,B : BIT_VECTOR (6 downto 0);


signal C,D,E,F,G: BIT;
A<= B and C ; -- Khng xy ra v cc ton hng khng cng
kiu.
D <= (E xor F) and (C xor G);
3.4.2. Cc ton t quan h .
Cc ton t quan h cho ta kt qu c kiu Boolean, cc ton hng cn phi c
cng kiu v cng di.
V d :

signal A,B : BIT_VECTOR (6 downto 0);


signal C: BOOLEAN;
C <= B <= A; ( T-ng -ng nh- C <= (B<=A));
3.4.3. Cc ton t cng .
Cc ton t cng bao gm "+", "-" , v "&" , trong ton t "&" l ton t
kt ni chui v cc i t-ng l mng cc thanh ghi. Vi s c du v khng du
c th -c dng vi cc s nguyn v cc kiu BIT_VECTOR.
V d :

signal W: BIT_VECTOR (3 downto 0);


signal X: INTEGER range 0 to15;
signal Y,Z : UNSIGED (3 downto 0);
Z <= X + Y + Z;
Y <= Z (2 downto 0) & W(1);
"ABC" & "xyz" cho kt qu l : "ABCxyz"
"1010" & "1" cho kt qu l : "10101"

99

3.5. Cc kiu ton hng .


Trong mt biu thc cc ton t s dng cc ton hng tnh ton cc gi tr
ca chng. Cc ton hng trong mt biu thc bao gm :
- Kiu ch
- Kiu nh danh
- Cc tn -c nh theo ch s
- Tn cc Slice
- Tn cc c tnh
- Cc biu thc iu kin
- Cc li gi hm
- Cc biu thc chuyn i

3.5.1. Kiu ch .
Cc kiu ch c th chia ra thnh hai nhm chnh :
- Kiu v h-ng
. Kiu k t
. Kiu BIT
. Kiu chun STD_LOGIC
. Kiu Boolean
. Kiu s thc
. Kiu nguyn
. Kiu thi gian
- Kiu mng
. Kiu chui
. Kiu BIT_VECTOR
. STD_LOGIC_VECTOR

3.5.1.2. Kiu ch k t .
Kiu ch k t ch ra mt gi tr bng vic s dng mt k t n v km theo
mt du ngoc n. Nhn chung VHDL khng quan tm n cc tr-ng hp ch
th-ng v ch hoa, xong vi kiu ch k t cn phi phn bit ch th-ng v ch
hoa. V d : 'a' hon ton khc vi kiu 'A' trong kiu ch k t. Kiu ch k t c

100

th -c dng nh ngha bt c kiu no trong cc ng gi chun v gi tr mc


nh ca chng l Null.
V d : 'A' , 'a' , ......'1' .
Kiu ch k t khng phi l kiu bit k t nh- '1' hoc kiu nguyn 1, v vy
kiu ch l t cn phi -c cung cp mt tn kiu no .

3.5.1.3. Kiu chui .


Mt kiu chui k t thc cht l mt mng cc k t . Mt chui cc k t
-c nh ngha trong mt du ngoc kp .
V d : "A" , " hold time error ", " x " ....

3.5.1.4. Kiu BIT .


Kiu bit l kiu m t hai gi tr ri rc bng vic s dng cc ch k t '0' v
'1'. i khi cc kiu Bit ny -c dng to ra kiu ch bit mt cch t-ng minh
dng phn bit chng vi cc kiu k t.
V d : '1' , ' 0 ' , bit' ('1')

3.5.1.5. Kiu BIT_VECTOR .


Kiu bit_vector l mt mng cc bit m chng -c t trong du ngoc kp .
V d : "01001111000" , x"00FFF0" , b"100010101" , o"277756"...
Trong v d trn ch 'x' -c dng din t cc gi tr s hexa, cn 'b' -c
dng m t kiu binary, cn 'o' -c dng cho h m c s 8.

3.5.1.6. Kiu ch trong ng gi chun STD_LOGIC.


Kiu ch logic chun l mt trong 9 gi tr -c nh ngha trong ng gi
chun v -c -a ra d-i dng cc ch in hoa v t trong du ngoc n .
V d : ' U ' khng trng vi ' u '
'X','0','1','Z','W','L','H','_'

3.5.1.7. Kiu ch STD_LOGIC_VECTOR.


Mt kiu ch STD_LOGIC_VECTOR thc cht l mt mng bao gm cc
phn t ca kiu std_logic v -c t trong du ngoc kp.
V d : " 10_1Z" , " UUUUU " , signed("1011 ").....

3.5.1.8. Kiu Boolean .

101

Kiu Boolean -c dng m t hai gi tr ri rc, l kiu true v false.


V d : true , false , True , TRUE, FALSE ...

3.5.1.9. Kiu s thc .


Kiu s thc l kiu -c dng din t cc s thc nm trong khong t 1.0E+38 n +1.0E+38.
Mt kiu s hc c th l kiu d-ng hoc m nh-ng chng phi c du chm
thp phn .
V d : + 1.0 khng -c vit '1' hoc 1 hoc ' 1.0 '
0.0 khng -c vit 0
-1.0 , -1.0E+10.

3.5.1.10. Kiu nguyn .


Mt kiu nguyn -c dng din t cc s nguyn nm trong khong t 2,147,438,647 n + 2,147,438,647.
V d : +1 , 862 862.0 , - 257 , + 123_456 , 16 # 00FF #.
Trong cc k hiu -c dng nh ngha kiu nh- sau:

" C s_n # s

din t trong c s n ", y n nm trong h 2 n 16.

3.5.1.11. Kiu TIME.


Mt kiu vt l duy nht -c nh ngha tr-c trong ng gi chun, l
thi gian time.
V d : 10 ns , 100 us , 6.3 ns ..... Ch phn s phi -c vit cch phn n
v o bi mt khong trng.

3.5.2. Cc kiu nh danh:


Kiu nh danh n thun ch l mt ci tn do ng-i dng nh ngha, n c
th l tn ca mt hng, mt bin hay mt tn hiu, mt Entity, mt cng, hay mt
ch-ng trnh con, hay cc khai bo tham bin . Khi khai bo mt tn cn phi khai
bo k t u tin phi kiu ch k t, l-u du gch d-i khng -c php ng
sau cng, cc t kho ca VHDL khng -c dng lm khai bo cc kiu nh
danh, chng hn nh- entity, port ....
V d : xyz = xYZ = XYZ = XyZ

102

S(3) phn t th ba ca mng S


X3.

3.5.3.Kiu INDEX.
Kiu INDEX -c s dng ch ra mt phn t no trong mt mng. C
php s dng ca khai bo ny nh- sau:
array_name (expression)
Vi array_name l mt tn ca mt hng hay mt bin no nm trong mt
mng. Cn expression phi tr v gi tr nm trong di ch s ca mng .
V d :
type memory is array ( 0 to 7 ) of INTEGER range 0 to 123;
variable DATA_ARRAY : memory;
variable ADDR : INTEGER range 0 to 7;
variable DATA: INTEGER range 0 to 123;
DATA:= DATA_ARRAY ( ADDR );

3.5.4. Kiu Slice v ALIAS.


Mt khai bo Slice -c dng ch ra mt s phn t ca mng. H-ng ca
n cn phi ph hp vi h-ng mng. Alias -c dng to ra mt tn mi cho tt
c cc hoc mt s phn t no nm trong mt mng.
V d :

variable A1: BIT_VECTOR ( 7 downto 0 );

A2: = A1(5 downto 2) ;


Alias A3: BIT_VECTOR (0 to 3) is A1(7 downto 4);
( C ngha l A3(0) = A1(7), A3(1) = A1(6), A3(2) = A1(5), A3(3) = A1(4) )
Alias A4: BIT is A1(3);

3.5.5. Kiu thuc tnh ATTRIBUTE:


Ly cc thuc tnh cu mt bin hay mt tn hiu ca mt kiu cho tr-c no
v tr v mt kiu gi tr. D-i y l cc kiu thuc tnh th-ng dng trong
ngn ng VHDL:
- Left : Tr v ch s ca phn t bn tri cng ca mt kiu d liu.
- Right : Tr v ch s ca phn t bn phi cng ca mt kiu d liu.

103

- High : Tr v ch s ca phn t cao nht ca mt kiu d liu.


- Low : Tr v ch s ca phn t thp nht ca mt kiu d liu.
- Range : -c dng ly v di ca ch s.
- Reverse_range : Dng xc nh di ch s ng-c li.
- Length : Tr v s phn t ca kiu BIT_VECTOR.
- Event : M t s thay i gi tr ca tn hiu ti thi im m phng.
V d : variable A1 : BIT_VECTOR ( 10 downto 0 );
A1' left

-- Tr v gi tr l 10.

A1' right

-- Tr v gi tr 0.

A1' high

-- Tr v gi tr l 10.

A1' low

-- Tr v gi tr l 0.

A1' range -- Tr v l 10 downto 0.


A1' reverse_range -- Tr v gi tr l 0 to 10.
A1' length

-- Tr v gi tr l 11.

3.5.6. Kiu tp hp :
Kiu tp hp c th -c dng gn gi tr cho mt i t-ng thuc kiu
mng hoc kiu Record trong khi khi to khai bo hoc trong cc pht biu gn.
V d : type color_list ( red, orange, blue, white );
type color_array is array (color_list) of BIT_VECTOR ( 1 downto 0 );
variable X : color_array;
X := (" 00 " , " 01 " , " 10 " ," 11 " );
X := ( red => "00" , blue => "01" , orange => "10" , white => "11" );
Trong dng th hai, chng ta nh ngha mt mng m s cc phn t ca
chng ( di ch s ) -c -a ra bi color_list. T color_list chng ta c mt mng
gm bn phn t v mng color_array cng s bao gm bn phn t, m mi phn
t ny li -c nh ngha bi kiu Bit_Vector. Hn na chng ta s dng di ch s
ca mng color_list s c di t 0 n 3, v vic nh ngha ca mng ny ch ch ra
di ch s ch khng ch ra kiu ca phn t trong mng.

3.5.7. Biu thc gn kiu :


Biu thc gn kiu -c dng ch ra kiu ca mt ton hng no . C

104

php ca chng nh- sau:


type_name' ( expression );
V d : type color1 is (red, orange, blue, white);
type color2 is (purple, green, red, black);
color2'(red);
Nh- chng ta thy ton hng red c c trong hai kiu color1 v color2, v vy
n cn -c phi -c gn mt kiu d liu r rng v iu ny -c thc hin bi
cu lnh th 3.

3.5.8. Php chuyn i kiu d liu.


Php chuyn i kiu cho php chuyn i cc kiu c kiu d liu gn ging
nhau.
V d : signal X : STD_LOGIC_VECTOR ( 3 downto 0 );
signal Y : STD_ULOGIC_VECTOR ( 3 downto 0 );
Y <= STD_ULOGIC_VECTOR (X);
Sau cu lnh th ba Y s nhn kiu STD_ULOGIC_VECTOR.
3.6. Cc pht biu tun t .
Pht biu tun t ch ra s thc hin tng b-c ca mt qu trnh. Chng thc
hin t cu lnh u tin, cu lnh th hai, ... cu lnh cui cng. Cc pht biu nm
trong mt pht biu qu trnh ( Pht biu Process ) -c gi l pht biu tun t .
Cc pht biu sau y l cc pht biu tun t -c nh ngha trong VHDL:
- Cc pht biu gn bin Variable.
- Cc pht biu gn tn hiu Signal.
- Cc pht biu if.
- Cc pht biu Case.
- Cc pht biu Null.
- Cc pht biu xc nhn ASSERTION.
- Cc pht biu vng lp Loop.
- Cc pht biu NEXT.
- Cc pht biu EXIT.
- Cc pht biu WAIT.

105

- Cc pht biu Procedure.


- Cc pht biu RETURN.

3.6.1. Pht biu gn bin .


Dng thay th gi tr hin thi ca bin vi mt gi tr mi, gi tr mi ny
-c ch ra bi mt biu thc. Bin c th -c khai bo v s dng bn trong mt
pht biu qu trnh hay cn -c gi l pht biu Process. Mt bin -c gn mt
gi tr s dng thng qua pht biu gn bin, m pht biu ny c hnh thc nh- sau:
target_variable : = expression;
L-u cc bin -c khai bo trong mt Process khng th chuyn gi tr ra
ngoi Process, iu c ngha l chng ch -c cp pht trong Process hoc trong
ch-ng trnh con.
V d v php gn bin trong mt Process.

Biu thc -c xc nh gi tr khi pht biu -c thc thi v gi tr -c tnh

106

ton s -c gn cho bin mt cch tc thi.

Bin -c to ti thi im sn sinh v duy tr gi tr ca n trong sut


thi gian chy ch-ng trnh. Do v mt qu trnh khng bao gi -c thot ra
trong mi trng thi hot ng ca n, ngha l chng -c thc thi, hoc
trong mt trng thi ch. Nu trng thi ch th chng phi ch cho n khi
mt s kin khc chc chn xy ra. Mt qu trnh bt u thc hin ti im
khi u ca mt qu trnh m phng, ti thi im ny n -c thc thi cho
n khi gp mt pht biu wait hoc gp cc thnh phn -c khai bo trong
danh mc cn -c x l khai bo trong Process.
Xem th d v pht biu Process nh- sau:
V d 1 :
process(A)
variable EVENT_ON_A : INTEGER : = -1;
begin
EVENT_ON_A : = EVENT_ON_A +1;
end process;
V d 2:
Subtype INT16 is INTEGER range 0 to 65536;
Signal S1, S2 : INT16;
Signal GT : BOOLEAN;
process (S1, S2)
variable A, B : INT6;
constant C : INT16 : = 100;
Begin
A := S1 +1 ;
B : = S2*2 - C;
GT <= A > B;
End Process;
Ti lc bt u ca qu trnh m phng. Qu trnh -c thc thi mt ln. Bin
EVENT_ON_A -c gn gi tr -1 sau tng ln 1. Sau , thi im bt k xy
ra, s kin trn tn hiu A, qu trnh c hiu lc v pht biu gn bin n -c thc
thi. N lm cho bin EVENT_ON_A tng ln mt. Ti thi im kt thc ca qu
trnh m phng, bin EVENT_ON_A cha tng s s kin xy ra trn tn hiu A.
Mt th d khc ca pht biu qu trnh :
signal A, Z:INTEGER;

107

...
PZ: process(A);
-- PZ l nhn ca qu trnh
variable V1,V2 : INTEGER;
begin
V1:=A-V2;
-- statement 1
Z<= -V1;
-- statement 2
V2:= Z+V1*2; -- statement 3
end process PZ;
Gi s mt s kin xy ra trn tn hiu A ti thi im T1 v bin V2 -c gn
gi tr l 10, trong pht biu th 3, sau mt s kin xy ra trn tn hiu A ti thi
im T2, gi tr ca V2 -c s dng trong pht biu 1 s cng l 10. Mt bin cng
c th -c khai bo bn ngoi mt qu trnh hoc mt ch-ng trnh con. Mt bin
c th -c c v cp nht bi mt hoc c th nhiu qu trnh, nhng bin ny
-c gi l shared variable (Bin chia s).

3.6.2. Pht biu gn tn hiu.


Pht biu gn tn hiu s thay th gi tr hin ti ca tn hiu vi mt gi tr
mi bi vic s dng mt biu thc.
Tn hiu v kt qu ca biu thc cn c cng mt kiu d liu. C php ca
chng nh- sau:
target_signal <= [ Transport] expression [after time_expression]
Pht biu gn tn hiu c th xut hin bn trong hoc bn ngoi mt qu trnh.
Nu n xy ra bn ngoi ca mt qu trnh, n -c xem l mt pht biu gn tn
hiu ng thi.
Khi pht biu gn tn hiu xut hin bn trong qu trnh, n -c xem nh- l
mt pht biu gn tn hiu c th t v n -c thc thi tun t theo th t ca
nhng pht biu tun t khc xut hin bn trong qu trnh.
V d php gn tn hiu trong mt Process (Vi A,B,C,D l cc tn hiu):

108

Khi mt pht biu gn tn hiu -c thc thi, gi tr ca biu thc -c tnh


ton v gi tr ny -c chun b gn cho tn hiu sau khi delay. L-u rng biu
thc -c nh l-ng ti thi im pht biu v khng thc thi ngay m n s thc
thi sau mt thi gian gi chm. C hai kiu Delay -c cung cp chun b cho
vic thc thi tn hiu:
- Transport Delay.
- Inertial Delay.
a. Transport Delay.
N t-ng t nh- s gi chm bn trong ca mt dng in chy qua dy dn.
Nu thi gian gi chm ny -c xem nh- tiu tn vo thc hin cng vic no
v tip sau n ( ng thi im ca mt cng vic tr-c hon thnh ) cn phi thc
hin mt cng vic khc th thi gian thc hin cc cng vic tip theo s -c thm
vo cui ca cng vic tr-c . Cn nu khong thi gian cn thc hin mt cng
vic tin nh ( Thi gian thc hin ca mt cng vic tip theo no ng tr-c
thi im thc hin mt cng vic tr-c, th cu lnh Transport s thc hin chn
vo v thc hin cng vic tin nh ny ).
Xem v d sau : Gi s ta c mt process v biu nh- sau

109

4
3

1 ns

3 ns

4 ns

5 ns

V d :
..........
process (.....)
Begin
S <= transport 1 after 1 ns, 3 after 3 ns, 5 after 5 ns;
S <= transport 4 after 4 ns;
end process;
Nh- v d v biu trn ta thy cng vic th t- cn thc hin tr-c cng
vic th 5, nh-ng trong phn ch-ng trnh th pht biu ca cng vic th 5 li -c
thc hin tr-c cng vic th t-. Hnh v d-i y m t pht biu Transport, sau 3s
n s -c bt sng v sng trong khong thi gian ng bng thi gian bt cng
tc.

b.Inertial Delay.
Inertial Delay ( G- chm do qun tnh ), l gi tr mc nh ca VHDL. N

110

-c dng cho cc thit b m khng c phn ng cho n khi u vo -c php


trong mt khong thi gian nht nh. Th-ng th vi tn hiu c khong thi gian
tc ng khng u v nh hn thi gian gi chm ca cc cng th s b b qua.
Vi v d trn, m t hot ng ca n vi gi chm do sc qun tnh ca
mch. Nu thi gian tc ng ca cng tc nh hn gi chm ca mch th u
ra s khng c tc ng hay n s khng -c bt sng. Gi s ta c cu lnh n
s -c bt sng sau 3 giy, nh-ng cng tc ch tc ng trong thi gian hai giy th
n s khng -c bt sng. Xem hnh v d-i y:

Gi s ta c cu lnh bt n sau 3s. Khi bt cng tc trong thi gian 4s sau


tt cng tc, th n s -c sng sau khi cng tc bt -c 3s v sng trong 4s ng
bng thi gian bt cng tc.
Xem hnh d-i y:

111

c. So snh INERTIAL DELAY v TRANSPORT DELAY.


Inertial Delay

Transport Delay

S <= A after 20 ns

S <= Transport A after 20 ns

S
10ns

20ns

30ns

40ns

10ns

20ns

30ns

40ns

Nh- trn hnh ta thy trong tr-ng hp Inertial Delay, tn hiu A c tc ng


trong khong 10ns, nh-ng cu lnh thc hin u ra S sau 20ns, v vy u ra S s
khng c tc ng. Cn trong tr-ng hp Transport Delay tn hiu u ra s -c
sao y tn hiu u vo sau khi bt u s-n ln ca tn hiu vo c tc ng ( ng
bng khong 20 ns ca cu lnh ).

3.6.3. Cc pht biu IF.

112

Mt pht biu if -c dng chn la nhng pht biu tun t cho vic thc
thi da trn gi tr ca biu thc iu kin. Biu thc iu kin y c th l mt
biu thc bt k m gi tr ca chng phi l kiu lun l.
Dng thng th-ng ca pht biu if l:
if boolean-expression then
sequential-statements
{elsif boolean-expression then
sequential -statement }
{else
sequential-statement}

enf if;
V d1:
if sum <=100 then --<= is less-than-or-equal-to operator.
SUM:=SUM+10;
end if;
V d 2:
signal IN1, IN2, OU : STD_LOGIC;
process (IN1, IN2)
begin
if IN1 = '0' or IN2 = '0' then
OU <= '0' ;
elsif IN1 = 'X' or IN2 = 'X' then
OU <= '1';
else
OU <= '1' ;
end if;
end process;
V d 3:

113

3.6.4. Pht biu CASE.


Dng ca pht biu case l:
case expression is
when choices => sequential -statement

-- branch 1

when choices => sequential -statement

-- branch 2

-- -- C th c nhiu nhnh
{when others => sequential-statement}

-- last branch

end case;
Pht biu case la chn mt trong nhng nhnh cho vic thc thi da trn gi
tr ca biu thc. Gi tr biu thc phi thuc kiu ri rc hoc kiu mng mt chiu.
Cc chn la ( Choices ) c th -c din t nh- mt gi tr n, hoc mt di gi
tr bng vic s dng du " | " hoc s dng mnh khc. Tt c cc gi tr c th
c ca biu thc phi -c th hin trong pht biu case ng mt ln. Cc mnh
khc c th -c s dng bao qut tt c cc gi tr, v nu c, phi l nhnh cui
cng trong pht biu case. Mi mt chn la phi c cng kiu vi kiu ca biu
thc. Mt th d cho pht biu case:
V d 1:
type WEEK_DAY is (MON, TUE, WED, THU, FRI, SAT, SUN);
type DOLLARS is range 0 to 10;
variable DAY: WEEK_DAY;

114

variable POCKET_MONEY: DOLLARS;


case DAY is
when TUE => POCKET_MONEY :=6;
-- branch1
when MON | WED => POCKET_MONEY :=2;
-- branch2
when FRI to SUN => POCKET_MONEY :=7; -- branch3
when others => POCKET_MONEY :=0;
-- branch4
end case;
Nhnh 2 -c chn nu DAY c gi tr l MON hoc WED. Nhnh 3 bao gm
cc gi tr FRI, SAT v SUN. Trong khi nhnh 4 gm cc gi tr cn li, THU. Pht
biu case cng l pht biu tun t, tuy nhin n cng c th -c pht biu xp
lng nhau.
V d 2:

3.6.5. Pht biu NULL.


Pht biu

null

L mt pht biu tun t khng gy ra bt k hnh ng no; H thng s b


qua pht biu NULL v tip tc thc thi vi pht biu k tip. Mt th d cho vic s

115

dng pht biu ny l trong pht biu if hoc trong pht biu case.
V d : Variable A, B : INTEGER range 0 to 31 ;
Case A is
when 0 to 12 =>
B:= A;
when others =>
Null;
End Case;

3.6.6. Pht biu xc nhn ASSERTION.


Pht biu xc nhn rt hay dng cho vic kim tra thi gian v cc iu kin
ngoi di.
V d : assert (X >3 )
report " Setup violation"
severity warning;

3.6.7. Pht biu Loop.


Mt pht biu lp -c s dng lp li mt lot cc cu lnh tun t. C
php ca pht biu lp l:
[loop-label:] iteration-scheme loop
sequential-statements
end loop [loop-lebel];
C 3 kiu s lp. u tin l s lp c dng:
for identifier in range
V d 1: V d v For ...Loop
FACTORAL:=1;
for NUMBER in 2 to N loop
FACTORAL :=FACTORAL*NUMBER;
enf loop;
Trong th d ny, thn ca vng lp thc thi N-1 ln, vi nh danh lp l
NUMBER v tng ln 1 sau mi vng lp. i t-ng NUMBER -c khai bo n
trong vng lp ty thuc vo kiu integer, n c gi tr t 2 n N. V vy khai bo
khng r rng cho nh danh vng lp l iu cn thit, nh danh vng lp cng
khng th -c gn cho bt k gi tr no trong vng lp for. Nu mt bin khc c
cng tn -c to bn ngoi vng lp for, l hai loi bin -c gii quyt ring r

116

v bin s dng trong vng lp for s chuyn giao cho nh danh vng lp. Vng
ca vng lp FOR cng c th l vng ca mt kiu lit k.
V d 2:

type HEXA is (0,1,2,3,A,B,C );

. . . .

for NUM in HEXA(2) downto HEXA(0) loop


-- Num s ly nhng gi tr trong kiu HEXA t 2 cho n 0.
end loop;
V d 3: V d v While .... loop

3.6.8. Pht biu Next.


Pht biu next cng l pht biu lin tc cng ch c th s dng bn trong
vng lp. C php t-ng t nh- pht biu exit:
next [loop-label][when condition];
Kt qu ca pht biu next s b qua nhng pht biu cn li trong ln lp hin
ti ca vng lp v tip tc thc thi vi pht biu u tin trong vng lp k tip.
Nu tn ti mt ln v nu nhn vng lp khng r rng th s xy ra hin t-ng lp
n v cng. i lp vi pht biu exit, n l nguyn nhn ca vng lp b gii hn.
V d 1:
for j in 10 downto 5 loop
if SUM < TOTAL_SUM then
SUM:=SUM +2;
elsif SUM:= TOTAL_SUM then

117

next;
else
null;
end if;
K:=K+1;
end loop;
Khi pht biu next -c thc thi, qu trnh thc hin s nhy n phn cui
ca vng lp (pht biu cui cng K: =K+1) sau gim gi tr ca nh danh vng
lp j, v thc hin li t u.
V d 2:

3.6.9. Pht biu EXIT.


Pht biu exit l mt pht biu tun t n ch c th s dng bn trong vng
lp. N c th lm cho qu trnh thc hin nhy n vng lp trong cng hoc ra
khi vng n v tr ca nhn xc nh no khi n gp nhn ny trong vng lp.
C php ca mt pht biu exit l:
exit [loop-label][when condition]

Nu nhn vng lp khng -c ch ra th qu trnh thc hin s lp n


vng lp trong cng. Nu mnh WHEN -c s dng th vic tn ti vng
lp ch xy ra nu iu kin l ng. Ng-c li, vic thc hin s tip tc vi

118

pht biu k tip.


V d :
SUM :=1; J:=0 ;
L3:loop
J:=J+21;
SUM:=SUM*10
if (SUM >100) then
exit L3;
-- Thc hin exit khi L3 nu Sum> 100
enf if;
end loop L3;

3.6.10. Pht biu WAIT.


Nh- chng ta thy, mt qu trnh m phng c th tr hon (Hay treo s
thc hin ca mt pht biu Process hoc mt ch-ng trnh con ) cho n khi gp
mt iu kin ph hp. C 3 hnh thc c bn ca pht biu wait.
wait on sensitivity-list;
wait until boolean -expression;
wait for time-expression;
V d 1: wait on A,B ;
wait until A = B;
wait for 10 ns;
wait on CLOCK for 20 ns ;
wait until SUM >100 for 50 ms;
S hin din ca sensitivity list trong mt qu trnh trng vi tr-ng hp mt trong
ba trng hp trn ca pht biu wait . Mt pht biu qu trnh c wait on cui
ca Process t-ng -ng vi mt pht biu qu trnh c khai bo sensitivity-list.
Xem hnh d-i y: Hai process ny l t-ng -ng nhau.

V d 2 :
process -- Khng sensitivity list
variable TEMP1, TEMP2:BIT;

119

begin
TEMP1:=A and B;
TEMP2:=C and D;
TEMP1:=TEMP1 or TEMP2;
Z<=not TEMP1;
wait on A, B, C, D; -- Thay th cho sensitivity-list u Process .
End process.
V d 3: Hai Process trong v d d-i y ch ra hai process c pht biu Wait
on. Process bn tri s lm cho Process treo ngay sau khi Start v ch cho n khi c
s kin xut hin trn tn hiu SigA. Cn Process bn phi s thc hin ba cu lnh
v sau ri vo trng thi ch n khi xut hin s kin trn tn hiu SigB.

3.6.11. Cc li gi ch-ng trnh con.


Khi m t thit k theo kiu hot ng hnh vi, cc ch-ng trnh con th-ng
hay -c s dng v -a ra cch thc s dng thun tin. C hai loi ch-ng trnh
con hay -c s dng l Hm v Th tc.
- Th tc ( Procedure) tr v nhiu gi tr.
- Hm ( Function ) tr v mt gi tr n.
Cc li gi th tc s gi th tc m n cn -c thc hin trong mt qu
trnh. Pht biu tr v ( return ) s l im kt thc mt ch-ng trnh con, v n ch
-c s dng trong mt hm hoc mt th tc. i vi hm th n c qui nh vi
pht biu tr v trong thn hm, nh-ng vi th tc th c th s dng tu trong
thn th tc. C php ca pht biu tr v nh- sau:
return [expression];
y expression s -a ra cc gi tr tr v ca hm, pht biu return trong
mt hm cn phi c mt biu thc v gi tr tr v ca n, nh-ng i vi pht biu

120

tr v trong th tc th khng cn phi c mt ca biu thc. Mt hm c th c


nhiu hn mt pht biu tr v, nh-ng ch c mt pht biu tr v -c s dng bi
mt li gi hm.

3.7. Cc pht biu ng thi.


Cc pht biu ng thi -c thc hin song song trong cng thi im m
phng, chng khng thc hin theo th t m chng -c vit ra trong mt kin
trc. Cc pht biu ng thi chuyn thng tin thng qua cc -ng tn hiu.
D-i y l cc pht biu ng thi -c nh ngha trong VHDL:
- Cc pht biu gn ca mt qu trnh (Process).
- Cc pht biu gn tn hiu ng thi .
- Cc pht biu gn tn hiu iu kin.
- Cc pht biu gn tn hiu -c chn la.
- Cc pht biu Block.
- Cc li gi th tc ng thi.
- Cc pht biu xc nhn ng thi.

3.7.1. Pht biu Process .


Pht biu process l pht biu bao gm mt tp cc pht biu tun t v pht
biu process li chnh l pht biu ng thi. C ngha l tt c cc pht biu
Process trong mt thit k -c thc hin mt cch ng thi. Tuy nhin ti mt
thi im nht nh -c -a ra ch c mt pht biu tun t -c thc hin trong
mi process. Mt Process -c kt ni vi phn cn li ca thit k bi vic c
hoc vit ra cc gi tr t cc tn hiu v cc cng m chng -c khai bo pha
ngoi Process. C php ca chng -c vit nh- sau:
[label:] process [(sensitivity_list)]
{process_declaration_part}
begin
{sequential_statements}
end process [label];
Phn khai bo ca mt process ch ra cc i t-ng m vng hot ng ca n
ch thuc vng ca mt process v chng c th l cc i t-ng sau y:

121

- Khai bo bin .
- Khai bo hng .
- Khai bo cc kiu.
- Khai bo cc kiu con.
- Khai bo cc b danh Alias.
- Cc mnh USE.
Mt sensitivity list ( Tp cc s kin thay i trng thi cn x l trong mt
qu trnh ) c cng ngha vi mt Process c cha pht biu wait, m pht biu
wait ny l pht biu cui cng trong mt process v chng c dng sau:

Wait

on sensitivity list ;
Mt process c chc nng ging nh- mt vng lp v hn m trong n c cha
ton b cc pht biu tun t -c ch ra trong vng lp . V vy mt pht biu
process cn phi c hoc mt sensitivity list hoc mt pht biu wait on hoc c hai.
V d 1:
architecture A2 of example is
signal i1, i2, i3, i4, and_out, or_out : bit;
begin
pr1 : process (i1, i2, i3, i4)
begin
and_out <= i1 and i2 and i3 and i4;
end process pr1;
pr2 : process (i1, i2, i3, i4)
begin
or_out <= i1 or i2 or i3 or i4 ;
end process pr2;
end A2
V d 2:

122

3.7.2. Cc php gn tn hiu ng thi.


Mt dng khc ca vic gn tn hiu ng thi l cc php gn tn hiu
ng thi , cc php gn ny -c dng bn ngoi ca mt process nh-ng phi
nm trong mt kin trc ( architecture ). C php ca php gn ny nh- sau:
target_sinal <= expression [after time_expression ];
T-ng t nh- cc php gn tn hiu tun t , mnh after s b b qua bi b
tng hp. Vi bt k mt tn hiu no nm bn phi ca mt php gn u mang
ngha t-ng t nh- mt phn t trong sensitivity list .
Mt thn architecture c th cha s l-ng bt k ca nhng pht biu gn tn
hiu ng thi. V chng l nhng pht biu ng thi nn th t ca nhng pht
biu l khng quan trng. Nhng pht biu gn tn hiu ng thi -c thc thi bt
c khi no c s kin xy ra trong tn hiu -c s dng trong biu thc.
V d1 :
architecture A1 of example is
signal i1, i2, i3, i4, and_out, or_out : bit;
begin
and_out <= i1 and i2 and i3 and i4;
or_out <= i1 or i2 or i3 or i4;
end A1;

123

V d 2:
architecture A2 of example is
signal i1, i2, i3, i4, and_out, or_out : bit;
begin
process (i1, i2, i3, i4)
begin
and_out <= i1 and i2 and i3 and i4;
end process ;
process (i1, i2, i3, i4)
begin
or_out <= i1 or i2 or i3 or i4 ;
end process ;
end A2
V d 3:
architecture A3 of example is
signal i1, i2, i3, i4, and_out, or_out : bit;
begin
process
begin
and_out <= i1 and i2 and i3 and i4;
or_out <= i1 or i2 or i3 or i4;
wait on i1, i2, i3, i4;
end A3;
Ba v d trn y l t-ng -ng nhau.

3.7.3. Cc php gn tn hiu c iu kin v cc php gn tn hiu


-c chn la.
a. Cc php gn tn hiu c iu kin.
Mt php gn tn hiu c iu kin chnh l mt pht biu ng thi v c mt
ch gn nht nh, tuy nhin php gn ny c th c nhiu hn mt biu thc cho

124

mt ch. Ngoi tr biu thc cui cng, cc biu thc cn li phi c mt iu kin
chc chn, cc iu kin ny -c nh gi theo th t. Nu mt iu kin -c
nh gi l TRUE th biu thc t-ng ng -c s dng, ng-c li cc biu thc cn
li s -c s dng. Nh rng ch mt biu thc -c s dng ti mt thi im . C
php ca cu lnh ny nh- sau:
target <= {expression [ after time_expression ] when condition else}
expression [ after time_expression ];
Mt pht biu gn tn hiu c iu kin c th -c m t bi mt pht biu
process m process c cha pht biu IF. Bn c th s dng pht biu gn tn hiu
c iu kin trong mt process .
V d 1:
architecture A1 of example is
signal a, b, c ,d : integer ;
begin
a <= b when ( d >10 ) else
c when ( d >5 ) else
d;
end A1;
V d 2:
architecture A2 of example is
signal a, b, c ,d : integer ;
begin
process (b, c, d)
begin
if ( d > 10) then
a <= b
elsif ( d >5 ) then
a <=c;
else
a <= d;

125

end if;
end process;
end A2;
V d 3: S dng cc pht biu c iu kin.

b. Cc php gn tn hiu c chn la.


Php gn tn hiu c chn la c th ch mt ch gn v cng ch c mt biu
thc with. Gi tr ny -c kim tra ging nh- pht biu Case thng th-ng. N s
qun l bt c s thay i no xut hin ti cc tn hiu -c chn la. C php ca
chng nh- sau:
with choice_expression select
target <= {expression [after time_expression] when choices}
expression [ after time_expression] when choices;
Bt k php gn tn hiu c chn la no u c th -c m t t-ng -ng
bi pht biu process c cha pht biu case. Bn khng -c s dng pht biu gn
tn c chn la trong mt process .
V d 1:
with SEL select

126

Z <= a when 0 | 1 | 2,
b when 3 to 10,
c when others;
V d 2 :
process ( SEL, a, b, c )
case SEL is
when 0 | 1 | 2| =>
Z <= a;
when 3 to 10 =>
Z <= b;
when others =>
Z <= C;
end case;
end process ;
Hai v d trn y l hon ton t-ng -ng nhau.

3.7.4. Cc pht biu Block.


Cc block cho php ng-i thit k nhm cc phn theo trt t logic ca cc
mu ng thi, vi iu kin l cc phn ny khng nm trong l-c s dng ca
cc mu khc ( cc mu m chng -c s dng thay th cc thnh phn khc
trong mt thit k ). Cc block -c s dng t chc cc pht biu gn ng thi
theo th bc. C php ca chng nh- sau:
label : Block
{block_declarative_part}
begin
{concurrent_statement}
end block [label];
Phn khai bo block ch ra cc i t-ng thuc min cc b ca block v c
th l cc thnh phn sau y:
- Khai bo tn hiu.
- Khai bo hng.
- Khai bo kiu.
- Khai bo cc kiu con.
- Thn cc ch-ng trnh con

127

- Khai bo b danh ALIAS


- Cc mnh use
- Khai bo cc thnh phn ( Component).
Cc i t-ng -c khai bo trong mt block ch -c php hot ng trong
block v cc block vng trong ca n. Khi mt block con khai bo mt i t-ng
c trng tn vi i t-ng trong block cha th khai bo ca block con s nh ngha
li i t-ng trng tn vi block cha.
V d :
architecture BHV of example is
signal : out 1 : integer;
signal : out 2 : bit;
begin
B1 : block
signal S : bit;
begin
B1-1 : block
signal S : integer;
begin
out 1 <= S ;
end block B1-1;
end block B1;
B2: block
begin
out 2 <= S ;
end block B2;
end BHV;
Trong v d ny ta thy block B1-1 l block con ca block B1. C B1 v B1-1
u khai bo tn hiu S. Tn hiu S trong B1-1 s l kiu integer v truyn cho tn
hiu out 1 cng l kiu integer, mc d S -c khai bo trong B1 l kiu Bit. Tn
hiu S trong B1 -c s dng trong B2 l kiu Bit, trng vi kiu tn hiu out 2.

3.7.5. Cc li gi th tc ng thi.
Mt li gi th tc ng thi chnh l mt li gi th tc m n -c thc thi
bn ngoi mt process, n ng c lp trong mt kin trc architecture. Li gi th
tc ng thi bao gm :
- C cc tham s IN, OUT, INOUT.

128

- C th c nhiu hn mt gi tr tr v
- N -c xem nh- mt pht biu.
- N t-ng -ng vi mt process c cha mt li gi th tc n.
Hai v d d-i ay l t-ng -ng nhau.
V d 1:
architecture .................
begin
procedure_any (a,b) ;
end..........;
V d 2:
architecture ................
Begin
process
begin
procedure_ any (a,b);
wait on a,b;
end process ;
end .............;

3.7.6. Cc ch-ng trnh con .


Cc ch-ng trnh con bao gm cc th tc v cc hm m n c th -c gi
thc hin cng vic no lp li t cc v tr gi khc nhau trong VHDL. Trong
VHDL cung cp hai kiu ch-ng trnh con khc nhau l:
- Cc th tc (Procedure).
- Cc hm ( Function ).
a. Hm v cc c tr-ng ca hm.
- Chng -c gi v thc hin nh- mt biu thc.
- Lun tr v mt i s.
- Tt c cc tham s ca hm u phi l ch mode IN.
- Tt c cc tham s ca hm phi thuc lp cc tn hiu hoc cc hng.
- Bt buc phi khai bo kiu ca ga tr tr v .

129

- Khng -c cha cc pht biu Wait.


C php ca hm -c khai bo nh- sau:
function identifier interface_list return type_mark is
{subprogram_declarative_item}
Begin
{sequential_statement}
end [identifier];
Cc nh danh identifier ch ra tn ca mt hm, cn interface_list ch ra nh
dng tham s ca mt hm. Mi mt tham s -c nh nghi theo c php sau:
[class] name_list [mode] type_name [:=expression];
y class ca tham s i t-ng phi -c ch ra l tn hiu hoc hng, cn
mode ca i t-ng cn phi l mode in. Nu khng c tham s mode -c ch ra
th -c hiu nh- l mode IN, cn nu khng c tham s class -c ch ra th tham
s -c hiu nh- l mt hng. Xem v d sau:
process
function c_to_f ( c : real ) return real is
variable f : real;
begin
f := c*9.0/5.0 + 32.0;
return (f);
end c_to_f;
variable temp : real;
begin
temp : = c_to_f (5.0) + 20.0;

-- temp = 61

end process;
Tham s chuyn vo hm -c hiu mc nh l mt hng s, v khng c khai
bo ca class.
b. Th tc v cc c tr-ng ca chng.
- Chng -c gi nh- mt li pht biu.
- C th tr v khng hoc mt hoc nhiu i s.
- Cc tham s chuyn giao cho th tc c th l mode in, out, v inout.

130

- Cc tham s chuyn giao cho th tc c th l tn hiu, hng, bin.


- C th c cha pht biu Wait.
C php khai bo th tc nh- sau:
procedure identifier interface_list is
{subprogram_declarative_item}
begin
{sequential_statement}
end [identifier];
Identifier -c s dng ch ra tn ca procedure v interface_list ch ra cc
tham s hnh thc ca procedure. Mi tham s -c s dng theo nh ngha sau:
[class] name_list [mode] type_name [:=expression];
Class ca i t-ng -c xem nh- hng, bin , hoc l tn hiu v mode ca
i t-ng c th l in, out , inout. Nu khng c mode -c ch ra th tham s -c
hiu nh- mode in, nu khng c class -c ch ra th cc tham s mode in -c hiu
nh- l cc hng, cn tham s mode out v inout -c hiu nh- l cc bin.
Cc tham s c th l cc hng, cc bin, hoc cc tn hiu v mode ca chng
c th l in, out, hoc inout. Nu lp ca cc tham s khng xc nh r rng th
mc nhin n l constant, nu n l mode in, cn n l bin nu mode ca tham s
l out hoc inout.
Mt v d thn procedure m t hnh vi hot ng ca cc n v logic s hc
nh- sau :
type OP_CODE is ( ADD, SUB, MUL, DIV, LT, LE, EQ);

procedure ARITH_UNIT (A, B : in INTEGER ;


OP : in OP_CODE ;
Z : out INTEGER;
ZCOMP : out BOOLEAN ) is
begin
case OP is
when ADD => Z := A+B;
when SUB => Z := A-B;
when MUL => Z := A*B;
when DIV => Z := A/B;
when LT => ZCOMP := A<B;

131

when LE => ZCOMP := A<=B;


when EQ
=> ZCOMP := A=B;
end case ;
end ARITH_UNIT;
Ta xem mt v d khc ca thn mt procedure, procedure ny quay vc t
-c xc nh vi tn l ARRAY_NAME, bt u t bit START_BIT ti bit
STOP_BIT, bi mt gi tr ROTATE_BY. Lp i t-ng ca tham s
ARRAY_NAME -c xc nh mt cch t-ng minh. Bin FILL_VALUE t ng
c khi to v 0 mi khi procedure c gi.
Procedure ROTATE_LEFT
(signal ARRAY_NAME : inout Bit_vector ;
START_BIT, STOP_BIT : in NATUAL;
ROTATE_BY : in POSITIVE ) is
Variable FILL_VALUE : BIT;
begin
assert STOP_BIT > START_BIT
report STOP_BIT is not greater than START_BIT
severity NOTE;
for MACVAR3 in 1 to ROTATE_BY loop
FILL_VALUE := ARRAY_NAME (STOP_BIT);
for MACVAR1 in STOP_BIT downto (START_BIT + 1) loop
ARRAY_NAME (MACVAR1) <= ARRAY_NAME (MACVAR1 1);
end loop;
ARRAY_NAME (START_BIT) <= FILL_VALUE ;
end loop;
end procedure ROTATE_LEFT;
Cc procedure -c gi bi li gi procedure. Mt li gi Procedure c th l
mt pht biu tun t hoc mt pht biu ng thi, pht biu ny ph thuc vo ni
xut hin li gi th tc hin ti. Nu li gi ny nm bn trong mt pht biu
process hoc mt ch-ng trnh con khc th n -c gi l pht biu gi procedure
tun t, ng-c li n -c gi l pht biu gi procedure gi ng thi. C php ca

132

pht biu gi procedure nh- sau :


[ label : ] procedure_name ( list_of_actual );
Thc t cc biu thc, cc bin, cc tn hiu hoc cc file, -c chuyn vo
trong th tc v cc tn cu i t-ng v cc tn ny s -c dng ly cc gi tr
tnh ton t trong th tc. Chng -c ch ra mt cch r rng bi vic s dng s
kt hp theo tn v kt hp theo v tr .
V d:
ARITH_UNIT (D1, D2, ADD, SUM, COMP ); -- S kt hp theo v tr.
ARITH_UNIT ( Z => SUM, B=> D2, A=>D1,
OP=>ADD, ZCOMP => COMP);

-- S kt hp theo tn.

Mt pht biu gi th tc tun t -c thc thi tun t cng vi cc pht biu


tun t chung quanh n. Mt pht biu gi th tc ng thi -c thc thi bt c lc
no khi c mt s kin xy ra trn mt trong cc tham s, m cc tham s ny l
mt tn hiu ch in hoc inout. Mt li gi th tc ng thi c ngha t-ng
-ng vi mt process c cha mt li gi th tc tun t v mt pht biu wait.
Pht biu wait ny s lm cho qu trnh ch cho n khi c mt s kin xut hin
trn cc tham s tn hiu ca mode in hoc inout.
Sau y l mt v d ca li gi th tc ng thi v pht biu process t-ng
-ng vi n:
architecture DUMMY_ARCH of DUMMY is
-- Tip n l thn ca th tc
procedure INT_2_VEC ( signal D : out BIT_VECTOR ;
START_BIT, STOP_BIT : in NATUAL ;
signal VALUE : in INTEGER ) is
begin
-- M t hot ng hnh vi ca th tc
end INT_2_VEC;
begin
-- y l v d ca mt li gi th tc ng thi.
INT_2_VEC (D_ARRAY, START, STOP, SIGNAL_VALUE);

133

end DUMMY_ARCH;
Pht biu process t-ng -ng vi li gi mt th tc ng thi nh- sau:
process
begin
INT_2_VEC (D_ARRAY,START,STOP,SIGNAL_VALUE);
-- Phn th hin ca cc li gi th tc tun t
wait on SIGNAL_VALUE;
-- Ch s kin trn SIGNAL_VALUE v xem chng nh- mt tn hiu vo.
end process;

Mt procedure c th s dng hoc l mt pht biu ng thi hoc l


pht biu tun t. Cc li gi ng thi th-ng xuyn -c dng m t
chnh l cc process.
V d ca th tc dng c khai bo postpone ( Tr hon ).
postponend procedure INT_2_VEC ( signal D:out BIT_VECTOR ;
START_BIT,STOP_BIT : in NATUAL;
signal VALUE :in INTEGER) is
begin
-- Phn khai bo hot ng ca th tc
end INT_2_VEC;

Ng ngha ca mt li gi th tc ng thi dng postponed l t-ng


-ng vi nh ngha ca pht biu process t-ng ng vi n v -c gi l
pht biu process b tr hon.
Mt thn process c th c pht biu wait, trong khi mt function th khng
-c php c. Cc function -c s dng tnh ton cc gi tr mt cch tc th.
V vy mt function khng cn c pht biu wait trong . Mt function khng th
gi mt procedure c pht biu wait trong th tc . Mt process m c cha li
gi mt th tc m trong th tc ny c cha pht biu wait, th process ny khng
-c khai bo sensitivity list. Hn na t thc t chng ta thy mt process khng
th nhn bit cc tn hiu thuc sensitivity list v nu c process ny s ri vo trang

134

thi ch ngay lp tc. Vi mt th tc c cha pht biu wait th bt c bin hay


hng no -c khai bo trong th tc s gi nguyn gi tr ca chng trong sut
thi gian thc hin pht biu wait v tn ti ch khi th tc -c kt thc.

3.8. Cc ng gi ( Packages ).
Bn c th ng gi ct cc ch-ng trnh con, cc kiu d liu, cc hng
...th-ng dng s dng chng trong cc thit k khc. Mt package bao gm hai
phn chnh: Phn khai bo v phn thn package, phn khai bo ch ra giao tip cho
package . C php ca khai bo package nh- sau:
package package _name is
{package _declarative_item}
end [package _name];
Phn package _declarative_item c th l bt k kiu no sau y:
- Khai bo kiu.
- Khai bo cc kiu con.
- Khai bo tn hiu.
- Khai bo cc hng.
- Khai bo b danh ALIAS.
- Khai bo cc thnh phn.
- Khai bo cc ch-ng trnh con.
- Cc mnh USE.
Ch ! khai bo tn hiu trong package c mt s vn cn l-u trong khi
tng hp, bi v mt tn hiu khng th -c chia s bi hai Entity. V vy nu
mun dng chung khai bo tn hiu bn phi khai bo tn hiu ny l tn hiu ton
cc.
Phn thn ca package ch ra hot ng thc t ca mt package. Phn thn
ca package phi lun c tn trng vi phn khai bo. C php ca khai bo ny
nh- sau:
package body package _name is
{package _body_declarative-item}
end [package _name] ;

135

Phn package _body_declarative-item c th bao gm:


- Khai bo kiu.
- Khai bo cc kiu con.
- Khai bo cc hng
- Mnh use.
- Thn cc ch-ng trnh con.
V d:
library IEEE;
use IEEE.NUMERIC_BIT.all;
package PKG is
subtype MONTH_TYPE is integer range 0 to 12;
subtype DAY_TYPE is integer range 0 to 31;
subtype BCD4_TYPE is unsigned ( 3 downto 0);
subtype BCD5_TYPE is unsigned ( 4 downto 0) ;
constant BCD5_1: BCD5_TYPE : = b"0_0001" ;
constant BCD5_7: BCD5_TYPE : = b"0_0111" ;
function BCD_INC (L : in BCD4_TYPE) return BCD5_TYPE;
end PKG;
package body PKG is
function BCD_INC (L :in BCD4_TYPE) return BCD5_TYPE is
variable V,V1, V2 : BCD5_TYPE;
begin
V1 : = L + BCD5_1;
V2 : = L + BCD5_7;
case V2(4) is
when ' 0 ' => V : = V1;
when ' 1 ' => V : = V2;
end case;
return (V);
end BCD_INC;
end PKG;

3.9. M hnh cu trc .


Thng th-ng mt h thng s -c m t theo tp hp c th bc ca cc
thnh phn . Mi thnh phn bao gm mt tp cc cng c th giao tip -c vi
cc thnh phn khc. Khi m t mt thit k trong VHDL v mt thit k c th bc
chnh l mt thit k -a ra cc khai bo ca cc thnh phn v cc pht biu th
hin thnh phn .

136

Mt n v c s din t hnh vi hot ng chnh l cc pht biu process,


cn n v c s din t theo kiu cu trc chnh l cc pht biu th hin ca
cc n v thnh phn. C hai loi ny u c th c mt trong mt thn ca mt
kin trc ( architecture ).

3.9.1. Cc khai bo thnh phn .


Mt thn kin trc c th s dng cc Entity khc (khng trong cng khai bo
ca architecture ), cc Entity ny -c m t tch bit v -c t trong th- vin
thit k. s dng chng, ng-i ta dng cc khai bo thnh phn v cc pht biu
th hin ca chng .Trong m t thit k, mi pht biu khai bo thnh phn phi
t-ng ng vi mt Entity . Cc pht biu khai bo thnh phn phi ging vi cc
pht biu -c ch ra trong Entity (cc pht biu giao tip vo ra ca thnh phn
). C php khai bo ca chng nh- sau:
component component _name
[ port ( local_port_declaration ) ]
end component ;
Trong component _name m t tn ca Entity v port_declaration l khai
bo cc cng ca component v phi trng vi phn khai bo ch ra cu
component nm trong phn khai bo ca Entity.

3.9.2. Cc th hin ca component.


Mt component -c nh ngha trong mt architecture c th -c th hin
thng qua vic s dng cc pht biu th hin ca chng. Khi th hin ch -c
php th hin phn giao tip ca component ( Bao gm tn, kiu , h-ng ca cc
cng vo ra ca chng ), cc tn hiu bn trong chng khng -c th hin. C php
th hin component nh- sau:
instantiation_label : component _name
port map (
[ local_port_name =>] expression
{ [local_port_name =>] expression}
);
Mt pht biu th hin component cn phi khai bo phn nhn ca th hin
tr-c instantiation_label. Hnh v d-i y m t phn giao din v phn thc thi

137

bn trong ca mt b cng full_Adder.


A

Sum

FULL_Adder

Cout

Cin

Phn giao din component ca b cng Full_adder.


A

Cin
N1

SUM

B
N3
Cout
N2

Phn thc thi bn trong ca component Full_Adder.


Nh- trn hnh v chng ta thy phn thc thi c ba loi cng khc nhau v
chng -c mang tn nh- sau: OR2_gate, AND2_gate, XOR_gate, chng -c
dng xy dng nn b cng. m t v th hin chng trong thit k, ta c th
vit ch-ng trnh thc thi tng thnh phn ca chng nh- sau:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
Entity AND2_gate is
port ( I0, I1 : in STD_LOGIC ;
O : out STD_LOGIC );
End AND2_gate;
Architecture BHV of AND2_gate is
Begin
O <= I0 and I1;
End BHV;
library IEEE;
use IEEE.STD_LOGIC_1164.all;
Entity XOR_gate is
port ( I0, I1 : in STD_LOGIC ;
O : out STD_LOGIC );
End XOR_gate;
Architecture BHV of XOR_gate is

138

Begin
O <= I0 xor I1;
End BHV;
library IEEE;
use IEEE.STD_LOGIC_1164.all;
Entity OR2_gate is
port ( I0, I1 : in STD_LOGIC ;
O : out STD_LOGIC );
End OR2_gate;
Architecture BHV of OR2_gate is
Begin
O <= I0 xor I1;
End BHV;
th hin cc component ny trong mt thit k, ta khai bo chng nh- sau:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
Entity FULL_ADDER is
port (A, B, Cin : in STD_LOGIC;
Sum, Cout : out STD_LOGIC);
End FULL_ADDER;

Architecture IMP of FULL_ADDER is


component XOR_gate
port ( I0, I1 : in STD_LOGIC; O : out STD_LOGIC );
end component ;

component AND2_gate
port ( I0, I1 : in STD_LOGIC; O : out STD_LOGIC );
end component;
component OR2_gate
port ( I0, I1 : in STD_LOGIC; O : out STD_LOGIC );
end component;
signal N1, N2, N3: STD_LOGIC;

139

begin
U1 : XOR_gate port map (I0 => A, I1=> B, O=>N1);
U2 :AND2_gate port map ( A, B, N2);
U3 :AND2_gate port map ( Cin, N1, N3);
U4 :XOR_gate port map ( Cin, N1, Sum);
U5 :OR2_gate port map ( N3, N2, Cout);
end IMP;

3.9.3. Cc pht biu Generate.


Pht biu generate l mt pht biu ng thi v n -c nh ngha trong
phn architecture. N -c dng m t cc cu trc ging nhau, hay ti to li
cc cu trc khc ging nh- bn gc. C php ca chng nh- sau:
instantiation _label : generation_scheme generate
{concurrent_statement}
end generate [instantiation _label];
C hai loi l-c generation : L-c for v l-c if. L-c for -c
dng din t cu trc thng th-ng, n -c dng khai bo mt tham s
generate v mt di ri rc ca l-c for ( ch ra tham s vng lp v di ri rc
trong cc pht biu lp tun t ). Cc gi tr tham s ca generate c th -c c
nh-ng khng -c gn hay chuyn ra ngoi pht biu generate.
a. S dng l-c for:
V d : Gi s ta c b cng 4 bit m trong bao gm bn b cng
Full_adder nh- -c m t trn. Xem hnh d-i y:

140

X (3)

Y (3)

X (2)

Y (2)

X (1)

Y (1)

X (0)

Y (0)

'0'

Cout
FA (3)

FA (2)

FA (1)

FA (0)

Z (3)

Z (2)

Z (1)

Z (0)

m t b cng 4 bit ny v s dng pht biu generate, s dng m t b


cng Full_Adder nh- trn ta m t. Ta c th vit chng nh- sau:
architecture IMP of FULL_ADDER4 is
signal X, Y, Z : STD_LOGIC_VECTOR ( 3 downto 0 ) ;
signal Cout : STD_LOGIC ;
signal TMP : STD_LOGIC_VECTOR ( 4 downto 0 ) ;

component FULL_ADDER
port ( A, B, Cin : in STD_LOGIC ;
Sum, Cout : out STD_LOGIC );
end component ;
begin

TMP (0) <= ' 0 ';


G : for I in 0 to 3 generate
FA: FULL_ADDER port map ( X (I), Y(I), TMP (I), Z (I),TMP ( I+1 ));
end generate ;
Cout <= TMP (4);
end IMP;

141

b. S dng l-c if.


X (3)

Y (3)

X (2)

Y (2)

X (1)

Y (1)

X (0)

Y (0)

Cout
FA (3)

FA (2)

FA (1)

HA (0)

Z (3)

Z (2)

Z (1)

Z (0)

S b cng bn bit s dng mt b cng


Half_ADDER v ba b cng FULL_ADDER
Mt s cu trc c dng khng theo qui lut chun no, vi tr-ng hp ny ta
c th s dng l-c if. Gi s ta m t b cng bn bit nh- trn hnh trn v s
dng lc IF generate m t b cng ny. Ch-ng trnh -c vit nh- sau:
architecture IMP of FULL_ADDER4 is
signal X, Y, Z : STD_LOGIC_VECTOR ( 3 downto 0 ) ;
signal Cout : STD_LOGIC ;
signal TMP : STD_LOGIC_VECTOR ( 4 downto 1) ;
component FULL_ADDER
port ( A, B, Cin : in STD_LOGIC ;
Sum, Cout : out STD_LOGIC );
end component ;
component HALF_ADDER
port ( A, B : in STD_LOGIC ;
Sum, Cout : out STD_LOGIC );
end component ;
begin
G0 : for I in 0 to 3 generate
G1: if I = 0 generate

142

HA: HALF_ADDER port map ( X (I), Y(I), Z (I), TMP ( I+1 ));
end generate ;
G2: if I >= 1 and I <= 3 generate
FA: FULL_ADDER port map ( X (I), Y(I), TMP (I), Z (I),TMP ( I+1 ));
end generate ;
end generate ;
Cout <= TMP ( 4 );
end IMP;

3.9.4. Cc thng s ca vic nh cu hnh.


Trong mt Entity c th c mt vi cu trc, v vy cc chi tit cu vic nh
cu hnh cho php ng-i thit k chn cc Entity v kin trc ca n. C php khai
bo ca chng nh- sau:
for instantiation _list : component _name
use Entity library_name. Entity _name [( architecture _name)] ;
Nu ch c mt kin trc architecture th tn architecture c th b b qua.
Xem thm mt v d d-i y:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
Entity FULL_ADDER is
port (A, B, Cin : in STD_LOGIC;
Sum, Cout : out STD_LOGIC);
End FULL_ADDER;
Architecture IMP of FULL_ADDER is
component XOR_gate
port ( I0, I1 : in STD_LOGIC; O : out STD_LOGIC );
end component ;
component AND2_gate
port ( I0, I1 : in STD_LOGIC; O : out STD_LOGIC );
end component;
component OR2_gate
port ( I0, I1 : in STD_LOGIC; O : out STD_LOGIC );

143

end component;
signal N1, N2, N3: STD_LOGIC;
for U1 : XOR_gate use entity work.XOR_gate (BHV);
for others : XOR_gate use entity work.XOR_gate (BHV);
for all : AND2_gate use entity work.AND2_gate (BHV);
for U5 : OR2_gate use entity work.OR2_gate (BHV);

begin
U1 : XOR_gate port map (I0 => A, I1=> B, O=>N1);
U2 :AND2_gate port map ( A, B, N2);
U3 :AND2_gate port map ( Cin, N1, N3);
U4 :XOR_gate port map ( Cin, N1, Sum);
U5 :OR2_gate port map ( N3, N2, Cout);
end IMP;

3.10. M hnh mc RT (Register Tranfer) v cc mch logic t hp.


DIN

DOUT
Combinational
Logic
register

clock

Mt thit k mc chuyn i thanh ghi bao gm mt tp cc thanh ghi -c


kt ni vi mch logic t hp nh- -c ch ra trn hnh v. Mt process khng c
cha cc pht biu if trn cc s-n chuyn i tn hiu hoc cc pht biu wait trn
cc s kin ca tn hiu th -c gi l cc process t hp.
Tt c cc pht biu tun t ngoi tr pht biu wait , pht biu lp, pht biu
if trn s-n chuyn i tn hiu c th -c s dng m t cc mch logic t hp
.

144

Cc mch logc t hp khng c b nh nh cc gi tr. V vy mt bin


hoc mt tn hiu cn phi -c gn mt gi tr tr-c khi -c tham chiu. y l
mt v d m t mch logic t hp :
process (A, B, Cin)
begin
Cout <= ( A and B ) or (( A or B) and Cin );
end process ;
Ch ! V khng c cc pht biu if, wait, loop nn cc tn hiu vo phi
thuc danh sch sensitivity list .

3.11. Cc thit b logic c bn.


3.11.1. Cc b cht.
Cc flip - flop v cc b cht l hai thit b nh mt bit th-ng hay -c s
dng nht trong cc mch s. Mt Flip - Flop chnh l mt thit b nh -c khi
to bi kch thch ca s-n tn hiu, cn b cht l mt thit b nh cm nhn
chuyn mc ca tn hiu. Ni chung cc b cht chng -c tng hp t cc biu
thc iu kin khng hon ton r rng trong vic m t mch logic t hp. Tt c
cc tn hiu hoc cc bin m khng -c iu khin d-i tt c cc iu kin u
tr thnh phn t cht.
Cc pht biu if and case -c ch ra khng hon ton r rng u to ra cc
b cht.
V d d-i y pht biu IF khng gn mt gi tr cho tn hiu Data_out khi S
khng bng ' 1', v vy khi tng hp b tng hp s to ra mt b cht.
Signal S, Data_in, Data_out : bit;
process (S, Data_in)
Begin
if ( S = '1' ) then
Data_out <= Data_in;
end if;
end process ;

Data_In

SET

Data_out

S
CLR

trnh b cht nhm ta phi gn tt c cc gi tr ti tt c cc tn hiu d-i


tt c cc iu kin, thm vo pht biu else ca v d tr-c th b tng hp s tng

145

hp nh- mt cng AND. xem v d d-i y:


Signal S, Data_in, Data_out : bit;

Data_In

process (S, Data_in)


Begin
if ( S = '1' ) then
Data_out <= Data_in;
else
Data_out <= ' 0 ';
end if;
end process ;

Data_out
S

Chng ta c th ch ra mt b cht vi -ng reset khng ng b hoc cc


-ng preset khng ng b nh- sau:
Signal S, RST, Data_in, Data_out : bit;
Data_In
process (S, RST, Data_in)
Begin
if ( RST = '1' ) then
Data_out <= ' 0 ';
elsif ( S = ' 1 ' ) then
Data_out <= Data_in;
end if;
end process ;

SET

en
CLR

Data_out

RST

Thay v -ng Data_out -c gn bng ' 0 ', chng ta c th gn '1' cho -ng
Preset khng ng b.

3.11.2. Cc FLIP - FLOP.


Mt process vi cc pht biu if trn s-n chuyn tn hiu hoc cc pht biu
wait trn s kin ca tn hiu -c gi l mt qu trnh thc hin theo nhp ng h.
Mt Flip - Flop s oc to ra nu c -c mt kch thch bi mt s-n tn hiu, hn
na nu php gn tn hiu -c thc hin trn vic kch thch chuyn mc ca mt
tn hiu khc.
V d :
Signal CLK, Data_in, Data_out : bit;
Data_In
process (CLK)
Begin
if ( CLK'event and CLK = '1' ) then
Data_out <= Data_in;
end if;
end process ;

SET

CLK
CLR

Data_out

146

3.11.3. Cc -ng tn hiu SET v RESET ng b.


Vic thit lp cc u vo (SET) v reset cc u ra ng b ca Flip - Flop
cng vi hot ng ca h thng ng h, ngoi cc khong thi gian khc cc tn
hiu ny khng -c xem xt, iu ny -c thc hin bi phn t nh.
Signal CLK, S_RST, Data_in, Data_out : bit;
process (CLK)
Begin
if ( CLK'event and CLK = '1' ) then
if (S_RST = '1') then
Data_out <= ' 0 ';
else
Data_out <= Data_in;
end if;
end if;
end process ;

Data_In
'0'

MUX

SET

Data_out

S_RST

CLK
CLR

3.11.4. Cc -ng tn hiu SET v RESET khng ng b.


Signal CLK, A_RST, Data_in, Data_out : bit;
process (CLK, A_RST)
Begin
if ( A_RST = '0' ) then
Data_out <= ' 0 ';

Data_In

SET

Data_out

CLK

elsif ( CLK'event and CLK = ' 1 ' ) then


Data_out <= Data_in;
end if;
end process ;

CLR

A_RST

Cc -ng SET v RESET ca Flip - Flop hot ng c lp vi -ng Clock.

3.11.5. Cc mch RTL t hp v ng b.


Chng ta c th chia cc pht biu ca mt process RTL thnh vi mch t hp
v vi mch ng b.
Phn mch ng b dng m t cc mch con m cc hot ng hnh vi
ca chng ch -c -c nh l-ng khi c chuyn mc ca tn hiu.
Phn mch t hp dng m t cc mch con m hot ng hnh vi ca
chng s -c nh l-ng bt c khi no c s thay i ca tn hiu thuc sensitivity
list . Tt c cc tn hiu -c tham chiu trong phn mch t hp cn phi thuc
trong danh sch sensitivity list . Xem v d sau:

147

Q1

PB
FF

CLK

FF

Q2

PB.Pulse

Entity PULSER is
port ( CLK, PB : in bit;
PB_PULSER : out bit );
end PULSER;
architecture BHV of PULSER is
signal Q1, Q2 : bit;
begin
process ( CLK, Q1, Q2 )
begin
if ( CLK'event and CLK = ' 1' ) then
Q1 <= PB;
Q2 <= Q1;
end if;
PB_PULSE <= ( not Q1 ) nor Q2;
end process ;
end BHV;

3.11.6. Cc thanh ghi.


C rt nhiu kiu thanh ghi m chng -c s dng trong mt mch. V d
sau y s ch ra mt thanh ghi bn bit m chng -c t tr-c khng ng b v
tr " 1100 ".

148

Dout (3)

Dout (2)

Q
S

Dout (1)

Dout (0)

Q
R

Din (3)

Din (2)

Din (1)

Din (0)

CLK
ASYNC

signal CLK, ASYNC : Bit;


signal Din, Dout : Bit_vector ( 3 downto 0 );
process ( CLK, ASYNC )
begin
if (ASYNC = '1' ) then
Dout <= " 1100 ";
elsif ( CLK'event and CLK = '1' ) then
Dout <= Din;
end if;
end process ;

3.11.7. Thanh ghi dch.


Mt thanh ghi c kh nng dch cc bit thng tin hoc sang phi hoc sang tri
-c gi l mt thanh ghi dch. Cu hnh logic ca thanh ghi bao gm mt lot cc
Flip - Flop -c ni tng vi nhau, u ra ca Flip - Flop ny -c ni vo u vo
ca Flip - Flop kia. Tt c cc Flip - Flop u nhn xung ng h chung nn n c
th lm cho d liu dch t trng thi ny sang trng thi tip theo.
Xt v d v thanh ghi dch 4 bt sau:
signal CLK, Din, Dout : Bit ;
process (CLK)
variable REG : bit_vector ( 3 down to 0 );
begin
if ( CLK'event and CLK = '1' ) then

149

REG : = Din & REG ( 3 downto 1);


end if;
Dout <= REG (0);
end process ;
Cu hnh ca chng nh- sau:

Din

FF

FF

FF

Dout

FF

CLK

3.11.8. Cc b m khng ng b.
B m khng ng b l b m m trng thi ca n thay i khng b iu
khin bi cc xung ng b ng h.
Cch m t b m ny nh- sau:
Count (0)
1
CLK

FF

Count (1)

FF

Count (2)

Count (3)

FF

RESET

signal CLK, RESET : Bit;


signal COUNT : Bit_vector ( 3 downto 0 );
process ( CLK, COUNT, RESET )
begin
if RESET = '1' then COUNT <= "0000";
else
if (CLK' event and CLK = '1' ) then
COUNT (0) <= not COUNT (0);
end if;
if (COUNT(0)' event and COUNT(0) = '1' ) then
COUNT (1) <= not COUNT (1);
end if;
if (COUNT(1)' event and COUNT(1) = '1' ) then

FF

150

COUNT (2) <= not COUNT (2);


end if;
if (COUNT(2)' event and COUNT(2) = '1' ) then
COUNT (3) <= not COUNT (3);
end if;
end if;
end process ;

3.11.9. Cc b m ng b.
Nu tt c cc Flip - Flop ca b m -c iu khin bi tn hiu clock
chung th chng -c gi l b m ng b.
Cch vit chng nh- sau:
signal CLK, RESET, load, Count, Updown : Bit;
signal Datain : integer range 0 to 15;
signal Reg : integer range 0 to 15: = 0;
process ( CLK, RESET )
begin
if RESET = '1' then Reg <= 0;
elsif ( CLK'event and CLK = '1' ) then
if ( Load = ' 1' ) then
Reg <= Datain;
else
if (Cout = '1' ) then
if Updown = '1' then
Reg <= ( Reg +1) mod 16;
else
Reg <= ( Reg -1 ) mod 16;
end if;
end if;
end if;
end if;
end process ;

3.11.20. Cc b m ba trng thi.


Bn cnh cc s 0 v 1, cn mt tn hiu th ba trong h thng s : l trng
thi tr khng cao ( Z ).
Trong cc kiu tin nh ngha ca cc ng gi chun khng c kiu no m

151

t gi tr ca tr khng cao, v vy ta cn s dng kiu STD_LOGIC m t b


m ny.
Library IEEE;
use IEEE.STD_LOGIC_1164. all;
architecture IMP of TRI_STATE is
Signal Din, Dout, OE : STD_LOGIC;
Begin
process (OE, Din)
Begin
if ( OE = '0' ) then
Dout <= ' Z ';
else
Dout <= Din;
end if;
end process ;

OE

Din

Dout

3.11.21.M t Bus.
Mt h thng Bus c th -c xy dng vi cc cng ba trng thi thay v cc
cng multiplexers.
Ng-i thit k phi m bo khng c nhiu hn mt b m trng thi kch
hot ti bt k thi im no. Cc b m kt ni cn phi -c iu khin v vy
ch c b m ba trng thi truy cp -ng Bus trong khi cc b m khc duy tr
trng thi tr khng cao.
Thng th-ng cc php gn tn hiu tc th, chng hn nh- cc -ng Bus
trong v d d-i y khng -c php mc mt kin trc. Tuy nhin cc kiu
d liu STD_LOGIC v STD_LOGIC_VECTOR c th c nhiu -ng iu khin.
library IEEE;
use IEEE.STD_LOGIC_1164.all;
Entity BUS is
port (S : in STD_LOGIC_VECTOR ( 1 downto 0 );
OE : buffer STD_LOGIC_VECTOR ( 3 downto 0 );
R0, R1, R2, R3 : in STD_LOGIC_VECTOR ( 7 downto 0 );
BusLine : out STD_LOGIC_VECTOR ( 7 downto 0 ) );
end BUS ;

152

architecture IMP of BUS is


Begin
Process (S)
Begin
Case (S) is
when " 00 " => OE <= "0001";
when " 01 " => OE <= "0010";
when " 10 " => OE <= "0100";
when " 11 " => OE <= "1000";
when others => null;
end Case;
end Process ;
BusLine <= R0 when OE (0) = ' 1' else "ZZZZZZZZ";
BusLine <= R0 when OE (1) = ' 1' else "ZZZZZZZZ";
BusLine <= R0 when OE (2) = ' 1' else "ZZZZZZZZ";
BusLine <= R0 when OE (3) = ' 1' else "ZZZZZZZZ";
end IMP;
Bus Line
OE (0)

S (0)

2 to 4

OE (1)

OE (2)

OE (3)

0
1

Decoder
S (1)

2
3

R0

R1

Cu trc -ng Bus tm bit

R2

R3

153

Ch-ng IV
Thit k b iu khin ng c b-c
4.1. Gii thiu tm tt
Vic ng dng iu khin cc m t b-c, thng th-ng -c kt hp vi cc
b vi x l to ra mt kh nng iu khin v tr vi chnh xc cao. Motor
b-c l thit b m n c th quay vi mt s chnh xc trn mi b-c. Cc loi
motor b-c in hnh th-ng quay vi gc quay l 150 hoc 7.50 trn mt b-c,
th-ng th motor -c ch ra s b-c cn thit quay ht mt vng 3600 ( Vi
motor b-c quay 150 trn mt b-c s quay 24 b-c trong mt vng). Vic iu
khin ng c b-c chnh l iu khin vic cung cp in p trn cc cun dy ca
chng. ch-ng ny tc gi xin trnh by mt v d n gin s dng CPLD, FPGA
v gii thiu b vi x l th-ng dng iu khin ng c b-c vi bn cun dy
pha. V d ny l mt v d n gin nhm lm quen v hiu cch lp trnh trn
cu trc cu CPLD v FPGA ch khng -a vo ng dng no c. Tuy nhin nu
mun pht trin v d ny thnh ng dng th vic trin khai cng rt d dng, v cc
b-c c bn ca thit k s -c tin hnh theo trnh t, v ch thm mt s thit b
n gin khc nh- Encoder hay cc mt quang l c th c mt vng iu khin kn
i vi v d ny .

4.2.Thit k b iu khin ng c b-c


4.2.1. iu khin ng c b-c s dng b vi iu khin 89C51 truyn
thng .
iu khin ng c b-c, c ngha l ta phi cung cp mt lot cc in p
vo bn cun ca motor. Cc cun s -c cp nng l-ng motor quay -c mt
b-c. Cc mu cp nng l-ng cho cc cun cn phi -c cung cp chnh xc. Cc
mu ny s -c thay i ph thuc vo ch s dng vi motor. Vi cc ch
thng th-ng cho cc ng dng c m men quay thp, th-ng -c s dng ch
iu khin na b-c, c ngha l vi motor c phn gii 24 b-c trong mt
vng quay th s quay 48 b-c trong mt vng quay. S in hnh iu khin
mt ng c b-c c s nh- hnh 4.1. y l s -c tc gi s dng trong

154

thc t iu khin vi cc ng dng c m men quay ca motor thp . S dng


bng MosFet iu khin , v loi ny thng th-ng iu khin bng p.

VCC

VCC

IRF 630

VCC

IRF 630

Bit0

VCC
Bit1

VCC

Bit2

VCC

Bit3

IRF 630

IRF 630

Hnh 4.1. S iu khin Motor b-c, phn cng sut


Gi s b vi x l dng bn cng to ra mu bit (Bit 0, Bit 1, Bit 2, Bit 3)
iu khin ng c quay, mu bit iu khin ng c quay na b-c -c ch ra nhbng 4.1:
Bng 4.1. Mu bit iu khin na b-c
Step

Bit 3

Bit 2

Bit 1

Bit 0

Vi cc ng dng c m men quay ln mu b-c th-ng -c s dng ch ra


bng 4.2.

155

Bng 4.2. Mu bit iu khin c b-c:


Step

Bit 3

Bit 2

Bit 1

Bit 0

iu khin motor b-c, b vi x l cn phi -a ra cc mu bit tun t nhhai bng va nu. o chiu quay ca ng c phi thc hin to mu bit tun t
theo th t ng-c li ca cc b-c. L-u , sc qun tnh ca ng c cn c mt
gi chm nht nh (thng th-ng khong t 5 n 15 ms) gia mi b-c.
D-i y xin gii thiu ch-ng trnh -c vit bng ngn ng C v np cho
chip vi iu khin h 89C51 hoc 89C2051 dng bn d-ng song song ca cng P1.
Nu dng thch anh khc th phi tnh gi tr np cho TH0 v TL0 khc,
ch-ng trnh sau iu khin cho motor quay 30 b-c lin tc sau o chiu quay.
y l ch-ng trnh v d dng tham kho tr-c khi b-c sang thc hin trn
CPLD v FPGA.
#include <c:\keil\c51\inc\reg51.h>
#include <c:\Keil\c51\inc\absacc.h>
void time()
{
TH0=0x9E; /* Thch anh 6Mhz*/
TL0=0x58; /* Np b m gi chm 50 ms */
TF0=0;
TR0=1;
while (TF0==0);
TR0=0;
}
/*-------------------------------------------------------------------------------*/
unsigned char steptab[] = {0x0a, 0x08, 0x09, 0x01, 0x05, 0x04, 0x06, 0x02};
//unsigned char steptab[] = {0x0a,0x09,0x05,0x06};
main()

156

{
unsigned char ptr =0;
unsigned char cntr;
bit DFLAG;
TMOD=0x21;
DFLAG=0;
while(1)
{
for (cntr=0;cntr<30;cntr++)
{
P1=steptab[ptr&0x7];
time();
if (DFLAG==0)
ptr++;
else
ptr--;
}
DFLAG=!(DFLAG);
}
}

c gi chm gia cc b-c, phi to b dm gi chm 50 ms vi thch


anh 6 MHz th phi np 9E58H vo thanh ghi TH0 v TL0.
4.2.2 iu khin ng c b-c s dng CPLD XC9572XL
Mc ny s thit k b iu khin ng c b-c vi bn phm gt -a vo
CPLD iu khin ng c b-c vi cc chc nng sau:
- SW1 : Dng khi ng v dng ng c . ( Cng tc Start/Stop)
- SW2 : Dng o chiu quay ca ng c . ( Cng tc Dir)
- SW3: Dng tng gim tc ng c. ( Tng, gim tc ng c Inc/Dec)
- SW4 : Dng Reset h thng .
1. S khi ca h thng :
thit k mt ch-ng trnh trong CPLD, thng th-ng ta phi v s khi,

157

hoc m t k hn dng m t my trng thi, sau in cc tn hiu vo ra.Vi


thit k ny, cn phi thit k ba khi trong CPLD, sau tng hp chng v -a
vo mt thit k m c cha ba khi ny.
Tr-c tin khi x l phm v to tn hiu iu khin bn trong phi lun qut
phm, nhn bit tn hiu iu khin, sau ra lnh cho khi to b-c xut ra
cc mu b-c ( Xem hnh 4.2 ).
Khi to mu b-c s nhn tn hiu t b to xung Clock lm Clock ca
mnh, ph thuc vo tn hiu iu khin ca khi iu khin -a sang, b to Clock
s to Clock cho khi to b-c, t s iu khin -c tc ca ng c nhanh
hay chm.
Khi to mu b-c -c thc hin ph thuc vo khi to Clock -a sang, v
th cc b-c tun t -c -a ra theo tn hiu Clock ny.
Do y s dng loi XC9572XL 3.3V nn mch u ra ta phi ghp opto
cch ly trnh hng vi mch.
CPLD XC9572
Khi X L
Phm v To
Tn Hiu iu
Khin

Tn hiu
iu khin

Khi To Cc
Xung Ra Theo
Mu B-c

Cc mu bit

Khi Cng Sut


IRF 630

Tn hiu iu khin
Clock

Clock h thng 8 MHz


Khi Phm
Chc Nng

Khi To Xung
Clock

Hnh 4.2. S khi b iu khin ng c t bn phm


s dng CPLD XC9572XL
2. To thit k:
a. Thit k Modul to mu b-c: Tr-c tin ta i vit ch-ng trnh cho Modul
to mu b-c tr-c, xy dng -c khi ny ta s dng m t FSM ( C th dng

158

ch-ng trnh StateCAD hoc vit trc tip bng VHDL). y tc gi xin gii thiu
ch-ng trnh -c vit bng VHDL. S m t trng thi ca modul to b-c c
dng nh- sau:
RESET

E = 0 & DIR = 0
E =1

Step_0

Step_1

E =1

E = 0 & DIR = 1

E = 0 & DIR = 0

E = 0 & DIR = 1

E = 0 & DIR = 1

E = 0 & DIR = 0

E = 0 & DIR = 1
E =1

Step_3

Step_2

E =1

E = 0 & DIR = 0

Hnh 4.3. S m t my trng thi ca Modul SecGenerator


Cc mu b-c s l bn b-c hoc 8 b-c nh- sau:
-- Full Step Table : ( x"A", x"9" , x"5",x"6" )
-- Half Step Table : (x"A",x"8",x"9",x"1",x"5",x"4",x"6",x"2").
Vi s trn ta thy, motor quay bn b-c theo mt chiu nht nh, ta
phi to tn hiu E = 0, v Dir = 0 -a vo khi ny.
Cn mun quay theo chiu ng-c li ta phi cho E = 0 v Dir = 1.
Trong ch-ng trnh Project Navigator ta to mt modul mi vi tn l
SecGenerator.vhd v khai bo cc u vo u ra, ch-ng trnh -c vit d-i
dng VHDL ( Xem phn ph lc1, file SecGenerator.vhd ).
Sau khi vit xong tin hnh kim tra c php v m phng. To file m phng
vi tn l Sec_tb.tbw v to biu kim tra nh- hnh 4.4.

Hnh 4.4. To biu kim tra

159

Khi m phng dng sng u ra c dng sau:

Hnh 4.5. Dng sng ra ca modul SecGenerator


Nh- chng ta thy cc mu b-c -c -a ra u ra vi tn sec nh- hnh 4.5.
Nh- vy modul to mu b-c hon ton -c m phng, hn na n cng
-c kim nghim v chy th trong mch thc t (Xem hnh 4.25 v hnh 4.26).
b. Thit k Modul to xung Clock :
Vic modul to mu b-c s -a ra cc b-c nhanh hay chm l do khi to
xung Clock ny -a sang. Trong phn mm Project Navigator to modul mi vi
tn Clk_Generator.vhd. L-u thut ton ca Modul ny nh- hnh 4.6.
Xem file Clk_Generator.vhd trong ph lc1. Tip theo ta i kim tra c php
ca modul ny v i m phng.
File m phng h thng c tn l Clk_tb.twb, kt qu m phng s thu -c
v c dng nh- hnh 4.7.

160

Init
COUNT 10M = 0, Clk_1ms = 0,
COUNT_xms = 0, Clk_Out =0

RESET = 1 ?

Yes

No

Clk_1ms?
Clk In ?

No

No
Yes

Yes

COUNT_xms = COUNT_xms + 1

COUNT 10M = COUNT 10M + 1

COUNT_xms = DIV ?

No

No
COUNT 10M = 4000 ?

Yes

Yes
COUNT_xms = 0
Clk_Out = Not (Clk_Out)

COUNT 10M = 0
Clk_1ms = Not (Clk_1ms)

Hnh 4.6. L-u thut ton ca Modul Clk_Generator

Hnh 4.7. Biu dng sng u ra ca Modul Clock


Nh- trn biu ta thy dng sng u ra ca tn hiu Clk_out thay i ph

161

thuc vo tn hiu Div -a vo u vo. Nh c tn hiu ny thay i m motor s


xut ra cc mu b-c nhanh hay chm.
c. Thit k Modul qut phm v to lnh iu khin:
Nh- gii thiu phn trn, cc phm s c cc chc nng nh- Reset,
Inc/Dec, Cnt_Dir, Start/Stop. Xong v thit k phm theo kiu phm gt nn ch cn
kim tra bn phm.
Khi bt ngun, ch-ng trnh phi kim tra cc phm ny lin tc -a ra cc
lnh iu khin . Cc lnh iu khin Motor bao gm :
- Tn hiu Reset : Reset h thng.
- Tn hiu Start/Stop : Cho php hay khng cho php h thng hot ng.
- Tn hiu Inc : Tng hay gim tc ng c.
- Tn hiu Dir : Dng o chiu ng c.
L-u thut ton ca Modul ny th hin hnh 4.8. Xem ch-ng trnh phn
ph lc 1, file Inc_Dec.vhd. By gi ta i m phng modul ny.
T-ng t nh- trn, chy file Inc_Dec_tb.tbw v biu m phng s thu -c
nh- hnh 4.9.

Init
Dout = "000", E =1, Dir =1

Yes

Reset = 1

No

Start = 0 ?

E=1

Cnt_Dir = 0 ?

E=0

Dir =1

Inc = 0 ?

Dout =Dout - 1

Yes

Yes

Yes

No

No

No

Dir = 0

Dout =Dout +1

Hnh 4.8. L-u thut ton Modul qut phm chc nng, Inc_Dec.vhd

162

Hnh 4.9. Dng sng u ra ca Modul iu khin v qut phm


Nh- biu dng sng ra ta thy s ph thuc vo phm Inc -c gt v
khng hay mt th d liu Dout -a ra tng ln hay gim i. Hoc khi o chiu cc
bt s to ra theo th t ng-c li trong bng.
d. Thit k Modul tng th : Vic thit k Modul ny ch n thun l ghp
cc modul thit k li vi nhau, hay th hin chng trong mt modul lp trn
(Xem ch-ng trnh trong File Top_Step.vhd trong phn ph lc 1), v th trong
ch-ng trnh Project Navgator khi chy ch-ng trnh ECS s cho ta mt khi chc
nng kn ch c u vo v ra nh- hnh 4.10.

Hnh 4.10 . S tng th ca Modul iu khin Motor b-c


khi chy ch-ng trnh ECS trong Project Navigator

163

Modul ny s c bn u vo phm ( Inc , Start , Reset, Cnt_Dir ), mt -ng


Clock 8MHz u vo, clock ca h thng. Ba u ra bao gm mt Bus u ra bn
bit dng to mu b-c cho Motor v hai u ra tn hiu Led ch th. S gn
chn ng-i dng -c thc hin trong ch-ng trnh PACE nh- sau:

Ton b thit k ny -c dch, np vo trong CPLD XC9572XL thng qua


cp JTAG v cho chy th trn mch thc t. Cc modul ch-ng trnh -c gii
thiu trong ph lc 1. mc ny tc gi xin khng gii thiu s mch in phn
iu khin v mch in phn cng sut v hai s ny l hai s dng n gin.
4.2.3 iu khin motor b-c ghp ni vi my tnh PC s dng Board
mch Spartan-3 FPGA
Phn ny l phn thit k nng cao v s dng vi mch chnh l XC3S200
FPGA. Vic ghp ni vi my tnh i hi ch-ng trnh phi -c thit k mt b
UART nhn d liu t my tnh PC. Thng th-ng khi thit k phn cng, ta
th-ng phi dng mt vi mch chuyn i mc Max 232 hoc Max3232, cc vi
mch UART 1640 hoc 1650. Vi nhng ng-i lp trnh vi iu khin th cng vic
ghp ni vi my tnh PC l cng vic kh n gin, v trong cc b vi iu khin c
sn mt b UART. Khi s dng CPLD hoc FPGA, chng ta phi thc hin vit
ch-ng trnh thc hin cc chc nng ca vi mch UART ny. Ni nh- vy vic s
dng CPLD v FPGA phc tp hn?. ng vy, khi mi bt u lm quen vi CPLD
v FPGA bt u t u lun l mt cu hi kh. thc hin -c cng phi c

164

mt thi gian cn thit c, tham kho, tm ti. Xong khi thc hin -c trn
n, th mi thy -c n rt -u vit, bi l chng ta c th to ch-ng trnh ca
chng ta vit ra thnh mt core (li), m khi c ln no ta c th s dng li
chng mt cch d dng. V mt iu quan trng na l chng ta -a mt vi
mch UART vo trong mt chp n m trong chip ny c th -c tch hp cng
nhiu cc vi mch khc na thc hin mt h thng phc tp ch trong mt chip.
y mi ch l mt ng dng s khai ban u, vi FPGA n cn c mt chng di
cc ti nguyn ch-a -c khai thc ht, bn c th to RAM trong chng, to mt
b vi x l trong chng hay bin chng thnh mt b DSP, hay cc b lc s chuyn
dng, b x l cc thut ton x l nh ... Vi v d nh b ny tc gi cng xin
-c trnh by, v d sao n cng l b-c i ban u trn nn ca cc chp mt
cao tc ln ny. Cng vi v d gii thiu, by gi ta khng iu khin bng
phm na m ta s dng ch-ng trnh iu khin. Ch-ng trnh ny -c vit
bng Visual Basic iu khin motor bng my tnh thng qua cng COM1. Trong
chip Spartan s -c vit mt b UART nhn d liu t my tnh PC -a sang.
1. Ch-ng trnh iu khin giao din phn mm Visual Basic
Mc ch ca chng ta l i thit k b UART kt hp vi modul iu khin
ng c b-c nh- gii thiu. Chnh v l do ny ch-ng trnh vit bng Visual
Basic -c vit n gin vi cc nt n thay cho phm trong v d tr-c. Nu
thm mt b-c na l chng ta c th ly d liu t mch phn hi ca ng c
x l trong my tnh. Tuy nhin lun vn ny tc gi ch cp n mt mc ch
c bn v vic ghp ni my tnh vi FPGA thng qua mt b UART -c vit
trong FPGA. Trn form ch-ng trnh, khi ta kch chut vo cc nt nhn ny th
ch-ng trnh s truyn cc Byte d liu qua cng COM 1 vi khun mu truyn t
sn l "9600,N,8,1". (Ch-ng trnh ny -c th nghim ghp ni vi b vi x l
89C51 v FPGA Spartan3 XC3S200 5ft256). Mi ln kch chut l mt ln ch-ng
trnh truyn mt Byte d liu, v th b UART -c vit trong bo mch Spartan-3 s
cng phi vit vi tc Baudrate l 9600 vi khun mu truyn nhn nh- trn.
Ch-ng trnh iu khin ny -c vit d-i dng mt Form n vi su nt nhn
nh- sau:

- Start : Khi ng Motor.

165

- Left, Right : Dng o chiu ng c


- Nt Slow/Fast : Dng tng gim tc ng c.

Hnh 4.11. Giao din khi iu khin Motor


M ch-ng trnh -c vit nh- sau:
Option Explicit
Dim command As Byte
Dim FLAG As Boolean
Private Sub cmdDown_Click()
If FLAG = True Then
command = &H44 'character D
MSComm1.Output = Chr(command)
Else
MsgBox ("Start Command Button haven't been pressed")
End If
End Sub
-----------------------------------------------------------------------------------Private Sub cmdLeft_Click()
If FLAG = True Then
command = &H4C 'character L
MSComm1.Output = Chr(command)

166

Else
MsgBox ("Start Command Button haven't been pressed")
End If
End Sub
-----------------------------------------------------------------------------------Private Sub cmdRight_Click()
If FLAG = True Then
command = &H52 'chatacter R
MSComm1.Output = Chr(command)
Else
MsgBox ("Start Command Button haven't been pressed")
End If
End Sub
-----------------------------------------------------------------------------------Private Sub CmdStart_Click()
FLAG = True
command = &H53 'character S
MSComm1.Output = Chr(command)
End Sub
-----------------------------------------------------------------------------------Private Sub cmdSTOP_Click()
FLAG = False
command = &H42 'character B = stop
MSComm1.Output = Chr(command)
End Sub
-----------------------------------------------------------------------------------Private Sub cmdUp_Click()
If FLAG = True Then
command = &H55 ' character U
MSComm1.Output = Chr(command)
Else
MsgBox ("Start Command Button haven't been pressed")

167

End If
End Sub
Private Sub Form_Load()
FLAG = False
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.PortOpen = True
End Sub
-----------------------------------------------------------------------------------Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
End Sub

2. Thit k b UART v ghp ni PC :


thit k Modul UART chng ta phi thit k mt Modul chnh v hai
modul con vi cc tn file nh- sau (S -c gii thiu phn ph lc2 ):
- Modul UART.vhd : Modul chnh cha cc Modul thnh phn .
- Modul Rx.vhd : Modul dng lm b thu d liu khng ng b.
- Modul Tx.vhd: Modul dng thc hin b pht d liu khng ng b.
- Modul Counter.vhd : Dng to ng h Baudrate, khi thit lp tc
Baudrate vi my tnh PC.
- Modul Synchroniser.vhd dng ng b Clock.
thit k mt Modul UART v to chng thnh Core rt phc tp, cn phi
hiu r hot ng chc nng ca mt b UART v cch to core.
y n gin trong vic vit ch-ng trnh, b uart ny s lm vic t ng
thu pht d liu ni tip, khng thit k cc -ng dn bt tay nh- CTS, RTS, DTR,
DSR, khng c FIFO .
Vi khun dng d liu ca b truyn s -c truyn d-i dng sau:
Start

d0

d1

d2

d3

d4

d5

d6

d7

Hnh 4.12 Khun dng d liu -c truyn i

Stop

Start

168

Khun dng d liu ca b thu s -c thu d-i ng sau:


d0

Start

d1

Hnh 4.13. Khun dng d liu -c thu v


a. B m truyn d liu :
B truyn d liu s truyn nh- sau:
u tin s h -ng Start xung mc thp trong mt thi gian bng tc
Baud, sau s pht cc bit cn li. n bit Stop, n s nng -ng ny ln mc
cao.Vi b thu d liu, s d -ng Bit Start bng cch d s-n xung ca bit ny,
sau m clock n gia bt Start th ghi li mt bit. Tip tc m Clock n gia
chu k ca bit d0 th ghi li bit ny, tip tc m cho n bt Stop sau ghp chng
li thnh mt byte d liu thu -c.
B UART s c s khi chc nng nh- hnh 4.14:
RXD

UART_RX

BAUD
RATE
TIMING
TXD
UART_TX

Hnh 4.14. S khi chc nng tng qut ca b UART


Nh- vy s khi tng qut ca b iu khin Motor bng my tnh s nhsau:
Modul IO XC3s200
pin_rs232_td

Led

Start/Stop

pin_rs232_rd

Modul UART

Cnt_Dir

Sec [3:0]
Modul Step_Motor

Inc/Dec

Clock

Led1

Reset

Hnh 4.15. S tng quan Modul iu khin ghp ni vi my tnh

169

Vi Modul Step_Motor nh- -c gii thiu trn, y ta ch vic thu d


liu, sau x l ri -a cc -ng iu khin nh- trn hnh sang khi Step_motor..
Cng vic tip theo l vit ch-ng trnh v m phng cc b Tx v Rx, vic x l
cc tn hiu iu khin ch vit thm mt Process trong modul I/O l c th chy
-c. Ch-ng trnh -c thc hin vi ngn ng VHDL, sau s -c ghp vi
modul iu khin motor bng phm nh- trnh by. Tuy nhin cc -ng iu
khin trong modul IO.vhd (ph lc 2) cn phi l b cht, c th ch-ng trnh dich
s t to b cht cho cc tn hiu iu khin ny trong FPGA, xong cn phi xem
thng bo sau khi dch ch-ng trnh.

Init
TxD = 1, Bitpos=0, TbufL =0

Yes

Reset = 1

No

No

Enable= 1 ?
LoadS=1?

Yes

Yes
No

BitPos=0?
Yes

No

BitPos=1?

No
BitPos=10

Yes
Yes

TxD=1

No

Tbuff=DataIn
TbufL = 1,
Busy = TbufL or LoadA

TxD=0

TBufL=1?
Yes

Treg = Tbuff
BitPos = BitPos+1
TBufL= 0.

TxD =Treg(BitPos)
BitPos = BitPos+1

TxD =Treg(BitPos)
BitPos = 0

Hnh 4.16. L-u thut ton ca b m TxD


S ca b m pht c u vo v ra khi chy ch-ng trnh ECS nh- hnh
4.17.

170

Hnh 4.17. S vo ra ca b m pht


Sau khi chy ch-ng trnh m phng ta thu -c tn hiu trn -ng Tx nhhnh d-i y. Gi s ta np s 04 Hex truyn i, khi trn -ng Tx c dng
xung nh- trong biu hnh 4.18:

Hnh 4.18. Biu m phng b m pht


b. B m thu d liu: T-ng t, b m thu c l-u thut ton nh- hnh
4.19

171

Init
RRegL = 0, Bitpos = 0

Reset = 1

Yes

No

ReadA =1 ?

No

Enable= 1 ?

No

RxAv = 1

Yes

RxAv = 0
Yes

BitPos=0?

No

No
BitPos= 2 - 9

No
BitPos=10

Yes
No

Yes

RxD = 0 ?
Yes

SampleCount = 0
Bitpos = 1
RRegL = 0

SampleCount =1 &
BitPos >= 2?

No
SampleCount = 3 ?

Yes

Yes

No

RReg = 1, Bitpos=0
DataO = RReg

SampleCount = 0

No
Yes

RReg (BitPos ) =RxD


BitPos = 0

SampleCount = 3 ?
Yes

SampleCount =
SampleCount + 1

BitPos = BitPos+1

Hnh 4.19. L-u thut ton b m thu d liu


Trong ch-ng trnh Project Navigator chy ch-ng trnh ECS ta thu -c s
khi vo ra ca b m thu nh- hnh 4.20.

Hnh 4.20. S khi vo ra ca Modul b m thu Rx


Biu m phng ca b m thu sau khi cho u vo Rx s 06 Hex, chy
ch-ng trnh ModelSim ta thu -c cc tn hiu du ra Data[7:0] s 06 Hex nh-

172

biu d-i y:

Hnh 4.21. Biu sng u ra ca b m thu d liu Rx


( Xem ch-ng trnh File Rx.vhd ph lc 2 )
By gi ch cn vit thm mt on Process x l cc Byte nhn t my tnh
sang -a ra cc -ng iu khin nh- hnh 4.15. Trong file IO.vhd khai bo thm
mt s tn hiu ca Modul Top_Step (Add thm component Top_Step phn iu
khin bng phm gt nh- gii thiu trn), thm on x l Process d-i y
(Xem ch-ng trnh trong file IO.vhd ph lc 2):
----------------------------------------------------process (charBuf)
Begin
case charBuf is
when x"53" =>

-- Start

Start <= '0';


when x"42" =>

-- Stop

Start <= '1';


when x"4C" =>
Cnt_Dir <= '1';

-- Left

173

when x"52" =>

-- Right

Cnt_Dir <= '0';


when x"55" =>

-- Up

Inc <= '0';


when x"44" =>

-- Down

Inc <='1' ;
when others =>
Start <= '1';
Cnt_Dir <= '1' ;
Inc <= '1';
end case;
end Process;

end arch;
Sau i tng hp v thc thi ch-ng trnh, ta s thu -c cc du tch mu
xanh, ch-ng trnh Project Navigator s thng bo rng vic thc thi trn thit b
khng c li nh- ( Hnh 4.22).

Hnh 4.22. Thc thi ch-ng trnh trn Spartan-Xc3S200-5ft256


Thc hin gn chn trong ch-ng trnh Xilinx PACE dng cho Board mch
Starter Kit Board Spartan-3 vi cc chn -c gn nh- hnh 4.23:

174

Hnh 4.23. Ca s gn chn Spartan-Xc3S200-5ft256


Sau khi dch, ch-ng trnh s to ra file IO.bit, khc vi CPLD, sau khi dch n
to ra file .Jed. Sau np ch-ng trnh vi tool iMPACT tn file IO.bit vo thit b.
Ch-ng trnh -c chy th nghim b UART ghp ni my tnh thng qua phn
mm Hyper Terminal ca Windows, sau -c np vo kt Spartan3Xc3s2005ft256 v chy th. B-c th nghim trn Hyper Terminal l b-c nn lm trong
lp trnh ghp ni vi PC.

Hnh 4.24. Th nghim trn HyperTerminal


Ghp ni vi ch-ng trnh Hyper Terminal, khi bn g bt k phm no trn
bn phm, b UART s t ng thu v truyn ng-c tr li nh- hnh 4.24.

175

Nh- vy ton b ch-ng ny gii thiu vic thc hin iu khin Mtor vi
hai thit b ch khc nhau l CPLD v FPGA. V d ny -c cho chy trn thc
t vi m t -c chn l 7.50 b-c, in p cp cho ng c l 5V, -c th
nghim trn c hai board mch CPLD XC9572 v Spartan3-XC3s200 xem hnh 4.25
v hnh 4.26.

176

Hnh 4.25. nh chp qu trnh th nghim trn FPGA Spartan3

177

Hnh 4.26. nh chp qu trnh th nghim trn CPLD XC9572XL

Ph lc ch-ng trnh 1

Ch-ng trnh iu khin m t s dng phm


thc hin trn CPLD XC9572XL

Cc file ch-ng trnh:


1. Top_Step.vhd
2. Inc_Dec.vhd
3. Clk_Generator.vhd
4. SecGenerator.vhd

----------------------------

Top_Step.vhd

---------------------------

--- ----------------------------------------------Author :PHAM TUAN HAI_ Lop Dieu Khien K15


---Project:Step_Motor_Controller using KeyPad ---Modul :Top_Step.vhd
--- -------------------------------------------------------------------------------------------library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Top_Step is
Port ( Clk,Reset,Inc,Start,Cnt_Dir : in std_logic;
Sec : out std_logic_vector(3 downto 0);
Led,Led1 : Out std_logic );
end Top_Step;
-----------------------------------------------architecture Behavioral of Top_Step is
-----------------------------------------------Component Clk_Generator
Port ( Clk,Reset : in std_logic;
Div
: in std_logic_vector(2 downto 0);
Clk_Out
: Buffer std_logic);
end Component Clk_Generator;
----------------------------------------------------------Component Inc_Dec
Port ( Clk, Reset,Inc,Start,Cnt_Dir :Std_logic;
E,Dir,Led,Led1 : Out Std_logic;
DOut : Buffer std_logic_vector(2 downto 0));
end Component Inc_Dec;
----------------------------------------------------------Component SecGenerator
Port ( Clk,Reset,E,Dir : in std_logic;
Sec : out std_logic_vector(3 downto 0));
end Component SecGenerator;
----------------------------------------------------------Signal E,Clk_Step : Std_Logic;
Signal SysDiv : Std_Logic_Vector(2 downto 0);
signal Dir : Std_logic;
--Signal Dec : Std_logic;
----------------------------------------------------------------------------------------------------------------------begin
X1: Inc_Dec port map ( Clk,Reset,Inc,Start,Cnt_Dir,E,Dir,Led,Led1,SysDiv);
X2: Clk_Generator port map ( Clk, Reset, SysDiv, Clk_Step );
X3: SecGenerator port map ( Clk_Step, Reset, E, Dir, Sec);
----------------------------------------------------------end Behavioral ;
---------------------------

Inc_Dec.vhd-------------------------------

--- ----------------------------------------------Author :PHAM TUAN HAI_ Lop Dieu Khien K15


---Project:Step_Motor_Controller using Key
---Modul : Inc_Dec.vhd
--- -------------------------------------------------------------------------------------------library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

3
entity Inc_Dec is
Port ( Clk, Reset,Inc,Start,Cnt_Dir :Std_logic;
E,Dir,Led,Led1 : Out Std_logic;
DOut : Buffer std_logic_vector(2 downto 0));
end Inc_Dec;
----------------------------------------------------------architecture Behavioral of Inc_Dec is
Signal Dec : Std_logic;
----------------------------------------------------------begin
Dec <= NOT (Inc);
----------------------------------------------------------Process(Reset,Clk,Start)
begin
if Reset = '1' then
E <= '1';
elsif Clk'event and Clk = '1' then
if Start = '0' then
E <= '0';
Led1 <= '0';
elsif Start = '1' then
E <='1';
Led1 <= '1';
end if;
end if;
End Process;
----------------------------------------------------------Process (Clk,Cnt_Dir)
Begin
if Cnt_Dir='0' then
Dir <= '1';
led <='0';
else
Dir <= '0';
led <= '1';
end if;
End process;
----------------------------------------------------------Process(Clk, Inc, Dec, Reset)
begin
If Reset = '1' then
DOut <= b"000";
elsif Clk'event and clk='1' then
If Inc = '0' then
if Dout = "100" then
Dout <= "000";
else
Dout <= Dout + 1;
end if;
elsif Dec = '0' then
if Dout = "000" then
Dout <= "100";
else
Dout <= Dout - 1;
end if;
else
Dout <= Dout;
end if;
end if;
end process;
end Behavioral;
---------------------------

Clk_Generator.vhd---------------------

4
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Clk_Generator
Port ( Clk,Reset
Div
Clk_Out
end Clk_Generator;

is
: in std_logic;
: in std_logic_vector(2 downto 0);
: Buffer std_logic);

architecture Behavioral of Clk_Generator is


Signal Count_10MHz : Integer Range 0 to 8000;
Signal Count_xms
: Integer Range 0 to 8;
Signal Clk_1ms
: Std_Logic;
--signal Clk_Out
:Std_logic;
begin
------------------------------------Process( Clk, Reset )
Begin
If Reset = '1' then
Count_10MHz <= 0;
Clk_1ms
<= '0';
elsif Clk'event and Clk = '1' then
if Count_10MHz = 2 then
Count_10MHz <= 0;
Clk_1ms <= not(Clk_1ms);
else
Count_10MHz <= Count_10MHz + 1;
end if;
end if;
end Process;
--------------------------------------Process( Count_xms,Clk_1ms, Reset, Div,Clk_Out )
Begin
If Reset = '1' then
Count_xms <= 0;
Clk_Out
<= '0';
elsif Clk_1ms'event and Clk_1ms = '1' then
if Count_xms < DIV then
Count_xms <= Count_xms + 1;
else
Count_xms <= 0;
Clk_Out <= not(Clk_Out);
end if;
end if;
end Process;
end Behavioral;
-----------------------------

SecGenerator.vhd---------------------

-- ----------------------------------------------Author :PHAM TUAN HAI_ Lop Dieu Khien K15


---Project:Step_Motor_Controller using KeyPad ---Modul :SecGenetator.vhd
--- --------------------------------------------library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity SecGenerator is
Port ( Clk,Reset,E,Dir : in std_logic;

5
Sec : out std_logic_vector(3 downto 0));
end SecGenerator;
----------------------------------------------------------architecture Behavioral of SecGenerator is
-- Full Step Table : ( x"A", x"9" , x"5",x"6" )
-- Half Step Table : (x"A",x"8",x"9",x"1",x"5",x"4",x"6",x"2")
Type States is (Step_0, Step_1, Step_2,
Step_3,Step_4,Step_5,Step_6,Step_7);
Signal Next_State, Current_State : States;
begin
---------------------Process( Clk, Reset, E, Dir, Current_State )
Begin
if Reset = '1' then
-- Reset ='1' key Pressed
Next_State <= Step_0;
Sec
<= x"A";
elsif Clk'event and Clk = '1' and E = '0' then
Case Current_State is
When Step_0 =>
Sec <= x"A";
if DIR = '1' then
Next_State <= Step_1;
else
Next_State <= Step_7;
end if;
When Step_1 =>
Sec <= x"8";
if DIR = '1' then
Next_State <= Step_2;
Else
Next_State <= Step_0;
end if;
When Step_2 =>
Sec <= x"9";
if DIR = '1' then
Next_State <= Step_3;
Else
Next_State <= Step_1;
end if;
When Step_3 =>
Sec <= x"1";
if DIR = '1' then
Next_State <= Step_4;
Else
Next_State <= Step_2;
end if;
When Step_4 =>
Sec <= x"5";
if DIR = '1' then
Next_State <= Step_5;
Else
Next_State <= Step_3;
end if;
When Step_5 =>
Sec <= x"4";
if DIR = '1' then
Next_State <= Step_6;
Else
Next_State <= Step_4;
end if;
When Step_6 =>
Sec <= x"6";
if DIR = '1' then
Next_State <= Step_7;

6
Else
Next_State <= Step_5;
end if;
When Step_7 =>
Sec <= x"2";
if DIR = '1' then
Next_State <= Step_0;
Else
Next_State <= Step_6;
end if;
When Others =>
Next_State <= Step_0;
end Case;
end if;
end Process;
----------------------------------------------------------Process(Clk)
Begin
if Clk'event and clk = '1' then
Current_State <= Next_State;
end if;
end process;
end Behavioral;

Ph lc ch-ng trnh 2

Ch-ng trnh iu khin m t b-c ghp ni PC


thc hin trn FPGA Spartan3-XC3S200-5ft256

Cc file ch-ng trnh:


1. IO.vhd
2. UART.vhd
3. Rx.vhd
4. Tx.vhd
5. COUNTER.vhd
6. Synchroniser.vhd

V cc file ca Project Top_Step.vhd trong ph lc 1.


1. Top_Step.vhd
2. Inc_Dec.vhd
3. Clk_Generator.vhd

4. SecGenerator.vhd

-------------------------------------

IO.vhd----------------------------

--------------------------------------------------- ---------------------------------------------- Author : PHAM TUAN HAI_ Lop Dieu Khien K15 --- Project
RS232 CONNECTION
--- -------------------------------------------------------------------------------------------library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity IO is
port( CLK : in std_logic;
Pushbtn : in std_logic;
rs232_rd: in std_logic;
rs232_td: out std_logic;
Led,Led1,pin_led: Out std_logic ;
Sec : out std_logic_vector(3 downto 0));
end IO;
------------------------------------------------------architecture arch of IO is
constant YES: std_logic := '1';
constant NO:
std_logic := '0';
constant HI:
std_logic := '1';
constant LO:
std_logic := '0';
signal sysClk
: std_logic;
signal sysReset : std_logic;
-- uart component
component uart
generic(BRDIVISOR: INTEGER range 0 to 65535 := 130);
port(
CLK_I : in std_logic; -- clock
RST_I : in std_logic; -- Reset input
ADR_I : in std_logic_vector(1 downto 0);
DAT_I : in std_logic_vector(7 downto 0);
DAT_O : out std_logic_vector(7 downto 0);
WE_I : in std_logic; -- Write Enable

9
STB_I : in std_logic; -- Strobe
ACK_O : out std_logic; -- Acknowledge
-- process signals
IntTx_O : out std_logic;
IntRx_O : out std_logic;
BR_Clk_I : in std_logic;
TxD_PAD_O: out std_logic;
RxD_PAD_I: in std_logic);
end component;
--------------------------------------------------------------------component Top_step
Port ( Clk,Reset,Inc,Start,Cnt_Dir : in std_logic;
Sec : out std_logic_vector(3 downto 0);
Led,Led1 : Out std_logic );
End component;
---------------------------------------------------------------------------------------------------------------------- uart signals
signal uart_CLK_I : std_logic;
signal uart_RST_I : std_logic;
signal uart_ADR_I : std_logic_vector(1 downto 0);
signal uart_DAT_I : std_logic_vector(7 downto 0);
signal uart_DAT_O : std_logic_vector(7 downto 0);
signal uart_WE_I : std_logic;
signal uart_STB_I : std_logic;
signal uart_ACK_O : std_logic;
signal uart_IntTx_O : std_logic;
signal uart_IntRx_O : std_logic;
signal uart_BR_Clk_I : std_logic;
signal uart_TxD_PAD_O: std_logic;
signal uart_RxD_PAD_I: std_logic;
signal charBuf
:std_logic_vector(7 downto 0);
signal Inc,Start,Cnt_Dir:std_logic;
signal Step_Clk : std_logic;
signal Step_Reset : std_logic;
signal charAvail :std_logic;
-------------------------------------------------------------------------------BEGIN
sysClk
<= CLK;
sysReset <= Pushbtn;
uart_ADR_I <= "00";
--------------------------------------------------------------------------------------------------------------------------sysuart: uart generic map(BRDIVISOR => 1320)
port map(CLK_I => uart_CLK_I,
RST_I => uart_RST_I,
ADR_I => uart_ADR_I,
DAT_I => uart_DAT_I,
DAT_O => uart_DAT_O,
WE_I
=> uart_WE_I,
STB_I => uart_STB_I,
ACK_O => uart_ACK_O,
--process signals
IntTx_O
=> uart_IntTx_O,
IntRx_O
=> uart_IntRx_O,
BR_Clk_I => uart_BR_Clk_I,
TxD_PAD_O => uart_TxD_PAD_O,
RxD_PAD_I => uart_RxD_PAD_I );
---------------------------------------------------------sysstep:Top_Step
port map (Step_Clk,Step_Reset,Inc,Start,Cnt_Dir,Sec,Led,Led1);

10
-----------------------------------------------------------uart port connections/conversions
uart_CLK_I <= sysClk;
uart_RST_I <= sysReset;
Step_Reset
<= sysReset;
uart_BR_Clk_I <= sysClk;
Step_Clk
<= sysClk;
rs232_td
<= uart_TxD_PAD_O;
uart_RxD_PAD_I <= rs232_rd;
--------------------------------------------------------------------------------------------------------------------------------------------------------------process(Pushbtn,CLK,uart_IntRx_O, uart_IntTx_O,uart_DAT_O,charBuf,charAvail)
begin
if Pushbtn = '1' then
charBuf <= "00000000";
charAvail <= NO;
uart_ACK_O <= '0'
;
pin_led <= '1';
elsif CLK'event and CLK = '1' then
if(uart_IntRx_O = HI) then
charBuf <= uart_DAT_O;
charAvail <= YES;
uart_WE_I <= LO;
uart_STB_I <= HI;
uart_ACK_O <= uart_STB_I;
pin_led <= '1';
elsif(uart_IntTx_O=HI) then
if( charAvail=YES ) then
uart_DAT_I <= charBuf;
charAvail
<= NO;
uart_WE_I
<= HI;
uart_STB_I <= HI;
uart_ACK_O <= uart_STB_I;
end if;
-- pin_led <= '0';
else
-- charBuf <= "00000000";
uart_STB_I <= LO;
uart_ACK_O <= uart_STB_I;
pin_led <= '0';
end if;
end if;
end process;
-----------------------------------------------------process (Pushbtn,charBuf,CLK)
Begin
if Pushbtn = '1' then
Start <= '1' ;
Cnt_Dir <= '1';
Inc <= '1';
elsif CLK'event and CLK = '1' then
case charBuf is
when x"53" =>
-- Start
Start <= '0';
when x"42" =>
-- Stop
Start <= '1';
when x"4C" =>
-- Left
Cnt_Dir <= '1';
when x"52" =>
-- Right
Cnt_Dir <= '0';
when x"55" =>
-- Up
Inc <= '0';

11
when x"44" =>
Inc <='1' ;
when others =>
Start <= '1';
Cnt_Dir <= '1' ;
Inc <= '1';
end case;
end if;
end Process;
end arch;
---------------------------------

-- Down

UART.vhd-----------------------------

---------------------------------------------------------------- Title
: UART
---- Project
: UART
---- Clock
: 50MHz Using Clock of Board XC3s200
---- Author
: Pham Tuan Hai_Lop Dieu Khien K15
--------------------------------------------------------------------------------------------------------------------------library ieee;
use ieee.std_logic_1164.all;
entity UART is
generic(BRDIVISOR: INTEGER range 0 to 65535 := 130);
port (
CLK_I : in std_logic;
RST_I : in std_logic;
ADR_I : in std_logic_vector(1 downto 0);
DAT_I : in std_logic_vector(7 downto 0);
DAT_O : out std_logic_vector(7 downto 0);
WE_I : in std_logic;
STB_I : in std_logic;
ACK_O : out std_logic;
-- process signals
-- Transmit interrupt: indicate waiting for Byte
IntTx_O : out std_logic;
IntRx_O : out std_logic;
BR_Clk_I : in std_logic;
TxD_PAD_O: out std_logic;
RxD_PAD_I: in std_logic);
end UART;
-- Architecture for UART for synthesis
architecture Behaviour of UART is
-----------------------------------------------------------component Counter
generic(COUNT: INTEGER range 0 to 65535);
port (
Clk
: in std_logic; -- Clock
Reset
: in std_logic; -- Reset input
CE
: in std_logic; -- Chip Enable
O
: out std_logic); -- Output
end component;
-----------------------------------------------------------component Rx
port (
Clk
: in std_logic;
Reset : in std_logic;
Enable : in std_logic;
-- Async Read Received Byte . ReadA =1 then no thing to do, ReadA=0 => read
ReadA : in Std_logic;
RxD
: in std_logic;
RxAv
: out std_logic;
DataO : out std_logic_vector(7 downto 0));

12
end component;
-----------------------------------------------------------component Tx
port (
Clk
: in std_logic;
Reset : in std_logic;
Enable : in std_logic;
-- Asynchronous Load signal =1 then transfer Data in input to Buffer, BufL=1
LoadA : in std_logic;
TxD
: out std_logic;
Busy
: out std_logic;
DataI : in std_logic_vector(7 downto 0)); -- Byte to transmit
end component;
------------------------------------------------------------- Signals of uart
signal RxData : std_logic_vector(7 downto 0);
signal TxData : std_logic_vector(7 downto 0);
signal SReg
: std_logic_vector(7 downto 0);
signal EnabRx : std_logic; -- Enable RX unit
signal EnabTx : std_logic; -- Enable TX unit
-- Data Received =1 Buffer contains a received byte ,=0 Buffer empty or idle
signal RxAv
: std_logic;
-- Transmiter Busy =1 is Busy , =0 Accept a byte to transmit
signal TxBusy : std_logic;
signal ReadA : std_logic; -- Async Read receive buffer
signal LoadA : std_logic; -- Async Load transmit buffer
signal Sig0
: std_logic; -- gnd signal
signal Sig1
: std_logic; -- vcc signal
-----------------------------------------------------------BEGIN
sig0 <= '0';
sig1 <= '1';
-----------------------------------------------------------------------------Uart_Rxrate : Counter
generic map (COUNT => BRDIVISOR)
port map (BR_CLK_I, sig0, sig1, EnabRx);
----------------------------------------------------------------------------Uart_Txrate : Counter
generic map (COUNT => 8)
port map (BR_CLK_I, Sig0, EnabRx, EnabTx);
-----------------------------------------------------------------------------Uart_Tx : Tx
port map (BR_CLK_I, RST_I, EnabTX, LoadA, TxD_PAD_O, TxBusy, TxData);
Uart_Rx : Rx
port map (BR_CLK_I, RST_I, EnabRX, ReadA, RxD_PAD_I, RxAv, RxData);
-----------------------------------------------------------------------------IntTx_O <= not TxBusy;
-- Flag signal TxBusy=1 Transmiter is Busy ,or IntTx_0 = 0 is Busy
IntRx_O <= RxAv;
-- RxAv =1 one Byte Received
-- RxAv =0 Receiver Buffer empty
SReg(0) <= not TxBusy;
SReg(1) <= RxAv;
SReg(7 downto 2) <= "000000";
------------------------------------------------------------------------------- Clocked on rising edge. Synchronous Reset RST_I
-----------------------------------------------------------------------------WBctrl : process(CLK_I, RST_I, STB_I, WE_I, ADR_I)

13
variable StatM : std_logic_vector(4 downto 0);
begin
if Rising_Edge(CLK_I) then
-- System Clock rising
if (RST_I = '1') then
-- if no Reset
ReadA <= '0';
-- ReadA Signal =0
LoadA <= '0';
-- LoadA Signal =0
else
-- When reset = 0 occured
-- Write Byte to Tx
if (STB_I = '1' and WE_I = '1' and ADR_I = "00") then
-- Get input connect to TxData input signal of Transmiter
TxData <= DAT_I;
-- Async transmit buffer Load signal , load data into Transmiter
LoadA <= '1';
else LoadA <= '0';
end if;
-- Read Byte from Rx
if (STB_I = '1' and WE_I = '0' and ADR_I = "00") then
-DAT_O <= RxData;
-- Out Data to Bus
-- Async receive buffer Read signal connects to ReadA input of Receiver
ReadA <= '1';
-- Signal is used to read buffer, ReadA=1 =>
Read
else ReadA <= '0';
end if;
end if;
end if;
end process;
-----------------------------------------------------------------------------ACK_O <= STB_I;
DAT_O <=
RxData when ADR_I = "00" else
SReg when ADR_I = "01" else
"00000000";
end Behaviour;

-- Read Byte from Rx


-- Read Status Reg

--------------------------------------

Rx.vhd---------------------------

--------------------------------------------------------------- Title
: UART
---- Project
: UART
---- Clock
: 50MHz
---- Author
: Pham Tuan Hai
--------------------------------------------------------------library ieee;
use ieee.std_logic_1164.all;
entity Rx is
port (
Clk
: in std_logic;
Reset : in std_logic;
Enable : in std_logic;
ReadA : in Std_logic;
RxD
: in std_logic;
RxAv
: out std_logic;
DataO : out std_logic_vector(7 downto 0));
end Rx;
-----------------------------------------------------------------------------architecture Behaviour of Rx is
signal RReg : std_logic_vector(7 downto 0);
signal RRegL: std_logic;
begin
------------------------- RxAv process---------------------------RxAvProc : process(RRegL,Reset,ReadA)

14
begin
if ReadA = '1' or Reset = '1' then
RxAv <= '0';
elsif Rising_Edge(RRegL) then
RxAv <= '1';
end if;
end process;
----------------------- Rx Process--------------------------------RxProc : process(Clk,Reset,Enable,RxD,RReg)
variable BitPos : INTEGER range 0 to 10;
variable SampleCnt : INTEGER range 0 to 3;
begin
if Reset = '1' then
RRegL <= '0';
BitPos := 0;
elsif Rising_Edge(Clk) then
if Enable = '1' then
case BitPos is
when 0 =>
RRegL <= '0';
if RxD = '0' then
SampleCnt := 0;
BitPos := 1;
end if;
when 10 =>
BitPos := 0;
RRegL <= '1';
DataO <= RReg;
when others =>
if (SampleCnt = 1 and BitPos >= 2) then
RReg(BitPos-2)<=RxD ;
end if;
if SampleCnt = 3 then
BitPos := BitPos + 1;
end if;
end case;
-if SampleCnt = 3 then
SampleCnt := 0;
else
sampleCnt := SampleCnt + 1;
end if;
-end if;
end if;
end process;
end Behaviour;
------------------------------------

Tx.vhd-----------------------------

---------------------------------------------------------------- Title
: UART
---- Project
: UART
---- Clock
: 50MHz
---- Author
: Pham Tuan Hai
--------------------------------------------------------------------------------------------------------------------------library ieee;
use ieee.std_logic_1164.all;
entity Tx is
port (
Clk
: in std_logic;
Reset : in std_logic;
Enable : in std_logic;

15
LoadA : in std_logic;
TxD
: out std_logic;
Busy : out std_logic;
DataI : in std_logic_vector(7 downto 0));
end Tx;
--------------------------------------------------------------------architecture Behaviour of Tx is
--------------------------------------------------------------------component synchroniser
port (
C1 : in std_logic;
C : in std_logic;
O : out Std_logic);
end component;
signal TBuff : std_logic_vector(7 downto 0);
signal TReg : std_logic_vector(7 downto 0);
signal TBufL : std_logic;
signal LoadS
: std_logic;
------------------------------------------------------------------------------begin
-- Begin of Architech
-- Synchronise Load on Clk
SyncLoad : Synchroniser port map (LoadA, Clk, LoadS);
Busy <= LoadS or TBufL;
-- Tx process
----------------------------------------------------------------TxProc : process(Clk, Reset, Enable, DataI, TBuff, TReg, TBufL)
variable BitPos : INTEGER range 0 to 10;
begin
if Reset = '1' then
TBufL <= '0';
BitPos := 0;
TxD <= '1';
elsif Rising_Edge(Clk) then
if LoadS = '1' then
TBuff <= DataI;
TBufL <= '1';
end if;
if Enable = '1' then
case BitPos is
when 0 =>
TxD <= '1';
if TBufL = '1' then
TReg <= TBuff;
TBufL <= '0';
BitPos := 1;
end if;
when 1 =>
TxD <= '0';
BitPos := 2;
when others =>
TxD <= TReg(BitPos-2);
-- Serialisation of TReg
BitPos := BitPos + 1;
end case;
if BitPos = 10 then
-- bit8. next is stop bit
BitPos := 0;
end if;
end if;
end if;
end process;
end Behaviour;
-------------------------------

COUNTER.vhd---------------------------

16
--------------------------------------------------------------- Title
: UART
---- Project
: UART
---- Clock
: 50MHz
---- Author
: Pham Tuan Hai
--------------------------------------------------------------------------------------------------------------------------library IEEE,STD;
use IEEE.std_logic_1164.all;
entity Counter is
generic(Count: INTEGER range 0 to 65535); -- Count revolution
port (
Clk
: in std_logic; -- Clock
Reset
: in std_logic; -- Reset input
CE
: in std_logic; -- Chip Enable
O
: out std_logic); -- Output
end Counter;
------------------------------------------------------------------------------------------------------------------------------architecture Behaviour of Counter is
begin
counter : process(Clk,Reset)
-- Variable Cnt is using temple count variable
variable Cnt : INTEGER range 0 to Count-1;
begin
if Reset = '1' then
Cnt := Count - 1;
O <= '0';
elsif Rising_Edge(Clk) then
if CE = '1' then
-if Cnt = 0 then
O <= '1';
Cnt := Count - 1;
else
O <= '0';
Cnt := Cnt - 1;
end if;
-else O <= '0';
end if;
end if;
end process;
end Behaviour;
-------------------------- Synchroniser.vhd------------------------------------------------------------------------------- Title
: UART
---- Project
: UART
---- Clock
: 50MHz
---- Author
: Pham Tuan Hai
--------------------------------------------------------------------------------------------------------------------------library IEEE,STD;
use IEEE.std_logic_1164.all;
entity synchroniser is
port (
C1: in std_logic;
-- Asynchronous signal
C : in std_logic;
-- Clock
O : out std_logic); -- Synchronised signal
end synchroniser;

17
------------------------------------------------------------------architecture Behaviour of synchroniser is
signal C1A : std_logic;
signal C1S : std_logic;
signal R : std_logic;
begin
RiseC1A : process(C1,R)
begin
if Rising_Edge(C1) then
C1A <= '1';
end if;
if (R = '1') then
C1A <= '0';
end if;
end process;
------------------------------------------------------------------SyncP : process(C,R)
begin
if Rising_Edge(C) then
if (C1A = '1') then
C1S <= '1';
else C1S <= '0';
end if;
if (C1S = '1') then
R <= '1';
else R <= '0';
end if;
end if;
if (R = '1') then
C1S <= '0';
end if;
end process;
O <= C1S;
end Behaviour;

18

Ti liu tham kho


1.

Nguyn Tng C-ng, Phan Quc Thng, V Hu Ngh (2002), Cu trc


my tnh, Hc vin k thut qun s, H Ni.

2.

Nguyn Tng C-ng, Phan Quc Thng, Trn Vn Hp (2002), Cu trc


cc h x l tn hiu s, Hc vin k thut qun s, H Ni

3.

Nguyn Tng C-ng, Phan Quc Thng (2003), Cu trc v lp trnh h


vi iu khin 8051, Hc vin k thut qun s, H Ni.

4.

Vn Th Minh (1998), K thut vi x l, NXB Gio dc, H Ni

5.

Xun Tin (1991), K thut vi x l, Hc vin k thut qun s, H


Ni.

6.

David Harris (1955) Structural Design With Verilog Harvey Mudd


College.

7.

Donnamaie E. White (2002), Logic Design for Array-Based Circuits,


Original Hardcover Still, London.

8.

Don Davis (Winter 2002), Architectural Synthesis: Unleashing the


Power of FPGA System-Level Design, Xcell Journal, (Issue 44),
pages 3034, Xilinx, United States of America.

9.

Giovanni De Micheli, Rajesh K. Gupta (3/1997), Hardware/Software


Co-Design, Proceedings of the IEEE, (Vol. 85, No 3),
pages 349 64.

10. Daniel Tabak (1995), Advanced Microprocesors, McGraw-Hill, United


States of America.
11. Donnamaie E. White (2002), Logic Design for Array-Based Circuits,
Original Hardcover Still, London.
12. Don Davis (Winter 2002), Architectural Synthesis: Unleashing the
Power of FPGA System-Level Design, (Issue 44), pages 30 34,
13. Michael John Sebastian Smith (1997), Application-Specific Integrated
Circuits, Hardcover (www.Amazon.com), United States of
America.

19

14. Peter J.Ashenden (1990), The VHDL CooKBook, University of Adelaide,


South Australia.
15. Roger Lipsett & Carl Schaefer (1989), VHDL: Hardware Description
and Design, Kluwer Academic Publishers, United States of
America.
16. Ngun tham kho t Internet
http://support.xilinx.com/support/techsup/tutorials/index.htm
http://support.xilinx.com/ xlnx/xil_ans_brower.jsp
http://support.xilinx.com/apps/appsweb.htm
http://support.xilinx.com/ xlnx/xweb/xil_publications_index.jsp

You might also like