- Trang Chủ
- Công nghệ thông tin
- Luận văn tốt nghiệp: Thiết kế, thi công và viết chương trình điều khiển mạch thực hành cho Z80 CPU. Giao tiếp với máy tính qua ngõ máy in
Xem mẫu
- TRƯỜNG ĐẠI HỌC KỸ THUẬT
KHOA CÔNG NGHỆ THÔNG TIN
LUẬN VĂN TỐT NGHIỆP
Đề tài:
Thiết kế, thi công và viết chương trình điều khiển
mạch thực hành cho Z80 CPU.
Giao tiếp với máy tính qua ngõ máy in.
Giáo viên hướng dẫn: Thầy Nguyễn Xuân Minh.
Sinh viên thực hiện : Hoàng Lê Bình.
Lưu Đình Dũng.
Lớp : KSII_K6_T.
- Đề tài:
Thiết kế, thi công và viết chương trình điều khiển mạch thực hành cho Z80 CPU với các đặc điểm
sau:
- Giao tiếp với máy tính qua ngõ máy in.
- Giả lập ROM để nhận chương trình từ máy tính.
- Có khả năng chạy từng bước từ bên máy tính.
- Có khả năng thông báo trạng thái các thanh ghi về bên máy tính.
- Có khả năng điều khiển một số cổng xuất nhập đơn giản.
- Thi công mạch, thử mạch.
- Viết chương trình và thử chạy theo từng chức năng.
2
- MỤC LỤC
Mở đầu ........................................................................................................... trang 4
Chương I Phân tích yêu cầu
1.1 Phân tích yêu cầu....................................................................................... trang 5
1.2 Phương hướng giải quyết vấn đề ................................................................ trang 5
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 ........................... trang 8
2.2. Kiến trúc Z80 CPU. ............................................................................... trang 10
2.3. Thiết kế chi tiết. ..................................................................................... trang 48
2.4. Nguyên lý hoạt động. ............................................................................. trang 49
Chương III. Giới thiệu phần soạn thảo văn bản
3.1. Các thành phần chính của main menu ......................................................... trang 55
3.2. Hướng dẫn sử dụng trong màn hình soạn thảo ........................................... trang 55
Chương IV. Giải thuật ................................................................................. trang 57
Chương V. Chương trình nguồn
5.1. Chương trình đưa data ra RAM chung, Debug, Dump, Run ...................... trang 71
5.2. Chương trình con viết bằng ngôn ngữ con Assembler Z80 dùng
đọc trạng thái các thanh ghi ...................................................................... trang 109
5.3. Chương trình con viết bằng ngôn ngữ con Assembler Z80 dùng
dump memory ........................................................................................... trang 111
5.4. Chương trình tạo tiện ích soạn thảo văn bản vàhỗ trợ chế độ chạy
debug Z80 ................................................................................................. trang 111
5.5. Các chương trình ví dụ .............................................................................. trang 133
Phụ lục A: Các thông báo lỗi. ...................................................................... trang 142
Phụ lục B: Vi mạch 8255. ............................................................................ trang 143
Tài liệu tham khảo. ...................................................................................... trang 145
3
- Lời nói đầu
Sự phát triển đi lên vượt bậc của ngành kỹ thuật máy tính và điện tử hiện nay đã được minh chứng
cụ thể qua cuộc sống hằng ngày của chúng ta trong tất cả các lĩnh vực.
Việc ứng dụng máy vi tính vào kỹ thuật đo lường và điều khiển đã đem lại những kết quả đầy tính
ưu việt. Các thiết bị, hệ thống đo lường và điều khiển ghép nối với máy tính có độ chính xác cao, thời
gian thu thập số liệu ngắn, nhưng đáng quan tâm hơn là mức độ tự động hoá trong việc thu nhận và
xử lý dữ liệu.
Kỹ thuật số ra đời đã khắc phục được các khuyết điểm của kỹ thuật tương tự, làm cho các bộ phận
máy móc trở nên đơn giản, gọn nhẹ, ít tốn kém năng lượng và xử lý thông tin nhanh, chính xác hơn so
với kỹ thuật tương tự.
Tuy vậy, nếu sử dụng các bộ điều khiển dùng các IC số chúng vẫn còn mắc một số khuyết điểm
mà so với kỹ thuật vi xử lý nó vẫn tồn tại như:
- Kích thước lớn.
- Năng lượng tiêu thụ lớn.
- Tính mềm dẽo thấp, khó thay đổi.
- Khó sửa chữa, bảo trì.
Vi xử lý là một vi mạch điện tử có mật độ tích hợp cao, trong đó gồm các mạch số có khả năng
nhận, xử lý và xuất dữ liệu. Đặc biệt là quá trình xử lý dữ liệu được điều khiển theo một chương trình
gồm tập hợp các lệnh từ bên ngoài mà người sử dụng có thể thay đổi được một cách dễ dàng. Một vi
xử lý có thể thực hiện rất nhiều yêu cầu điều khiển khác nhau.
Kỹ thuật vi xử lý ra đời với sự kết hợp giữa phần cứng và phần mềm đã làm cho hoạt động của các
mạch điện trở nên mềm dẽo hơn với những phần mềm rất linh hoạt mà ta có thể sửa chữa, thay đổi
hoặc bổ sung làm cho chương trình điều khiển thêm phong phú tùy theo nhu cầu của người sử dụng.
Kỹ thuật vi xử lý có tính phức tạp trong hoạt động, thiết kế nhưng lại rất kinh tế vì giá thành hạ và
kích thước chiếm chỗ không nhiều, có dung lượng cao. Ngoài ra về mặt kỹ thuật cũng hơn hẳn kỹ
thuật số vì quá trình hoạt động rất mềm dẽo, tốc độ xử lý cao và lại có thể mở rộng tính năng hoạt
động sau này cho mạch điện. Đây là ưu điểm rất thuận lợi mà kỹ thuật vi xử lý mang lại.
Chúng em xin chân thành cảm ơn Thầy Nguyễn Xuân Minh đã tận tình hướng dẫn để hoàn thành
luận văn này. Chúng tôi cũng xin chân thành cảm ơn các bạn bè đã đóng góp ý kiến và chỉ dẫn trong
khi thực hiện đề tài.
Vì trình độ có hạn và đây làđề tài đầu tiên thực hiện một cách có hệ thống cho nên chắc chắn
không thể tránh khỏi nhiều thiếu sót.
4
- 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:
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
5
- 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 :
6
- Jack 25 KIT Z80 bất kỳ
pin
PC
Simulator Adrres bus Rom Các
chương Z80 linh
trình CPU kiện
khác
Data bus
Ctrl bus
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.
Tín hiệu INT
16
T.h cho phép/cấm Z80 CPU
Cấm=’0’ : Khi chạy ở chế độ Debug(cấm ngắt).
7
- 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.
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.
8
- 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.
2.2. Kiến trúc Z80 CPU.
2.2.1. Sơ đồ khối Z80 CPU. Bus dữ kiện 8 bits
Kiểm soát dữ kiện
Bus nội
Giải mã Thanh ALU
& ghi 9
điều lệnh
khiển
- Tín hiệu
điều khiển Kiểm soát CPU
hệ thống
& CPU
Thanh ghi
Kiểm soát địa chỉ
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. Cac 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 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
10
- 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ờ Thanh ghi tích lũy A’ Thanh ghi
F cờ F’
B C B’ C’
Thanh ghi
D E D’ E’
đa dụng
H L H’ L’
Tập thanh ghi chính Tập thanh ghi phụ
Interrup vertor I Memory refresh R
Thanh ghi chỉ mục IX Thanh ghi đa
Thanh ghi chỉ mục IY dụng
Con trỏ ngăn xếp SP
Đếm chương trình PC
Hình 1-2: Cấu trúc các thanh ghi của Z80 CPU
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ừ
11
- 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.
Sơ đồ các chân của Z80 CPU được mô tả trong hình sau :
27
/M1 30 A0
31 A1
19
/MREQ 32 A2
20
/IORQ 33 A3
21
/RD 34 A4
22
/WR 35 A5
36
28 A6
/RFSH 37
A7
38 A8
18
/HALT 39 A9
/WAIT
24 Z80 CPU 40
1
A10
A11
2 A12
16
/INT 3 A13
17 4
/NMI A14
5
A15
/RESET 26
25 14
/BUSREQ D0 12
23 15
/BUSACK D1
12
- 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.
/WAIT: Wait (input, active low) /WAIT báo cho CPU bộ nhớ được chỉ định hay thiết bị I/O chưa
sẵn sàng cho việc truyền data. CPU tiếp tục ở trạng thái chờ. Việc kéo dài trạng thái /WAIT có
thể ngưng việc làm tươi cho bộ nhớ RAM động.
/WR: Write (output, active low, 3 trạng thái) /WR báo data bus đang giữ 1 giá trị data hợp lệ để
đưa vào bộ nhớ được chỉ định hoặc vùng I/O.
/CLK: Clock (input).
13
- 2.2.6. Các giản đồ thời gian.
a. Giới thiệu.
Z80 CPU thi hành lệnh theo từng bước căn bản gồm:
Đọc và ghi bộ nhớ
Đọc và ghi thiết bị I/O
Đáp ứng ngắt
Tất cả lệnh là tập hợp các hoạt động cơ bản. Mỗi hoạt động căn bản có thể chiếm từ 3 đến 6 chu
kỳ clock để hoàn tất hoặc chúng có thể được kéo dài để đồng bộ tốc độ giữa CPU với thiết bị bên
ngoài. Chu kỳ Clock căn bản được xem như là chu kỳ T và hoạt động căn bản được xem như là chu
kỳ M. Hình 3-1 minh họa một chu kỳ lệnh cơ bản. Lưu ý rằng lệnh này gồm 3 chu kỳ máy ( M1,M2
và M3). Chu kỳ máy đầu tiên của bất kỳ lệnh nào là chu kỳ lấy mã lệnh (dài 4, 5 hay 6 chu kỳ T trừ
khi bị kéo dài bởi tín hiệu Wait). Chu kỳ lấy lệnh (M1) được dùng để lấy mã lệnh sẽ được thi hành.
Chu kỳ máy sau chuyển data giữa CPU và bộ nhớ hay thiết bi I/O và chúng có thể có từ 3 đến 5 chu
kỳ T (trừ khi bị kéo dài bởi trạng thái Wait để đồng bộ với tốc độ thiết bị bên ngoài). Đoạn sau đây
mô tả việc định thời (xảy ra trong bất kỳ chu kỳ máy nào). Trong khoảng thời gian T2 và mỗi TW sau
đó, CPU lấy mẫu đường Wait tại sườn xuống của xung clock. Nếu đường Wait được tích cực tại
thời điểm này, một trạng thái Wait khác sẽ được thêm vào trong chu kỳ sau. Dùng kỹ thuật này thì
việc đọc có thể kéo dài để phù hợp với thời gian truy xuất của bất kỳ kiểu thiết bị bộ nhớ nào.
Chu kỳ T
/Clk
T1 T2 T3 T4 T1 T2 T3 T1 T2 T3
Chu kỳ máy M1 Đọc bộ nhớ M2 Ghi bộ nhớ M3
Chu kỳ lệnh
Hình 3 -1 : Giản đồ thời gian cơ bản
b. Lấy lệnh.
Hình 3-2 là giản đồ thời gian của chu kỳ M1 (lấy mã lệnh). PC được đặt trên bus địa chỉ tại điểm
bắt đầu của chu kỳ M1. Nửa chu kỳ clock sau đó tín hiệu /MREQ được tích cực. Tại thời điểm này
địa chỉ tới bộ nhớ có đủ thời gian để ổn định do đó cạnh xuống của /MREQ có thể được dùng như là
một tín hiệu cho phép bộ nhớ RAM động. Đường /RD sẽ tích cực để chỉ ra rằng data được đọc từ bộ
nhớ sẽ được đưa lên data bus. CPU lấy mẫu data từ bộ nhớ trên bus data tại sườn lên xung Clock của
chu kỳ T3 và CPU dùng cạnh lên này để tắt tín hiệu /RD và /MREQ. Như vậy, data đã sẵn sàng
được CPU lấy mẫu trước khi tín hiệu /RD trở thành không tích cực. Tại T3, T4 của chu kỳ lấy lệnh
được dùng để làm tươi bộ nhớ RAM động. (CPU dùng thời gian này để giải mã và thực thi các lệnh
khác đã được lấy về, do đó sẽ không có hoạt động nào khác được thực hiện trong thời gian này).
Trong suốt T3 và T4, bảy bit thấp của đường địa chỉ chứa địa chỉ làm tươi bộ nhớ RAM động. Chú ý
rằng tín hiệu /RD không được sinh ra trong suốt thời gian làm tươi để tránh data từ bộ nhớ khác bị
đẩy lên data bus. Tín hiệu /MREQ sẽ được sử dụng trong suốt thời gian làm tươi.
Chu kỳ M1
T1 T2 T3 T4 T1 14
/Clk
- c. Đọc và ghi bộ nhớ.
Hình 3-3 minh họa giản đồ thời gian của chu kỳ đọc, ghi bộ nhớ. Chu kỳ này thường được kéo dài
trong 3 chu kỳ xung clock trừ phi có trạng thái đợi được bộ nhớ yêu cầu qua tín hiệu /WAIT. Tín
hiệu /MREQ và tín hiệu /RD được dùng giống như trong chu kỳ lấy lệnh. Trong trường hợp ghi bộ
nhớ, /MREQ cũng trở thành tích cực khi bus địa chỉ đã ở trạng thái ổn định do đó nó có thể được
dùng trực tiếp như là tín hiệu chọn chip cho bộ nhớ RAM động. Đường /WR tích cực khi dữ liệu trên
data bus đã ở trạng thái ổn định do đó nó có thể được dùng trực tiếp như là xung /WR cho các bộ
nhớ bán dẫn.
15
- Chu kỳ đọc bộ nhớ Chu kỳ ghi bộ nhớ
T1 T2 T3 T1 T2 T3
/Clk
A15A0 MEMORY ADDR MEMORY ADDR
/MREQ
/RD
/WR
D7D0
I DATA OUT
N
/WAIT
d. Chu kỳ nhập/xuất.
Hình 3-2: Chu kỳ đọc ghi bộ nhớ.
Hình 3-4 minh họa hoạt động đọc hay ghi I/O. Chú ý rằng trong thời gian hoạt động I/O thì một
trạng thái đợi được tự động thêm vào. Lý do là trong quá trình hoạt động I/O, thời gian từ khi tín
hiệu /IORQ trở nên tích cực cho đến khi CPU lấy mẫu đường /WAIT thì rất ngắn do đó nếu không
thêm trạng thái này vào thì không đủ thời gian để cổng I/O giải mã địa chỉ của nó. Ngoài ra, nếu
không có trạng thái đợi thì sẽ khó khăn trong việc thiết kế các linh kiện I/O loại MOS để có thể hoạt
động tương ứng với tốc độ CPU. Trong thời gian xảy ra trạng thái đợi, tín hiệu /WAIT luôn được lấy
mẫu.
Trong quá trình đọc I/O, đường /RD được dùng để cho phép cổng được chọn đưa data lên data bus
giống như trong trường hợp đọc bộ nhớ. Trường hợp ghi I/O, đường /WR được dùng như là Clock
tới cổng I/O.
16
- T1 T2 TW T3 T1
/Clk
A15A0 PORT ADDRESS
/IORQ
/RD
CHU KỲ
ĐỌC
D7D0
IN
/WAIT
/WR
CHU KỲ
GHI
D7D0
OUT
e. Chu kỳ Bus Req/Ack.
Hình 3-4: Chu kỳ xuất / nhập.
Hình 3-5 minh họa giản đồ thời gian của chu kỳ bus request/ack. Tín hiệu /BUSREQ được CPU
lấy mẫu ở cạnh lên của chu kỳ Clock cuối trong một chu kỳ máy. Nếu tín hiệu /BUSREQ tích cực,
CPU sẽ đặt địa chỉ, dữ liệu và các tín hiệu điều khiển ở trạng thái trở kháng cao tại cạnh lên của xung
Clock kế tiếp. Tại thời điểm đó, thiết bị bên ngoài bất kỳ có thể kiểm soát bus để truyền dữ liệu giữa
bộ nhớ và thiết bị I/O ( ví dụ DMA ). Thời gian tối đa cho CPU đáp ứng bus request bằng độ dài của
1 chu kỳ máy và thiết bị điều khiển ngoài có thể duy trì sự điều khiển của bus trong nhiều chu kỳ
Clock theo yêu cầu. Nếu dùng chu kỳ DMA dài và bộ nhớ động được dùng, thiết bị điều khiển ngoài
phải thực hiện chức năng làm tươi. Trường hợp này chỉ xảy ra khi một khối dữ liệu rất lớn được
truyền dưới sự điều khiển của DMA. Cũng phải để ý trong suốt chu kỳ bus request, CPU không thể
bị ngắt bởi tín hiệu /NMI hay /INT.
17
- CHU KỲ M BẤT KỲ TRẠNG THÁI CÓ
THỂ CỦA BUS
Trạng thái
T cuối Tx Tx Tx T1
/Clk
/BUSRQ Mẫu
Mẫu
Mẫu
/BUSACK
A15A0
D7D0
Floating
/MERQ
/RD, /WR
/IORQ
/RFSH
f. Chu kỳ interrupt req/ack
Hình 3-5: CHU KỲ BUS REQ/ACK
Hình 3-6 minh họa giản đồ thời gian kết hợp với một chu kỳ ngắt quãng. Tín hiệu ngắt /INT được
CPU lấy mẫu ở cạnh lên của clock cuối tại điểm kết thúc của lệnh bất kỳ. Tín hiệu sẽ không được
chấp nhận nếu F-F điều khiển ngắt không được phần mềm trong CPU khởi tạo lên mức logic ‘1’ hay
nếu tín hiệu /BUSREQ là tích cực. Khi tín hiệu được chấp nhận, chu kỳ đặc biệt M1 được tạo ra.
Trong suốt chu kỳ đặc biệt M1, tín hiệu /IORQ trở nên tích cực ( thay vì /MREQ bình thường ) để
chỉ ra rằng thiết bị yêu cầu ngắt có thể đặt 1 vector 8 bit lên bus dữ liệu. Chú ý rằng hai trạng thái
đợi được thêm vào chu kỳ này một cách tự động.
18
- CHU KỲ M CUỐI LỆNH M1
Trạng thái T2 Tw’ Tw’ T3
T1
T cuối
/Clk
/IN
T
A15A0 PC REFRESH
/M1
/MREQ
/IORQ
D7D0
I
N
/WAIT
/RD
g. Đáp ứng ngắt không che được
Hình 3-6: CHU KỲ NGẮT REQ/ACK
Hình 3-7 minh họa chu kỳ request hay chu kỳ ack cho ngắt không che được. Tín hiệu này được lấy
mẫu cùng thời điểm với đường /INT, nhưng đường này có độ ưu tiên cao hơn và nó không thể bị cấm
do phần mềm điều khiển. Chức năng thông thường của nó là cung cấp đáp ứng tức thì cho các tín
hiệu quan trọng như là lỗi nguồn cung cấp. CPU đáp ứng 1 ngắt không che được tương tự hoạt động
đọc bộ nhớ bình thường. Sự khác biệt duy nhất là nội dung của data bus bị lờ đi trong khi bộ vi xử lý
tự động chứa PC trong ngăn xếp ngoài và nhảy tới vị trí 0066H. Chương trình phục vụ ngắt không
che được phải bắt đầu tại vị trí này nếu ngắt được sử dụng.
19
- CHU KỲ M CUỐI LỆNH M1
Trạng thái T2 T3 T4 T1
T1
T cuối
/Clk
/NMI
A15A0 PC REFRESH
/M1
/MREQ
/RD
/RFSH
h. Thoát khỏi trạng thái HALT. 3-7 : Giản đồ thời gian của NMI.
Hình
Bất cứ khi nào một lệnh halt được thực thi, CPU sẽ thực hiện 1 chuỗi lệnh NOP cho đến khi nhận
được một tín hiệu ngắt (cả hai loại ngắt che được và không che được nếu F-F được cho phép ). Hai
đường ngắt được lấy mẫu ở cạnh lên của chu kỳ T4 như được minh họa dưới hình 3-8. Nếu nhận
được ngắt không che hay ngắt che được và interrupt F-F đang được set ở mức logic ‘1’, thì CPU sẽ
thoát khỏi trạng thái HALT ở cạnh lên của chu kỳ clock kế tiếp. Chu kỳ sau sẽ là một chu kỳ đáp
ứng ngắt tương ứng với loại của ngắt thu được. Nếu cả hai được thu tại cùng một thời điểm, thì ngắt
không che được sẽ được đáp ứng vì nó có độ ưu tiên cao nhất. Mục đích của việc thực thi lệnh NOP
trong khi CPU ở trạng thái HALT là để giữ cho việc làm tươi bộ nhớ RAM động được thực hiện.
Mỗi chu kỳ trong trạng thái HALT là chu kỳ M1 bình thường ( lấy lệnh ).Tín hiệu trả lời HALT tích
cực trong thời gian này để chỉ ra rằng bộ xử lý đang ở trong trạng thái HALT.
20
nguon tai.lieu . vn