Nghiên cứu Khoa học
Thiết kế module thực thi (excution) của bộ vi xử lý RISC-V trên FPGA
Mô-đun thực thi là mô-đun thực hiện tất cả các phép tính và so sánh mà bộ xử lý có thể thực hiện. Hình 1 sẽ trình bày thiết kế của module thực thi là gì.
Hình 1. Thế kế module thực thi (EX)
Giải thích các chân của thiết kế EX
f3: Là tín hiệu này là mã chức năng được tạo ra bởi phần giải mã lệnh.
f7: Là mã phụ trợ được tạo ra bởi phần giải mã lệnh.
opcode: Là tín hiệu này là mã loại lệnh được tạo ra bởi phần giải mã lệnh.
pc_plus_4: Là tín hiệu này là lệnh tiếp theo trong bộ nhớ tức là địa chỉ lệnh hiện tại được lưu trữ trong bộ đếm chương trình + 4.
rs2_addr: Là tín hiệu này được sử dụng trong các lệnh dịch chuyển để xác định lượng dữ liệu cần dịch chuyển.
pc: Là địa chỉ lệnh hiện tại được lưu trữ trong bộ đếm chương trình.
rs1data:Làtín hiệu này là dữ liệu chứa trong thanh ghi nguồn đầu tiên được lệnh hiện tại chọn.
immediate: Là tín hiệu này là giá trị tức thời được tạo ra bởi mô-đun giải mã lệnh.
rs2_data: Là tín hiệu này là dữ liệu chứa trong thanh ghi nguồn thứ hai được chọn bởi lệnh hiện tại.
branch_out:Là tín hiệu này là địa chỉ lệnh tiếp theo. Ở chu kỳ xung nhịp tiếp theo, bộ đếm chương trình sẽ lấy giá trị này.
alu_out: là tín hiệu này là kết quả của các phép tính được thực hiện bởi mô-đun Thực hiện
Module thực thi được thiết kế để xử lý hai phần chức năng chính mà bộ xử lý yêu cầu. Đó là tính toán và điều chỉnh luồng điều khiển dựa vào bộ ALU và Branch Detection Unit. Để ALU và Branch Detection Unit biết cần thực hiện phép tính và so sánh nào, module Function Decode được thiết kế để diễn giải mã lệnh, mã f3 và f7 do khối giải mã tạo ra, 3 tín hiệu này xác định loại mã lệnh nào và chức năng cụ thể nào trong loại lệnh đó (f3 và f7) đang được thực thi. Mô-đun Function Decode tạo ra 3 tín hiệu dựa trên các giá trị của mã lệnh. Đó là:
branch_op: Tín hiệu này chỉ đạo đơn vị phát hiện nhánh thực hiện so sánh để xác định quyết định nào nên được đưa ra, thay đổi luồng chương trình hoặc không làm gì cả.
alu_op: Tín hiệu này chỉ thị cho ALU thực hiện một số phép tính nhất định, ví dụ như phép cộng, phép trừ, AND,…
mux_sel:Tín hiệu này hướng dẫn bộ ghép kênh đầu vào của mô-đun Thực thi chọn dữ liệu thích hợp để ALU thực hiện các phép tính.
Giá trị tín hiệu điều khiển Branch Detection Unit
Đầu vào điều khiển Branch |
Chức năng |
000 |
BEQ |
001 |
BNE |
010 |
BLT |
011 |
BGE |
100 |
BLTU |
101 |
BGEU |
110 |
JAL and JALR |
111 |
NULL |
Bảng 2: Tín hiệu điều khiển Branch Detection Unit
Branch Detection Unit nhận các tín hiệu “branch_op”, A và B. Tùy thuộc vào giá trị của “branch_op”, Branch Detection Unit sẽ thực hiện các loại so sánh khác nhau trên A và B.
Giá trị tín hiệu điều khiển ALU
Đào vào điều khiển ALU |
Chức năng |
0000 |
ADD |
0001 |
SUB |
0010 |
AND |
0011 |
OR |
0100 |
XOR |
0101 |
Dịch sang trái theo giá trị tức thời |
0110 |
Dịch sang phải theo giá trị tức thời |
0111 |
Dịch phép tính số học sang phải theo giá trị tức thời |
1000 |
Dịchlogic Asang trái theo số lượng trong B |
1001 |
Dịchlogic Asang phải theo số lượng trong B |
1010 |
Dịch số học Asang phảibằng số lượng trong B |
1011 |
Set less than |
Bảng 3: Tín hiệu điều khiển ALU
ALU nhận các tín hiệu “alu_op”, “compare_cond”, “rs2_data”, A và B. Tùy thuộc vào giá trị của “alu_op”, ALU sẽ thực hiện các phép tính khác nhau trên A và B. ALU có thể thực hiện 12 phép tính như trên bảng 3.
Các tin khác