You are on page 1of 37

Laäp trình duøng

WINCUPL
Giao dieän chöông trình
Laäp trình duøng
WINCUPL
Bieán – Teân Bieán
Bieán laø chuoãi kyù töï ñaïi dieän cho giaù
trò, haèng soá, nuùt noäi vaø nuùt ngoaïi,
input/output.
Teân bieán ñöôïc ñaët theo quy taéc:
 Teân bieán khoâng daøi quaù 31 kyù töï.
 Khoâng coù khoaûng traéng giöõa caùc töø
 Khoâng duøng caùc kyù töï ñaëc bieät vaø
caùc töø khoùa cuûa chöông trình.
 Phaûi coù ít nhaát 1 kyù töï trong teân.
 Teân bieán coù phaân bieät chöõ
thöôøng vaø chöõ hoa.
Vd: a0, A0, D_enable
Laäp trình duøng
WINCUPL
Chæ soá bieán
Chæ soá bieán = indexed variables
Chæ soá bieán ñöôïc ñaët theo quy taéc:
 phaûi keát thuùc bôûi moät soá thaäp
phaân naèm giöõa 0 -> 31.
 Toát nhaát neân baét ñaàu bôûi soá 0.
 Phaàn soá cuûa chæ soá bieán phaûi chính
xaùc töøng kyù töï
Ví duï:
AD0, AD7
A07 ≠ A7
Laäp trình duøng
WINCUPL
Danh saùch - List
Danh saùch phaûi ñöôïc lieät keâ trong daáu
[]
[ bieán 1, bieán 2, …, bieán n]
Vd:
[up, down, left, right]
[a0, a1, a2, a3, a4, a5, a6, a7]
[a0..7]
[a0..2, a3, a4, a5..7]
Laäp trình duøng
WINCUPL
Bieåu dieãn soá - numbers
Soá ñöôïc ñaët theo quy taéc:
 Duøng caùc tieàn toá ‘b’ ‘o’ ‘h’ ‘d’ ñeå baùo
hieäu soá thuoäc heä naøo.
Vd: ‘b’01 , ‘o’84, ‘h’A5, ‘d’15
 Coù theå duøng x ñeå bieåu dieãn tuøy
ñònh.
Vd: ‘b’1x10, ‘h’[10xx..1FFF]
 Maëc ñònh soá khoâng ghi heä laø soá ôû
heä hexa tröø soá ghi ôû chæ soá bieán,
soá thöù töï chaân.
Laäp trình duøng
WINCUPL
Chuù thích - comment

Chuù thích ñöôïc


 Baét ñaàu bôûi daáu /*
 Keát thuùc bôûi daáu */
Chuù thích coù theå naèm treân nhieàu doøng
khaùc nhau.
WINCUPL
Tieâu ñeà – header
information
Tieâu ñeà bao goàm:
 Name -> project’s name.
 PartNo -> target part No.
 Revision -> design’s version.
 Date ->
 Designer ->
 Company ->
 Assembly -> board No. which use this part.
 Location -> location of the part on the
