Tải bản đầy đủ (.pdf) (29 trang)

bài giảng vi mạch số phần 3 tóm tắt hướng dẫn sử dụng ngôn ngữ abel

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (495.86 KB, 29 trang )

Bài giảng Vi mạch số
Biên soạn Ngô Văn Bình
Trang 87
Phần 3: TÓM TẮT HƯỚNG DẪN SỬ DỤNG NGÔN NGỮ
ABEL
Ngôn ngữ ABEL (Advanced Boolean Equation Language) là một trong những
ngôn ngữ lập trình rất mạnh cho PLD bao gồm cả phần lập trình mô phỏng và tạo file
fuslemap (cầu chì) 'đốt' PLD. Trong bài này chỉ tóm tắt hướng dẫn sử dụng các phần
cấu trúc và cú pháp về các phát biểu, khai báo, chỉ dẫn… chủ yếu nhất để phục vụ cho
cách lập trình cho vi mạch GAL và cách lập trình cho các vi mạch ứng dụng trong
mạch sau này. Để hiểu sâu hơn về ngôn ngữ này, người học nên cần tham khảo thêm
các tài liệu khác hoặc phần help trong ngôn ngữ.
3.1 CẤU TRÚC VÀ CÚ PHÁP:
3.1.1 CÁC PHÁT BIỂU (STATEMENT)
1. Phát biểu Module:
Cú pháp: module modname [(dummy_arg[,….])]
Modname là một danh hiệu hợp lệ được đặt làm tên gọi cho module chương
trình.
Danh hiệu hợp lệ là một chuỗi dài tối đa 31 ký tự (chữ cái, chữ số, dấu gạch dưới
'_'), được bắt đầu bằng chữ cái hay dấu gạch dưới '_' Danh hiệu phân biệt chữ hoa hay
chữ thường.
Dummy _ arg (có thể có) là một thông số hình thức (tương tự như thông số hình
thức của các procedure ngôn ngữ cấp cao).
Mục đích - cách dùng:
Phát biểu module xác định chỗ bắt đầu của một module và phải có phát biểu end
để xác định chỗ kết thúc của module.
Một file chương trình có thể có một hoặc nhiều module (tương tự như trong ngôn
ngữ hợp dịch).
Ví dụ: MODULE My _ Example
.
.


.
END My _ Example
Module có tên là My _ Example và phát biểu END My _ Example kết thúc
module này. Trong module này không sử dụng thông số hình thức.
Ví dụ: MODULE My _ Example (A,B)
.
.
.
C = A + B
Bài giảng Vi mạch số
Biên soạn Ngô Văn Bình
Trang 88
END My _ Example
Trong module này có sử dụng hai thông số hình thức A và B, biểu thức
C = A + B, với A, B được trả về giá trị thực (từ module khác) khi biên dịch.
2. Phát biểu title:
Cú pháp: title 'string'
String là một chuỗi ký tự nằm trong hai dấu nháy đơn (')
Mục đích - cách dùng:
Phát biểu title dùng để đặt cho một module một cái tiêu đề để minh họa đặc
điểm chức năng chẳng hạn. Chuỗi ký tự đặt tiêu đề sẽ xuất hiện trong cả file dữ liệu và
file fusemap sau khi biên dịch.
Sử dụng phát biểu title là tùy chọn (không nhất thiết phải có).
Ví dụ: Module EXO
Title '3 - 8 line decoder using GAL 16V8'.
3. Phát biểu equations:
Cú pháp: equations
Mục đích - cách dùng:
Phát biểu equations định chỗ bắt đầu của một hay một nhóm biểu thức Boole
biểu diễn hàm logic ngõ ra theo ngõ vào:

Sau mỗi biểu thức phải có dấu chấm phẩy (;)
Ví dụ: Equations
A = B & C ;
[W,Y] = 3 ;
!F = B = = C ;
4. Phát biểu Truth _ table:
Cú pháp: Truth _ table (inputs -> outputs)
hay truth _ table (inputs : > reg _ outs)
hay truth _ table (inputs: > reg _ outs -> outputs)
 Inputs : là các ngõ vào của hàm logic
 Outputs : là các ngõ ra của hàm logic
 Reg _ outs : là các ngõ ra của các thanh ghi (FF)
 Dấu -> : biểu diễn hệ tổ hợp
 Dấu : > : biểu diễn hệ tuần tự
Mục đích - Cách dùng:
Truth _ table trình bày bảng sự thật minh họa hoạt động của hàm logic hoặc hệ
logic cần thiết kế.
Bài giảng Vi mạch số
Biên soạn Ngô Văn Bình
Trang 89
Các bảng sự thật có thể thay thế hoặc bổ sung thêm cho các biểu thức (trong
equations) hay sơ đồ trạng thái (trong state _ dragram)
Ví dụ:
Truth _ table ([A,B] -> C))
[0,1] -> 1 ;
[1,0] -> 1 ;
[1,1] -> 0 ;
[0,0] -> 0 ;
Rõ ràng truth _ table ở trên biểu diễn biểu thức C = A + B
5. Phát biểu state _ diagram:

Cú pháp: state _ diagram state variables
state state _ exp : [equations] ;
.
.
.
[trans - stmt…];
State_variables : là tập hợp các biến trạng thái trong máy trạng thái.
State : là từ khóa để biểu diễn sự chuyển biến từ trạng thái hiện tại sang trạng thái
kế tiếp và ngõ ra hiện tại.
State _exp : là biểu thức hay hằng số định nghĩa trạng thái hiện tại.
Equations là các biểu thức logic ngõ ra hiện tại của máy trạng thái.
Trans _ stmt là một phát biểu dạng IF - THEN - ELSE, GOTO, CASE (tùy chọn)
để mô tả sự chuyển biến từ trạng thái hiện tại sang trạng thái kế tiếp theo điều kiện tác
động của ngõ vào.
Mục đích - cách dùng: Phát biểu state _ diagram định nghĩa các biến trạng thái
bắt đầu sự mô tả hoạt động của máy trạng thái (tương tự như đồ thị trạng thái hay lưu
đồ máy trạng thái).
Ví dụ:
Giả sử ta có 2 ngõ vào là x1 và x2, ngõ ra là z, máy trạng thái có 3 trạng thái ký
hiệu S0, S1, S2, 2 biến trạng thái Q = [Q0,Q1] (2 ngõ ra của FF).
state _ diagram Q
state S0 : if (x1 & x2 = = 0) then S2

else S1
state S1 : z = 1 ;

x
1
.
x

2
=0

Z=1

Z=0

S
0
S
1

S
2

N

Y

Bài giảng Vi mạch số
Biên soạn Ngô Văn Bình
Trang 90
go to S2 ;
state S2 : z = 0 ;
go to S0 ;
Đoạn chương trình trên tương đương với lưu đồ máy trạng thái hình bên.
6. Phát biểu go to:
Cú pháp: goto state _ exp ;
State _ exp : là biểu thức biểu diễn trạng thái kế tiếp.
Mục đích - cách dùng:

