Bài Ging K Thut S Ph lc B
GV: Nguyn Trng Hi Trang
251
PH LC B
I. NGOÂN NGÖÕ LAÄP TRÌNH CHO PLD
Cuõng gioáng nhö ROM hay PROM, moät PLD cuõng ñöôïc laäp trình ñeå taïo ra file ñoát
caùc caàu chì hay diode.
Ngoân ngöõ söû duïng ñeå laäp trình cho PLD trong chöông trình naøy laø ABEL
(Advanced Boolean Equation Language) laø moät trong nhöõng ngoân ngöõ laäp trình raát
maïnh cho PLD, hoã trôï cho nhieàu ngoõ vaøo, bao goàm caû sô ñoà traïng thaùi vaø baûng söï
thaät. Trình bieân dòch cuûa ABEL coù khaû naêng moâ phoûng vaø taïo file fuse map (caàu
chì) cho PLD. Trong phuï luïc naøy chæ toùm taét höôùng daãn söû duïng caùc phaàn caáu truùc
vaø cuù phaùp veà caùc phaùt bieåu, khai baùo, chæ daãn…chuû yeáu nhaát ñeå phuïc vuï cho caùc
baøi thí nghieäm sau ñoù. Ñeå hieåu saâu hôn veà ngoân ngöõ naøy, sinh vieân neân tham khaûo
theâm caùc taøi lieäu khaùc hoaëc phaàn help trong ngoân ngöõ.
Ngoaøi ABEL coøn coù caùc ngoân ngöõ khaùc nhö VHDL, AHDL…
CAÁU TRUÙC CUÛA MOÄT CHÖÔNG TRÌNH ABEL
module module name
title string
deviceID device deviceType;
pin declarations
other declarations
equations
equations
test_vectors
end module name
Module. Teân chöông trình vaø caùc thoâng soá hình thöùc
Title. Duøng ñeå moâ taû module
Declaration. Moâ taû caùc module caáp thaáp hôn, ñònh nghóa caùc khoái chöùc naêng
nhö devive, pin, node, constant, macro, caùc taäp hôïp,…
Equations. Söû duïng caùc haøm, caùc löu ñoà traïng thaùi hay baûng söï thaät ñeå moâ taû
caùc thieát keá logic
Test_vectors. Test_vectors sö duïng trong caùc file moâ phoûng JEDEC
End. Keát thuùc moät module
Bài Ging K Thut S Ph lc B
GV: Nguyn Trng Hi Trang
252
Löu yù: caáu truùc ôû treân bao goàm caùc thaønh phaàn cô baûn cuûa moät chöông trình
ABEL, tuøy vaøo nhöõng öùng duïng cuï theå coù theå seõ coù theâm caùc phaùt bieåu khaùc
nhö maùy traïng thaùi, v.v…
1. CAÙC PHAÙT BIEÅU (STATEMENTS)
1.1. Phaùt bieåu Module
Cuù phaùp module modname [( dummy_arg[,….])]
Muïc ñích: Phaùt bieåu module xaùc ñònh ñieåm baét ñaàu cuûa moät chöông trình vaø phaûi coù
phaùt bieåu END ñeå xaùc ñònh ñieåm keát thuùc cuûa module
Söû duïng Modname laø moät danh hieäu hôïp leä ñöôïc ñaët laøm teân goïi cho module
chöông trình
Danh hieäu hôïp leä laø moät chuoãi daøi toái ña 31 kyù töï (chöõ caùi, chöõ soá, daáu
gaïch döôùi’_’), ñöôïc baét ñaàu baèng chöõ caùi hay daáu gaïch döôùi ’_’. Danh
hieäu phaân bieät chöõ hoa hay chöõ thöôøng.
Dummy_arg (coù theå coù) : laø moät thoâng soá hình thöùc (töông töï nhö trong
ngoân ngöõ hôïp dòch)
Ví duï
MODULE My_Example
END My_Example
Module coù teân My_Example vaø phaùt bieåu END My_Example keát thuùc
module naøy.Trong module naøy khoâng söû duïng thoâng soá hình thöùc.
MODULE My_Example (A,B)
C=A+B
END My_Example
Trong module naøy coù söû duïng hai thoâng soá hình thöùc A vaø B, bieåu thöùc
C=A+B, vôi A,B ñöôïc traû veà gía trò thöïc (töø module khaùc) khi bieân dòch
1.2. Phaùt bieåu Title
Cuù phaùp title ‘string’
Muïc ñích: Phaùt bieåu title ñaët cho module moät töïa ñeà (header) ñeå minh hoïa ñaëc ñieåm
chöùc naêng do ngöôøi laäp trình taïo ra.Chuoãi kyù töï seõ xuaát hieän trong caû file
döõ lieäu vaø file fusemap sau khi bieân dòch
Söû duïng string: laø chuoãi kyù töï naèm trong hai daáu nhaùy ñôn (‘) vaø giôùi haïn 324 kyù
töï
Söû duïng phaùt bieåu tilte laø tuøy choïn
Ví duï module m6809a
Bài Ging K Thut S Ph lc B
GV: Nguyn Trng Hi Trang
253
title ’6809 memory decode
Jean Designer
Data I/O Corp Redmond WA’
1.3. Phaùt bieåu equations
Cuù phaùp equations
element [?] = condition;
when-then-else_statement;
Muïc ñích: Phaùt bieåu equations ñònh choã baét daàu cuûa moät hay moät nhoùm bieåu thöùc
Boole bieãu dieãn haøm logic ngoõ ra theo ngoõ vaøo
Söû duïng condition. Moät moâ taû
element. teân danh ñònh cuûa moät tín hieäu, taäp caùc tín hieäu hay tín hieäu
thöïc maø moâ taû giaù trò cuûa noù ñöôïc gaùn
when-then-else_statement: phaùt bieåu when-then-else
Sau moãi bieåu thöùc phaûi coù daáu chaám phaåy (;)
Ví duï
Equations
A = B&C#A;
[W,Y] = 3;
!F = (B = =C);
1.4. Phaùt bieåu Truth_table
Cuù phaùp truth_table (inputs -> outputs)
hay truth_table (inputs : > reg_outs)
Muïc ñích: Truth_table trình baøy baûng söï thaät minh hoïa ngoõ ra nhö moät haøm toå hôïp cuûa caùc
ngoõ vaøo
Caùc baûng söï thaät coù theå thay theá hoaëc boå sung theâm cho caùc bieåu thöùc
(trong equations) hay sô ñoà traïng thaùi (trong state_diagram)
Söû duïng inputs : laø caùc ngoõ vaøo cuûa haøm logic
outputs : laø caùc ngoõ ra cuûa haøm logic
reg_outs : laø caùc ngoõ ra cuûa caùc thanh ghi (FF)
Daáu -> bieãu dieãn heä toå hôïp
Daáu : > bieãu dieãn heä tuaàn töï
Ví duï
Truth_table ([A,B] -> C)
[0,1] -> 1;
[1,0] -> 1;
[1,1] -> 0;
[0,0] -> 0;
Roõ raøng truth_table ôû treân bieãu dieãn bieåu thöùc C=A+B
Bài Ging K Thut S Ph lc B
GV: Nguyn Trng Hi Trang
254
1.5. Phaùt bieåu state_diagram
Cuù phaùp State_diagram state variables
State state_exp:[equations];
.
.
[trans-stmt…];
Muïc ñích: Phaùt bieåu state_diagram ñònh nghóa caùc bieán traïng thaùi baét ñaàu söï moâ taû
hoaït ñoäng cuûa maùy traïng thaùi (töông töï nhö ñoà thò traïng thaùi hay löu ñoà
maùy traïng thaùi)
Söû duïng state_variables: laø taäp hôïp caùc bieán traïng thaùi trong maùy traïng thaùi
state: laø töø khoùa ñeå bieãu dieãn söï chuyeån bieán töø traïng thaùi hieän taïi sang
traïng thaùi keá tieáp vaø ngoõ ra hieän taïi
state_exp : laø bieåu thöùc hay haèng soá ñòng nghóa traïng thaùi hieän taïi
equations: laø caùc bieåu thöùc logic ngoõ ra hieän taïi cuûa maùy traïng thaùi
trans_stmt : laø moät phaùt bieåu daïng IF – THEN – ELSE , GOTO, CASE
(tuøy choïn) ñeå moâ taû söï chuyeån bieán töø traïng thaùi hieän btaïi sang traïng thaùi
keá tieáp theo ñieàu kieän taùc ñoäng cuûa ngoõ vaøo
Ví duï
Giaû söû ta coù 2 ngoõ vaøo x1 vaø x2, ngoõ ra laø z, maùy traïng thaùi coù 3 traïng thaùi
kyù hieäu S0,S1,S2, 2 bieán traïng thaùi Q = [Q0,Q1] (2 ngoõ ra cuûa FF)
State_diagram Q
State S0: if (x1&x2 = =0) then S2
Else S1
State S1: z=1;
Go to S2;
State S2: z=0;
Go to S0;
1.6. Phaùt bieåu goto
Cuù phaùp Goto state_exp
Muïc ñích: Phaùt bieåu goto bieãu dieãn söï chuyeån bieán khoâng ñieàu kieän töø traïng thaí
hieän taïi sang traïng thaùi keá tieáp laø state_exp.
Söû duïng State_exp: laø bieåu thöùc bieãu dieãn traïng thaí keá tieáp
Ví duï Si: goto Sj; nhaûy ñeán traïng thaùi Sj
S0
x1x2
z=1 z=0
S1S2
1 0
Bài Ging K Thut S Ph lc B
GV: Nguyn Trng Hi Trang
255
1.7. If – then – else
Cuù phaùp If exps then state_exp1
[else state_exp2];
hay if exp1 then state_exp1
else if exp2 then state_exp2
[else if….]
else state_expn;
Muïc ñích: Phaùt bieåu if – then – else : moâ taû söï chuyeån hoùa traïng thaùi theo ñieàu kieän
ngoõ vaøo.
Neáu bieåu thöùc ngay sau töø khoùa if laø ñuùng , chuyeån bieán höôùng ñeán traïng
thaùi ngay sau töø khoùa then; neáu sai chuyeån bieán höôùng ñeán trang thaùi
ngay sau töø khoùa else.
Söû duïng exps: laø bieåu thöùc baát kyø hôïp leä naøo
state_exp1, state_exp2…..: laø bieåu thöùc bieãu dieãn traïng thaùi keá tieáp.
Caùc phaùt bieåu if – then – else coù theå ñöôïc noái vôùi nhau lieân tieáp nhöng
keát thuùc phaûi laø daáu chaám phaåy.
Ví duï State 1 : if (A = = B) then 2; “neáu A = b chuyeån ñeán traïng thaùi 2
State 2 : if A then 3 else 4; “ neáu A ñuùng (0) chuyeån ñeán traïng thaùi 3
“ neáu A sai (=0) chuyeån ñeán traïng thaùi 4
state 0 : if a then 1
else if b then 2
else if c then 3
else 0;
1.8. Phaùt bieåu case
Cuù phaùp Case [exps1 : state+exp1;]
[expsi : state_expi;]
end case;
Muïc ñích: Phaùt bieåu case moâ taû söï chuyeån bieán traïng thaùi trong tröôøng hôïp coù nhieàu
ñieàu kieän taùc ñoäng.
Söû duïng Traùnh khoâng ñeå 2 ñieàu kieän xaûy ra cuøng luùc vaø traùnh tröôøng hôïp keát quaû
traïng thaùi keá khoâng ñoaùn tröôùc ñöôïc
Ví duï STATE S0:
CASE (sel == 0): S0 ;
(sel == 1): S1 ;
ENDCASE