Tải bản đầy đủ (.docx) (30 trang)

btl kien truc may tinh : Nghiên cứu tìm hiểu về vi mạch đồng xử lý toán học 80878028780387

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 (528.64 KB, 30 trang )

Lời nói đầu
Khoa học phát triển ngày càng mạnh mẽ, nhu cầu sử dụng về công nghệ
ngày càng cao, yêu cầu về độ chính xác, năng suất hoạt động cao. Từ những yêu
cầu đó con người phải sản xuất phát minh ra những công cụ, sản phẩm ứng dụng và
phát triển ngành công nghệ lập trình.
Để đáp ứng được nhu cầu về công nghệ hiện nay, nhà sản xuất chip vi xử lí
Intel đã phát triển và chế tạo ra bộ mạch đồng xử lý toán học 8087/80287/80387 .
Chúng làm việc với 80 bit cùng một lúc, cho nên lập trình viên có thể biểu diễn một
số đủ độ dài để đảm bảo cho các phép tính được thực hiện chính xác. Một tính năng
cải tiến của chip Intel 80486 DX là gộp cả mạch đồng xử lý số vào trong chip vi
xử lý.
Để hiểu hơn về mạch đồng xử lý toán học 8087/80287/80387 (Mathematical
co-processor) em xin được trình bày cụ thể hơn trong bản báo cáo này.
Nhóm sinh viên thực hiện !

1


Chương 1: Giới thiệu chung về vi xử lý
1.1.

Giới thiệu về vi xử lý

Một máy tính thông thường bao gồm các khối chức năng cơ bản, như khối
xử lí trung tâm (CPU - Central Processing Unit), bộ nhớ trong và khối phối ghép
với thiết bị ngoại vi (I/O - Input/Output). Tuỳ theo quy mô, độ phức tạp và hiệu
năng của các khối chức năng kể trên mà người ta chia các máy tính điện tử đã và
đang sử dụng ra thành các loại sau:
Máy tính lớn (Mainframe) là loại máy tính được thiết kế để giải các bài toán
lớn với tốc độ cao.
Máy tính con (Minicomputer) là một dạng thu nhỏ về kích thước cũng như


về tính năng của máy tính lớn.
Máy vi tính (Microcomputer) là loại máy tính rất thông dụng hiện nay. Một
máy vi tính có thể là một bộ vi điều khiển (Microcontroller), một máy tính trong
một vi mạch (one-chip microcomputer), và một hệ vi xử lí có khả năng làm việc
với số liệu có độ dài 1 bít, 4 bít, 8 bít, 16 bít hoặc lớn hơn. Hiện nay, một số loại
máy vi tính có năng lực xử lý tương đương với máy tính con, có thể làm việc với số
liệu có độ dài từ là 32 bít và 64 bít. Ranh giới để phân chia giữa máy vi tính và máy
tính con chính vì thế ngày càng không rõ nét.
Các bộ vi xử lý hiện có tên thị trường thường được xếp theo các họ phụ
thuộc vào các nhà sản xuất và chúng rất đa dạng về chủng loại. Các nhà sản xuất vi
xử lý nổi tiếng có thể kể tới là hãng Intel với các vi xử lý họ x86, Core, Core i;
Motorola với vi xử lý họ 680xx; Sun Microsystems với họ vi xử lý SPARC và
AMD với các vi xử lý Althlon và Phenom. Tính đến thời điểm hiện nay các chương
trình viết cho tập lệnh x86 và tương thích của Intel chiếm tỷ lệ áp đảo trong môi
trường máy vi tính.

2


1.2.

Chip đồng xử lý toán học 8087/80287/80387 (Mathematical co-processor)

Intel 8087

Intel vi xử lý toán học 8087
Sản xuất

1980


Tiếp thị bởi

Intel , IBM

Thiết kế bởi

Intel

Max. CPU tốc
đồng hồ
Min. kích
tính năng

độ 4 MHz đến 10 MHz
thước 3 micron

Tập lệnh

x87 ( vi xử lý mở rộng
của x86-16 )

Intel tiền nhiệm

8231

Intel kế thừa

80287

Package (s)


40-pin DIP

Intel 8087 được công bố vào năm 1980, là sản phẩm x87 đầu tiên kết nối vi
xử lý cho dòng vi xử lý 8086
Mục đích của 8087 là để tăng tốc độ tính toán cho dấu phẩy động toán học,
chẳng hạn như cộng, trừ, nhân, chia và căn bậc hai. Nó cũng tính số mũ, logarit
hoặc tính toán lượng giác, và bên cạnh đó nó cũng tính toán cả các số nguyên nhị
3


