CẤU TRÚC & CHỨC NĂNG CỦA VI XỬ LÝ
I. Tổ chức bộ xử lý
II. Tổ chức thanh ghi
Người sử dụng – các thanh ghi có thể nhìn thấy
Thanh ghi điều khiển và thanh ghi trạng thái
Ví dụ về tổ chức thanh ghi của bộ vi xử lý
III. Chu kỳ lệnh
Chu kỳ gián tiếp
Luồng dữ liệu
IV. Cấu trúc đường ống lệnh
Chiến lược Pipelining
Hiệu suất Pipelining
Hạn chế của Pipelining
Xử lý với nhánh
Pipelining Intel 80486
V. Các họ vi xử lý 8086
Tổ chức thanh ghi
Xử lý ngắt
VI. Các bộ xử lý ARM
Tổ chức bộ xử lý
Chế độ xử lý thanh ghi
Tổ chức xử lý ngắt
VII. Tài liệu tham khảo
VIII. Tóm tắt, các yêu cầu và câu hỏi ôn tập
NỘI DUNG CHÍNH
Một bộ xử lý bao gồm cả thanh ghi người dùng có thể
nhìn thấy và thanh ghi điều khiển / trạng thái. Có
thể được tham chiếu ngầm định hoặc rõ ràng trong
lệnh của máy. Thanh ghi người dùng có thể nhìn thấy
có thể có mục đích sử dụng chung hoặc có một mục
đích sử dụng đặc biệt, chẳng hạn như điểm cố định
Address
bus
System
ALU
Registers
Control
unit
• Lấy lệnh: Bộ xử lý đọc một lệnh từ bộ nhớ (thanh
ghi, bộ nhớ cache, bộ nhớ chính).
• Dịch lệnh: Các lệnh được giải mã để xác định những
hành động được yêu cầu
• Lấy dữ liệu: Việc thi hành một lệnh có thể yêu cầu
đọc dữ liệu từ bộ nhớ hoặc một module I / O.
• Xử lý dữ liệu: Việc thi hành một lệnh có thể yêu
cầu thực hiện một số phép tính số học hoặc hoạt
động hợp lý trên dữ liệu.
• Ghi dữ liệu: Kết quả của một thực thi có thể đòi
hỏi ghi dữ liệu vào bộ nhớ hoặc một module I / O.
Để làm những việc này, cần phải thấy rõ rằng bộ vi xử lý cần
lưu trữ một số dữ liệu tạm thời. Nó phải nhớ vị trí của lệnh
mới nhất để nó có thể biết được nơi để có được những lệnh
tiếp theo. Nó cần phải lưu trữ lệnh và dữ liệu tạm thời
trong khi một lệnh đang được thực thi. Nói cách khác, bộ vi
xử lý cần có một bộ nhớ nhỏ. Hình 1 là một cái nhìn đơn giản
của một bộ xử lý, chỉ kết nối của nó với phần còn lại của hệ
thống thông qua bus hệ thống. Chúng ta sẽ nhớ lại rằng các
thành phần chính của bộ vi xử lý là một đơn vị số học và
logic (ALU) và đơn vị điều khiển (CU). ALU thực hiện các
tính toán thực tế hoặc xử lý dữ liệu. Bộ điều khiển kiểm
soát sự di chuyển của dữ liệu và hướng dẫn vào và ra khỏi bộ
Lưu ý sự giống nhau giữa cấu trúc bên trong của máy tính nói
chung và các cấu
trúc bên trong của bộ vi xử lý. Trong cả hai trường hợp, có
một bộ sưu tập nhỏ
của yếu tố chủ yếu (máy tính: bộ vi xử lý, I / O, bộ nhớ; xử
lý: đơn vị điều khiển, ALU, thanh ghi) nối với nhau bằng
đường dữ liệu.
II. TỔ CHỨC THANH GHI
Ở mức cao hơn của hệ thống phân cấp, bộ nhớ nhanh hơn,
nhỏ hơn, và đắt tiền hơn. Trong bộ vi xử lý, có một tập
các thanh ghi có chức năng như một cấp độ của bộ nhớ
trên bộ nhớ chính và bộ nhớ cache trong hệ thống phân
cấp. Các thanh ghi trong bộ vi xử lý thực hiện hai vai
trò:
• Thanh ghi người dùng có thể nhìn thấy: Cho phép các
lập trình viên máy hoặc ngôn ngữ lắp ráp để giảm
thiểu tham chiếu bộ nhớ chính bằng cách tối ưu việc
sử dụng thanh ghi.
• Thanh ghi điều khiển/trạng thái: Được sử dụng bởi
bộ điều khiển để kiểm soát hoạt động của bộ vi xử
lý và đặc quyền, các chương trình hệ điều hành để
kiểm soát việc thực hiện các chương trình.
Thanh ghi người sử dụng nhìn thấy:
Thanh ghi người dùng có thể nhìn thấy là một trong đó có thể
được tham chiếu bằng phương tiện của ngôn ngữ máy mà bộ vi
xử lý thực hiện.
Chúng ta có thể mô tả các trong các loại sau:
• Đa năng
• Dữ liệu
• Địa chỉ
nó thường ẩn trong mã máy. Bộ ghi rõ toán hạng chỉ phải xác
định một trong một bộ các thanh ghi chuyên biệt chứ không
phải là một trong số tất cả các thanh ghi, do đó tiết kiệm
bit. Ngược lại, điều này giới hạn sự linh hoạt của lập trình
viên.
Một vấn đề khác thiết kế là số thanh ghi, hoặc đa dụng hoặc
dữ liệu cộng thêm địa chỉ, để được cung cấp. Một lần nữa,
điều này ảnh hưởng đến thiết kế tập lệnh hơn vì thanh ghi
đòi hỏi nhiều bit toán hạng đặc tả. Thanh ghi ít hơn dẫn đến
tham chiếu bộ nhớ nhiều hơn, thanh ghi nhiều hơn không đáng
kể làm giảm tham chiếu bộ nhớ. Tuy nhiên, một cách tiếp cận
mới, tìm thấy lợi thế trong việc sử dụng hàng trăm thanh
ghi, được đưa ra trong một số hệ thống RISC.
Cuối cùng là vấn đề độ dài thanh ghi. Thanh ghi mà cần phải
giữ địa chỉ rõ ràng tối thiểu phải đủ dài để giữ địa chỉ lớn
nhất. Thanh ghi dữ liệu có thể giữ giá trị của hầu hết các
loại dữ liệu. Một số máy cho phép hai thanh ghi liên tiếp
được sử dụng như một giá trị để giữ đôi độ dài.
Một loại thanh ghi cuối cùng, đó là ít nhất một phần người
sử dụng có thể nhìn thấy, giữ mã điều kiện (còn gọi là cờ).
Mã điều kiện là các bit được thiết lập bởi phần cứng xử lý
là kết quả của hoạt động. Ví dụ, một phép toán số học có thể
tạo ra một kết quả tích cực, không tích cực, không, hoặc
tràn. Ngoài các kết quả chính nó đang được lưu trữ trong một
thanh ghi hoặc bộ nhớ, một mã điều kiện cũng được thiết lập.
Các mã sau đó có thể được kiểm tra như một phần của hoạt
động rẽ nhánh có điều kiện. Bit mã điều kiện được thu thập
vào một hoặc nhiều thanh ghi. Thông thường, chúng là một
phần của một thanh ghi kiểm soát. Nói chung, lệnh của máy cho
phép các bit được đọc bằng cách tham chiếu ngầm định, và các
kiểm tra và rẽ nhánh.
3. Mã điều kiện thuận lợi
cho các rẽ nhánh nhiều
chiều. Ví dụ, một lệnh
KIỂM TRA có thể được
theo sau bởi hai nhánh,
một ở dưới hoặc bằng số
không và một trên lớn
hơn không.
1. Mã điều kiện thêm độ phức tạp cho
cả phần cứng và phần mềm. Bit mã
điều kiện thường được sửa đổi theo
những cách khác nhau bởi lệnh khác
nhau, gây khó khăn cho cả vi chương
trình và trình biên dịch.
2. Mã điều kiện là bất thường, chúng
thường không là một phần của đường
dẫn dữ liệu chính, vì vậy chúng yêu
cầu kết nối thêm phần cứng.
3. Thường các máy mã điều kiện phải
thêm lệnh không điều kiện-mã đặc
biệt cho các tình huống đặc biệt
nào đó, chẳng hạn như bit kiểm tra,
kiểm soát vòng lặp, và các hoạt
động sự ra hiệu lượng tử.
4. Trong việc thực hiện pipelined, mã
điều kiện yêu cầu đồng bộ hóa đặc
biệt để tránh xung đột.
Bảng 1.
Thanh ghi điều khiển và thanh ghi trạng thái:
dữ liệu giữa bộ xử lý và bộ nhớ. Trong bộ vi xử lý, dữ liệu
phải được trao đổi với ALU để xử lý. ALU có thể truy cập
trực tiếp vào MBR và thanh ghi người dùng có thể nhìn thấy.
Ngoài ra, có thể có thanh ghi đệm thêm tại ranh giới tới
ALU, các thanh ghi phục vụ như là đầu vào và đầu ra thanh
ghi cho ALU và trao đổi dữ liệu với MBR và thanh ghi người
dùng có thể nhìn thấy. Nhiều thiết kế bộ vi xử lý bao gồm một
thanh ghi hoặc tập các thanh ghi, thường được gọi là từ
trạng thái chương trình (PSW), có chứa thông tin trạng thái.
PSW thường chứa mã điều kiện cộng thêm thông tin trạng thái
khác. Các trường phổ biến hoặc cờ bao gồm:
• Đăng ký: Chứa các bit dấu hiệu của kết quả của các phép
toán số học cuối cùng.
• Zero: Thiết lập khi kết quả là 0.
• Carry: Thiết lập nếu một hoạt động dẫn đến carry (thêm)
vào hoặc vay (trừ) ra
khỏi một chút bậc cao. Sử dụng cho các hoạt động nhiều
từ số học.
• Equal: Thiết lập nếu một logic so sánh kết quả là bằng
nhau.
• Overflow: Được sử dụng để chỉ ra tràn bộ nhớ số học.
• Interrupt Enable / Disable: Được sử dụng để kích hoạt hoặc
vô hiệu hóa ngắt.
• Supervisor: Cho biết bộ vi xử lý được thực hiện trong giám
sát hoặc chế độ người dùng. Một số lệnh ưu tiên có thể được
thực hiện chỉ trong chế độ giám sát, và các khu vực nhất
định của bộ nhớ có thể được truy cập chỉ trong chế độ giám
sát.
Một số thanh ghi liên quan đến trạng thái và điều khiển có
thể được tìm thấy trong một thiết kế bộ vi xử lý cụ thể. Có
• Ngắt: Nếu ngắt được kích hoạt và một gián đoạn đã xảy ra,
lưu trạng thái hiện tại và tiến trình phục vụ ngắt.
Chu kỳ gián tiếp Hình 4
Chúng ta có thể nghĩ đến những khi nạp địa chỉ gián tiếp là
một đoạn lệnh thêm. Kết quả được thể hiện trong hình 4. Dòng
chính của hoạt động bao gồm xen kẽ lệnh lấy và các hoạt động
thực hiện lệnh. Sau khi lệnh đang lấy lệnh, nó được kiểm tra
để xác định xem có địa chỉ gián tiếp đang tham gia. Nếu vậy,
các toán hạng cần được lấy bằng cách sử dụng địa chỉ gián
tiếp. Tiếp theo thực hiện, một ngắt có thể được xử lý trước
khi lệnh kế tiếp lấy. Một cách khác để xem quá trình này
được thể hiện trong hình 5. Điều này cho thấy một cách chính
xác thêm tính chất của chu kỳ lệnh. Sau khi hướng dẫn một là
lấy lệnh, đặc tả toán hạng của nó phải được xác định. Mỗi
toán hạng đầu vào trong bộ nhớ sau đó lấy lệnh, và quá
trình này có thể yêu cầu địa chỉ gián tiếp. Toán hạng thanh
ghi trên không cần được lấy. Một khi các mã được thực thi,
một quá trình tương tự có thể cần thiết để lưu trữ kết quả
trong bộ nhớ chính.
Instruction
address
calculation
Instruction
operation
decoding
Operand
address
thuộc vào việc thiết kế các bộ vi xử lý. Chúng ta có thể,
tuy nhiên, chỉ ra một cách chung chung những gì phải xảy ra.
Chúng ta hãy giả định rằng một bộ vi xử lý sử dụng một địa
chỉ bộ nhớ thanh ghi (MAR), đăng ký một bộ nhớ đệm (MBR),
một chương trình truy cập (PC), và thanh ghi lệnh (IR).
Trong chu kỳ lấy, một lệnh được đọc từ bộ nhớ.
Hình 6 cho thấy dòng chảy của dữ liệu trong chu kỳ này.
PC chứa địa chỉ của lệnh tiếp theo cần lấy về. Địa chỉ này
được chuyển đến MAR và được đặt trên bus địa chỉ.
Address Data Control
PC
CPU
MAR
Control
unit
Memory
MBR IR
Hình 6
Bộ điều khiển yêu cầu đọc bộ nhớ, và kết quả được đặt trên
bus dữ liệu và sao chép vào MBR và sau đó chuyển đến IR.
Trong khi đó, các máy tính đang tăng thêm 1, chuẩn bị cho
việc kế tiếp lấy lệnh. Khi chu kỳ lấy lệnh kết thúc, các đơn
vị kiểm soát kiểm tra nội dung IR để xác định xem nó có chứa
một đặc tả toán hạng bằng cách sử dụng địa chỉ gián tiếp.
Nếu như vậy, một chu kỳ gián tiếp được thực hiện. Như thể
hiện trong hình 7, đây là một chu trình đơn. Các bit N bên
phải của MBR, có chứa các tham chiếu địa chỉ, được chuyển
giao cho MAR. Sau đó đơn vị điều khiển yêu cầu đọc bộ nhớ,
để có được địa chỉ mong muốn của toán hạng vào MBR. Chỉ lệnh
và chu kỳ gián tiếp rất đơn giản và dễ dự đoán. Chu kỳ thực
ráp tận dụng thực tế là một sản phẩm đi qua các giai đoạn
khác nhau của sản xuất. Bằng cách đặt quá trình sản xuất ra
trong một dây chuyền lắp ráp, sản phẩm ở các giai đoạn khác
nhau có thể được làm việc cùng một lúc. Quá trình này cũng
được gọi là pipelining, bởi vì, như là trong một đường ống,
đầu vào mới được chấp nhận ở một đầu trước khi đầu vào được
chấp nhận trước xuất hiện như là kết quả đầu ra ở đầu kia.
Để áp dụng khái niệm này để thực hiện lệnh, chúng ta phải
nhận ra rằng, trên thực tế, một hướng dẫn có một số giai
đoạn. Con số 5, ví dụ, phá vỡ chu kỳ lệnh lên thành 10 nhiệm
vụ, trong đó xảy ra theo thứ tự. Rõ ràng, cần có một số cơ
hội cho pipelining.
Hình 9
Như phương pháp đơn giản, hãy xem xét chia nhỏ xử lý lệnh
thành hai giai đoạn: lấy lệnh và thực hiện lệnh. Có những
thời điểm trong khi thực hiện một lệnh khi bộ nhớ chính
không được truy cập. Thời gian này có thể được sử dụng để
lấy các lệnh tiếp theo trong song song với việc thực hiện
của một hiện tại. Hình 9a mô tả cách tiếp cận này. Các đường
ống dẫn có hai giai đoạn độc lập. Giai đoạn đầu tiên lấy
lệnh và các bộ đệm của nó. Khi giai đoạn thứ hai là trống,
giai đoạn đầu tiên truyền nó lệnh đệm. Trong khi giai đoạn
thứ hai là thực hiện các lệnh, giai đoạn đầu tiên tận dụng
lợi thế của bất kỳ chu kỳ bộ nhớ không sử dụng để lấy và đệm
tiếp theo hướng dẫn. Nó được gọi là lệnh nạp hoặc lấy lệnh
chồng chéo lên nhau. Lưu ý rằng phương pháp này, trong đó
bao gồm lệnh đệm, đòi hỏi nhiều thanh ghi. Nói chung,
pipelining yêu cầu thanh ghi để lưu trữ dữ liệu giữa các
giai đoạn.
• Tính toán hạng (CO): Tính toán địa chỉ hiệu quả của từng
phép toán nguồn. Điều này có thể liên quan đến việc di dời,
thanh ghi gián tiếp hoặc dạng khác của phép tính địa chỉ.
• Lấy toán hạng (FO): Tìm nạp mỗi toán hạng từ bộ nhớ. Các
toán hạng trong thanh ghi không cần lấy về.
• Thực hiện lệnh (EI): Thực hiện các hoạt động ghi và lưu
trữ kết quả, nếu có, trong vị trí toán hạng đích xác định.
• Ghi toán hạng (WO): Lưu trữ kết quả trong bộ nhớ.
Với phân tích này, các giai đoạn khác nhau sẽ có thời gian
gần bằng nhiều hơn. Trong minh hoạ, hãy giả thiết thời gian
bằng nhau. Sử dụng giả định này, Hình 10 cho thấy một đường
ống dẫn gồm sáu giai đoạn có thể làm giảm thời gian thực
hiện cho 9 lệnh từ 54 đơn vị thời gian đến 14 đơn vị thời
gian. Một số nhận xét theo thứ tự: Sơ đồ giả định rằng mỗi
lệnh đi qua tất cả sáu giai đoạn của đường ống. Điều này sẽ
không luôn luôn là trường hợp xảy ra. Ví dụ, một lệnh tải
không cần đến WO giai đoạn.
Tuy nhiên, để đơn giản hóa phần cứng đường ống dẫn, thời
gian được thiết lập giả sử mỗi lệnh yêu cầu tất cả sáu giai
đoạn. Ngoài ra, sơ đồ giả thiết rằng tất cả các giai đoạn có
thể được thực hiện song song. Đặc biệt, nó được giả định
rằng không có xung đột bộ nhớ.
Ví dụ, FI, FO và WO các giai đoạn liên quan đến một truy cập
bộ nhớ.
Sơ đồ hàm ý rằng tất cả các truy cập có thể xảy ra cùng một
lúc. Hầu hết các hệ thống bộ nhớ sẽ không cho phép điều đó.
Tuy nhiên, giá trị mong muốn có thể là trong bộ nhớ cache,
hoặc FO hoặc WO giai đoạn có thể là rỗng. Như vậy, phần lớn
thời gian, các xung đột bộ nhớ sẽ không làm chậm các đường
ống.
Lệnh
4
FI DI CO FO EI WO
Lệnh
5
FI DI CO FO EI WO
Lệnh
6
FI DI CO FO EI WO
Lệnh
7
FI DI CO FO EI WO
Lệnh
8
FI DI CO FO EI WO
Lệnh
9
FI DI CO FO EI WO
Hình 10
Các đường ống, trong ví dụ này, chỉ đơn giản là tải các lệnh
tiếp theo trong chuỗi (lệnh 4) và lệnh trước đó. Trong hình
10, các lệnh rẽ nhánh là không được, và chúng ta có lợi ích
hiệu suất đầy đủ của việc nâng cao. Trong Hình 11, các lệnh
rẽ nhánh được lấy. Điều này không được xác định cho đến khi
cuối của thời gian đơn vị 7. Tại thời điểm này, các đường
ống dẫn phải được xóa các lệnh mà không hữu ích. Trong thời
gian đơn vị 8, lệnh 15 vào các đường ống dẫn. Không có lệnh
đầy đủ trong đơn vị thời gian 9 đến 12, đây là giảm hiệu
suất phát sinh vì chúng ta không thể dự đoán các rẽ nhánh.
DI CO FO EI WO
Lệnh
3
FI DI CO FO EI WO
Lệnh
4
FI DI CO FO
Lệnh
5
FI DI CO
Lệnh
6
FI DI
Lệnh
7
FI
Lệnh
8
FI DI CO FO EI WO
Lệnh
9
FI DI CO FO EI WO
Hình 11
No Yes
Yes
No
FI
DI
CO
được thực thi.
Trong hình 13b, (tương ứng với Hình 11), các đường ống có
đầy đủ vào các thời điểm 6 và 7.
Vào thời điểm 7, hướng 3 đang trong giai đoạn thực hiện và
thực hiện một chi nhánh để hướng dẫn 15.
Tại thời điểm này, hướng dẫn I4 qua i7 đang đỏ mặt từ các
đường ống, do đó, vào thời điểm 8, chỉ có hai hướng dẫn có
trong đường ống, I3 và I15.
Hình 13 a, b.
Từ phần thảo luận trước đó, ta thấy có thể xuất hiện lớn hơn
số lượng giai đoạn trong các đường ống dẫn, làm tốc độ thực
hiện nhanh hơn. Một số các nhà thiết kế IBM S/360 chỉ ra hai
yếu tố làm thất bại mô hình đơn giản này cho thiết kế hiệu
suất cao [ANDE67a], và chúng vẫn còn các yếu tố mà nhà thiết
kế vẫn còn phải xem xét:
Ở mỗi giai đoạn của ống dẫn, có một số trên đầu liên
quan đến di chuyển dữ liệu từ vùng đệm đến vùng đệm và