Phát biểu goto biểu diễn sự chuyển biến không điều kiện từ trạng thái hiện tại
sang trạng thái kế tiếp là state _ exp.
Ví dụ: Si: goto Sj ; nhảy đến trạng thái Sj
Sj: goto x + y; nhảy đến trạng thái x + y
7. If - then - else:
Cú pháp: If exps then state _ exp1
[else state _ exp2];
hay if exps1 then state _ exp1
else if exps2 then state _ exp2
[else if …]
else state _ expn;
_ Exps : là bất kỳ biểu thức hợp lệ nào.
_ State _exp1, state _ exp2 … : là biểu thức biểu diễn trạng thái kế tiếp.
Mục đích - cách dùng:
Phát biểu if - then - else : mô tả sự chuyển hóa trạng thái theo điều kiện ngõ vào.
Nếu biểu thức ngay sau từ khóa if là đúng, chuyển biến hướng đến trạng thái
ngay sau từ khóa then; nếu sai chuyển biến hướng đến trạng thái ngay sau từ khóa else.
Các phát biểu if - then - else có thể được nối với nhau liên tiếp nhưng kết thúc
phải là dấu chấm phẩy.
Ví dụ:
state 1: if (A = = B) then 2; "nếu A = B chuyển đến trạng thái 2
state 2: if A then 3 else 4; "nếu A đúng ( 0) chuyển đến trạng thái 3"
"nếu A sai (= 0) chuyển đến trạng thái 4".
state 0: if a then 1
else if b then 2
else if c then 3
Bài giảng Vi mạch số
Biên soạn Ngô Văn Bình
Trang 91
else 0;

8. Phát biểu case:
Cú pháp: case [exps1 : state_ exp1;]
[expsi : state _ expi;]
end case;
Mục đích - cách dùng:
Phát biểu case mô tả sự chuyển biến trạng thái trong trường hợp có nhiều điều
kiện tác động.
Ví dụ: State 0 : case a = = 0 : 1;
a = = 1 : 2;
a = = 2 : 3;
a = = 3 : 0;
End case;
9. Phát biểu test _ vectors:
Cú pháp: Test vectors['note'] (inputs -> outputs)
[invalues -> out values]
Note: là một chuỗi ký tự để mô tả các test _ vector.
Inputs: là một danh hiệu hay tập hợp danh hiệu tên các tín hiệu vào hay hồi tiếp
về ngõ vào của hệ.
Outputs là một danh hiệu hay tập hợp danh hiệu tên các tín hiệu ra của hệ.
Invalues là một hay tập hợp các giá trị vào.
Outvalues là một hay tập hợp các giá trị ra là hàm logic của các giá trị vào và giá
trị trạng thái (hệ tuần tự).
Mục đích - cách dùng:
Các vector thử dùng để mô phỏng hoạt động của hệ và kiểm tra các chức năng
hoạt động của hệ khi chạy chương trình mô phỏng.
Ví dụ: equations
C = A & B ; "C = A . B
D = A # B ; "D = A + B
Test _ vectors ([A,B] -> [C, D])
[0,0] -> [0, 0]

[0,1] -> [0, 1]
[1,0] -> [0, 1]
[1,1] -> [1, 1]
10. Phát biểu istype:
Bài giảng Vi mạch số
Biên soạn Ngô Văn Bình
Trang 92
Cú pháp: signal [ , signal] … istype 'attr [ , attr]…';
hay signal [ , signal] … pin is type 'attr [ , attr] …';
_ Signal là một danh hiệu pin hay node.
_ Attr là một chuỗi ký tự xác định các thuộc tính (attribution) của các
signal.
Mục đích - cách dùng:
Phát biểu istype định nghĩa các thuộc tính của pin hay node lập trình được
của các dụng cụ (PLD).
Các thuộc tính của pin hay node có thể khai báo cùng một dòng.
Các thuộc tính hợp lệ là:
'buffer' : đệm
'com' : hệ tổ hợp
'invert' : đảo
'neg' : tính cực mức thấp
'pos' : tính cực mức cao
'reg' : thanh ghi (hệ tuần tự)
'reg D', 'reg _T', 'reg _ JK', 'reg _SR': các FF, D, T, JK, SR
Ví dụ: FO, A istype 'neg, reg'.
Istype định nghĩa FO, A là tín hiệu của thanh ghi, tác động mức thấp.
Output pin 15 istype 'reg, invert';
Tín hiệu output chân 15 của thanh ghi ngõ đảo (ngõ ra Q)
11. Phát biểu end:
Cú pháp: end