board.
 Device -> PLD device type
 Format -> output format (j:jedec, h:hexa,
WINCUPL
Khai baùo chaân – pin
declaration

Khai baùo chaân theo cuù phaùp:


PIN pin_no = [!]var ;
Vd: PIN 3 = OE;
! - khai baùo chaân tích cöïc möùc thaáp.
Vd: PIN 6 = !OE;
pin_no – coù theå boû troáng ñeå söû duïng
thieát bò aûo khi moâ phoûng.
WINCUPL
Khai baùo node – node
declaration
Khai baùo node theo cuù phaùp:
NODE [!]var ;
Node khai baùo nuùt noäi coù chöùc naêng
ñaëc bieät beân trong IC. Bieán seõ töï ñoäng
ñöôïc gaùn vaøo 1 chaân aûo.
Coù theå gaùn chaân aûo töôøng minh:
PINNODE node_no = [!]var ;
Vd:
node [state0..5];
Laäp trình duøng
WINCUPL
Khai baùo chuoãi bit
Khai baùo chuoãi bit (bit field) theo cuù
phaùp:
FIELD var = [var, var, var…] ;
Bit field cho pheùp gaùn moät teân duy nhaát
cho moät nhoùm bit.
Vd:
FIELD addr = [A7,A6,A5,A4,A3,A2,A1,A0];
FIELD addr = [A7..0];
Note: khoâng duøng laãn bieán indexed vaø
Laäp trình duøng
WINCUPL
$define
Tieàn xöû lyù (pre-processing) laø caùc
höôùng daãn bieân dòch vaø baét ñaàu bôûi
daáu $ nhö: $define,$include,…
$DEFINE name value

Vd:
$DEFINE ON 1
$DEFINE OFF 0
$DEFINE hang_so ‘h’3512
Laäp trình duøng
WINCUPL
pheùp toaùn logic
Caùc pheùp toaùn logic bao goàm:

Kyù Pheùp Ví duï Ñoä öu


hieäu toaùn tieân
! NOT !A 1
& AND A&B 2
# OR A#B 3
$ XOR A$B 4
Laäp trình duøng
WINCUPL
pheùp toaùn soá hoïc
Caùc pheùp toaùn soá hoïc bao goàm:
Kyù Pheùp Ví duï Ñoä öu
hieäu
** toaùn
Soá muõ 2**3 tieân
1
* Nhaân 2*i 2
/ Chia 4/2 2
% Modulo 5%2 2
+ Coäng 4+a 3
- Tröø i-5 3
WINCUPL
phaàn môû roäng
(extensions)
Phaàn môû roäng cho pheùp söû duïng
caùc chöùc naêng khaùc lieân quan ñeán nuùt
.A ñoù.
Asyn.Coù nhieàu
.D Qextension
output khaùc
.J nhau:
J input
P Preset Q
.A Asyn. Reset .D D input .K K input
R
.CE Chip enable .IO Input&ouput .OEMU Tri-state
X output
.C Clock .O Output .DFB D feedback
K E Enable
Vaø coøn nhieàu extension khaùc nöõa, xem theâm
phaàn help cuûa chöông trình
Laäp trình duøng
WINCUPL
leänh APPEND

Leänh APPEND thöïc hieän OR nhieàu


bieåu thöùc logic khaùc nhau.
Vd:
APPEND Y = A &B;
APPEND Y = C & !D;
APPEND Y = !A & C;
=> Y = A & B + C & !D + !A & C;
Laäp trình duøng
WINCUPL
baûng söï thaät – true table
Khai baùo moät baûng söï thaät theo
cuù phaùp:
TABLE var1 => var2 {
value_in 1 => value_out 2;
value_in n => value_out n;
}
Vd:
TABLE input => output {
0 => ‘b’0001; 1 => ‘b’0010;
2 => ‘b’0100; 3 => ‘b’1000;
}
WINCUPL
maùy traïng thaùi – state
machine
Moâ hình maùy traïng thaùi:

Non-registered
input output

registere
Maïch toå hôïp d output
Maïch nhôù
state
output

Feedback
WINCUPL
maùy traïng thaùi – state
machine
Khai baùo maùy traïng thaùi:
SEQUENCE list_var{
PRESENT state_n statement;
}
Statement – caùc khai baùo veà ñieàu
kieän hoaëc ngoõ ra hoaëc traïng thaùi keá
hoaëc coù theå laø caùc töø khoùa IF,
DEFAULT, NEXT, OUT.
WINCUPL
maùy traïng thaùi – state
machine
Chuyeån traïng thaùi khoâng ñieàu
SEQUENCE list_var{
kieän:
PRESENT state_n NEXT
state_m;
Chuyeån
} traïng thaùi coù ñieàu kieän:
SEQUENCE list_var{
PRESENT state_n
IF expr_i NEXT state_i;
IF expr_j NEXT state_j;
[DEFAULT NEXT state_default;]
}
WINCUPL
maùy traïng thaùi – state
machine
Ngoõ ra ñoàng boä khoâng ñieàu kieän:
SEQUENCE list_var{
PRESENT state_n
NEXT state_m OUT var1 OUT var2;
}
Ngoõ ra ñoàng boä coù ñieàu kieän:
SEQUENCE list_var{
PRESENT state_n
IF expr_i NEXT state_i OUT var_i;
IF expr_j NEXT state_j OUT var_j;
[DEFAULT NEXT state_default OUT
var_def;]
Laäp trình duøng
WINCUPL
leänh CONDITION
Leänh CONDITION coù caáu truùc:
CONDITION {
IF expr_i OUT var_i;
IF expr_j OUT var_j;
DEFAULT OUT var_def;
}
Laäp trình duøng
WINCUPL
haøm - function

Haøm ñöôïc khai baùo theo cuù phaùp:


function teân_haøm
(danh_saùch_ñoái_soá)
{ /* thaân haøm */
}
Vd:
function xor(a,b)
{ xor = a&!b # !a&b;
}
WINCUPL
Höôùng daãn moâ
phoûng
- Môû WINCUPL: click choïn icon
- Choïn File  New 
Project: ñieàn ñaày ñuû
caùc thoâng soá vaøo
baûng roài nhaán OK.

- Ñieàn soá
3 vaøo
cöûa soå
INPUT PINS
WINCUPL
Höôùng daãn moâ
phoûng
- Ñieàn soá 1
vaøo cöûa
soå OUTPUT
PINS
- Ñieàn soá 0
vaøo cöûa
soå
PINNODES

Cöûa soå chöông trình seõ hieän ra nhö


sau:
WINCUPL
Höôùng daãn moâ
phoûng
WINCUPL
Höôùng daãn moâ
phoûng
- Nhaäp ñoaïn code nhö sau:
/* *************** INPUT PINS *********************/
PIN 2 = a ; /* input a */
PIN 3 = b ; /* input b */
PIN 4 = mux ; /* control input to select input a or b
*/

/* *************** OUTPUT PINS *********************/


PIN 14 = mux_out ; /* output port pin */

/* mux_out = a if mux = 1 else mux_out =b */

mux_out = a& mux # b& !mux;


- Choïn File  Save hoaëc nhaán Ctrl+S
ñeå löu project
WINCUPL
Höôùng daãn moâ
phoûng
- Choïn Utilities  WinSim ñeå môû chöông
trình moâ phoûng.
- Trong WinSim,
choïn File 
New, choïn nuùt
Design File…
vaø tìm choïn
taäp tin *.PLD
ñaõ löu ôû
treân, nhaán OK
ta seõ ñöôïc
giao dieän nhö
hình beân:
WINCUPL
Höôùng daãn moâ
phoûng
-Choïn Signal  Add Signal ñeå theâm caùc
tín hieäu duøng cho moâ phoûng.

-Choïn Done ñeå keát thuùc vieäc theâm tín


hieäu.
Keát quaû:
WINCUPL
Höôùng daãn moâ
phoûng
WINCUPL
Höôùng daãn moâ
phoûng
-Choïn Signal  Add Vector ñeå theâm thôøi
gian moâ phoûng.

Keát quaû:
WINCUPL
Höôùng daãn moâ
phoûng
WINCUPL
Höôùng daãn moâ
phoûng
-Click phaûi
leân töøng
ñoaïn thôøi
gian cuûa
töøng tín
hieäu, choïn
giaù trò thích
hôïp cho
ñoaïn ñoù. Ta
thöû thieát
laäp ñoaïn tín
Keát nhö
hieäu quaû:
sau:
WINCUPL
Höôùng daãn moâ
phoûng
WINCUPL
Höôùng daãn moâ
phoûng
-Choïn File  Save ñeå löu giaûn ñoà thôøi
gian vöøa taïo.
* Chuù yù: phaûi löu file naøy taïi thö muïc
-Choïn Simulator  Run Simulator ñeå boä
ñaõ
moâlöu file *.PLD
phoûng ôû treân.
tính toaùn caùc tín hieäu ngoõ ra
theo tín hieäu ngoõ vaøo ñaõ taïo.
Keát quaû:
WINCUPL
Höôùng daãn moâ
phoûng
WINCUPL
Höôùng daãn moâ
phoûng
KIEÅM TRA laïi keát quaû vöøa coù theo caùc tín
hieäu ñaàu vaøo vaø ñieàu kieän ñeà baøi. Neáu
sai,
File ta quay
*.JED laølaïi
filechænh
duøngsöûa ñoaïnchip
ñeå naïp code.
hoå trôï file
JED
-------------------------------------

Chöông trình WinCUPL coù theå taûi veà taïi


ñòa chæ:
www.atmel.com
Serial Number: 60008009
WINCUPL
Höôùng daãn moâ
phoûng

ÑAÂY LAØ PHAÀN CUOÁI CUØNG CUÛA MOÂN


ÑIEÄN TÖÛ SOÁ

CHUÙC MOÏI NGÖÔØI THI TOÁT

Moïi thaéc maéc, lieân heä:


trungdphan@gmail.com

You might also like