phân và thập phân lớn. Hiệu suất được cải tiến từ khoảng 20% đến hơn 500%, tùy
thuộc vào ứng dụng cụ thể. Các 8087 có thể thực hiện khoảng 50.000 FLOPS sử
dụng khoảng 2,4 W. Chỉ có phép toán số học được hưởng lợi từ các cài đặt của một
8087; máy tính chỉ sử dụng với các ứng dụng như xử lý văn bản, ví dụ, sẽ không
được hưởng lợi từ các chi phí phụ (khoảng $ 150 ) và công suất tiêu thụ của một
8087.
Các bộ đồng xử lý số của Intel-8087, 80287, và 80387-mới được thiết kế để
làm việc với
Hình1.1. : Intel vi xử lý toán học 8087
các bộ vi xử lý tương ứng. Chúng làm việc với 80 bit cùng một lúc, cho nên lập
trình viên có thể biểu diễn một số đủ độ dài để đảm
bảo cho các phép tính được thực hiện chính xác. Một tính năng cải tiến của chip
Intel 80486 DX là gộp cả mạch đồng xử lý số vào trong chip vi xử lý.
Các bộ đồng xử lý toán 80x87 hỗ trợ CPU trong việc tính toán các biểu thức
dùng dấu chấm động như cộng, trừ, nhân, chia các số dấu chấm động, căn thức,
logarit,… Chúng cho phép xử lý các phép toán này nhanh hơn nhiều so với CPU.
Thời gian xử lý giữa 8087 và 8086 như sau (dùng xung clock 8 MHz):

Phép toán

Cộng/ trừ
Nhân
Chia
Căn bậc hai
Tag
Lũy thừa
Lưu trữ

8087 [μs]
10.6
11.9
24.4
22.5
56.3
62.5
13.1

8086 [μs]
1000
1000
2000
12250
8125
10680
750

4


Chương 2: Chip đồng xử lý toán học 8087/80287/80387

2.1. 8087
2.1.1. Cấu trúc 8087.
8087 gồm một đơn vị điều khiển (CU – Control Unit) dùng để điều khiển bus
và một đơn vị số học (NU – Numerical Unit) để thực hiện các phép toán dấu chấm
động trong các mạch tính lũy thừa (exponent module) và mạch tính phần định trị
(mantissa module). Khác với 8086, thay vì dùng các thanh ghi rời rạc là một ngăn
xếp thanh ghi.
CU-Control Unit

NU- Numerical Unit
Bộ điều
khiển số

Từ điều khiển
Từ trạng thái

Bus dữ liệu

Module định
trị

Đệm dữ liệu
Đệm dữ liệu

Địa chỉ trạng thái

Module lũy
thừa

Thanh ghi

Ngăn xếp

Điều khiển
Hình 2.1. : Sơ đồ khối của 8087

Đơn vị điều khiển nhận và giải mã lệnh, dọc và ghi các toán hạng, chạy các
lệnh điều khiển riêng của 8087. Do đó, CU có thể đồng bộ với CPU trong khi NU
đang thực hiện các công việc tính toán. CU bao gồm bộ điều khiển bus, bộ đệm dữ
liệu và hàng lệnh.

5


2.1.2. Bộ đồng xử lý toán học 8087.
Chip vi xử lý 8087 là đồng xử lý toán học dùng chung với 8086/8088 trong
máy tính, trong đó 8087 là vi xử lý phụ (slave) còn 8086/8088 là vi xử lý chính
(master). 8087 chuyên thực hiện các phép tính các số với dấu phảy động thuộc
nhiều loại dữ liệu khác nhau. 8086/8088 thực hiện các phép tính này thông qua
thực hiện các mô phỏng, do đó tốc độ thực hiện chúng rất chậm. Nếu dùng 8087
sẽ tăng tốc độ tính toán các số dấu phảy động lên rất nhiều.

Hình 2.2: Đóng vỏ DIP 40 chân và các tín hiệu của chip đồng xử lý toán học 8087

Công nghệ vào thời kỳ ra đời 8086/8088 không cho phép cấy 8087 vào bên
trong 8086/8088 như trong 80486DX và Pentium, do đó phải chế tạo chip riêng để
thực hiện phép tính số dấu phẩy động. 8086 được đóng vỏ DIP 40 chân tín hiệu.
Các đường tín hiệu địa chỉ và dữ liệu được ghép chung từ A0/D0 đến A19/D15.
Như vậy 8087 có thể trao đổi dữ liệu theo byte và theo từ 16 bit. Các tín hiệu
trạng thái S0, S1, S2 và S3, S4, S5, S6, S7 có trong chế độ làm việc tối đa của
8086/8088. Nhịp đồng hồ CLK của 8087 có tần số như tần số của nhịp đồng hồ