hay end modname
Modname : tên của module chương trình.
Mục đích - cách dùng:
Dùng kết hợp với các phát biểu module để mở đầu và kết thúc module chương
trình.
3.1.2 CÁC KHAI BÁO (DECLARATIONS):
1. Chân (pin):
Cú pháp: [!] pin _id [,[I]pin_id…]pin [pin [pin # [,pin #]]
istype 'attr'] ;
 Pin _id là một danh hiệu dùng để đặt tên cho một chân.
 Pin # là số thứ tự chân trên dụng cụ (PLD) thật.
 Attr: là một chuỗi xác định các thuộc tính của chân.
Bài giảng Vi mạch số
Biên soạn Ngô Văn Bình
Trang 93
 ! : ký hiệu NOT, tích cực mức thấp.
Mục đích - cách dùng:
Từ khóa pin dùng để khai báo những tín hiệu input và output, là những tín hiệu in
/ out qui định sẵn trên dụng cụ (theo sổ tra cứu). Khai báo cũng có thể định nghĩa
thuộc tính chân.
Khi một danh sách danh hiệu chân và số chân có trong cùng một khai báo chân,
sẽ có tự tương xứng 1 - 1 giữa danh hiệu chân và số chân.
Ví dụ: !clock, reset, S1 pin 12, 15,3;
Khai báo này gán tên chân: clock chân 12, reset chân 15, S1 chân 3.
!clock: tác động mức thấp.
2. Nút (node):
Cú pháp: [!]node_id[,[!]node_id …]node [node# [,nod # …][istype 'attr'];
_ Node_id là một danh hiệu dùng để đặt tên một nút.
_ Node # là số thứ tự nút trên dụng cụ thật (nút tương đương như chân ẩn
trong dụng cụ và số nút được cho trong sổ tay tra cứu).

Mục đích - cách dùng:
Từ khóa node dùng để khai báo những tín hiệu gán cho những nút ẩn trong dụng
cụ.
Ví dụ: B node istype 'reg'
Xác định nút B là một ngõ của FF trong dụng cụ.
A,B node 25, 26.
Gán tên A là nút 25, B là nút 26. Số nút này do nhà sản xuất qui định trong sổ tay
tra cứu.
3. Dụng cụ (device):
Cú pháp: device-id device real_device;
Device-id là một danh hiệu, chính là tên file fusemap.
Real-device là chuỗi mô tả mã số dụng cụ (PLD) đặt giữa 2 dấu nháy đơn (').
Mục đích - cách dùng:
Khai báo dụng cụ gắn tên dụng cụ sử dụng trong một module với một dụng cụ
(PLD) thật. Trong quá trình biên dịch, các hàm logic sẽ được đưa về dạng theo cấu
trúc cổng đúng như của dụng cụ thật.
Phải đặt dấu; sau khai báo.
Ví dụ: D1 device 'P16R4';
Khai báo này cho biết D1 là loại PLD PAL 16R4.
3.3 CÁC KHAI BÁO KHÁC (OTHER DEDARATIONS):
1. Hằng (Constant):
Bài giảng Vi mạch số
Biên soạn Ngô Văn Bình
Trang 94
Cú pháp: id [, id]… = expr [, expr]…;
id là một danh hiệu đặt tên cho một hằng.
expr xác định giá trị hằng.
Mục đích - cách dùng:
Khai báo hằng định nghĩa những hằng số được dùng trong một module.
Ví dụ: X = .X. ; "X mang ý nghĩa không xác định

Z = .Z. ; "Z mang ý nghĩa tổng trở cao
C = .C. ; "C mang ý nghĩa tác động cạnh lên.
A = ^b01 ; số nhị phân
B = ^h16 ; số hex
C = 10 ; số thập phân
2. Tập hợp (set):
Định nghĩa:
Tập hợp là tập hợp những tín hiệu và hằng số mà tác vụ thực hiện như là
một đơn vị.
Bất cứ một tác vụ nào áp dụng cho một tập hợp sẽ được áp dụng cho mỗi
phần tử trong tập hợp.
Định nghĩa: Tập hợp sẽ làm đơn giản việc mô tả logic và các test - vectors,
bằng cách chỉ cần dùng tên gọi tập hợp.
Cách khai báo:
Một tập hợp được đại diện bởi một danh sách các hằng số và tín hiệu ngăn
cách bằng các dấu phẩy hay dấu khoảng ( ), đặt trong dấu ngoặc vuông ([ ]). Sau
mỗi khai báo một tập hợp phải có dấu ;.
Ví dụ: MULOUT = [B0, B1, B2, B3, B4, B5, B6, B7];
Hay MULOUT = [B0 B7];
Khai báo MULOUT là tên một tập hợp gồm 8 tín hiệu từ B0 đến B7
BCD = [D, C, B, A]
LED = [g, f, e, d, c, b, a]
Test-vectors (BCD -> LED)
[0,0,0.0] -> [1,0,0,0,0,0,0]
BCD là một tập hợp gồm các tín hiệu D, C, B, A.
LED là một tập hợp gồm các tín hiệu g, f, e, d, c, b, a.
3. Macro:
Cú pháp: macro_id macro [(dummy_arg [, dummy_arg]…)]{block};
_ macro_id : là một danh hiệu đặt tên cho macro.
Bài giảng Vi mạch số

Biên soạn Ngô Văn Bình
Trang 95
_ dummy_arg : là một thông số hình thức.
_ block : là các biểu thức logic.
Mục đích - cách dùng: Khai báo macro định nghĩa một macro thực hiện các chức
năng các phép toán, biểu thức logic trong block.
Chỉ định nghĩa macro một lần trong phần khai báo macro trong module và sẽ
được dùng bất cứ nơi nào trong module.
Khai báo macro tương tự như trong trình hợp ngữ.
Macro chỉ có thể được dùng trong module mà nó được khai báo.
Ví dụ:
NAND 3 macro (A, B, C) { ! (A&B&C)}.
NAND3 là macro thực hiện chức năng hàm logic A.B.C, với A, B, C là các thông số
hình thức.
Sau đó trong mudule khai báo macro này ta có khai báo:
D = NAND 3 (Clock, Hello, busy) ;
Sẽ cho kết quả : D = ! (Clock & Hello & Busy) khi biên dịch.
4. Enable:
Cú pháp: Enable output_id = [!] expr ;
Output_id là danh hiệu đặt tên cho một ngõ ra hoặc một tập hợp ngõ ra.
Expr là một biểu thức logic.
Mục đích - Các dùng:
Khai báo enable cho phép các ngõ ra 3 trạng thái hoạt động theo tín hiệu điều
khiển bởi giá trị của expr.
Sử dụng khai báo này theo sau phát biểu equations.
Ví dụ: OE pin 11 ;
F0, F1, F2, F3 pin 19, 18, 17, 16;
count = [F0, F1, F2, F3]
equations
enable count = ! OE ;

Các ngõ ra từ F0 đến F3 trong tập hợp count là các ngõ ra 3 trạng thái, sẽ hoạt
động khi OE = 0 và sẽ ở trạng thái high - Z khi OE = 1.
_ Có thể sử dụng tiếp vĩ ngữ. OE thay cho khai báo enable (xem phần tiếp vĩ
ngữ).
3.4 CÁC TOÁN TỬ (OPERATORS):
1. Toán tử chuẩn (standard):
! : NOT
# : OR
Bài giảng Vi mạch số
Biên soạn Ngô Văn Bình
Trang 96
& : AND
$ : XOR
!$: XNOR
= : toán tử gán cho biểu thức tổ hợp.
: = : toán tử gán cho biểu thức thanh ghi (tuần tự).
Ngoài ra từ khóa @ ALTERNATE báo cho trình biên dịch biết bộ toán tử tương
đương (atternate) thay thế cho bộ toán tử chuẩn (các ký hiệu dễ nhớ hơn).
Bộ toán tử thay thế (phải có từ khóa @ ALTERNATE ở đầu module chương
trình).
/ : NOT
* : AND
+ : OR
:+: : XOR
:* : : XNOR
2. Toán tử so sánh:
= = : bằng
! = : không bằng
< : nhỏ hơn
> : lớn hơn

<= : nhỏ hơn hoặc bằng
> = : lớn hơn hoặc bằng
Ngoài ra còn cho phép viết các biểu thức điều kiện, biểu thức này sẽ trả về 1 nếu
thỏa điều kiện và trả về 0 nếu không thỏa điều kiện.
Ví dụ:
Q = (P = = 1) ; "Q sẽ bằng 1 nếu P = 1
"Q sẽ bằng 0 nếu P khác 1
3.5 CÁC TIẾP ĐẦU NGỮ (PREFIX), TIẾP VĨ NGỮ (SUFFIX):
1. Tiếp đầu ngữ:
Toán tử Not (! Hay / ) được dùng như tiếp đầu ngữ để báo trình biên dịch biết
tín hiệu hoạt động (tích cực) ở mức logic 0.
Ví dụ: ! Q0 pin 15 ;
Tương đương với
Q0 pin 15 is type 'neg';
2. Tiếp vĩ ngữ:
Các tiếp vĩ ngữ thường được dùng trong chế độ thanh ghi để truy xuất đến từng
chân nội trong thanh ghi.
Ví dụ:
Q0.CK truy xuất đến chân clock của tín hiệu ra Q0 ở chế độ thanh ghi.
Tương tự như đối với. RE, .PR, .D, .T … lần lượt truy xuất đến các chân reset,
preset, D, T của thanh ghi.
Tiếp vĩ ngữ .OE cho phép xuất ở ngõ ra 3 trạng thái.
Ví dụ: out.oe = !ena ;
ena = 0 -> ngõ ra out được phép xuất.
Bài giảng Vi mạch số
Biên soạn Ngô Văn Bình
Trang 97
ena = 1 -> ngõ ra out ở trạng thái high-Z
3. Ghi chú (COMMENTS):
Các ghi chú minh họa, giải thích chương trình bắt đầu bằng dấu nháy kép (") và

kết thúc bằng dấu nháy kép (") hoặc xuống dòng.
Ví dụ: Q1, Q2, Q3, pin 14, 15, 16 "out puts
"Declarations
QSTATE = [Q1, Q2, Q3] ; "sets
3.6 TRÌNH BIÊN DỊCH NGÔN NGỮ ABEL V2.02:
3.6.1 Sọan thảo file nguồn:
Ta có thể dùng bất kỳ trình soạn thảo văn bản trong NC, EDLINE, SK… để soạn
thảo file nguồn. Chỉ cần lưu ý là phần mở rộng của tên file nugồn phải là “.ABL”.
Ví dụ: encoder.abl
Để thuận tiện cho biên dịch ta nên dùng phần soạn thảo văn bản trong NC để
soạn thảo file nguồn.
1. Trong môi trường NC nhấn Shift + F4
2. Đánh tên file.abl vào khung hội thoại, nhấn Enter
3. Bắt đầu soạn thảo file nguồn (file.abl)
4. Sau khi soạn thảo kết thúc nhấn F2 để lưu file.
3.6.2 BIÊN DỊCH:
1. Vào thư mục ABEL, nạp file nguồn vào trong thư mục này.
2. Đánh lệnh abe tên file (không cần đánh phần mở rộng), trình biên dịch
bắt đầu làm việc và cho ra các file kết quả:
File.lst : file liệt kê lại file nguồn có số thứ tự từng dòng và có thông báo lỗi từng
dòng (nếu có).
File.doc: file liệt kê các phương trình, biểu thức Boole đã rút gọn theo cấu trúc
dụng cụ (device) đã khai báo, đồng thời có vẽ hình sơ đồ chân dụng cụ với ký hiệu
tương ứng gán vào chân.
File.sim: là file kết quả mô phỏng dưới dạng bảng sự thật theo các test-vectors
chỉ báo ở file nguồn.
File*.jed: với file* là danh hiệu đặt cho device trong phần khai báo decive ở file
nguồn.
Các trường hợp xảy ra khi biên dịch.
 Lỗi cú pháp: Kết quả trả về chỉ có file.lst mà không có xuất hiện các file còn lại.

Ta phải xem lại file.lst (nhấn F3 hoặc F4 trong NC) để biết lỗi và sửa lại file.abl rồi
biên dịch lại cho đến khi file.lst không báo lỗi. Đây là trường hợp thường xảy ra nhất,
cần phải lưu ý.
 Các lỗi còn lại như vector mô phỏng (trong test-vectors) không phù hợp, cấu
trúc dụng cụ không thích hợp với hệ thiết kế…, sẽ được khai báo trong quá trình biên
dịch ở môi trường DOS và trên các file.sim hoặc file.jed hoặc file.doc tùy theo loại lỗi.
Như vậy công việc biên dịch từ file nguồn xem như hoàn chỉnh khi kết quả biên
dịch trả về đầy đủ 4 file đã nói trên và không có báo lỗi trong file.lst cũng như trong
các file còn lại.
Ghi chú:
Bài giảng Vi mạch số
Biên soạn Ngô Văn Bình
Trang 98
Để có thể xem xét được kết quả mô phỏng theo test-vectors trong file.sim, ở file
nguồn phải được thêm từ khóa flag'-t1' ngay sau chỉ dẫn / phát biểu module mod-
name.
Ví dụ: module decol2-4 flag'-t1-'


3.7 GIỚI THIỆU TÓM TẮT CẤU TRÚC GAL16V8 và GAL20V8
Các dụng cụ PLD sử dụng trong các bài thí nghiệm đều dùng GAL16V8 hoặc
GAL20V8. Trong phần này sẽ giới thiệu tóm tắt cấu trúc các mode làm việc của các
dụng cụ trên và cách khai báo device tương ứng mode làm việc.
3.7.1 GAL16V8: ( xem thêm ở phần phụ lục)

I/CLK V
CC

11 I/O
12 I/O

13 I/O
14 I/O
15 I/O
16 I/O
17 I/O
18 I/O
GND 19/OE

Sơ đồ chân GAL16V8 như hình 3.1
I1 đến I8 : các ngõ vào.
I /CLK và 19/OE: lựa chọn ngõ vào I/ ngõ CLK và ngõ vào 19/ ngõ OE tùy theo
mode.
Mức logic tương hợp TTL.
3.7.2 Các mode làm việc:
1. Mode thanh ghi (Registered mode) (hình 3.1&3.2)
Sử dụng mode thanh ghi nếu cần có thanh ghi trong thiết kế (tối đa 8 DFF xem
hình 0.6a,b). Mỗi macrocell có thể được định hình ngõ ra của thanh ghi (hệ tuần tự),
ngõ ra của hệ tổ hợp, I/O hoặc ngõ vào. Trường hợp macrocell là ngõ ra thanh ghi
hoặc I/O, ngõ ra được cho phép xuất bằng chân OE, thanh ghi được kích xung CK từ
ngõ CLK. Tám khối tích (product terms) nối đến khối tổng (sum terms). Trường hợp
macrocell là ngõ ra hệ tổ hợp hoặc I/O, tín hiệu cho phép xuất được điều khiển bằng
một khối tích và 7 khối tích còn lại nối đến khối tổng (hình 0.6b). Khi macrocell được
định là ngõ vào, tín hiệu cho phép xuất phải ở trạng thái không cho phép xuất.
2. Mode phức (complexmode) (hình 3.1&3.2):
Trong mode phức, các ngõ ra hệ tổ hợp và các chức năng I/O được sử dụng.
Chân 1 và 11 là các ngõ vào bình thường. Chân 13 đến chân 18 có các đường hồi tiếp
về dãy AND để tạo chức năng I/O đầy đủ. Chân 12 và 19 là ngõ bình thường (thường
được dùng làm ngõ ra), không được dùng làm ngõ vào. Trong mode này, mỗi
1 20


2 19

3 18

4 17

5 16

6 15

7 14

8 13

9 12

10 11

16V8

Bài giảng Vi mạch số
Biên soạn Ngô Văn Bình
Trang 99
macrocell có 7 khối tích dẫn đến khối tổng và một khối tích tạo tín hiệu cho phép xuất.
Các ứng dụng hệ tổ hợp cần tín hiệu OE điều khiển thường được sử dụng mode này.
3. Mode đơn (simple mode) (hình 3.1&3.2):
Trong mode đơn, 8 khối tích nối đến khối tổng. Chân 15 và 16 (các macrocell
giữa) thường được định là ngõ ra hệ tổ hợp. Các macrocell khác có thể là ngõ vào hoặc
ngõ ra hệ tổ hợp có chân hồi tiếp về dãy AND. Chân 1 và 11 là ngõ vào bình thường.
Sử dụng mode này cho các ứng dụng hệ tổ hợp không cần ngõ điều khiển OE.

3.7.2 GAL20V8 ( xem thêm ở phần phụ lục)

CLK/IN V
CC

IN IN
IN I/O
IN I/O
IN I/O
IN I/O
IN I/O
IN I/O
IN I/O
IN I/O
IN IN
GND OE /IN

Sơ đồ chân GAL20V8 như hình 3.2
So với GAL16V8, GAL20V8 có thêm 4 ngõ vào.
3.7.4 Các Mode làm việc:
1. Mode thanh ghi (hình 3.1&3.2)
Tương tự như mode thanh ghi GAL16V8
2. Mode phức (hình 3.1&3.2)
Tương tự như mode phức GAL16V8, chân 22,15 là ngõ ra bình thường, không
có đường hồi tiếp về dãy AND.
3. Mode đơn (hình 3.1&3.2):
Tương tự như mode đơn GAL15V8. Chân 18,19 là ngõ ra bình thường, không có
đường hồi tiếp về dãy AND.
* Khai báo device cho trình biên dịch:
Trong khai báo decive chọn - dụng cụ, để trình biên dịch làm việc đúng, ta phải

khai báo mode làm việc thích hợp cho 2 loại GAL trên tùy theo yêu cầu thiết kế.
Danh hiệu khai báo device như sau:
1. "P16V8S', 'P20V8S': Sử dụng mode đơn.
2. 'P16V8C', 'P20V8C': Sử dụng mode phức.
1 24

3 23

3 22

4 21

5 20

6 19

7 18

8 17

9 16

10 15

11 14

12 13

20V8


Bài giảng Vi mạch số
Biên soạn Ngô Văn Bình
Trang 100
3. 'P16V8R', 'P20V8R': Sử dụng mode thanh ghi
Ví dụ: Trong thiết kế hệ tổ hợp không sử dụng ngõ ra 3 trạng thái, dùng
GAL16V8, ta khai báo: U1 device 'P16V8S'
3.8 CÁC VÍ DỤ:
3.8.1 VÍ DỤ 1:
Thiết kế bộ phân kênh 1 -> 8 dùng PAL16V8 như hình 0.1
Ngõ vào : x
Ngõ ra : y0, y1, y2, y3, y4, y5, y6, y7
Điều khiển chọn kênh : S2, S1, S0
Tín hiệu cho phép ngõ ra : OE
Tùy theo tổ hợp mà chọn kênh S2, S1, S0 tín hiệu ra y0 - y7 sẽ lấy giá trị x khi
OE = 1. Các ngõ ra ở trạng thái hi-Z khi OE = 0.









Hình 3.3
* Chương trình:
1 module dmux1_8
2 title '1 to 8 line demultiplexer
3 THI NGHIEM KY THUAT SO 2_EX1'
4 "Các khai báo

5 U1 device 'P16V8s' ;
6 y0, y1, y2, y3 pin 12, 13, 14, 15 ;
7 y4, y5, y6, y7 pin 16, 17, 18, 19 ;
8 S0, S1, S2 pin 1, 2, 3 ;
9 x, OE pin 4, 5 ;
10 H, L, Z = 1, 0, .Z. ; "Hang
11 select = [S2, S1, S0]; "Tap hop
12 outputs = [y7, y6, y5, y4, y3, y2, y1, y0]; "Tap hop
13 equations
14 !y0 = (select = = 0)&x;
15 !y1 = (select = = 1)&x;

5 12
4 13

14

15

3 16

2 17

1 18

19

Y0
Y1
Y2

Y3
Y4
Y5
Y6
Y7
OE
x


S2
S1
S0
16V8

Bài giảng Vi mạch số
Biên soạn Ngô Văn Bình
Trang 101
16 !y2 = (select = = 2)&x;
17 !y3 = (select = = 3)&x;
18 !y4 = (select = = 4)&x;
19 !y5 = (select = = 5)&x;
20 !y6 = (select = = 6)&x;
21 !y7 = (select = = 7)&x;
22 enable outputs = OE;
23 test-vector 'Kiem tra phan kenh voi ngo vao x=1'
24 ([OE, select,x] -> [y7,y6,y5,y4,y3,y2,y1,y0])
25 [H,0,H] -> [H,H,H, H, H, H, H,L] ; "chon y0
26 [H,1,H] -> [H,H,H, H, H, H, L,H] ; "chon y1
27 [H,2,H] -> [H,H,H, H, H, L,H,H] ; "chon y2
28 [H,3,H] -> [H,H,H, H, L, H, H,H] ; "chon y3

29 [H,4,H] -> [H,H,H, L, H, H, H,H] ; "chon y4
30 [H,5,H] -> [H,H,L, H, H, H, H,H] ; "chon y5
31 [H,6,H] -> [H,L,H, H, H, H, H,H] ; "chon y6
32 [H,7,H] -> [L,H,H, H, H, H, H,H] ; "chon y7
33 test-vector 'Kiem tra phan kenh voi ngo vao x=0'
34 ([OE, select,x] -> [y7,y6,y5,y4,y3,y2,y1,y0])
35 [H,0,H] -> [H,H,H, H, H, H, H,H] ;
36 [H,1,H] -> [H,H,H, H, H, H, H,H] ;
37 [H,2,H] -> [H,H,H, H, H, H, H,H] ;
38 [H,3,H] -> [H,H,H, H, H, H, H,H] ;
39 [H,4,H] -> [H,H,H, H, H, H, H,H] ;
40 [H,5,H] -> [H,H,H, H, H, H, H,H] ;
41 [H,6,H] -> [H,H,H, H, H, H, H,H] ;
42 [H,7,H] -> [H,H,H, H, H, H, H,H] ;
43 test-vector 'Kiem traOE'
44 ([OE, select,x] -> [y7,y6,y5,y4,y3,y2,y1,y0])
45 [L,0,H] -> [Z,Z,Z,Z,Z,Z,Z,Z] ;
46 [L,0,L] -> [Z,Z,Z,Z,Z,Z,Z,Z] ;
47 end dmux1_8;
* Giải thích chương trình:
Dòng 1 khai báo module tên dmux1_8
Dòng 2,3 khai báo title và đặt tên.
Dòng 4 là chú thích (comments) các khai báo về dụng cụ, chân… từ
dòng 5 đến 12.
Dòng 5 khai báo dụng cụ (device) tên U1 và dùng vi mạch PAL16L8.
Dòng 6,7,8,9 là khai báo gán tên các chân tương ứng như hình 0.1.
Dòng 10 là khai báo hằng: L=0, H=1 và Z = .Z. (hi_Z)
Dòng 11, 12 là khai báo tập hợp: select = [S2,S1,S0] là tập hợp gồm 3
biến điều khiển chọn kênh;
Bài giảng Vi mạch số

Biên soạn Ngô Văn Bình
Trang 102
Outputs=[y7,y6,y5,y4,y3,y2,y1,y0] là tập hợp 8 biến ngõ ra. Việc khai báo tập
hợp này sẽ rất tiện khi ta cần tham chiếu tới các ngõ điều khiển hoặc ngõ ra ở
phần sau đó.
Dòng 13 bắt đầu phát biểu equations. Các biểu thức ngõ ra từ dòng 14
đến 21 có dùng toán tử bằng '(= =) tập hợp select. Chẳng hạn ở dòng 14 ta có
thể viết lại biểu thức chuẩn như sau: Y0 = S2.S1.S0x
Giá trị gán cho toán tử 'bằng' dùng hệ thập phân. Nếu dùng hệ nhị phân ta ghi:
(select = = ^b000).
Dòng 22 là phát biểu enable xác định tín hiệu điều khiển các ngõ ra 3
trạng thái của tập hợp outputs là OE tích cực mức 1 (Nếu ghi ! là tích cực mức
0).
Dòng 23 bắt đầu phát biểu test_vectors để kiểm tra chức năng của hệ
phân kênh.
Dòng 24 khai báo các tín hiệu ngõ vào và ngõ ra cần kiểm tra. Ngõ vào
là tập hợp các biến OE, select, x ; trong đó select là tập hợp 3 biến điều khiển
kênh S2, S1, S0. Ngõ ra là tập hợp các biến từ y7 đến y0.
Từ dòng 25 đến 32 là các vector kiểm tra phân kênh khi cho ngõ vào
x=1 và OE=1 .
Từ dòng 34 đến 42 là các vector kiểm tra phân kênh khi cho ngõ vào
x=0 và OE=1.
Từ dòng 45 đến 46 là các vector kiểm tra ngõ vào OE.
Dòng 47 là phát biểu end kết thúc module dmux1_8.
3.8.2 VÍ DỤ 2:
Thiết kế bộ đếm lên (đồng bộ) 16 dùng GAL16V8. Bộ đếm có ngõ CL đồng bộ,
tích cực mức 0 như hình 0.3.
Ta thiết lập bảng trạng thái hiện tại và kế tiếp cho các ngõ ra Q3Q2Q1Q0 và tìm
hàm Boole biểu diễn các ngõ ra kế tiếp theo tổ hợp các ngõ ra hiện tại (khi có tác động
xung CK) ta được:


Q0 = Q0
Q1 = Q1 + Q0
Q2 = Q2 + (Q1.Q0)
Q3 = Q3 + (Q2.Q1.Q0)


Hình 3.4
1 . Kết hợp với ngõ vào CL tích cực mức 0, chỉ cần AND vế phải với CL (ta lưu
ý là xem các ngõ ra kế tiếp là hàmtổ hợp của các ngõ vào hiện tại khi có tác động của
xung CK).
2 Theo cấu trúc GAL16V8, chân 1 là chân CK
đồng bộ các thanh ghi bên trong (xem mục 0.4).
3 module count4
1 19

2 18
17
16

16V8

Q3
Q2
Q1
Q0
CK
CL
Bài giảng Vi mạch số
Biên soạn Ngô Văn Bình

Trang 103
4 title 'Dem 16
5 THI NGHIEM KY THUAT SO 2_EX3'
6 U3 device 'P16V8R';
7 CK, CL pin1,2 ; "inputs
8 Q3,Q2,Q1,Q0 pin 19,18,17,16; "outputs
9 Count = [Q3,Q2,Q1,Q0];
10 CK,H,L = .C.,1,0 ; "Xung CK tac dong canh len
11 Equations
12 Q0 : = ! Q0 & CL "bieu thuc ngo ra dang thanh ghi
13 Q1 : = (Q1 $ Q0) & CL;
14 Q2 : = (Q2 $ (Q1 & Q0) & CL;
15 Q3 : = (Q3 $ (Q2 & Q1 & Q0))&CL;
16 Test_vectors([CK,CL] -> count)
17 [C,L] -> ^h0; “Clear
18 [C,H] -> ^h1; “Count
19 [C,H] -> ^h2;
20 [C,H] -> ^h3;
21 [C,H] -> ^h4;
22 [C,H] -> ^h5;
23 [C,H] -> ^h6;
24 [C,H] -> ^h7;
25 [C,H] -> ^h8;
26 [C,H] -> ^h9;
27 [C,H] -> ^hA;
28 [C,H] -> ^hB;
29 [C,H] -> ^hC;
30 [C,H] -> ^hD;
31 [C,H] -> ^hE;
32 [C,H] -> ^hF;

33 END Count4;
34 * Giải thích:
35 Các biểu thức sau phát biểu equations sử dụng toán tử gán ':=' để biểu diễn
ngõ ra là hệ tuần tự (thanh ghi). Trong test-vectors sử dụng trị mã hex (ký
hiệu ^h).
3.8.3 VÍ DỤ 3:
Thiết kế bộ đếm như ví dụ 3 dùng phương pháp máy trạng thái (state_machine).
Ta có lưu đồ máy trạng thái như hình 3.5
Lưu ý là với hệ đếm các biến trạng thái Q3 Q2 Q1 Q0 cũng chính là biến ngõ ra.
* Chương trình:
1 module conut4a
2 title 'Dem 16 dung bien trang thai
THI NGHIEM KY THUAT SO 2_EX4
3 U4 device 'P16V8R' ;
Bài giảng Vi mạch số
Biên soạn Ngô Văn Bình
Trang 104
4 CK, CL pin 1,2 ;
5 Q3, Q2, Q1, Q0 pin 19, 18, 17, 16 ;
6 Count = [Q3, Q2, Q1, Q0] ;
7 CK, H, L = .C.,1,0 ;
8 "Dinh nghia cac bien trang thai
9 S0 = ^b0000; S1 = ^b0001; S2 = ^b0010;
10 S3 = ^b0011; S4 = ^b0111; S5 = ^b0101;
11 S6 = ^b0110; S7 = ^b0111; S8 = ^b1000;
12 S9 = ^b1001; S10 = ^b1010; S11 = ^b1011;
13 S12 = ^b1100; S13 = ^b1101; S14 = ^b1110;
14 S15 = ^b1111 ;
15 State-diagram [Q3, Q2, Q1, Q0]
16 State S0 : if CL then S1 else S0;

17 State S1 : if CL then S2 else S0;
18 State S2 : if CL then S3 else S0;
19 State S3 : if CL then S4 else S0;
20 State S4 : if CL then S5 else S0;
21 State S5 : if CLK then S6 else S0;
22 State S6 : if CL then S7 else S0;
23 State S7 : if CL then S8 else S0;
24 State S8 : if CL then S9 else S0;
25 State S9 : if CL then S10 else S0;
26 State S10 : if CL then S11 else S0;
27 State S11 : if CL then S12 else S0;
28 State S12 : if CL then S13 else S0;
29 State S13 : if CL then S14 else S0;
30 State S14 : if CL then S15 else S0;
31 State S15 : go to S0 ;
32 Test_vectors ([CK,CL] -> count)
33 [C,H] -> ^b0000 ;
34 [C,H] -> ^b0001 ;
35 [C,H] -> ^b0010 ;
36 [C,H] -> ^b0011 ;
37 [C,H] -> ^b0100 ;
38 [C,L] -> ^b0000 ;
39 END;
hình 3.5
* Giải thích:
Từ dòng 9 đến 14 định nghĩa các biến trạng thái từ S0 đến S15 bằng toán tử gán '='.
Ở đây ta sử dụng mã nhị phân (^b).
Dòng 15 là phát biểu state-diagram định nghĩa 4 biến trạng thái Q3Q2Q1Q0.



S0 0000

Q3Q2Q1Q0

CL

S1

1 0001


CL

S2

1 00
10


1110

S14

.

.


CL


S15

1 1111

0

0

0

Bài giảng Vi mạch số
Biên soạn Ngô Văn Bình
Trang 105
Từ dòng 16 đến dòng 31 là các phát biểu if xét điều kiện chuyển trạng thái hình
0.4 sang các phát biểu máy trạng thái trong chương trình.






3.9 Bài tập
1. Hãy viết chương trình cho bộ đếm lên (đồng bộ), có ngõ vào Clear (CL) đồng bộ
với xung Clock (CK). Hoạt động theo giản đồ trạng thái như sau:



























Lưu ý: với hệ đếm các biến trạng thái Q3 Q2 Q1 Q0 cũng chính là biến ngõ ra.


S0 0000

Q3Q2Q1Q0

CL

S1


1 0001


CL

S2

1 0010


1110

S14

.

.


CL

S15

1 1111

0

0


0

Bài giảng Vi mạch số
Biên soạn Ngô Văn Bình
Trang 106
2. Hãy viết chương trình cho 1 thanh ghi dịch 8 bit dng GAL20V8, có nguyên lý
hoạt động theo bảng sự thật sau:
Inputs Outputs
CL CK LD Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0
0  X 0 0 0 0 0 0 0 0 Mode clear
1  1 D7 D6 D5 D4 D3 D2 D1 D0 Mode load
1  0 Q6 Q5 Q4 Q3 Q2 Q1 Q0 Q7 Mode shift
Với:
CL: Clear.
CK: Clock.
LD: Load data.
D7 D6 D5 D4 D3 D2 D1 D0 : Inputs data.
Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 : Outputs data.
3. Hãy viết chương trình cho 1 thanh ghi dịch 8 bit dùng GAL20V8, có nguyên lý
hoạtnhư bảng sự thật sau:
Inputs Outputs
CL CK LD Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0
0  X 0 0 0 0 0 0 0 0 Mode clear
1  1 D7 D6 D5 D4 D3 D2 D1 D0 Mode load
1  0 Q6 Q5 Q4 Q3 Q2 Q1 Q0 0 Mode shift
Với:
CL: Clear.
CK: Clock.
LD: Load data.
D7 D6 D5 D4 D3 D2 D1 D0 : Inputs data.

Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 : Outputs data.
4. Hãy viết chương trình: Thiết kế mạch cảnh báo nhiệt độ của bồn xử lý hóa chất.
Nhiệt độ của bồn được kiểm tra bằng 3 cảm biến nhiệt độ đặt ở 3 vị trí khác nhau trong
bồn. Nhiệt độ của bồn được cảnh báo bằng 2 đèn, 1 đèn xanh và 1 đèn đỏ. Khi không
có quá nhiệt hoặc chỉ có 1 vị trí quá nhiệt thì đèn xanh sáng, đèn đỏ tắt. Khi có 2 vị trí
trở lên quá nhiệt thì đèn đỏ sáng, đèn xanh tắt.
5. Viết một chương trình cho bộ dồn kênh tên mux4–1, thiết kế 2 hệ dồn kênh có tín
hiệu chọn kênh và cho phép hoạt động như sau:
INPUTS OUTPUT
EN S1 S0 Yi
0 X X 1
1 0 0 Xi0
1 0 1 Xi1
1 1 0 Xi2
1 1 1 Xi2
Bài giảng Vi mạch số
Biên soạn Ngô Văn Bình
Trang 107
Với: i = a, b

6. Hãy viết chương trình thiết kế mạch báo quá tải cho một hệ thống gồm 4 thiết bị
điện có công suất lần lượt như sau: thiết bị 1 có công suất P1 = 10Kw; thiết bị 2 có
công suất P2 = 20Kw; thiết bị 3 có công suất P3 = 30Kw; thiết bị 4 có công suất P4 =
40Kw. Được cấp nguồn từ một máy phát có công suất tối đa là 55Kw. Mạch có đèn
báo sẽ sáng và còi sẽ kêu khi máy phát quá tải.
( Gợi ý: ở bước 5 viết theo dạng Equations).






7. Viết chương trình điều khiển đèn giao thông hoạt động theo lưu đồ máy trạng thái
như sau:


























GA, RB


SA.SB

SA.SB

SA.SB

SA.SB

SA.SB

GA, RB

GA, RB

YA, RB

RA, GB

SA.SB

RA, GB

1

0

1

1


S3

S2

S1

1

0

0

0

1

1

S0

S6

S5

RA, GB

0

0


S4

BEGIN

GA, RB

RA, YB

S7

Bài giảng Vi mạch số
Biên soạn Ngô Văn Bình
Trang 108





* Giải thích v gợi ý:
1. Hệ điều khiển hoạt động của hai cột đèn giao thông A và B. Các ngõ vào SA
và SB nhận dạng mật độ xe cộ trên đường A và đường B. Ta qui định: SA =
1 tương ứng với mật độ xe bên đường A đông và SA = 0 tương ứng với mật
độ xe bên đường A giảm thấp. Tương tự như vậy cho SB.
Các ngõ ra của hệ: RA, YA, GA (cột A) và RB, YB, GB (cột B) dùng để
điều khiển các đèn đỏ, vàng, xanh tương ứng. Ta qui định mức logic đèn
sáng bằng 1 và đèn tối bằng 0.
8. Hãy viết chương trình cho 1 thanh ghi dịch 4 bit dùng GAL16V8, có nguyên lý hoạt
động theo bảng sự thật sau:
CI CK LD L_R Q3 Q2 Q1 Q0

0  X X 0 0 0 0 Mode clear
1  1 X D3 D2 D1 D0 Mode load
1  0 1 Q2 Q1 Q0 0 Mode shift left
1  0 0 0 Q3 Q2 Q1 Mode shift right
Với:
CL: Clear.
CK: Clock.
LD: Load data.
L_R : left_right.
D3 D2 D1 D0 : Inputs data.
Q3 Q2 Q1Q0 : Outputs data.
9. Hãy viết chương trình cho 1 thanh ghi dịch 4 bit dùng GAL16V8, có nguyên lý hoạt
động theo bảng sự thật sau:
CL CK LD L_R Q3 Q2 Q1 Q0
0  X X 0 0 0 0 Mode clear
1  1 X D3 D2 D1 D0 Mode load
1  0 1 Q2 Q1 Q0 Q3 Mode shift left
1  0 0 Q0 Q3 Q2 Q1 Mode shift right
Với:
CL: Clear.
CK: Clock.
LD: Load data.
Bài giảng Vi mạch số
Biên soạn Ngô Văn Bình
Trang 109
L_R : left_right.
D3 D2 D1 D0 : Inputs data.
Q3 Q2 Q1Q0 : Outputs data.
10. Hãy viết chương trình cho 1 bộ giải mã 3 – 8 hoạt động theo bảng sự thật sau:
Inputs Outputs

E1 E2 C B A Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0
0 X X X X 1 1 1 1 1 1 1 1
X 1 X X X 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 1 0 0 0 0 0 0 1 0
1 0 0 1 0 0 0 0 0 0 1 0 0
1 0 0 1 1 0 0 0 0 1 0 0 0
1 0 1 0 0 0 0 0 1 0 0 0 0
1 0 1 0 1 0 0 1 0 0 0 0 0
1 0 1 1 0 0 1 0 0 0 0 0 0
1 0 1 1 1 1 0 0 0 0 0 0 0
( Yêu cầu: ở bước 5 viết theo dạng Equations).

11. Viết chương trình cho 1 bộ đếm Mod 10, dạng đếm lên có tín hiệu Clear (CL)
đồng bộ với xung CK (CK tác động cạnh lên).
Gợi ý: Các trạng thái không sử dụng (11 đến 16) có trạng thái kế tiếp là 0000
(khi có tác động của xung clock).
12. Tương tự 2.17 nhưng X1’.X2 = 0 làm cho giá trị ra Z ở giá trị 1. X = 1 làm cho
giá
trị ra Z ở trị 0,ngược lại Z =1
a/ Vẽ giản đồ trạng thái
b/ Tìm phương trình trạng thái kế (dùng D flipflop kích cạnh dương).Tìm phương
trình của Z.
c/ Vẽ mạch.
13.Thiết kế 1 SM đồng bộ kiểu Mealy với 1 ngõ vào X và 2 ngõ ra Z1 và Z2 khi X= 1
ờ nhịp clock kế thì máy thay đổi từ trạng thái SA sang trạng thái SB và Z1 Z2 =
01.Máy vẫn ờ trạng thái SB khi X = 1 và cho Z1 Z2 = 10,Khi X = 0 ,máy trở về trạng
thái SA với Z1 Z2 = 00 và Z1 Z2 giữ là 00 nếu như máy vẫn ở SA
a/ Vẽ lưu đồ ASM
b/ Vẽ giản đồ trạng thái

Bài giảng Vi mạch số
Biên soạn Ngô Văn Bình
Trang 110
c/ Sử dụng a/ hoặc b/ để có được các phương trình trạng thái kế hoặc phương
trình ngõ ra với D flipflop kích cạnh dương
d/ Tối thiểu hóa các phương trình và vẽ mạch
14.Phân tích SM ở hình E.2.11 và tìm:
a/ Phương trình vào D flipflop và ngõ ra Z
b/ Bảng dòng
c/ Giản đồ trạng thái

























`
15.Thiết kế mạch đồng bộ dùng D flipflop kích cạnh âm cho tín hiệu ra Z bằng 1/5 tần
số của clock hệ thống CK
a/ Vẽ giản đồ định thì quan hệ giữa CK và Z
b/ Lập bảng trạng thái
c/ Sử dụng gán trạng thái nhị phân trực tiếp ví dụ S0 = 0 ,…và đưa tất cả các
trạng thái không sử dụng về S0 . Tìm các phương trình ra và trạng thái kế
d/ Vẽ mạch
16. Với hệ sau,xây dựng bảng dòng và xác định chuỗi giá trị ra.Trạng thái ban đầu là
00 và chuỗi vào là X1X2 = 00,01,11,10,00


Q
Q
SET
CLR
S
R
X’1

Q2

X2

X1


Q’
1

Q’2

Q
Q
SET
CLR
D
System clock

CK

C

Z

X1

X2

Bài giảng Vi mạch số
Biên soạn Ngô Văn Bình
Trang 111













17.Xây dựng bảng dòng cho hệ sau và mô tả cái gì xảy ra khi X bị thay đổi từ 0 sang
1.Nếu hệ được bắt đầu với Q1 = Q2 =0 ,làm thế nào để có được giá trị ra Z=1? Vẽ
giản đồ định thì chỉ X, Q1,Q2 và Z chỉ thời điểm ở đó X phải thay đổi để có được giá
trị ra Z=1












18.Phân tích hệ sau dùng bảng dòng.Chuỗi giá trị ra là bao nhiêu với chuỗi vào
sau:X1X2 = 00,10,11,01,11,10,00,01,00.Chỉ các giá trị nhất thời (quá độ) nếu có,trong
dấu ngoặc













X2

Q’2

Q
Q
SET
CLR
S
R
X2

Q’2

X’1

X’2

Q’1

X’1


X2

Q1

X’1

Q2

X2

Q2

Z

Q
Q
SET
CLR
S
R
X

Q’1

Q
Q
SET
CLR
S
R

X

Q’2

X

Q2

X’

Q1

Q’2

Z

Z

X1

X2

X1

X’2

X’1

X’2


×