5
Chương I. Phân tích yêu cầu
1.1. Phân tích yêu cầu.
1.1.1. Đặc điểm của cổng ghép nối với máy in.
Việc nối máy in với máy tính được thực hiện qua ổ cắm 25 chân ở phiá sau máy tính. Nhưng
đây không chỉ là chỗ nối với máy in mà khi sử dụng máy tính vào mục đích đo lường và điều
khiển thì việc ghép nối cũng thực hiện qua ổ cắm này. Qua cổng này dữ liệu được truyền đi song
song nên đôi khi còn được gọi là cổng ghép nối song song và tốc độ truyền dữ liệu cũng đạt đến
mức lớn đáng kể. Tất cả các đường dẫn của cổng này đều tương thích TTL, nghóa là chúng đều
cung cấp một mức điện áp nằm giữa 0V và 5V. Do đó ta còn cần phải lưu ý là ở các đường dẫn
lối vào cổng này không được đặt các mức điện áp quá lớn.
1.1.2. Đặc điểm chung của Z80 CPU.
Z80 CPU là một vi xử lý 8 bit của hãng ZILOG được thiết kế để có thể làm việc một cách
độc lập, có thể giao tiếp với các bộ xử lý khác thông qua các thiết bò ngoại vi.
Đặc điểm chung:
- Data bus: 8 bits.
- Addr bus: 16 bits.
- Tập thanh ghi được phân thành 3 loại:
. Tập thanh ghi chính (8 bit).
. Tập thanh ghi phụ (8 bit).
. Tập thanh ghi chuyên dụng (16 bits)
- Tập lệnh CPU Z80 có thể chia làm nhiều nhóm khác nhau theo nhiều cách. Ở đây
có thể chia thành 4 nhóm sau:
. Nhóm lệnh xử lý dữ kiện.
. Nhóm lệnh truyền dữ kiện.
. Nhóm lệnh kiểm soát chương trình.
. Nhóm lệnh kiểm soát trạng thái.
Phần mô tả chi tiết Z80 CPU sẽ được nói kỹ trong chương II.
1.2. Phương hướng giải quyết vấn đề.
1.2.1. Giao tiếp giữa PC & KIT Z80.
Để có thể thực hiện việc giao tiếp giữa máy tính và một KIT Z80 có thể dùng một trong hai
phương pháp sau:
6
Phương pháp thứ nhất: Thực hiện việc bắt tay giữa máy tính và KIT Z80 khi thao tác truyền
dữ liệu. Muốn thực hiện được điều này thì máy tính và KIT Z80 sẽ ở trong trạng thái sẵn sàng
hoạt động trước khi thực hiện thao tác bắt tay để truyền dữ liệu. Như vậy trên KIT Z80 sẽ có
một chương trình để có thể thực hiện thao tác này, việc ghép nối bus cùng với việc phát các tín
hiệu bắt tay giữa máy tính và KIT Z80 sẽ do chương trình bên trong KIT Z80 và chương trình
bên trong máy tính đảm nhiệm. Phương pháp này có ưu điểm là việc thu và nhận data sẽ diễn ra
đồng bộ, nhanh chóng và chính xác nhưng lại hơi phức tạp trong việc thực hiện các thao tác bắt
tay.
Phương pháp thứ hai: Mọi thao tác truyền dữ liệu sẽ do máy tính chủ động, dữ liệu truyền sẽ
được chứa trong RAM (được gọi là RAM chung). RAM này giả lập ROM để chạy chương trình
từ máy tính.
Để đơn giản cho việc thiết kế (cả phần cứng và phần mềm) và phù hợp với nội dung của yêu
cầu đặt ra, người thiết kế lựa chọn phương pháp thứ hai để thực hiện yêu cầu của bài toán đặt ra.
1.2.2. Dừng và cho chạy Z80 CPU.
Sử dụng các mức logic thích hợp đưa vào chân WAIT để tạm thời dừng hoạt động của Z80
CPU, đặt Z80 CPU vào trạng thái chờ hoặc cho Z80 CPU hoạt động ở chế độ bình thường.
Khi chân WAIT ở mức logic '1', Z80 CPU hoạt động bình thư ờng.
Khi mức logic tại chân WAIT là '0', Z80 CPU sẽ được đặt vào trạng thái chờ. Ở trạng thái này
dữ liệu trên đường đòa chỉ và data được giữ ổn đònh, đồng thời CPU liên tục đọc vào mức logic
trên chân WAIT cho đến khi chân này đạt trở lại mức logic '1'. Sau khi thoát khỏi trạng thái
WAIT Z80 CPU sẽ dành 2 chu kỳ xung clock để làm tươi bộ nhớ Ram động, sau đó thi hành
bước kế tiếp của lệnh hoặc thi hành lệnh kế.
Như vậy khi đặt Z80 CPU vào trạng thái chờ ta có thể đọc được dữ liệu trên data bus,
address bus hoặc có thể can thiệp vào hoạt động của CPU bằng cách đặt một giá trò khác lên
data bus trong thời gian CPU lấy mã lệnh hoặc truy xuất bộ nhớ chương trình (lúc này cần thiết
phải cấm CS bộ nhớ chương trình (ROM chương trình)).
1.2.3. Hướng mở rộng đề tài.
Do có ý đồ mở rộng đề tài theo hướng dùng KIT để sử dụng như là 1 thiết bò mô phỏng dùng
cho Z80 CPU nên trong phần thiết kế đã cố gắng tránh can thiệp nhiều vào Z80 CPU. Để Z80
CPU có thể chạy được ở chế độ Debug chỉ cần lấy tín hiệu CSROM và M1 để điều khiển quá
trình. Như vậy, có thể dùng KIT để làm 1 bộ mô phỏng ( simulator) cho các thiết kế khác có sử
dụng Z80 CPU. Sơ đồ khối như sau :
7
Addr bus : được lấy trực tiếp từ adress bus của KIT
Data bus : được lấy trực tiếp từ data bus của KIT
Ctrl bus gồm :
Wait : nối vào chân số của 74LS74 (U8A)
Reset : nối vào chân số của 74LS04 (U2E)
Chú ý : Trong chế độ Debug cần phải có biện pháp can thiệp vào chân interrupt của KIT Z80
bất kỳ, khi KIT này chạy ở chế độ có dùng ngắt.
Cấm=’0’ : Khi chạy ở chế độ Debug(cấm ngắt).
Tín hiệu
INT
T.h cho phép/cấm
16
Z80 CPU
KIT Z80 bất kỳ
Simulator
Rom
chương
trình
Z80
CPU
Các
linh
kiện
khác
Adrres bus
Data bus
Ctrl bus
PC
Jack 25
pin
8
Chương II. Thiết kế phần cứng
2.1. Phân tích các chức năng của cổng ghép nối với máy in.
Sự sắp xếp các chân ra ở cổng máy in với tất cả các đường dẫn được mô tả trên hình 2.1.
Chân Ký hiệu Vào/Ra Mô tả
1 STB Output Bit 0 của thanh ghi điều khiển
2 D0 Output Đường dữ liệu D0
3 D1 Output Đường dữ liệu D1
4 D2 Output Đường dữ liệu D2
5 D3 Output Đường dữ liệu D3
6 D4 Output Đường dữ liệu D4
7 D5 Output Đường dữ liệu D5
8 D6 Output Đường dữ liệu D6
9 D7 Output Đường dữ liệu D7
10 ACK Input Bit 6 của thanh ghi trạng thái
11 BUSY Input Bit 7 của thanh ghi trạng thái
12 PE Input Bit 5 của thanh ghi trạng thái
13 SLCT Input Bit 4 của thang ghi trạng thái
14 AF Output Bit 1 của thanh ghi điều khiển
15 ERROR Input Bit 3 của thanh ghi trạng thái
16 INIT Output Bit 2 của thanh ghi điều khiển
17 SLCTIN Output Bit 3 của thanh ghi điều khiển
18 GND
19 GND
20 GND
21 GND
22 GND
23 GND
24 GND
25 GND
Hình 2.1. Bố trí chân ở cổng máy in ở máy tính PC.
Ta thấy bên cạnh 8 bit dữ liệu còn có những đường dẫn tín hiệu khác, tổng cộng người sử
dụng có thể trao đổi một cách riêng biệt với 17 đường dẫn, bao gồm 12 đường dẫn ra và 5 đường
dẫn vào. Bởi vì 8 đường dẫn dữ liệu D0 - D7 không phải là đường dẫn 2 chiều trong tất cả các
loại máy tính, nên ta sẽ sử dụng D0 - D7 như là lối ra. Các lối ra khác nữa là STB, AF, INIT và
SLCTIN.
9
Các đường dẫn lối vào là: ERROR, SLCT, PE, ACK, BUSY.
Tất cả các đường dẫn tín hiệu vừa được giới thiệu cho phép trao đổi qua các đòa chỉ bộ nhớ
của máy tính PC. 17 đường dẫn của cổng máy in sắp xếp thành 3 thanh ghi: thanh ghi data, thanh
ghi trạng thái, thanh ghi điều khiển. Hình 2.2 chỉ ra sự sắp xếp của các đường dẫn tín hiệu tới
các bit dữ liệu riêng biệt của thanh ghi.
Thanh ghi data (Đòa chỉ cơ bản)
D7 D6 D5 D4 D3 D2 D1 D0
D0 (pin 2)
D1 (pin 3)
D2 (pin 4)
D3 (pin 5)
D4 (pin 6)
D5 (pin 7)
D6 (pin 8)
D7 (pin 9)
Thanh ghi trạng thái (Đòa chỉ
cơ bản + 1)
D7 D6 D5 D4 D3 0 0 0
ERROR (pin 15)
SLCT (pin 13)
PE (pin 12)
ACK (pin 10)
BUSY (pin 11)
Thanh ghi điều khiển (Đòa chỉ cơ bản + 2)
D7 D6 D5 D4 D3 D2 D1 D0
STB (pin 1)
AF (pin 14)
INIT (pin 16)
SLCTIN (pin 17)
IRQ-Enable
Hình 2.2. Thanh ghi ở cổng máy in của máy tính PC.
Đòa chỉ đầu tiên đạt đến được của cổng máy in được xem như là đòa chỉ cơ bản. Ở các máy
tính PC đòa chỉ cơ bản của cổng máy in được sắp xếp như sau:
LPT1 (Cổng máy in thứ nhất) => Đòa chỉ cơ bản = 378H
Hoặc là 3BCH ở máy Laptop
LPT2 (Cổng máy in thứ hai) => Đòa chỉ cơ bản = 278H
Đòa chỉ cơ bản đồng nhất với thanh ghi dữ liệu. Thanh ghi trạng thái có đòa chỉ = đòa chỉ cơ
bản + 1. Cần chú ý rằng mức logic của BUSY (chân 11) được sắp xếp ngược với bit D7 của
thanh ghi trạng thái. Thanh ghi điều khiển với 4 đường dẫn lối ra của nó có đòa chỉ = đòa chỉ cơ
bản + 2. Ở đây lại cần chú ý tới sự đảo ngược của các tín hiệu: STB, AF, SLCTIN.
10
2.2. Kiến trúc Z80 CPU.
2.2.1. Sơ đồ khối Z80 CPU.
Bus dữ kiện 8 bits
Bus nội
Tín hiệu
điều khiển Kiểm soát CPU
hệ thống
& CPU
Bus đòa chỉ 16 bits
Hình 1-1: Sơ đồ khối Z80 CPU.
Sơ đồ khối của kiến trúc bên trong Z80 CPU được cho trong hình 1-1. Sơ đồ này trình bày tất cả
các phần tử chính trong CPU và nó sẽ được xem xét kỹ qua các phần mô tả sau.
2.2.2. Các thanh ghi của CPU.
Z80 CPU chứa một bộ nhớ R/W 208 bit. Bộ nhớ này có thể được truy xuất bởi người lập
trình. Hình 1-2 cho thấy bộ nhớ này được cấu tạo bởi 8 thanh ghi 8 bit và 4 thanh ghi 16 bit. Tất
cả các thanh ghi của Z80 CPU đều dùng RAM tónh. Cc thanh ghi bao gồm 2 tập 6 thanh ghi đa
dụng, tập các thanh ghi này có thể được sử dụng độc lập như là các thanh ghi 8 bit hoặc từng
cặp như là các thanh ghi 16 bit. Có hai tập ( chính và phụ) thanh ghi tích lũy, thanh ghi cờ và
sáu thanh ghi đặc biệt.
Tập các thanh ghi đặc biệt.
Program Counter (PC): giữ đòa chỉ mười sáu bit của lệnh hiện tại đang được lấy về từ bộ
nhớ. PC tự động tăng sau khi nội dung của nó được đặt lên bus đòa chỉ. Khi 1 lệnh nhảy xảy ra, 1
giá trò mới được tự động đặt vào trong PC thay cho giá trò sẽ được tăng của nó.
Stack pointer (SP): giữ đòa chỉ 16 bit của đỉnh ngăn xếp hiện hành trong bộ nhớ RAM ngoài.
Bộ nhớ ngăn xếp bên ngoài được tổ chức như là 1 file vào sau ra trước (LIFO). Dữ liệu có thể
được đẩy vào ngăn xếp từ các thanh ghi xác đònh của CPU hay được lấy ra khỏi ngăn xếp để đưa
Giải mã
&
điều
khiển
CPU
Thanh
ghi
lệnh
Kiểm soát dữ kiện
ALU
Thanh ghi
Kiểm soát đòa chỉ
11
vào các thanh ghi xác đònh của CPU qua việc thi hành các lệnh Push và Pop. Dữ liệu được lấy ra
từ ngăn xếp luôn luôn là dữ liệu được đẩy vào ngăn xếp sau cùng. Ngăn xếp cho phép đơn giản
hóa việc thi hành các loại ngắt quãng không giới hạn các chương trình con lồng nhau và đơn
giản hóa nhiều kiểu thao tác trên dữ liệu.
Hai thanh ghi chỉ mục (IX và IY): Hai thanh ghi chỉ mục độc lập giữ đòa chỉ cơ bản 16 bit
được dùng trong chế độ đònh đòa chỉ chỉ mục. Trong chế độ này, một thanh ghi chỉ mục được
dùng như là một vò trí cơ bản chỉ đến một vùng trong bộ nhớ nơi mà dữ liệu bắt đầu được chứa
hay được khôi phục. Byte được thêm trong câu lệnh chỉ mục để xác đònh khoảng cách đến vò trí
cơ bản. Khoảng cách này được xác đònh bằng phép bù 2 một số nguyên có dấu. Chế độ này làm
đơn giản đi rất nhiều cho chương trình. Đặc biệt cho các bảng dữ liệu được sử dụng.
Thanh ghi đòa chỉ trang ngắt (I) Z80 CPU có thể được điều khiển trong 1 chế độ mà ở đó
một lệnh gọi trực tiếp đến bất kỳ vùng nào của bộ nhớ có thể được thực hiện bằng cách đáp ứng
ngắt. Thanh ghi I được dùng cho mục đích này để chứa 8 bit cao của đòa chỉ trực tiếp trong khi
thiết bò ngắt cung cấp 8 bit đòa chỉ thấp. Đặc điểm này cho phép chương trình phục vụ ngắt đònh
vò nhanh tới bất kỳ vùng nhớ nào với thời gian truy xuất đến chương trình là nhỏ nhất.
Thanh ghi làm tươi bộ nhớ (R): Z80 CPU chứa 1 bộ đếm làm tươi bộ nhớ để cho phép bộ
nhớ động được dùng dễ dàng như bộ nhớ tónh. Bảy trong 8 bit của thanh ghi này được tự động
tăng sau mỗi lần lấy lệnh. Bit thứ 8 còn lại được lập trình như là kết quả của lệnh LD R,A. Data
trong bộ đếm làm tươi được gởi lên phần thấp của bus đòa chỉ kèm theo một tín hiệu làm tươi
trong khi CPU giải mã và thực thi lệnh vừa được lấy về. Cách thức làm tươi này hoàn toàn dễ
hiểu đối với người lập trình và không làm chậm hoạt động của CPU. Người lập trình có thể lấy
thanh ghi R cho mục đích kiểm tra, nhưng thanh ghi này thì thường không được người lập trình
dùng. Trong thời gian làm tươi, nội dung của thanh ghi I được đặt lên 8 bit cao của bus đòa chỉ.
Thanh ghi tích lũy và thanh ghi cờ: CPU bao gồm hai thanh ghi tích lũy độc lập và được kết
hợp với các thanh ghi cờ 8 bit. Thanh ghi tích lũy lưu giữ kết quả của phép toán logic và số học
trong khi thanh ghi cờ cho biết các điều kiện xác đònh khi thực hiện các phép toán 8 bit hay 16
bit như là cho biết kết quả của 1 phép tính có bằng 0 hay không. Người lập trình lựa chọn thanh
ghi tích lũy và thanh ghi cờ với 1 lệnh hoán chuyển đơn vì có thể làm việc với một trong hai cặp.
Các thanh ghi đa dụng: Có 2 tập đối xứng các thanh ghi đa dụng. Mỗi tập chứa 6 thanh ghi 8
bit hay như cặp thanh ghi 16 bit. Tập thứ nhất được gọi là BC, DE và HL trong khi tập lệnh tương
ứng được gọi là BC’, DE’ và HL’. Trong bất kỳ thời điểm nào người lập trình có thể chọn 1
trong các tập thanh ghi để làm việc qua 1 lệnh hoán chuyển đơn. Trong các hệ thống yêu cầu
đáp ứng ngắt nhanh, một tập của tập thanh ghi đa dụng và một thanh ghi cờ /tích lũy có thể
được dự trữ để giải quyết chương trình rất nhanh này. Chỉ cần một lệnh đơn giản được thực thi
để chạy giữa các chương trình. Điều này thu giảm thời gian phục vụ ngắt do việc loại bỏ yêu
cầu cất và khôi phục nội dung thanh ghi ở ngăn xếp trong thời gian ngắt hay xử lý chương trình
con. Các thanh ghi đa dụng này được dùng cho nhiều ứng dụng bởi người lập trình.
Thanh ghi tích lũy
A
Thanh ghi cờ
F
Thanh ghi tích lũy A’ Thanh ghi
cờ F’
12
B C B’ C’
D E D’ E’
H L H’ L’
Interrup vertor I Memory refresh R
Thanh ghi chỉ mục IX
Thanh ghi chỉ mục IY
Con trỏ ngăn xếp SP
Đếm chương trình PC
2.2.3. Đơn vò logic số học (ALU):
Các lệnh logic và số học 8 bit của CPU được thực hiện trong ALU. Giao tiếp giữa ALU với
các thanh ghi và data bus bên ngoài được thực hiện trên data bus bên trong. Các chức năng
ALU gồm:
Cộng
Trừ
Logic AND
Logic OR
Logic XOR
So sánh
Dòch trái, dòch phải hay quay ( Số học và logic)
Phép toán tăng
Phép toán giảm
Set bit
Reset bit
Test bit
2.2.4. Điều khiển CPU và thanh ghi lệnh.
Mỗi 1 lệnh được lấy về từ bộ nhớ, nó được đặt vào trong thanh ghi lệnh và được giải mã. Các
phần điều khiển thi hành chức năng này, phát và cấp các tín hiệu điều khiển cần thiết để đọc
hoặc ghi data từ (hoặc đến) các thanh ghi, điều khiển ALU và đáp ứng các yêu cầu của tín hiệu
điều khiển bên ngoài.
2.2.5. Chức năng các chân của Z80.
a. Giới thiệu.
Thanh ghi
đa dụng
Tập thanh ghi chính
Tập thanh ghi phụ
Thanh ghi đa
dụng
Hình 1-2: Cấu trúc các thanh ghi của Z80 CPU
13
Sơ đồ các chân của Z80 CPU được mô tả trong hình sau :
Z80 CPU
A0
30
A1
31
A2
32
A3
33
A4
34
A5
35
A6
36
A7
37
A8
38
A9
39
A10
40
A11
1
A12
2
A13
3
A14
4
A15
5
D0
14
D1
15
D2
12
D3
8
D4
7
D5
9
D6
10
D7
13
/M1
27
/MREQ
19
/IORQ
20
/RD
21
/WR
22
/RFSH
28
/HALT
18
/WAIT
24
/INT
16
/NMI
17
/RESET
26
/BUSREQ
25
/BUSACK
23
/CLK
6
+5 V
11
GND
29
SƠ ĐỒ CHÂN Z80
14
b. Chức năng các chân:
• A15 ÷
÷÷
÷A0: Bus đòa chỉ (out put, active high, 3 trạng thái), A15 ÷A0 tạo thành bus đòa chỉ 16
bit. Bus đòa chỉ cung cấp đòa chỉ cho bộ nhớ để trao đổi data (lên đến 64 Kbyte) và cho thiết
bò I/O.
• Busack: Bus acknowledge (output, active low) báo cho thiết bò yêu cầu biết đòa chỉ bus, data
bus và các tín hiệu điều khiển: /MREQ, /IORQ, /RD, /WR đã ở trạng thái trở kháng cao.
Mạch ngoài có thể dùng những đường này ngay lúc này.
• /BUSREQ: Bus request (input, active low) bus request có độ ưu tiên cao hơn /NMI và nó
luôn được nhận diện vào cuối chu kỳ máy hiện tại. /Busreq đòi hỏi address bus, data bus và
các tín hiệu điều khiển: /MREQ, /IORQ, /RD, /WR phải ở trạng thái trở kháng cao để các
thiết bò khác có thể điều khiển các đường này. Bus request thường được nối vào cổng OR và
yêu cầu điện trở kéo lên bên ngoài cho các ứng dụng kiểu này.
• D7 ÷
÷÷
÷ D0: Data bus (input / output, active high, 3 trạng thái) D7 ÷ D0 tạo thành data bus 8 bit
hai chiều, sử dụng để trao đổi data với bộ nhớ và I/O.
• /HALT: Halt (output, active low) báo rằng CPU đang thực thi 1 lệnh Halt và sẽ chờ 1 trong
hai tín hiệu: /NMI hoặc /INT (với mask cho phép) trước khi sự điều khiển được khôi phục.
Trong thời gian Halt, CPU thực thi các lệnh NOP để duy trì việc làm tươi bộ nhớ.
• /INT: Interrup request (input, active low) Interrup request được thiết bò I/O phát ra. CPU
chấp nhận yêu cầu ngắt tại thời điểm cuối của lệnh hiện tại nếu được phần mềm cho phép.
/INT thường được nối vào các cổng OR và cần một trở kéo lên cho các ứng dụng loại này.
• /IORQ: Input/ Output Request (output, active low, 3 trạng thái) báo nửa thấp của address bus
giữ 1 đòa chỉ I/O hợp lệ cho hoạt động đọc hay ghi I/O. /IORQ cũng được phát đồng thời với
/M1 trong 1 chu kỳ công nhận ngắt để báo rằng 1 vertor đáp ứng ngắt có thể được đặt lên
data bus.
• /M1: Machine cycle one (output, active low) /M1 cùng với /MREQ báo rằng chu kỳ máy
hiện tại là chu kỳ lấy mã lệnh. /M1 cùng với /IORQ báo cho biết rằng đang ở chu kỳ công
nhận ngắt.
• /MREQ: Memory request (output, active low, 3 trạng thái) /MREQ báo rằng address bus
đang giữ một đòa chỉ hợp lệ cho việc đọc ghi bộ nhớ.
• /NMI: Non Maskable Interrup (input, tích cực cạnh xuống) /NMI có độ ưu tiên cao hơn /INT.
/NMI luôn luôn được chấp nhận tại chu kỳ cuối của lệnh hiện hành, độc lập với trạng thái
của Flip-Flop interrupt và tự động đưa CPU đến vò trí 0066h.
• /RD: Read (output, active low, 3 trạng thái) báo rằng CPU muốn đọc data từ bộ nhớ hay thiết
bò I/O. Thiết bò I/O được chỉ đònh hay bộ nhớ sẽ dùng tín hiệu này để đưa data lên data bus.
• /RESET: Reset (input, active low) /RESET khởi động CPU như sau: reset IFF1 & IFF2 xóa
PC và các thanh ghi I & R, đặt trạng thái interrupt đến chế độ 0. Trong thời gian reset, addr
bus và data bus sẽ ở trạng thái trở kháng cao và tất cả các đường điều khiển output sẽ ở
trạng thái không tích cực. Chú ý rằng đường /RESET phải active ít nhất là 3 chu kỳ xung
clock trước khi hoạt động reset hoàn tất.
• /RFSH: Refresh (output, active low) /RFSH cùng với /MREQ báo rằng 7 bit thấp của đường
addr có thể được dùng làm đòa chỉ làm tươi cho bộ nhớ RAM động.
Không có nhận xét nào:
Đăng nhận xét