8086/8088, bởi vì 8087 được thiết kế để làm việc cùng với 8086/8088 trong hệ
6


thống máy tính.

Đơn vị xử lý số

Đơn vị điều

Thanh ghi
dịch lập

Hàng
đợi

Từ điều khiển
Từ trạng thái

Bu
s
Modu
ph
le số
ân

Giao
Dữ

T

A
G

W
O
R
D

Bộ
đệm
dữ
liệu

Lệnh

Đơn vị
điều khiển
Hàng
đợi
phép

Đánh địa chỉ
và tạo rãnh
bus
Chồng thanh ghi

B
us
lu


th

(7)
(6)
(5)
(4)
(3)
(2)
(1)

Các
thanh

(0)

80 bit'

Trạ
ngt
Hình 2.3: Sơ đồ chức năng của bộ đồng xử lý toán học 8087

Hình trên
Con là sơ đồ chức năng của 8087. Trong 8087 có 2 đơn vị
chức năngtrỏ
chính: Đơn vị điều khiển (Control unit) và đơn vị xử lý số
ngoại
học (numeric execution unit)

Địa


78

ST(1)
ST (2)
ST (3)
ST (4)

79
ST (0)
7


ST (5)
ST (6)
ST (7)

64

Dấu

Hàm mũ

63

Logarit

Hình 2.4: Khuôn dạng tập thanh ghi bên trong của 8087

2.1.3. Thanh ghi


Hình 2.5: Sơ đồ kết nối 8087 và CPU 8086

Ngăn xếp thanh ghi có tất cả 8 thanh ghi từ R0 ÷ R7, mỗi thanh ghi dài 80 bit
trong đó bit 79 là bit dấu, bit 64 ÷ 78 dùng cho số mũ và phần còn lại là phần định
trị. Dữ liệu truyền giữa các thanh ghi này được thực hiện rất nhanh do 8087 có độ
rộng bus dữ liệu là 84 bit và không cần phải biến đổi định dạng.
Ngay sau khi reset PC, bộ đồng xử lý kiểm tra xem nó có được nối với PC
hay không bằng các đường BHE/S7. 8087 sẽ điều chỉnh độ dài của hàng lệnh cho
phù hợp với CPU (nếu dùng 8086 thì độ dài là 6 byte).

8


8087 có một thanh ghi trạng thái là thanh ghi từ thẻ (tag word) gồm các cặp
bit Tag0 ÷ Tag7 để lưu trữ các thông tin liên quan đến nội dung của các thanh ghi
R0 ÷ R7 để cho phép thực hiện một số tác vụ nhanh hơn. Mỗi thanh ghi từ thẻ có 2
bit xác định 4 giá trị khác nhau của các thanh ghi Ri.
Tag = 00: xác định
Tag = 01: zero
Tag = 10: NAN, giá trị bất thường
Tag = 11: rỗng
Tập thanh ghi bên trong của 8087:
Tập thanh ghi bên trong 8087 được tổ chức theo cơ chế ngăn xếp
(register stack), và có khuôn dạng như trong Hình 2.4 và Hình 2.5.
Trong cơ chế ngăn xếp dữ liệu được đẩy vào (push) đỉnh ngăn xếp, vị
trí ST(0), và những dữ liệu cũ trong ngăn xếp được tự động đẩy xuống
phía đấy ngăn xếp. Khi đọc ra, dữ liệu được lấy từ đỉnh ST(0), những
dữ liệu còn lại trong ngăn xếp tự động đi lên đỉnh.

9



2.1.4. Kết nối 8087 và 8086/8088

Hình 2.6: Ghép nối vi xử lý 8086 và đồng xử lý toán học 8087

