Bài giảng Vi xử lý nâng cao - Phần 1: Thiết kế CPU RISC - Bài 08: Đường dữ liệu đơn chu kỳ của MIPS
Ta đã sẵn sàng khảo sát việc thực hiện MIPS.
Được đơn giản để chỉ chứa:
các lệnh tham chiếu bộ nhớ: lw, sw
các lệnh số học - logic: add, addu, sub, subu,
and, or, xor, nor, slt, sltu
các lệnh số học–logic trực tiếp: addi, addiu, andi,
ori, xori, slti, sltiu
các lệnh luồng điều khiển: beq, j
Thực hiện chung:
sử dụng bộ đếm chương trình (PC) để
cung cấp địa chỉ lệnh và tìm nạp lệnh
từ bộ nhớ (và cập nhật PC).
Giải mã lệnh (và đọc các thanh ghi).
Thực thi lệnh.
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Vi xử lý nâng cao - Phần 1: Thiết kế CPU RISC - Bài 08: Đường dữ liệu đơn chu kỳ của MIPS", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.
File đính kèm:
- bai_giang_vi_xu_ly_nang_cao_phan_1_thiet_ke_cpu_risc_bai_08.pdf
- Lec8.ppt
Nội dung text: Bài giảng Vi xử lý nâng cao - Phần 1: Thiết kế CPU RISC - Bài 08: Đường dữ liệu đơn chu kỳ của MIPS
- Bài giảng “Vi xử lý nâng cao” Phần 1: Thiết kế CPU RISC Bài 08: Đường dữ liệu đơn chu kỳ của MIPS 1
- Trừu tượng việc thực hiện Hai loại đơn vị chức năng : các thành phần hoạt động trên giá trị dữ liệu (tổ hợp). các thành phần chứa trạng thái (tuần tự). Write Data Instruction Address Read Memory Register Reg Addr Data Data Read Data PC Address Instruction File ALU Memory Reg Addr Read Write Data Data Reg Addr Hoạt động đơn chu kỳ. Mô hình bộ nhớ chia tách (Harvard ) - một bộ nhớ cho lệnh và một bộ nhớ cho dữ liệu. 3
- Nhắc lại : các thành phần trạng thái Mạch chốt SR (set-reset) R S Q(t+1) !Q(t+1) R Q 1 0 0 1 0 1 1 0 0 0 Q(t) !Q(t) !Q S 1 1 0 0 Mạch chốt D nhạy với mức clock Q D clock !Q D Q Mạch chốt là trong suốt (Q = D) khi clock ở mức cao (sao chép ngõ vào đến ngõ ra). 5
- Nhắc lại : các thành phần trạng thái (tt) Giải pháp là sử dụng các flipflop thay đổi trạng thái (Q) chỉ theo cạnh clock (chủ-tớ). D D D Q D Q Q D-latch D-latch clock clock clock !Q clock !Q !Q Q chủ (D-latch thứ nhất ) sao chép ngõ vào khi clock ở mức cao (tớ (D-latch thứ hai ) bị khóa trong trạng thái nhớ và ngõ ra không thay đổi ). tớ sao chép chủ khi clock xuống mức thấp (chủ lúc này bị khóa trong trạng thái nhớ nên những thay đổi ở ngõ vào không được nạp vào trong mạch chốt D chủ). Ta cần xử lý thời gian thiết lập và thời gian giữ của flipflop. 7
- Nhắc lại : Mạch chốt và flipflop Ngõ ra đáp ứng được giá trị đã lưu bên trong thành phần. Thay đổi trạng thái (giá trị) dựa trên clock. Mạch chốt : ngõ ra thay đổi mỗi khi các ngõ vào thay đổi và clock được xác lập (hệ phương pháp nhạy với mức) - Ràng buộc định thời hai phía. Flipflop : ngõ ra chỉ thay đổi theo cạnh của clock (hệ phương pháp kích cạnh) - Ràng buộc một phía. Hệ phương pháp tạo clock xác định lúc nào các tín hiệu có thể được đọc hoặc được ghi – KHÔNG NÊN đọc một tín hiệu ở cùng thời điểm tín hiệu này đang được ghi. 9
- Tìm nạp lệnh Việc tìm nạp lệnh bao gồm việc đọc lệnh từ bộ nhớ lệnh. cập nhật giá trị của PC bằng địa chỉ của lệnh kế tiếp (tiếp theo sau). clock Add 4 Fetch PC = PC+4 Instruction Memory Exec Decode Read PC Instruction Address PC được cập nhật mỗi chu kỳ clock , do vậy ta không cần tín hiệu “điều khiển ghi” rõ ràng. Bộ nhớ lệnh được đọc mỗi chu kỳ clock , do vậy ta không cần tín hiệu “điều khiển đọc” rõ ràng. 11
- Đọc các thanh ghi “để đề phòng” Lưu ý rằng cả hai port đọc của RegFile đều tích cực đối với tất cả lệnh trong thời gian của chu kỳ giải mã (Decode), sử dụng các địa chỉ của trường rs và rt của lệnh. Do lệnh chưa được giải mã, ta không biết lệnh là lệnh gì ! Để đề phòng lệnh sử dụng các giá trị từ RegFile để “hoạt động trước” bằng cách đọc hai toán hạng nguồn. Các lệnh nào sử dụng các giá trị của RegFile? Cũng vậy , mọi lệnh (ngoại trừ j) sử dụng ALU sau khi đọc các thanh ghi. Tại sao ? Tham chiếu bộ nhớ ? Số học ? Luồng điều khiển? 13
- Khảo sát lệnh slt Nhớ rằng lệnh slt có dạng R slt $t0, $s0, $s1 # if $s0 < $s1 # then $t0 = 1 # else $t0 = 0 1 (hoặc 0) đến từ đâu để lưu vào trong $t0 của tập thanh ghi ở cuối chu kỳ thực thi ? RegWrite ALU control Read Addr 1 Read Register Read Addr 2 Data 1 Instruction overflow File ALU zero Write Addr Read Data 2 Write Data 2 15
- Thực thi các lệnh load và store, tiếp theo RegWrite ALU control MemWrite overflow Read Addr 1 zero Read Address Register Read Addr 2 Data 1 Instruction Data File ALU Memory Read Data Write Addr Read Data 2 Write Data Write Data Sign MemRead 16 Extend 32 17
- Thực thi các lệnh rẽ nhánh, tiếp theo Add Branch Add target 4 Shift address left 2 ALU control PC Read Addr 1 zero (to branch Read Register control logic) Read Addr 2 Data 1 Instruction File ALU Write Addr Read Data 2 Write Data Sign 16Extend 32 19
- Tạo đường dẫn dữ liệu từ các phần Lắp ghép các thành phần đường dữ liệu , thêm vào các đường điều khiển khi cần và thiết kế đơn vị điều khiển. Tìm nạp, giải mã và thực thi từng lệnh trong một chu kỳ clock – thiết kế đơn chu kỳ. không có tài nguyên đường dữ liệu nào có thể được sử dụng nhiều hơn một lần cho mỗi lệnh , do vậy một số phải được sao chép (e.g., đó là lý do tại sao ta có bộ nhớ dữ liệu và bộ nhớ lệnh riêng biệt ). 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. 21
- Chèn mạch ghép kênh Add RegWrite ALUSrc ALU control MemWrite MemtoReg 4 ovf zero Read Addr 1 Instruction Read Address Memory Register Read Addr 2 Data 1 Data Read File PC Instruction ALU Memory Read Data Address Write Addr Read Data 2 Write Data Write Data MemRead Sign 16Extend 32 23
- Thêm vào phần rẽ nhánh Add Add 4 Shift left 2 PCSrc RegWrite ALUSrc ALU control MemWrite MemtoReg ovf zero Read Addr 1 Instruction Read Address Memory Register Read Addr 2 Data 1 Data Read File PC Instruction ALU Memory Read Data Address Write Addr Read Data 2 Write Data Write Data MemRead Sign 16Extend 32 25