Giới thiệu a.Các chế độ hoạt động của ARM Bộ xử lý ARM thông thường có 7 chế độ hoạt động khác nhau, bao gồm: Chế độ User User mode: chế độ này được sử dụng trong trạng thái thực thi
Trang 1-
TRẦN VIỆT DŨNG
NGHIÊN CỨU CẤU TRÚC NGẮT ĐÃ CÓ
VÀ ỨNG DỤNG VÀO VIỆC THIẾT KẾ CPU RISC 32BIT
Chuyên ngành : Kỹ thuật điện tử
LUẬN VĂN THẠC SĨ
Trang 2Cán bộ hướng dẫn khoa học : ThS TỐNG VĂN ON
Cán bộ chấm nhận xét 1 : PGS.TS LÊ TIẾN THƯỜNG
Cán bộ chấm nhận xét 2 : TS HOÀNG TRANG
Luận Văn Thạc Sĩ được bảo vệ tại HỘI ĐỒNG CHẤM BẢO VỆ LUẬN VĂN THẠC SĨ TRƯỜNG ĐẠI HỌC BÁCH KHOA TP HỒ CHÍ MINH
Trang 3Tp.HCM, ngày 02 tháng 12 năm 2010
NHIỆM VỤ LUẬN VĂN THẠC SĨ
I- TÊN ĐỀ TÀI:
NGHIÊN CỨU CẤU TRÚC NGẮT ĐÃ CÓ
VÀ ỨNG DỤNG VÀO VIỆC THIẾT KẾ CPU RISC 32-BIT
II- NHIỆM VỤ VÀ NỘI DUNG:
- Nghiên cứu các cấu trúc ngắt trong một vài bộ vi xử lý
- Thiết kế bộ vi xử lý RISC 32-bit có ngắt
- Cài đặt bộ vi xử lý RISC 32-bit trên FPGA
IV- NGÀY HOÀN THÀNH NHIỆM VỤ : 02/12/2010
V- HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN : ThS TỐNG VĂN ON
Nội dung và đề cương luận văn thạc sĩ đã được hội đồng chuyên ngành thông qua
Trang 4Tôi trân trọng gửi đến Thạc Sĩ Tống Văn On lời cảm ơn chân thành vì sự hướng dẫn tận tình và lòng biết ơn sâu sắc nhất vì những động viên và đóng góp ý kiến của Thầy trong suốt thời gian tôi thực hiện luận văn
Xin chân thành cảm ơn các Thầy, Cô trong khoa Điện – Điện Tử, đặc biệt là các Thầy Cô trong bộ môn Điển Tử và Viễn Thông, Trường Đại Học Bách Khoa TPHCM đã tận tình giảng dạy, hướng dẫn và giúp đỡ tôi trong quá trình học tập và hoàn thành luận văn này
Xin gửi lời cảm ơn sâu sắc nhất đến bạn Trần Hoàn người đã hổ trợ cho tôi bộ kit DE2 để tôi có thể hoàn thành được luận văn một cách tốt nhất
Sau cùng tôi xin được bày tỏ tình cảm đến các bạn cùng khóa đã trao đổi nhiều tài liệu và giúp đỡ tôi trong suốt thời gian học
TRẦN VIỆT DŨNG
Trang 5MỤC LỤC Lời cảm ơn!
Chương 1 : TỔNG QUAN VỀ CẤU TRÚC NGẮT TRONG HỆ VI XỬ LÝ 1
I Khái niệm và vai trò của ngắt trong hệ vi xử lý 1
II Điều khiển ngắt trong hệ vi xử lý 4
Chương 2: NGHIÊN CỨU MỘT VÀI CẤU TRÚC NGẮT I Cấu trúc ngắt trong họ vi điều khiển 8051 6
II Cấu trúc ngắt trong họ vi điều khiển PIC16 8
III Cấu trúc ngắt trong ARM 9
1 Giới thiệu 9
2 Các ngoại lệ của ARM 11
3 Các ngắt của ARM 14
IV Cấu trúc ngắt trong máy tính 16
1.Cấu trúc ngắt trong máy tính PC AT 16
2 Cấu trúc ngắt trong máy tính PC Pentium 17
V Kết luận 19
Chương 3 THIẾT KẾ CPU RISC 20
I Tổng quan về máy tính 20
II Tập lệnh 21
1 Tóm tắt tập lệnh 21
2 Định dạng lênh 22
3 Các chế độ định địa chỉ 24
III Đường dữ liệu đơn chu kỳ 23
1 Tìm nạp lệnh 23
2 Giải mã lệnh 24
3 Thực thi lệnh 24
4 Lắp ghép các thành phần đường dữ liệu 29
IV Đường dữ liệu đa chu kỳ 30
1 Tổng quan về đa chu kỳ 30
2 Đường dữ liệu đa chu kỳ 31
Trang 63 Tạo clock cho đường dữ liệu đa chu kỳ 32
4 Năm bước của lệnh 33
5 Điều khiển đa chu kỳ 38
V Hiện thực hóa thiết kế CPU RISC đa chu kỳ bằng ngôn ngữ VHDL 42
1 Thiết kế thư viện các hằng số 42
2 Thiết kế tập thanh ghi 42
3 Thiết kế ALU 43
4 Thiết kế đơn vị điều khiển 44
5 Thiết kế bộ nhớ 45
6 Thiết kế các thanh ghi 46
7 Thiết kế các bộ MUX 47
8 Kết quả mô phỏng CPU RISC thực thi các lệnh cơ bản 48
Chương 4: THIẾT KẾ CPU RISC CÓ NGẮT 49
I Sửa đổi CPU RISC 32 bit hổ trợ ngắt 49
II Thiết kế đơn vị điều khiển ngắt 56
III Tổng hợp CPU RISC 32 bít có điều khiển ngắt 59
Chương V: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI 60
I Kết quả thực hiện 60
II Hướng phát triển đề tài 60
Tài liệu tham khảo 61
Phụ lục 1: Kết quả mô phỏng 10 lệnh cơ bản
Phụ lục 2: Mã code VHDL
Trang 7DANH MỤC HÌNH VẼ
Hình 1.1 Sơ đồ khối một bộ xử lý 1
Hình 1.2 Sơ đồ khối một hệ vi xử lý đơn giản 2
Hình 1.3 Điều khiển ngoại vi bằng phương pháp hỏi vòng 2
Hình 1.4 Điều khiển ngoại vi bằng phương pháp kích ngắt 3
Hình 1.5 Minh họa việc thực thi chương trình có và không có ngắt xảy ra 4
Hình 1.6 Điều khiển ngoại vi bằng phương pháp kích ngắt có bộ điều khiển ngắt 5
Hình 2.1 Sơ đồ khối họ vi điều khiển 8051 6
Hình 2.2 Sơ đồ khối khối điều khiển ngắt của họ vi điều khiển 8051 7
Hình 2.3 Mô hình điều khiển ngắt trong vi điều khiển PIC16C84 8
Hình 2.4 Mô hình điều khiển ngắt trong vi điều khiển PIC16F887 8
Hình 2.5 Tập thanh ghi của ARM 7 10
Hình 2.6 Mô hình phân vùng bộ nhớ RAM động trong máy tính PC AT 16
Hinh 2.7 Bộ điều khiển ngắt cứng trong máy tính PC AT 17
Hình 2.8 Mô hình hệ thống ngắt trong máy tính Pentium nhiều CPU 19
Hình 3.1 Mô hình máy tính 20
Hình 3.2 Định dạng 3 khuôn dạng lệnh của MIPS 23
Hình 3.3 Lưu đồ các bước thực thi mã lệnh 25
Hình 3.4 Đường dữ liệu trong thời gian tìm nạp lệnh 26
Hình 3.5 Đường dữ liệu trong thời gian giải mã lệnh 26
Hình 3.6 Đường dữ liệu trong thời gian thực thi lệnh dạng R 27
Hình 3.7 Đường dữ liệu trong thời gian thực thi lệnh lw và sw 28
Hình 3.8 Đường dữ liệu trong thời gian thực thi lệnh rẽ nhánh 29
Hình 3.9 Đường dữ liệu trong thời gian thực thi lệnh nhảy 29
Hình 3.10 Đường dữ liệu đơn chu kỳ 30
Hình 3.11 Sơ đồ khối đường dữ liệu đa chu kỳ 31
Hình 3.12 Sơ đồ phân phối clock cho đường dữ liệu đa chu kỳ 32
Hình 3.13 Hoạt động của đường dữ liệu trong thời gian tìm nạp lệnh 34
Hình 3.14 Hoạt động của đường dữ liệu trong thời gian giải mã lệnh 35
Hình 3.15 Hoạt động của đường dữ liệu trong thời gian thực thi lệnh lw và sw 36 Hình 3.16 Hoạt động của đường dữ liệu trong thời gian truy cập bộ nhớ (lệnh Lw) 37
Trang 8Hình 3.17 Thực hiện máy trạng thái hữu hạn 38
Hình 3.18 Sơ đồ phần cứng của bộ xử lý dùng đường dữ liệu đa chu kỳ 40
Hình 3.19 Sơ đồ máy trạng thái cho bộ xử lý sử dụng đường dữ liệu đa chu kỳ 41
Hình 3.20 Sơ đồ phần cứng CPU RISC đa chu kỳ 42
Hình 3.21 Mô hình tập thanh ghi 43
Hình 3.22 Mô hình đơn vị ALU 44
Hình 3.23 Mô hình đơn vị điều khiển ALU 44
Hình 3.24 Mô hình đơn vị điều khiển MIPS 45
Hình 3.25 Mô hình bộ nhớ của MIPS 46
Hình 3.26 Mô hình các thanh ghi 47
Hình 3.27 Mô hình các bộ MUX 48
Hình 3.28 Kết quả mô phỏng các lệnh cơ bản của MIPS 48
Hình 4.1 Tập thanh ghi đã sửa đổi 50
Hình 4.2 Phân vùng bộ nhớ 51
Hình 4.3 Lưu đồ quá trình điều khiển xử lý ngắt 52
Hình 4.4 Sơ đồ phần cứng sau khi đã sửa đổi 53
HÌnh 4.5 Sơ đồ máy trạng thái sau khi đã sửa đổi 54
Hình 4.6 Kết quả mô phỏngbộ xử lý trung tâm đáp ứng ngắt 55
Hình 4.7 Sơ đồ khối đơn vị điều khiển ngắt 57
Hình 4.8 Kết quả mô phỏng việc test đáp ứng đơn vị điều khiển ngắt 58
Hình 4.9 Kết quả mô phỏng quá trình vào phục vụ ngắt của CPU RISC 59
Trang 9DANH MỤC BẢNG
Bảng 2.1 Các vector ngắt của họ vi điều khiển 8051 7
Bảng 2.2 Các chế độ hoạt động của ARM 9
Bảng 2.3 Bảng kết hợp các ngoại lệ với các chế độ làm việc của ARM 11
Bảng 2.4 Bảng vector ngoại lệ của ARM 12
Bảng 2.5 Bảng thứ tự ưu tiên của các ngoại lệ trong bộ xử lý ARM 13
Bảng 2.6 Các vector ngắt cừng trong máy tính PC AT 17
Bảng 3.1 Tâp lệnh cơ bản của MIPS 22
Bảng 3.2 Bảng giá trị các ngõ ra điều khiển đường dữ liệu 39
Bảng 3.3 Bảng giá trị của trạng thái kế 39
Trang 10DANH MỤC TỪ VIẾT TẮT
ACK Acknowledgement
ALU Arithmetic logic unit
APIC Advanced Programmable Interrupt Controller
ARM Acorn RISC Machine
CPSR Current Program Status Register
CPU Central Processing Unit
DMA Direct Memory Access
EOI End Of Interrupt
EPC Exception Program Counter
FIQ Fast Interrupt Request
I/O Input/Output
IMR Interrupt Mark Register
INTC Interrupt Controller
INTR Interrupt
MDR Memory Data Register
MIPS Microprocessor without Interlocked Pipeline Stages
RISC Reduced Instructions Set Computer
SPSR Saved Program Status Register
VHDL VHSIC hardware description language
VHSIC Very-high-speed integrated circuits
Trang 11Chương 1 TỔNG QUAN VỀ CẤU TRÚC NGẮT TRONG BỘ VI XỬ LÝ
I KHÁI NIỆM VÀ VAI TRÒ CỦA NGẮT TRONG BỘ VI XỬ LÝ
Bộ xử lý luôn được coi là trái tim của một hệ thống nhưng nếu chỉ có một
bộ xử lý không thì cũng sẽ không thể hoạt động được Mọi bộ xử lý đều phải kết hợp với rất nhiều các thiết bị bên ngoài được gọi là các thiết bị I/O (Input/Output) nhầm tạo ra sự tương tác trao đổi giữa bộ xử lý và thế giới bên ngoài
Hình 1.1 Sơ đồ khối một bộ xử lý
Bộ xử lý thường điều khiển các thiết bị I/O bằng cách ánh xạ bộ nhớ Một
số không gian của vùng nhớ cao được dùng để ánh xạ đến các thiết bị I/O Việc ghi dữ liệu đến hoặc đọc dữ liệu từ vùng nhớ này tương đương với việc ghi hoặc đọc dữ liệu từ thiết bị I/O tương ứng
Ngược lại, để các thiết bị I/O truyền thông với bộ xử lý có thể dùng một trong hai phương pháp là phương pháp hỏi vòng và phương pháp kích ngắt
Phương pháp hỏi vòng, bộ xử lý sẻ hỏi vòng tất cả các thiết bị I/O theo
chu kỳ để xác định nhu cầu được phục vụ của các thiết bị này Phương pháp này có ưu điểm là bộ xử lý nắm quyền chủ động nhưng đó cũng chính là nhược điểm của phương pháp này vì lúc đó bộ xử lý phải làm tất cả mọi việc
Bộ đếm chương trình (PC)
Thanh ghi lệnh (IR)
Đơn vị Giải mã lệnh và Điều khiển
Đơn vị
Số học và Logic (ALU)
Tập thanh ghi
CPU
Trang 12Hơn nữa với phương pháp này, tốc độ truy xuất dữ liệu phụ thuộc vào tốc
độ của ngoại vi Hiệu suất hoạt động của hệ thống rất thấp, nhất là khi hệ thống
có nhiều thiết bị I/O tốc độ chậm Thời gian dành cho việc lặp vòng và chờ sẽ
lớn, số lượng thiết bị I/O lớn và chênh lệch lớn về tốc độ thì phải tiêu tốn rất
nhiều thời gian
Phương pháp lập trình này dễ làm thất thoát dữ liệu đối với các thiết bị
không đồng bộ hoặc cần đáp ứng nhanh Lập trình hỏi vòng sẽ không đáp ứng
kịp
CPU
Bus hệ thống
I/O (1) I/O (2) I/O (n)
Hình 1.3 Điều khiển ngoại vi bằng phương pháp hỏi vòng
Bus địa chỉ
CPU
Thiết bị ngoại vi
Mạch giao tiếp ngoại vi
Bus dữ liệu
Bus điều khiển
Hình 1.2 Sơ đồ khối một hệ vi xử lý đơn giản
Trang 13Phương pháp kích ngắt, khi cần được phục vụ, thiết bị I/O tạo ra một
ngắt yêu cầu bộ xử lý phục vụ Ngắt là sự xảy ra của một điều kiện – một sự
kiện – làm cho chương trình hiện hành bị tạm ngừng trong khi điều kiện được
phục vụ bởi một chương trình xử lý ngắt Chương trình xử lý một ngắt được gọi
là chương trình phục vụ ngắt ISR (Interrupt Service Routine) hay quản lý ngắt
(Interrupt Handler) ISR được thực thi nhằm đáp ứng một ngắt và trong trường
hợp tổng quát thực hiện việc xuất nhập đối với một thiết bị Khi một ngắt xuất
hiện, việc thực thi chương trình tạm thời bị dừng và CPU thực hiện việc rẽ
nhánh đến trình phục vụ ngắt ISR CPU thực thi ISR để thực hiện một công
việc và kết thúc thực thi này khi gặp lệnh quay về Chương trình chính được
tiếp tục tại nơi bị dừng Ta có thể nói chương trình chính được thực thi ở mức
nền còn ISR được thực thi ở mức ngắt
Các ngắt đóng vai trò quan trọng trong việc thiết kế và hiện thực các ứng
dụng của bộ xử lý Ngắt xảy ra một cách ngẫu nhiên trong quá trình thực thi
chương trình, đáp ứng cho một tín hiệu phần cứng Ngắt không đồng bộ với
việc thực thi chương trình, do đó có thể được xử lý giữa các lệnh, đơn thuần là
hoãn và tiếp tục thực thi chương trình của người sử dụng Ngoài ra, trong một
số bộ xử lý, phần mềm có thể tạo ra các ngắt bằng cách thực thi một lệnh
Khi một ngắt xảy ra và được CPU chấp nhận, chương trình chính bị dừng
(bị ngắt) Các hoạt động sau đây xảy ra:
Lệnh hiện hành được thực thi hoàn tất
PC được lưu vào stack
Trạng thái ngắt hiện hành được lưu
Các ngắt bị chặn ở mức ngắt này
CPU
Bus hệ thống
I/O (1) I/O (2) I/O (n)
Hình 1.4 Điều khiển ngoại vi bằng phương pháp kích ngắt
Trang 14 PC được nạp địa chỉ vector của ISR (trình phục vụ ngắt: interrupt service routine)
ISR được thực thi
ISR được kết thúc bằng RETI (quay về từ trình phục vụ ngắt) Lệnh này
sẽ khôi phục lại giá trị cũ của PC từ stack và khôi phục trạng thái ngắt
cũ Việc thực thi chương trình chính tiếp tục từ nơi mà chương trình này rời khỏi
II ĐIỀU KHIỂN NGẮT TRONG BỘ VI XỬ LÝ
Khi có nhiều ngoại vi có khả năng yêu cầu ngắt, CPU phải có nhiều chân nhận tín hiệu yêu cầu ngắt vậy nếu có N ngoại vi – port I/O thì sao?
Khi có nhiều ngoại vi yêu cầu ngắt cùng một lúc thì CPU giải quyết ra sao?
Khi CPU đang chạy một ISR của một ngoại vi nào đó, nếu có một ngoại vi khác yêu cầu ngắt thì CPU giải quyết ra sao?
Tín hiệu yêu cầu ngắt có thể chọn là tín hiệu mức hoặc tín hiệu cạnh không?
Nếu một yêu cầu ngắt chưa được chấp nhận, yêu cầu ngắt này có được ghi nhận không hay phải yêu cầu lại?
Để giải quyết các vấn đề trên, người ta có khuynh hướng thiết kế phần cứng xử lý ngắt hay điều khiển ngắt gọi là bộ điều khiển ngắt INTC (interrupt controller)
CPU chỉ cần có một chân (thí dụ chân INTR) nhận tín hiệu yêu cầu ngắt từ INTC INTC nhận các tín hiệu yêu cầu ngắt của các ngoại vi, giải quyết vấn đề
a Thực thi chương trình không có ngắt
b Thực thi chương trình có ngắt xảy ra Hình 1.5 Minh họa việc thực thi chương trình có và không có ngắt xảy ra
Trang 15đăng ký ngắt, vấn đề ưu tiên, vấn đề ghi nhận ngắt chờ phục vụ sau mà không cần yêu cầu ngắt lại, vấn đề tín hiệu ngắt là mức hay cạnh, vấn đề cho phép ngắt hay cấm ngắt
INTC sẽ thông báo với CPU ngoại vi nào CPU cần phục vụ (nghĩa là CPU
sẽ chạy ISR nào), thường INTC cung cấp mã nhận dạng ngoại vi đến CPU qua bus dữ liệu
CPU
Bus hệ thống
I/O (1) I/O (2) I/O (n)
Hình 1.6 Điều khiển ngoại vi bằng phương pháp kích ngắt có bộ điều khiển ngắt
INTC
INTR
Trang 16Chương 2 NGHIÊN CỨU MỘT VÀI CẤU TRÚC NGẮT
I CẤU TRÚC NGẮT TRONG HỌ VI ĐIỀU KHIỂN
Họ vi điều khiển 8051 dùng một bộ điều khiển ngắt để giải quyết vấn đề
đăng ký ngắt, vấn đề ưu tiên, vấn đề ghi nhận ngắt chờ phục vụ sau mà không
cần yêu cầu ngắt lại, vấn đề tín hiệu ngắt là mức hay cạnh, vấn đề cho phép
ngắt hay cấm ngắt
Hình 2.1 Sơ đồ khối họ vi điều khiển 8051
Trang 17Hình 2.2 Sơ đồ khối khối điều khiển ngắt của họ vi điều khiển 8051
Bảng 2.1 Các vector ngắt của họ vi điều khiển 8051
Trang 18II CẤU TRÚC NGẮT TRONG HỌ VI ĐIỀU KHIỂN PIC16
Họ vi điều khiển PIC16 chỉ tồn tại một vector ngắt, tất cả các nguyên nhân ngắt xảy ra điều đưa chương trình nhảy đến vector ngắt đó (0004H) Trong trường hợp có nhiều ngắt xảy ra đồng thời hoặc ngắt xảy ra trong quá trình phục vụ ngắt khác thì việc quyết định thực hiện ngắt nào hoàn toàn do người lập trình quyết định
Hình 2.3 Mô hình điều khiển ngắt trong vi điều khiển PIC16C84
Hình 2.4 Mô hình điều khiển ngắt trong vi điều khiển PIC16F887
Trang 19III CẤU TRÚC NGẮT TRONG ARM
1 Giới thiệu
a.Các chế độ hoạt động của ARM
Bộ xử lý ARM thông thường có 7 chế độ hoạt động khác nhau, bao gồm:
Chế độ User (User mode): chế độ này được sử dụng trong trạng thái thực thi chương trình bình thường;
Chế độ FIQ (FIQ mode): chế độ này được sử dụng để đáp ứng nhanh và độ trễ đáp ứng thấp các yêu cầu ngắt nhanh, ví dụ như trong trường hợp truyền dữ liệu bằng phương thức DMA;
Chế độ IRQ (IRQ mode): chế độ này được sử dụng để phục vụ các ngắt thông thường;
Chế độ Supervisor (Supervisor mode): chế độ này được sử dụng khi đang trong quá trình hoạt động hệ thống hỗ trợ được cần đến khi chúng hoạt động giống như chế độ bảo vệ;
Chế độ Abort (Abort mode) chế độ này được chọn khi dữ liệu hoặc lệnh tìm nạp được bỏ qua;
Chế độ hệ thống (System mode): Chế độ dành riêng cho hoạt động của hệ thống;
Chế độ không được định nghĩa (Undefined mode): khi lệnh không được định nghĩa được tìm nạp
Sau đây là bảng tổng kết 7 chế độ hoạt động:
Chế độ của bộ xử lý Mô tả
User (usr) Chế độ thực thi chương trình bình thường
Supervisor(svc) Một chế độ được bảo vệ cho hoạt động của hệ thống
Abort (abt) Khi dữ liệu hoặc lệnh tìm nạp bị bỏ qua
Undefined (und) Dùng cho các lệnh không được định nghĩa
System (sys) Chế độ dành riêng cho hoạt động của hệ thống
Bảng 2.2 Các chế độ hoạt động của ARM
Trang 20b Tập thanh ghi ARM
Cấu trúc thanh ghi trong ARM phụ thuộc vào chế độ hoạt động Ví dụ,
chúng ta có 16 thanh ghi (32 bit) được đặt tên từ R0 đến R15 trong chế độ
usr
Các thanh ghi R0 đến R12 là các thanh ghi đa dụng, R13 là thanh ghi
con trỏ ngăn xếp (SP), R14 là thanh ghi liên kết (LR) và thanh ghi R15 là thanh ghi chương trình (PC), R16 là thanh ghi trạng thái chương trình hiện tại (CPSR) thanh ghi này được chia sẽ giữa tất cả các chế độ và nó được sử
dụng bởi nhân ARM ở mọi lúc và nó đóng vai trò chính trong việc xử lý chuyển đổi giữa các chế độ
Trong một vài chế độ 16 thanh ghi này được nhìn thấy và có thể truy xuất được và trong một số khác thì lại không nhìn thấy và không truy xuất được Ngoài ra, có một số thanh ghi hiện hữu với cùng tên nhưng có địa chỉ
vật lý khác nhau trong bộ nhớ được gọi là banked Sự tồn tại các banked
thanh ghi làm giảm đi sự cố gắng cần thiết khi việc chuyển ngữ cảnh được yêu cầu, bởi vì chế độ mới đã có không gian thanh ghi vật lý riêng của nó và không cần lưu trữ các giá trị thanh ghi cũ của chế độ trước đó
Vì thế trong ARM7 chúng ta có tổng cộng 37 thanh ghi và sau đây là hình minh hoạ tập thanh ghi của ARM7
Hình 2.5 Tập thanh ghi của ARM 7
Trang 21Như chúng ta thấy các thanh ghi banked được đánh dấu bởi màu xám
Chúng ta chú ý rằng chế độ FIQ có nhiều thanh ghi banked nhất, điều này
làm tăng tốc việc chuyển ngữ cảnh bởi vì sẽ không cần thiết để chứa nhiều
thanh ghi khi chuyển đến chế độ FIQ Chúng ta có thể chỉ cần chứa các giá
trị của các thanh ghi từ R0 đến R7 nếu trình điều khiển FIQ cần sử dụng các
thanh ghi này còn các thanh ghi r8_fiq đến r14_fiq là các thanh thi dành
riêng cho chế độ FIQ và không thể truy cập được bởỉ bất kỳ chế độ nào khác
( bởi vì nó trở thành ẩn trong các mode khác)
2 Các ngoại lệ của ARM
Một ngoại lệ là một điều kiện bất kỳ cần phải dừng việc thực thi lệnh bình
thường lại Một ví dụ của các ngoại lệ là trạng thái reset nhân ARM, lỗi trong
việc tìm nạp lệnh hoặc truy cập bộ nhớ, khi một ngắt ngoài được tăng lên hoặc
khi một lệnh ngắt mềm được thực thi Luôn luôn có phần mềm kết hợp với mỗi
ngoại lệ, phần mềm này được gọi là trình điều khiển ngoại lệ Mỗi ngoại lệ của
ARM sẽ gây ra cho lõi ARM đi vào một chế độ nhất định một cách tự động
Ngoài ra, chúng ta có thể chuyển giữa các chế độ khác nhau một cách nhân
công bằng cách hiệu chỉnh thanh ghi CPSR Bảng sau tổng kết các ngoại lệ
khác nhau và sự kết hợp các chế độ của hoạt động trong bộ xử lý ARM
Ngoại lệ Chế độ
Yêu cầu ngắt IRQ
Đây là bảng chỉ dẫn để lõi ARM rẽ nhánh khi một ngoại lệ xảy ra
Những chỉ dẫn này được đặt trong một phần đặt biệt trong bộ nhớ và địa chỉ
của nó được liên kết đến các loại ngoại lệ Nó luôn chứa một lệnh rẽ nhánh
một trong các dạng sau:
B<Add>
Lệnh này được sử dụng để rẽ nhánh đến vị trí bộ nhớ với địa chỉ
“Add” so với địa chỉ hiện tại của pc
Trang 22 MOV pc, #immediate Tải vào thanh ghi chương trình giá trị ”immediate”
Địa chỉ Ngoại lệ Chế độ vào
Bảng 2.4 Bảng vector ngoại lệ của ARM
Chúng ta có thể chú ý trong bảng vector này trình điều khiển ngoại lệ FIQ được đặt ở cuối của bảng vector, vì thế không cần lệnh rẽ nhánh ở đó;
chúng ta có thể đặt trình điều khiển ngoại lệ trực tiếp ở đây vì thế sẽ bắt đầu
nhanh hơn bằng cách bỏ qua thời gian để rẽ nhánh
Trang 23b Thứ tự ưu tiên của ngoại lệ
Bởi vì các ngoại lệ có thể xảy ra đồng thời vì thế chúng ta có thể có nhiều hơn một ngoại lệ xảy ra tại một thời điểm, bộ điều khiển phải có sự ưu
tiên cho mỗi ngoại lệ để nó có thể quyết định ngoại lệ nào là quan trong
hơn Sau đây là bảng chỉ ra các ngoại lệ khác nhau có thể xảy ra trong ARM
và độ ưu tiên của chúng:
Bảng 2.5 Bảng thứ tự ưu tiên của các ngoại lệ trong bộ xử lý ARM
Chúng ta nên chú ý đến sự khác nhau về độ ưu tiên của các ngoại lệ (khi nhiều ngoại lệ cùng hợp lệ tại cùng một thời điểm) và mã của trình điều
khiển ngoại lệ thực sự Các trình điều khiển ngoại lệ, chính bản thân chúng
cũng có thể bị ngắt bởi các trình điều khiển ngoại lệ khác, và vì thế chúng ta
có 2 bit gọi là bit I và bit F Bit F xác định các ngoại lệ đó có thể được xếp
hàng hay không, khi bit này là 1 thì sẽ không có ngoại lệ nào được phép xảy
ra nữa Và bit I cũng tương tự nhưng đối với các ngoại lệ IRQ Các lệnh
không được định nghĩa và các ngắt phần mềm (SWI) không thể xảy ra đồng
thời bởi vì chúng đều được gây ra bởi một lệnh đi vào tầng thực thi của
đường ống lệnh của ARM, vì thế chúng tự loại trừ lẫn nhau và vì thế chúng
có cùng độ ưu tiên
c Vào và thoát khỏi một trình điều khiển ngoại lệ
Sau đây là các bước để bộ xử lý ARM điều khiển một ngoại lệ
Ép buộc thanh ghi PC nạp lệnh kế từ bảng vector ngoại lệ
Bây giờ khi trình điều khiển đang chạy trong chế độ tương ứng với ngoại lệ xãy ra
Trang 24 Khi trình điều khiển thực hiện xong, thanh ghi CPSR được phục hồi từ giá trị được lưu trong thanh ghi SPSR
Thanh ghi PC được cập nhật với giá trị của (LR- offset) và giá trị offset phụ thuốc vào loại ngoại lệ
Và khi quyết định ra khỏi trình điều khiển ngoại lệ thì các bước sau xãy ra:
Di chuyển thanh ghi liên kết LR( trừ đi một offset) vào thanh ghi PC;
Sao chép thanh ghi SPSR ngược vào thanh ghi CPSR, điều này sẽ thay đổi lại chế độ trước đó một cách tự động
Xoá cờ cấm ngắt (nếu nó đang được set)
3 Các ngắt của ARM
Có hai loại ngắt có giá trị trong bộ xử lý ARM Loại thứ nhất là ngắt gây
ra bởi các sự kiện bên ngoài từ các phần cứng ngoại vi và loại thứ hai là các lệnh ngắt từ phần mềm (SWI)
Lõi ARM chỉ có một chân FIQ, đó là tại sao một bộ điều khiển ngắt ngoài luôn được sử dụng để hệ thống có thể có nhiều hơn một nguồn ngắt, độ ưu tiên của các ngắt này do bộ điều khiển ngắt ngoài quyết định và khi ngắt FIQ xãy ra
và trình điều khiển nhận diện một trong các ngắt ngoại và sẽ xử lý nó
b Ngoại lệ IRQ và FIQ
Cả hai ngoại lệ xãy ra khi mặc nạ ngắt trong trong thanh ghi đặc biệt CPSR bị xoá Bộ xử lý ARM sẽ tiếp tục thực thi lệnh hiện tại trong đường ống trước khi điều khiển ngắt Phần cứng bộ điều khiển sẽ đi qua các thủ tục chuẩn sau:
Trang 25 Bộ điều khiển sẽ chuyển đến một chế độ đặc biệt phụ thuộc vào ngắt nhận được
Thanh ghi CPSR của chế độ trước đó được lưu vào thanh ghi SPSR của chế độ mới
Thanh ghi PC được lưu trong thanh ghi LR của chế độ mới
Các ngắt bị cấm chỉ riêng IRQ hoặc cả IRQ lẫn FIQ
Bộ xử lý rẽ nhánh đến một ngõ vào nhất định trong bảng vector
Cho phép hoặc không cho phép các ngoại lệ FIQ và IRQ được thực hiện theo 3 bước Đầu tiên tải nội dung của thanh ghi CPSR sau đó thiết lập
hoặc xoá các bit mặc nạ theo yêu cầu, tiếp theo là sao chép phần nội dung đã
chỉnh sửa trở lại thanh thi CPSR
IV CẤU TRÚC NGẮT TRONG MÁY TÍNH
1 Cấu trúc ngắt trong máy tính PC AT
Hình 2.6 Mô hình phân vùng bộ nhớ RAM động trong máy tính PC AT
Vùng 1 KB (1024 byte) được chia thành 256 ô nhớ, mỗi ô nhớ chiếm 4 byte gọi là vector ngắt ta có bảng vector ngắt
Nội dung mỗi ô nhớ là địa chỉ của ISR hoặc trỏ đến một bảng nhảy phụ, mỗi vector của bảng nhảy này chứa địa chỉ của ISR hoặc trỏ đến bảng nhảy phụ
thứ hai
256 vector ngắt của bảng vector ngắt được đánh số từ 00H đến FFH
Các ngắt cứng chiếm những vector ngắt từ 08H đến 0FH và từ 70H đến 77H sử dụng 2 bộ điều khiển ngắt INTC8259A được cấu hình như hình 2.7
Còn lại là trình xử lý ngoại lệ, trình xử lý ngắt mềm (gọi bằng lệnh INT xxH) của BIOS và DOS
Vùng 1 MB
Bộ nhớ RAM động
Thấp
16 segmentnhớ mỗi segment
64 KB (đánh
Segment 0Vùng nhớ 1 MB
Vùng 1 KB Segment 0
> 1 MB
Trang 26IR8IR9IR10 IR11 IR12 IR13 IR14 IR15
INT
INTINTA
INTA
INTA
CPU
Các thiết bị ngoại vi – I/O port
CAS0-2
CAS0-2
Mã 8-bit của chủ00001xxx: trong đó xxx = 000 111 Vậy mã 8-bit là: 08H 0FH Chuû
Mã 8-bit của tớ01110xxx: trong đó xxx = 000 111 Vậy mã 8-bit là: 70H 77H
Hinh 2.7 Bộ điều khiển ngắt cứng trong máy tính PC AT
Bảng 2.6 Các vector ngắt cừng trong máy tính PC AT
Trang 272 Cấu trúc ngắt trong máy tính PC Pentium
Các ngắt và các ngoại lệ sẽ buộc chuyển việc thực thi chương trình hoặc tác vụ hiện đang chạy đến thủ tục hoặc tác vụ đặc biệt gọi là trình xử lý
Các ngắt thường xảy ra ở những thời điểm ngẫu nhiên trong thời gian thực thi chương trình, đáp ứng các tín hiệu từ phần cứng Các ngắt được sử dụng để xử lý những sự kiện bên ngoài đến CPU, chẳng hạn yêu cầu phục vụ thiết bị ngoại vi
Phần mềm cũng có thể tạo ra ngắt bằng cách thực thi lệnh INT xxH Các ngoại lệ xảy ra khi CPU phát hiện điều kiện lỗi lúc thực thi lệnh, chẳng hạn như chia cho 0
CPU phát hiện nhiều điều kiện lỗi bao gồm vi phạm bảo vệ, lỗi trang, lỗi máy bên trong
Kiến trúc kiểm tra máy của Pentium còn cho phép các ngoại lệ kiểm tra máy được tạo ra khi có lỗi phần cứng bên trong và lỗi bus được phát hiện
Các nguyên nhân ngắt: các ngắt ngoài (được tạo ra bởi phần cứng) còn gọi là ngắt cứng
Các ngắt tạo ra do phần mềm còn gọi là ngắt mềm
Các ngắt ngoài được nhận thông qua các chân trên CPU hoặc thông qua bus nối tiếp cục bộ APIC Các chân ngắt trên Pentium là LINT[1:0], được nối với APIC cục bộ Khi APIC không được phép, các chân này được cấu hình thành INTR# và NMI# Việc xác lập chân INTR# báo cho CPU biết ngắt ngoài xảy ra và CPU đọc từ bus hệ thống con số của vector ngắt do bộ điều khiển ngắt ngoài (như là 8259A) cung cấp
Việc xác lập chân NMI# báo hiệu cho CPU ngắt không che được
Khi APIC cục bộ được phép, các chân LINT[1:0] có thể được lập trình thông qua bảng vector của APIC để được kết hợp với các vector ngắt hoặc ngoại lệ của CPU
APIC cục bộ của CPU có thể được nối với APIC I/O dựa trên hệ thống
Ở đây, các ngắt ngoài được nhận ở các chân của APIC I/O có thể được định hướng đến APIC cục bộ thông qua bus nối tiếp APIC (các chân PICD[1:0]) APIC I/O xác định con số vector của ngắt và truyền số này đến APIC cục bộ, Khi hệ thống chứa nhiều bộ xử lý, các bộ xử lý cũng có thể truyền các ngắt đến
bộ xử lý khác thông qua bus nối tiếp APIC
Các CPU Intel 486 và Pentium đời trước không có APIC cục bộ trên chip CPU hoạt động như máy tính PC AT
Một ngắt ngoài bất kỳ được phân phối đến CPU thông qua chân INTR# hoặc thông qua APIC cục bộ được gọi là ngắt cứng che được
Trang 28Các ngắt cứng che được có thể được phân phối thông qua chân INTR# bao gồm mọi vector ngắt được định nghĩa bởi kiến trúc Intel từ 0 đến 255 (00H đến FFH)
Các ngắt cứng che được có thể được phân phối thông qua APIC cục bộ bao gồm các vector ngắt từ 16 đến 255 (10H đến FFH)
Lệnh INT xxH cho phép các ngắt được tạo ra từ bên trong phần mềm bằng cách cung cấp con số vector ngắt làm toán hạng Các ngắt mềm không thể được lập mặt nạ
Nguyên nhân của các ngoại lệ: lỗi chương trình do CPU phát hiện, được tạo ra bởi phần mềm, kiểm tra máy
APIC cục bộ có hai nhiệm vụ chính:
- Xử lý các ngắt ngoài cục bộ và các ngắt bên trong cục bộ do phần mềm tạo ra
- Trong hệ thống đa xử lý, truyền thông với chip APIC I/O bên ngoài APIC I/O bên ngoài nhận các sự kiện ngắt bên ngoài từ hệ thống
và các ngắt liên bộ xử lý (CPU) từ các bộ xử lý trên bus hệ thống và phân phối chúng đến các bộ xử lý trên bus hệ thống APIC I/O là một phần của chipset hệ thống của Intel
Các nguyên nhân ngắt của APIC cục bộ: từ thiết bị I/O bên ngoài nối với các chân ngắt cục bộ, thông điệp bus từ APIC I/O, thông điệp bus từ APIC cục
bộ của các bộ xử lý khác, các cơ chế phần cứng và phần mềm của APIC cục bộ
Hình 2.8 Mô hình hệ thống ngắt trong máy tính Pentium nhiều CPU
Trang 29V KẾT LUẬN
Từ một số trúc ngắt đã tìm hiểu như trên chúng ta có thể rút ra một kết luận là
có một xu hướng thiết kế CPU có ngắt là thiết kết một bộ xử lý đáp ứng được một ngõ vào ngắt kết hợp với việc thiết kế một bộ điều khiển ngắt để xử lý các vấn đề còn lại như đăng ký ngắt, xử lý ưu tiên,…
Vì thế phần tiếp theo của quyển luận văn này sẽ đi sâu vào tìm hiều và thiết kế một bộ xử lý Bước tiếp theo là phát triển bộ xử lý này để đáp ứng được yêu cầu ngắt và đồng thời sẽ thiết kế một đơn vị điều khiển ngắt để kết hợp với bộ xử lý để tạo thành một CPU hoàn chỉnh đáp ứng được ngắt
Trang 30Chương 3
THIẾT KẾ CPU RISC
I TỔNG QUAN VỀ MÁY TÍNH
Một máy tính có thể được chia thành 5 phần:
1 Các thiết bị nhập (input devices) mang dữ liệu từ thế giới bên ngoài vào trong máy tính
2 Dữ liệu này được giữ trong bộ nhớ của máy tính cho đến khi
3 Đường dữ liệu (datapath) yêu cầu và xử lý chúng
4 Hoạt động của đường dữ liệu được điều khiển bởi bộ điều khiển
(controller) của máy tính
Toàn bộ công việc được thực hiện bởi máy tính sẽ không mang lại lợi ích gì cho ta trừ khi ta đưa dữ liệu trở ra thế giới bên ngoài
5 Đưa dữ liệu trở ra thế giới bên ngoài là công việc của các thiết bị xuất (output devices)
5 phần trên có thể được phân lại thành các đơn vị như hình 3.1
Thiết bị nhập Thiết bị xuất
Trang 31- Liên kết nối các đơn vị chức năng sao cho lệnh có thể được thực thi theo yêu
cầu
- Nạp dữ liệu từ bộ nhớ và lưu dữ liệu vào bộ nhớ
Quá trình hoạt động của một bộ vi xử lý như sau:
i Đầu tiên, các thiết bị nhập mang mã đối tượng và dữ liệu đầu vào từ thế giới
bên ngoài vào trong hệ vi xử lý thông qua thiết bị nhập Input
ii Tiếp theo, các mã đối tượng và dữ liệu này được lưu giữ trong bộ nhớ
iii Khi bộ xử lý yêu cầu và xử lý chúng
- Bộ xử lý tìm nạp lệnh từ bộ nhớ
- Đơn vị điều khiển của bộ xử lý sẽ giải mã lệnh để biết cần bảo đường dữ liệu
thực hiện điều gì
- Đường dữ liệu thực thi lệnh dưới sự hướng dẫn của đơn vị điều khiển
iv Vào lúc hoàn tất chương trình, dữ liệu xuất được lưu vào trong bộ nhớ
v Thiết bị xuất “xuất” dữ liệu trong bộ nhớ ra môi trường bên ngoài
Bảng tóm tắt các lệnh cơ bản của MIPS như sau:
logical
0 & 00 sll $s1, $s2, 4 $s1 = $s2 << 4
shift right logical 0 & 02 srl $s1, $s2, 4 $s1 = $s2 >> 4 (fill with zeros) shift right
arithmetic 0 & 03 sra $s1, $s2, 4 $s1 = $s2 >> 4 (fill with sign bit) and 0 & 24 and $s1, $s2, $s3 $s1 = $s2 & $s3
Trang 32or 0 & 25 or $s1, $s2, $s3 $s1 = $s2 | $s3 nor 0 & 27 nor $s1, $s2, $s3 $s1 = not ($s2 | $s3) and immediate c andi $s1, $s2,
5 bne $s1, $s2, L if ($s1 !=$s2) go to L
set on less than immediate
a slti $s1, $s2, 100 if ($s2<100) $s1=1;
else $s1=0
set on less than 0 & 2a slt $s1, $s2, $s3 if ($s2<$s3) $s1=1; else $s1=0 Uncond
jump jump jump register 0 & 08 jr $t1 2 j 2500 go to 10000 go to $t1
Bảng 3.1 Tâp lệnh cơ bản của MIPS
Ở đây CPU RISC-32 bit mà ta thiết kế chủ yếu thực hiện các lệnh: lw,
sw, beq, add, sub, and, or, j, và jr
Trang 332 Định dạng lệnh
Tập lệnh của RISC có chiều dài cố định 32 bit và 32 thanh ghi đa năng 32
bit Thanh ghi 0 luôn chứa giá trị 0 Một từ nhớ mở rộng 32-bit
RISC có 3 khuôn dạng lệnh (instruction format) Chỉ có các khuôn dạng I
như LOAD và STORE mới tham chiếu toán hạng bộ nhớ Các lệnh khuôn dạng
R, như ADD, AND hoặc OR chỉ thực hiện các thao tác trên dữ liệu trong các
thanh ghi
Chúng yêu cầu hai toán hạng thanh ghi Rs và Rt Kết quả của thao tác
được lưu trong thanh ghi Rd Các trường chức năng (function) và dịch (shift)
của khuôn dạng R được sử dụng làm trường opcode (mã thao tác) mở rộng Các
lệnh khuôn dạng J bao gồm các lệnh nhảy
Chúng ta có 3 khuôn dạng lệnh
Hình 3.2 Định dạng 3 khuôn dạng lệnh của MIPS
Các lệnh logic và số học (dạng R)
Trong đó:
OP : Opcode chỉ ra thao tác cần thực hiện
rs : địa chỉ của toán hàng nguồn register thứ nhất
rt : địa chỉ của toán hạng nguồn register thứ hai
rd : địa chỉ của toán hạng đích register destination
Shamt : Shift amount (dành cho các lệnh dịc bit)
funct : function, mã chọn biến thể cụ thể của thao tác được chỉ ra trong
Trang 34 Các lệnh chuyển dữ liệu (dạng I)
Trong đó:
OP : Opcode chỉ ra thao tác cần thực hiện
rs : địa chỉ của toán hàng nguồn register thứ nhất
rt : địa chỉ của toán hạng nguồn register thứ hai
Offset : giá trị 16 bit
Các lệnh rẽ nhánh (dạng J)
Trong đó:
OP : Opcode chỉ ra thao tác cần thực hiện
3 Các chế độ định địa chỉ:
Định địa chỉ thanh ghi: operand ở trong thanh ghi
Định địa chỉ nền: operand ở vị trí nhớ có địa chỉ là tổng của thanh ghi và hằng 16 bit chứa trong lệnh
Định địa chỉ trực tiếp (hay tức thời): operand là hằng 16 bit chứa trong lệnh
Định địa chỉ tương đối PC: địa chỉ của lệnh là tổng của PC và hằng 16 bit chứa trong lệnh
Trang 35Định địa chỉ giả trực tiếp: địa chỉ của lệnh là hằng 26 bit chứa trong lệnh nối với 4 bit cao của PC
III ĐƯỜNG DỮ LIỆU ĐƠN CHU KỲ
Như đã khảo sát ở trên, ta thấy để một mã lệnh được thực hiện phải trải qua các
giai đoạn : Tìm nạp, giải mã và thực thi lệnh
1 Tìm nạp lệnh
Việc tìm nạp lệnh bao gồm : Tìm nạp một mã lệnh từ bộ nhớ lệnh và cập nhật giá trị thanh ghi bộ đếm chương trình (PC : Program Counter) để chỉ đến lệnh kế
Ở đây chúng ta thấy, thanh ghi PC được cập nhật sau mỗi chu kỳ clock nên chúng ta không cần phải có tín hiệu điều khiển ghi Tương tự với thanh ghi PC, bộ nhớ lệnh cũng được truy xuất sau mỗi chu kỳ nên cũng không cần tín hiệu điều khiển đọc rõ ràng
Trang 362 Giải mã lệnh
Việc giải mã lệnh bao gồm :
- Truyền Opcode của lệnh đã tìm nạp và các bit của trường chức năng (funct) đến đơn vị điều khiển
- Do chưa tại thời điểm này lệnh chưa được giải mã nên chưa biết đây là lệnh
gì nên chúng ta phải đọc hai giá trị từ tập thanh ghi dựa vào các địa chỉ được chứa trong lệnh để dự phòng khi cần dùng tới
Instruction
Write Data
Read Addr 1 Read Addr 2 Write Addr
Register File
Read Data 1
Read Data 2
Control Unit
Rs
Rt
Hình 3.5 Đường dữ liệu trong thời gian giải mã lệnh
Read Address Instruction
Instruction Memory Add
PC
4
Hình 3.4 Đường dữ liệu trong thời gian tìm nạp lệnh
Trang 373 Thực thi lệnh
a Thực thi dạng lệnh R
Thực hiện các thao tác Op và Funtc trên các giá trị trong Rs và Rt Sau đó ghi giá trị vào thanh ghi Rd
Lưu ý : Tập thanh ghi không được ghi mỗi chu kỳ vì thế mà chúng ta cần
phải có tín hiệu điều khiển ghi rõ ràng
b Thực thi dạng lệnh I
Thực thi lệnh LW và SW
Lệnh LW và SW cần phải tính địa chỉ bộ nhớ bằng cách cộng thanh ghi nền (trong Rs) với trường Offset 16 bit có dấu trong lệnh Thanh ghi nền được đọc từ tập thanh ghi trong thời gian giải mã Giá trị Offset 16 bit có dấu được
mở rộng dấu thành 32 bit có dấu
Với lệnh LW: Giá trị đọc được từ bộ nhớ dữ liệu sẽ được lưu vào tập thanh ghi
Reg[Rt] = MEM[Reg[Rs] + Sign-Extend(Offset)]
Với lệnh SW : Giá trị đọc được từ tập thanh ghi trong thời gian giải mã được ghi vào bộ nhớ dữ liệu
Register File
Read Data 1
Read Data 2
ALU overflow zero
Trang 38MEM [Reg[Rs]+ Sign-Extend(Offset)] = Reg[Rt]
Lưu ý: Việc đọc/ghi ra/vào bộ nhớ dữ liệu chỉ được thực hiện trong khi thực hiện
lệnh LW/SW nên chúng ta cần phải có tín hiệu điều khiển đọc/ghi tõ ràng
Thực thi các lệnh rẽ nhánh
Trước tiên phải so sánh “bằng” các toán hạng đọc từ tập thanh ghi trong thời gian
giải mã (các giá trị rs and rt) (ngõ ra zero của ALU)
Kế đến phải tính địa chỉ đích rẽ nhánh bằng cách cộng PC đã cập nhật với trường offset 16-bit có dấu được mở rộng dấu trong lệnh
Instruction
Write Data
Read Addr 1Read Addr 2Write Addr
Register File
Read Data
Read Data
ALU
overflowzero
ALU RegWrite
Data Memory
Addres
Write
Read
Sign Extend
Trang 39c Thực thi dạng lệnh J
Các lệnh nhảy phải thay thế 28 bit thấp của PC bằng 26 bit thấp của lệnh đã tìm nạp được dịch trái 2 bit
Hình 3.9 Đường dữ liệu trong thời gian thực thi lệnh nhảy
Instruction
Write Data
Read Addr 1 Read Addr 2 Write Addr
Register File
Read Data 1
Read Data 2
ALU
zero ALU
Sign Extend
16 32
Shift left 2
(to branch control logic)
Hình 3.8 Đường dữ liệu trong thời gian thực thi lệnh rẽ nhánh
Read Address Instruction
Instruction Memory Add
PC
4
Shift left 2
Jump address
26
4
28
Trang 40dụ như bộ ALU và bộ nhớ ) Hơn nữa, việc dùng chung các thành phần đường dữ liệu giữa hai loại lệnh khác nhau sẽ cần các mạch ghép kênh ở ngõ vào của các thành phần dùng chung cùng với các đường điều khiển để thực hiện việc chọn lựa
Thời gian chu kỳ được xác định bởi chiều dài của đường dẫn dài nhất
Hình 3.10 Đường dữ liệu đơn chu kỳ
Mặc dù đường dữ liệu đơn chu kỳ rất đơn giản, dễ tiếp cận nhưng nó lại không được sử dụng vì nó rất chậm Các chu kỳ clock phải có cùng chiều dài cho tất cả các lệnh Chính điều này đã gây ra sự kém hiệu quả trong việc sử dụng chu kỳ clock Vì chu kỳ clock phải đủ dài để thực hiện được lệnh dài nhất, nên khi thực hiện các lệnh ngắn hơn sẽ gây ra sự lãng phí
Hơn nữa, do phải sao chép một số các đơn vị chức năng (ALU, Bộ nhớ,…) do trong cùng một chu kỳ một đơn vị chức năng không thể được dùng chung trong cùng một chu kỳ clock nên có thể gây lãng phí về mặt diện tích
Read
Address Instr[31-0]
Instruction Memory Add
PC
4
Write Data
Read Addr 1 Read Addr 2 Write Addr
Register File
Read Data 1
Read Data 2
ALU
ovf zero
RegWrite
Data Memory
16 32
MemtoReg ALUSrc
Shift left 2
Add
PCSrc
RegDst
ALU control
1
1 1
Control Unit