Sự liên kết giữa 8086 với 8087 được thực hiện cả phần cứng và phần mềm và
được mô tả trong Hình 2.6.
Về phần cứng, tín hiệu RQ / GT0 của 8087 thực hiện giám sát truy cập bus,
về phần mềm, 8087 theo dõi các lệnh được 8086/8088 đọc ra có tiền tố là ký hiệu
đặc biệt ESCAPE (ESC) hay không. Nếu tiền tố của lệnh máy có ký tự ESC thì
8087 tiếp nhận lệnh đưa từ 8086/8088 và sẽ bắt đầu quá trình thực hiện lệnh, còn
8088/8086 thì vẫn tiếp tục xử lý riêng cho đến lúc nó cần đến kết quả tính toán từ
8087. Lúc này 8080/8086 bước vào trạng thái chờ đợi WAIT (Lệnh WAIT chờ tín
hiệu TEST). Khi 8087 đã tính xong và đưa kết quả vào bộ nhớ, nó gửi tín hiệu
BUSY = 0 đến chân TEST để thông báo cho
8086/8088 kết thúc khi

TEST

8086/8088. Trạng thái chờ của

khẳng định ở mức 0 và

trình xử lý của nó. Trong chế độ tối đa, INTA
10

8086/8088 tiếp tục quá

và ALE trở thành


hai tín hiệu trạng


thái QS1 và QS0, đó là 2 bit trạng thái của bộ vi xử lý trong quá trình thực hiện
lệnh. Chúng cần thiết cho bộ đồng xử lý và các thiết bị ngoại vi làm việc kết hợp
chặt chẽ với bộ vi xử lý.
Quá trình tính toán của 8087 thực hiện theo 3 bước như sau:
-

Bước 1: Dữ liệu được nạp từ bộ nhớ chính của hệ thống vào tập hợp các
thanh ghi bên trong (register stack).

-

Bước 2: 8087 xử lý các dữ liệu vừa được nạp

-

Bước 3:Kết quả được cất trở lại vào bộ nhớ chính của hệ thống.

2.1.5. Tập lệnh 8087
Tập lệnh của 8087 gồm nhiều lệnh tính toán với các số nguyên, BCD và dấu
phảy động. Chúng được xem là các lệnh mở rộng tập lệnh của 8086/8088. Khi
viết chương trình, trong đó có sử dụng cả các lệnh của 8087, và 8088, thì thứ tự
chương trình không cần bận tâm. Tất cả các tên lệnh của tập lệnh 8087 đều có
chữ cái đầu là "F", nghĩa là Floating-point.
Các lệnh của 8087 phân thành các nhóm như sau:
1. Các lệnh vận chuyển các số thực (Real transfers).
2. Các lệnh vận chuyển các số nguyên (Integer transfers).

3. Các lệnh vận chuyển các số hệ mười đóng gói (Packed decimal transfers0.
4. Các lệnh cộng (Addition).
5. Các lệnh trừ (Subtraction).
6. Các lệnh nhân (Multiplication)
7. Các lệnh chia (Division).
8. Các lệnh khác (đổi dấu, khai căn bậc hai, làm tròn số, số mũ, lấy giá

trị tuyệt đối,…).
9. Các lệnh hàm lượng giác (Transcendental), logarit, số mũ.
10. Các lệnh so sánh (Comparison).
11. Các lệnh với hằng số (Constant).
11


12. Các lệnh điều khiển bộ xử lý (Processor Control).

Nhóm lệnh điều khiển bộ xử lý là những lệnh như: Khởi tạo ban đầu bộ xử
lý, cấm ngắt, cho phép ngắt, nạp từ điều khiển, cất giữ từ điều khiển, xoá các
ngoại lệ, nạp và cất giữ môi trường, cất giữ và phục hồi trạng thái, tăng con trỏ
ngăn xếp, giảm con trỏ ngăn xếp, làm trống thanh ghi, chờ CPU, và không thực
hiện gì cả.
2.1.6. Khuôn dạng dữ liệu 8087

Khi cất giữ vào trong bộ nhớ chính của hệ thống, dữ liệu có thể ở bất kỳ
khuôn dạng nào, nhưng trong 8087, dữ liệu chỉ có thể được xử lý và cất giữ dưới
các dạng số qui định cho các tính toán số dấu phảy động. Khi chuyển từ 8087 trở
lại bộ nhớ chính của hệ thống, dữ liệu được tự động chuyển về dạng thích hợp
cho xử lý bên trong 8086/8088.
Số thực ngắn có giá trị lớn nhất là 127 (7Fh), số thực dài có giá trị lớn nhất là
1023 (3FFh), và số thực tạm thời có giá trị lớn nhất là 16383 (3FFFh).


2.2. 80287

12


Hình 2.7: Sơ đồ kết nối giữa 80286 và 80287

Do 80286 có chế độ mạch bảo vệ nên mạch ghép nối giữa 80286 và 80287
được thiết kế khác 8087 ở đơn vị điều khiển CU. Bộ đồng xử lý ở đây không thực
hiện truy xuất bộ nhớ trực tiếp. Để truy xuất được bộ nhớ, 80287 không những cần
một đơc vị định địa chỉ đơn giản của nó mà còn phải được tăng cường thêm chức
năng quản lý bộ nhớ của 80286. Cấu trúc bên trong của 80287 cũng tương tự như
8087, chỉ có đơn vị bus thay đổi cho phù hợp với 80286. Khác vơi 8087, 80287
hoạt động không đồng bộ với CPU nên có thể dùng xung clock riêng.

13


2.3. 80387:
Ưu điểm của 80387 so với 80287 là có thể thực hiện các phép toán số học
nhanh hơn. Nó có bus dữ liệu 32 bit như CPU và sử dụng công nghệ CMOS nên
công suất tiêu thụ thấp hơn.

Kết luận
Qua bài tiểu luận đề tài “Nghiên cứu tìm hiểu về vi mạch đồng xử lý toán
học 8087/80287/80387 (Mathematical co-processor)” , nhóm 5 đã đưa ra được :
1.
2.


Sự ra đời và chức năng của Intel 8087
Cấu trúc vi xử lý 8087
- Chip vi xử lý 8087.
- Cấu trúc intel 8087
- Sự kết nối của vi xử lý 8087 và 8086/8088
- Phân loại các nhóm lệnh toán học trong vi xử lý 8087
14


3.
4.

Sơ đồ kết nối giữa vi xử lý 80287 và 80286
Ưu điểm của vi xử lý 80387 sau khi nghiên cứu phát triển từ vi xử lý 80287.

Lời nói đầu
Khoa học phát triển ngày càng mạnh mẽ, nhu cầu sử dụng về công nghệ
ngày càng cao, yêu cầu về độ chính xác, năng suất hoạt động cao. Từ những yêu
cầu đó con người phải sản xuất phát minh ra những công cụ, sản phẩm ứng dụng và
phát triển ngành công nghệ lập trình.
Để đáp ứng được nhu cầu về công nghệ hiện nay, nhà sản xuất chip vi xử lí
Intel đã phát triển và chế tạo ra bộ mạch đồng xử lý toán học 8087/80287/80387 .
Chúng làm việc với 80 bit cùng một lúc, cho nên lập trình viên có thể biểu diễn một
số đủ độ dài để đảm bảo cho các phép tính được thực hiện chính xác. Một tính năng
cải tiến của chip Intel 80486 DX là gộp cả mạch đồng xử lý số vào trong chip vi
xử lý.
Để hiểu hơn về mạch đồng xử lý toán học 8087/80287/80387 (Mathematical
co-processor) em xin được trình bày cụ thể hơn trong bản báo cáo này.
Nhóm sinh viên thực hiện !


15


Chương 1: Giới thiệu chung về vi xử lý
1.3.

Giới thiệu về vi xử lý

Một máy tính thông thường bao gồm các khối chức năng cơ bản, như khối
xử lí trung tâm (CPU - Central Processing Unit), bộ nhớ trong và khối phối ghép
với thiết bị ngoại vi (I/O - Input/Output). Tuỳ theo quy mô, độ phức tạp và hiệu
năng của các khối chức năng kể trên mà người ta chia các máy tính điện tử đã và
đang sử dụng ra thành các loại sau:
Máy tính lớn (Mainframe) là loại máy tính được thiết kế để giải các bài toán
lớn với tốc độ cao.
Máy tính con (Minicomputer) là một dạng thu nhỏ về kích thước cũng như
về tính năng của máy tính lớn.
Máy vi tính (Microcomputer) là loại máy tính rất thông dụng hiện nay. Một
máy vi tính có thể là một bộ vi điều khiển (Microcontroller), một máy tính trong
một vi mạch (one-chip microcomputer), và một hệ vi xử lí có khả năng làm việc
với số liệu có độ dài 1 bít, 4 bít, 8 bít, 16 bít hoặc lớn hơn. Hiện nay, một số loại
máy vi tính có năng lực xử lý tương đương với máy tính con, có thể làm việc với số
liệu có độ dài từ là 32 bít và 64 bít. Ranh giới để phân chia giữa máy vi tính và máy
tính con chính vì thế ngày càng không rõ nét.
Các bộ vi xử lý hiện có tên thị trường thường được xếp theo các họ phụ
thuộc vào các nhà sản xuất và chúng rất đa dạng về chủng loại. Các nhà sản xuất vi
xử lý nổi tiếng có thể kể tới là hãng Intel với các vi xử lý họ x86, Core, Core i;
Motorola với vi xử lý họ 680xx; Sun Microsystems với họ vi xử lý SPARC và
AMD với các vi xử lý Althlon và Phenom. Tính đến thời điểm hiện nay các chương
trình viết cho tập lệnh x86 và tương thích của Intel chiếm tỷ lệ áp đảo trong môi

trường máy vi tính.

16


1.4.

Chip đồng xử lý toán học 8087/80287/80387 (Mathematical co-processor)

Intel 8087

Intel vi xử lý toán học 8087
Sản xuất

1980

Tiếp thị bởi

Intel , IBM

Thiết kế bởi

Intel

Max. CPU tốc
đồng hồ
Min. kích
tính năng

độ 4 MHz đến 10 MHz

thước 3 micron

Tập lệnh

x87 ( vi xử lý mở rộng
của x86-16 )

Intel tiền nhiệm

8231

Intel kế thừa

80287

Package (s)

40-pin DIP

Intel 8087 được công bố vào năm 1980, là sản phẩm x87 đầu tiên kết nối vi
xử lý cho dòng vi xử lý 8086
Mục đích của 8087 là để tăng tốc độ tính toán cho dấu phẩy động toán học,
chẳng hạn như cộng, trừ, nhân, chia và căn bậc hai. Nó cũng tính số mũ, logarit
hoặc tính toán lượng giác, và bên cạnh đó nó cũng tính toán cả các số nguyên nhị
17


phân và thập phân lớn. Hiệu suất được cải tiến từ khoảng 20% đến hơn 500%, tùy
thuộc vào ứng dụng cụ thể. Các 8087 có thể thực hiện khoảng 50.000 FLOPS sử
dụng khoảng 2,4 W. Chỉ có phép toán số học được hưởng lợi từ các cài đặt của một

8087; máy tính chỉ sử dụng với các ứng dụng như xử lý văn bản, ví dụ, sẽ không
được hưởng lợi từ các chi phí phụ (khoảng $ 150 ) và công suất tiêu thụ của một
8087.
Các bộ đồng xử lý số của Intel-8087, 80287, và 80387-mới được thiết kế để
làm việc với
Hình1.1. : Intel vi xử lý toán học 8087
các bộ vi xử lý tương ứng. Chúng làm việc với 80 bit cùng một lúc, cho nên lập
trình viên có thể biểu diễn một số đủ độ dài để đảm
bảo cho các phép tính được thực hiện chính xác. Một tính năng cải tiến của chip
Intel 80486 DX là gộp cả mạch đồng xử lý số vào trong chip vi xử lý.
Các bộ đồng xử lý toán 80x87 hỗ trợ CPU trong việc tính toán các biểu thức
dùng dấu chấm động như cộng, trừ, nhân, chia các số dấu chấm động, căn thức,
logarit,… Chúng cho phép xử lý các phép toán này nhanh hơn nhiều so với CPU.
Thời gian xử lý giữa 8087 và 8086 như sau (dùng xung clock 8 MHz):

Phép toán
Cộng/ trừ
Nhân
Chia
Căn bậc hai
Tag
Lũy thừa
Lưu trữ

8087 [μs]
10.6
11.9
24.4
22.5
56.3

62.5
13.1

8086 [μs]
1000
1000
2000
12250
8125
10680
750

18


Chương 2: Chip đồng xử lý toán học 8087/80287/80387
2.1. 8087
2.1.1. Cấu trúc 8087.
8087 gồm một đơn vị điều khiển (CU – Control Unit) dùng để điều khiển bus
và một đơn vị số học (NU – Numerical Unit) để thực hiện các phép toán dấu chấm
động trong các mạch tính lũy thừa (exponent module) và mạch tính phần định trị
(mantissa module). Khác với 8086, thay vì dùng các thanh ghi rời rạc là một ngăn
xếp thanh ghi.
CU-Control Unit

NU- Numerical Unit
Bộ điều
khiển số

Từ điều khiển

Từ trạng thái

Bus dữ liệu

Module định
trị

Đệm dữ liệu
Đệm dữ liệu

Địa chỉ trạng thái

Module lũy
thừa

Thanh ghi
Ngăn xếp

Điều khiển
Hình 2.1. : Sơ đồ khối của 8087

Đơn vị điều khiển nhận và giải mã lệnh, dọc và ghi các toán hạng, chạy các
lệnh điều khiển riêng của 8087. Do đó, CU có thể đồng bộ với CPU trong khi NU
đang thực hiện các công việc tính toán. CU bao gồm bộ điều khiển bus, bộ đệm dữ
liệu và hàng lệnh.

19


2.1.2. Bộ đồng xử lý toán học 8087.

Chip vi xử lý 8087 là đồng xử lý toán học dùng chung với 8086/8088 trong
máy tính, trong đó 8087 là vi xử lý phụ (slave) còn 8086/8088 là vi xử lý chính
(master). 8087 chuyên thực hiện các phép tính các số với dấu phảy động thuộc
nhiều loại dữ liệu khác nhau. 8086/8088 thực hiện các phép tính này thông qua
thực hiện các mô phỏng, do đó tốc độ thực hiện chúng rất chậm. Nếu dùng 8087
sẽ tăng tốc độ tính toán các số dấu phảy động lên rất nhiều.

Hình 2.2: Đóng vỏ DIP 40 chân và các tín hiệu của chip đồng xử lý toán học 8087

Công nghệ vào thời kỳ ra đời 8086/8088 không cho phép cấy 8087 vào bên
trong 8086/8088 như trong 80486DX và Pentium, do đó phải chế tạo chip riêng để
thực hiện phép tính số dấu phẩy động. 8086 được đóng vỏ DIP 40 chân tín hiệu.
Các đường tín hiệu địa chỉ và dữ liệu được ghép chung từ A0/D0 đến A19/D15.
Như vậy 8087 có thể trao đổi dữ liệu theo byte và theo từ 16 bit. Các tín hiệu
trạng thái S0, S1, S2 và S3, S4, S5, S6, S7 có trong chế độ làm việc tối đa của
8086/8088. Nhịp đồng hồ CLK của 8087 có tần số như tần số của nhịp đồng hồ
8086/8088, bởi vì 8087 được thiết kế để làm việc cùng với 8086/8088 trong hệ
20


thống máy tính.

Đơn vị xử lý số

Đơn vị điều

Thanh ghi
dịch lập

Hàng

đợi

Từ điều khiển
Từ trạng thái

Bu
s
Modu
ph
le số
ân

Giao
Dữ

T
A
G

W
O
R
D

Bộ
đệm
dữ
liệu

Lệnh


Đơn vị
điều khiển
Hàng
đợi
phép

Đánh địa chỉ
và tạo rãnh
bus
Chồng thanh ghi

B
us
lu

th

(7)
(6)
(5)
(4)
(3)
(2)
(1)

Các
thanh

(0)


80 bit'

Trạ
ngt
Hình 2.3: Sơ đồ chức năng của bộ đồng xử lý toán học 8087

Hình trên
Con là sơ đồ chức năng của 8087. Trong 8087 có 2 đơn vị
chức năngtrỏ
chính: Đơn vị điều khiển (Control unit) và đơn vị xử lý số
ngoại
học (numeric execution unit)

Địa

78

ST(1)
ST (2)
ST (3)
ST (4)

79
ST (0)
21


ST (5)
ST (6)

ST (7)

64

Dấu

Hàm mũ

63

Logarit

Hình 2.4: Khuôn dạng tập thanh ghi bên trong của 8087

2.1.3. Thanh ghi

Hình 2.5: Sơ đồ kết nối 8087 và CPU 8086

Ngăn xếp thanh ghi có tất cả 8 thanh ghi từ R0 ÷ R7, mỗi thanh ghi dài 80 bit
trong đó bit 79 là bit dấu, bit 64 ÷ 78 dùng cho số mũ và phần còn lại là phần định
trị. Dữ liệu truyền giữa các thanh ghi này được thực hiện rất nhanh do 8087 có độ
rộng bus dữ liệu là 84 bit và không cần phải biến đổi định dạng.
Ngay sau khi reset PC, bộ đồng xử lý kiểm tra xem nó có được nối với PC
hay không bằng các đường BHE/S7. 8087 sẽ điều chỉnh độ dài của hàng lệnh cho
phù hợp với CPU (nếu dùng 8086 thì độ dài là 6 byte).

22


8087 có một thanh ghi trạng thái là thanh ghi từ thẻ (tag word) gồm các cặp

bit Tag0 ÷ Tag7 để lưu trữ các thông tin liên quan đến nội dung của các thanh ghi
R0 ÷ R7 để cho phép thực hiện một số tác vụ nhanh hơn. Mỗi thanh ghi từ thẻ có 2
bit xác định 4 giá trị khác nhau của các thanh ghi Ri.
Tag = 00: xác định
Tag = 01: zero
Tag = 10: NAN, giá trị bất thường
Tag = 11: rỗng
Tập thanh ghi bên trong của 8087:
Tập thanh ghi bên trong 8087 được tổ chức theo cơ chế ngăn xếp
(register stack), và có khuôn dạng như trong Hình 2.4 và Hình 2.5.
Trong cơ chế ngăn xếp dữ liệu được đẩy vào (push) đỉnh ngăn xếp, vị
trí ST(0), và những dữ liệu cũ trong ngăn xếp được tự động đẩy xuống
phía đấy ngăn xếp. Khi đọc ra, dữ liệu được lấy từ đỉnh ST(0), những
dữ liệu còn lại trong ngăn xếp tự động đi lên đỉnh.

23


2.1.4. Kết nối 8087 và 8086/8088

Hình 2.6: Ghép nối vi xử lý 8086 và đồng xử lý toán học 8087

Sự liên kết giữa 8086 với 8087 được thực hiện cả phần cứng và phần mềm
và được mô tả trong Hình 2.6.
Về phần cứng, tín hiệu RQ / GT0 của 8087 thực hiện giám sát truy cập
bus, về phần mềm, 8087 theo dõi các lệnh được 8086/8088 đọc ra có tiền tố là
ký hiệu đặc biệt ESCAPE (ESC) hay không. Nếu tiền tố của lệnh máy có ký
tự ESC thì 8087 tiếp nhận lệnh đưa từ 8086/8088 và sẽ bắt đầu quá trình thực
hiện lệnh, còn 8088/8086 thì vẫn tiếp tục xử lý riêng cho đến lúc nó cần đến
kết quả tính toán từ 8087. Lúc này 8080/8086 bước vào trạng thái chờ đợi

WAIT (Lệnh WAIT chờ tín hiệu TEST). Khi 8087 đã tính xong và đưa kết quả
vào bộ nhớ, nó gửi tín hiệu BUSY = 0 đến chân TEST để thông báo cho
8086/8088. Trạng thái chờ của 8086/8088 kết thúc khi
ở mức 0 và

TEST

khẳng định

8086/8088 tiếp tục quá trình xử lý của nó. Trong chế độ tối đa,

và ALE trở thành
INTA
hai tín hiệu trạng thái QS1 và QS0, đó là 2 bit trạng
thái của bộ vi xử lý trong quá trình thực hiện lệnh. Chúng cần thiết cho bộ


đồng xử lý và các thiết bị ngoại vi làm việc kết hợp chặt chẽ với bộ vi xử lý.
Quá trình tính toán của 8087 thực hiện theo 3 bước như sau:
-

Bước 1: Dữ liệu được nạp từ bộ nhớ chính của hệ thống vào tập hợp
các thanh ghi bên trong (register stack).

-

Bước 2: 8087 xử lý các dữ liệu vừa được nạp

-


Bước 3:Kết quả được cất trở lại vào bộ nhớ chính của hệ thống.

2.1.5. Tập lệnh 8087
Tập lệnh của 8087 gồm nhiều lệnh tính toán với các số nguyên, BCD và
dấu phảy động. Chúng được xem là các lệnh mở rộng tập lệnh của 8086/8088.
Khi viết chương trình, trong đó có sử dụng cả các lệnh của 8087, và 8088, thì
thứ tự chương trình không cần bận tâm. Tất cả các tên lệnh của tập lệnh 8087
đều có chữ cái đầu là "F", nghĩa là Floating-point.
Các lệnh của 8087 phân thành các nhóm như sau:
13.

Các lệnh vận chuyển các số thực (Real transfers).

14.

Các lệnh vận chuyển các số nguyên (Integer transfers).

15.

Các lệnh vận chuyển các số hệ mười đóng gói (Packed decimal

transfers0.
16.

Các lệnh cộng (Addition).

17.

Các lệnh trừ (Subtraction).


18.

Các lệnh nhân (Multiplication)

19.

Các lệnh chia (Division).
20.

Các lệnh khác (đổi dấu, khai căn bậc hai, làm tròn số, số

mũ, lấy giá trị tuyệt đối,…).
21.
Các lệnh hàm lượng giác (Transcendental), logarit, số mũ.
22. Các lệnh so sánh (Comparison).
23. Các lệnh với hằng số (Constant).
24. Các lệnh điều khiển bộ xử lý (Processor Control).

Nhóm lệnh điều khiển bộ xử lý là những lệnh như: Khởi tạo ban đầu bộ


×