Bối cảnh và vấn đề nghiên cứu

Trong lĩnh vực kỹ thuật máy tính và thiết kế vi mạch, kiến trúc tập lệnh mã nguồn mở RISC-V (phát triển khởi đầu bởi Giáo sư David A. Patterson, Krste Asanović cùng nhóm nghiên cứu tại Đại học California, Berkeley) đang trở thành xu hướng thay thế tiềm năng cho các kiến trúc độc quyền như x86 (Intel) hay ARM (ARM Holdings) và MIPS. Ưu điểm nổi bật của RISC-V là tính mở, không bị ràng buộc bởi các rào cản bản quyền thương mại phức tạp, cấu trúc đơn giản, linh hoạt và cho phép tùy biến mở rộng theo nhu cầu ứng dụng cụ thể trong các hệ thống nhúng, viễn thông, y tế và quân sự.

Song song với sự phát triển của hệ thống vi xử lý, nhu cầu tính toán hiệu năng cao trên số thực dấu chấm động (Floating-Point) ngày càng tăng nhanh trong các ứng dụng thực tế như xử lý ảnh, trí tuệ nhân tạo và học sâu (Deep Learning). Trên các vi xử lý RISC-V cơ bản, việc không có khối phần cứng xử lý dấu chấm động chuyên dụng (Floating-Point Unit - FPU) buộc hệ thống phải dùng các phép tính giả lập bằng phần mềm trên các thanh ghi số nguyên. Điều này dẫn đến sự suy giảm tốc độ xử lý, gia tăng chu kỳ xung nhịp và hạn chế trong việc quản lý chuẩn hóa hoặc làm tròn số theo các tiêu chuẩn quốc tế.

Từ bối cảnh thực tiễn trên, khóa luận tập trung vào việc thiết kế và hiện thực một bộ xử lý RISC-V 32-bit hoàn chỉnh tích hợp khối xử lý số dấu chấm động độc lập (FPU), hỗ trợ mở rộng tập lệnh RV32IF.

Mục tiêu nghiên cứu của đề tài:

  1. Nghiên cứu kiến trúc tập lệnh RISC-V 32-bit (RV32I và phần mở rộng F extension).
  2. Thiết kế khối tính toán số dấu chấm động (FPU) độ chính xác đơn (Single Precision 32-bit) tuân thủ chuẩn IEEE 754.
  3. Nghiên cứu và hiện thực thuật toán nhân Vedic (công thức Urdhva Tiryakbhyam) vào cấu trúc bộ nhân phần cứng của FPU để tối ưu hóa mạch tổ hợp.
  4. Thiết kế khối dự đoán rẽ nhánh (Branch Prediction Unit - BPU) và ngăn xếp địa chỉ trả về (Return Address Stack - RAS) nhằm tối ưu luồng lệnh pipeline.
  5. Xây dựng môi trường mô phỏng, kiểm định chức năng bằng ngôn ngữ Verilog trên phần mềm ModelSim.
  6. Hiện thực, tổng hợp thiết kế và triển khai trên kít FPGA Xilinx Virtex-7 (VC707) thông qua phần mềm Vivado với bus giao tiếp AXI4-Lite, bảo đảm tần số hoạt động tối thiểu đạt 100 MHz.

Đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Kiến trúc vi xử lý RISC-V 32-bit, tập lệnh cơ sở RV32I và mở rộng RV32F; cấu trúc vi kiến trúc FPU 32-bit; thuật toán số học phần cứng (Vedic Multiplier, Kogge-Stone Adder); giao thức bus AXI4-Lite.
  • Phạm vi nghiên cứu: Thiết kế phần cứng mô tả bằng ngôn ngữ Verilog HDL; tính toán số thực giới hạn ở định dạng Single Precision 32-bit theo chuẩn IEEE 754; kiểm thử trên phần mềm ModelSim và triển khai thực tế trên kit FPGA Virtex-707 ở mức xung nhịp mục tiêu 100 MHz.

Cơ sở lý thuyết và phương pháp

Khóa luận xây dựng hệ thống phần cứng dựa trên các nền tảng lý thuyết và tiêu chuẩn kỹ thuật sau:

  • Kiến trúc tập lệnh RISC-V (RV32I và Standard F Extension):
    • Kiến trúc không gian địa chỉ 32-bit, định dạng Little-Endian.
    • Cấu trúc thanh ghi gồm 32 thanh ghi số nguyên 32-bit ($x0 đến $x31, trong đó $x0 luôn cố định bằng 0) và 32 thanh ghi số dấu chấm động độc lập 32-bit ($f0 đến $f31).
    • Định dạng các nhóm lệnh: R-type, I-type, S-type, B-type, U-type, J-type.
Nhóm thanh ghi Ký hiệu Tên tượng trưng (Symbolic Name) Vai trò
Số nguyên $x0 $zero Hằng số 0
$x1 $ra Địa chỉ trả về của hàm
$x2 $sp Con trỏ ngăn xếp (Stack Pointer)
$x3 - $x4 $gp, $tp Con trỏ toàn cục và con trỏ luồng
$x5 - $x7, $x28 - $x31 $t0 - $t6 Thanh ghi tạm thời
$x8 - $x9, $x18 - $x27 $s0 - $s11 Thanh ghi lưu trữ (Saved registers) / Con trỏ khung
$x10 - $x17 $a0 - $a7 Tham số truyền và giá trị trả về của hàm
Số dấu chấm động $f0 - $f7, $f28 - $f31 $ft0 - $ft11 Thanh ghi tạm thời số thực
$f8 - $f9, $f18 - $f27 $fs0 - $fs11 Thanh ghi lưu trữ số thực
$f10 - $f17 $fa0 - $fa7 Tham số và giá trị trả về số thực
  • Tiêu chuẩn số thực dấu chấm động IEEE 754 (Single Precision):
    • Cấu trúc 32-bit gồm: 1 bit dấu (Sign bit $[31]$), 8 bit số mũ (Exponent $[30:23]$ với giá trị độ lệch Bias $= 127$), và 23 bit phần định trị (Mantissa/Fraction $[22:0]$).
    • Quản lý các trường hợp đặc biệt: Dương/Âm vô cùng ($\pm\infty$), Dương/Âm dưới chuẩn (Subnormal), Zero ($\pm 0$), Signaling NaN (sNaN) và Quiet NaN (qNaN).
    • Hệ thống 5 cờ cảnh báo ngoại lệ: NV (Invalid Operation), DZ (Divide by Zero), OF (Overflow), UF (Underflow), NX (Inexact).
Loại số đặc biệt Sign bit Exponent (8-bit) Mantissa (23-bit) Giá trị Hex đại diện
Negative Infinity ($-\infty$) 1 11111111 00000000000000000000000 0xFF800000
Positive Infinity ($+\infty$) 0 11111111 00000000000000000000000 0x7F800000
Negative Zero ($-0$) 1 00000000 00000000000000000000000 0x80000000
Positive Zero ($+0$) 0 00000000 00000000000000000000000 0x00000000
Signaling NaN (sNaN) x 11111111 0xxxxxxxxxxxxxxxxxxxxxx ($\neq 0$) 0x7FA00000
Quiet NaN (qNaN) x 11111111 1xxxxxxxxxxxxxxxxxxxxxx 0x7FC00000
  • Thuật toán toán học và tối ưu phần cứng:

    • Thuật toán nhân Vedic (Urdhva Tiryakbhyam): Phương pháp nhân ngang và chéo bắt nguồn từ toán học Vệ Đà cổ đại, cho phép xây dựng khối nhân từ cấp thấp ($2\times 2$) mở rộng dần lên $4\times 4$, $8\times 8$, $16\times 16$ và $32\times 32$ bit chỉ sử dụng các cổng logic cơ bản (AND, Half Adder, Full Adder), giúp tối ưu diện tích và độ trễ lan truyền.
    • Bộ cộng Kogge-Stone: Ứng dụng cộng phần số mũ để gia tăng tốc độ tính toán song song.
    • Dự đoán rẽ nhánh (Hybrid Branch Prediction): Kết hợp giữa bộ dự đoán cục bộ Bimodal (sử dụng địa chỉ PC) và bộ dự đoán toàn cục Gshare (phép XOR giữa PC và thanh ghi dịch lịch sử rẽ nhánh), được điều khiển thông qua máy trạng thái hữu hạn (FSM) 2-bit Counter.
    • Ngăn xếp địa chỉ trả về (RAS): Bộ nhớ đệm LIFO lưu trữ địa chỉ của lệnh kế tiếp sau lệnh gọi hàm (call) và đẩy ra khi gặp lệnh trả về (return).
    • Giao thức bus AXI4-Lite: Giao tiếp kết nối Master-Slave gồm 5 kênh độc lập: Kênh ghi địa chỉ (Write Address), Kênh ghi dữ liệu (Write Data), Kênh phản hồi ghi (Write Response), Kênh đọc địa chỉ (Read Address), Kênh đọc dữ liệu (Read Data).
  • Phương pháp nghiên cứu:

    • Phương pháp thiết kế vi mạch kỹ thuật số (RTL Design) sử dụng ngôn ngữ mô tả phần cứng Verilog HDL.
    • Phương pháp kiểm tra và mô phỏng chức năng (Functional Verification) theo các kịch bản kiểm thử (Testbench) trên phần mềm ModelSim.
    • Phương pháp tổng hợp logic, tối ưu định tuyến (Synthesis & Implementation) và nạp cấu hình phần cứng trên nền tảng FPGA Xilinx Vivado.

Thiết kế và triển khai

1. Kiến trúc Pipeline 5 tầng

Vi xử lý được cấu trúc theo mô hình đường ống (Pipeline) 5 tầng tiêu chuẩn nhằm tối ưu hóa xung nhịp:

  • Tầng IF (Instruction Fetch): Nạp lệnh từ bộ nhớ thông qua giá trị của thanh ghi Program Counter (PC). Tích hợp khối BPU và RAS để dự đoán sớm luồng lệnh nhảy.
  • Tầng ID (Instruction Decode): Giải mã tập lệnh, trích xuất mã thao tác (opcode), các trường thanh ghi nguồn, đích và đọc dữ liệu từ Register File (hệ thống 32 thanh ghi số nguyên hoặc 32 thanh ghi số thực).
  • Tầng EX (Execution): Tầng thực thi chính. Dữ liệu được đưa vào khối tính toán số nguyên (ALU) hoặc khối tính toán số thực (FPU).
  • Tầng MEM (Memory Access): Thực hiện đọc/ghi dữ liệu với bộ nhớ Data Memory thông qua các lệnh Load/Store hoặc nhận dữ liệu kết quả từ ALU/FPU.
  • Tầng WB (Write Back): Lựa chọn và ghi kết quả tính toán hoặc dữ liệu đọc từ bộ nhớ trở lại thanh ghi đích trong Register File.

2. Chi tiết các khối chức năng chính

  • Khối Datapath: Là đường truyền dữ liệu liên kết toàn bộ tài nguyên trong CPU. Khối nhận tín hiệu từ Bộ điều khiển (Controller) và thực hiện định tuyến dữ liệu giữa các tầng pipeline, bộ nhớ và các khối tính toán.
Tín hiệu Hướng (I/O) Độ rộng bit Chức năng mô tả
Clk Input 1 Xung nhịp hệ thống
Rst_N Input 1 Tín hiệu reset hệ thống (tích cực mức thấp)
in_DM_data Input 32 Dữ liệu nạp từ bộ nhớ dữ liệu (Data Memory)
in_ctrl_signal Input 24 Tín hiệu bus điều khiển từ Controller
in_inst Input 32 Tập lệnh nạp vào từ Instruction Memory
out_DM_write_en Output 1 Tín hiệu cho phép ghi bộ nhớ dữ liệu
out_addr Output 32 Địa chỉ truy xuất dữ liệu
out_inst_addr Output 32 Địa chỉ nạp lệnh xuất ra bộ nhớ lệnh
out_prediction Output 1 Tín hiệu trạng thái dự đoán từ BPU
out_flag Output 5 Cờ báo trạng thái kết quả tính toán số thực
out_wr_data Output 32 Dữ liệu ghi ra bộ nhớ
  • Khối Controller (Đơn vị điều khiển): Tiếp nhận mã lệnh in_inst[31:0], các cờ trạng thái in_flag[4:0] từ FPU và tín hiệu in_prediction từ BPU để tạo ra bus tín hiệu điều khiển out_ctrl_signal[23:0] cấp phát cho toàn bộ Datapath.

  • Khối ALU (Arithmetic Logic Unit): Đảm nhiệm các phép toán trên số nguyên 32-bit, bao gồm: cộng, trừ, các phép toán logic (AND, OR, XOR), các lệnh dịch (dịch trái logic SLL, dịch phải logic SRL, dịch phải số học SRA), các lệnh so sánh (SLT, SLTU), tính toán địa chỉ rẽ nhánh và cộng thanh ghi PC.

  • Khối FPU (Floating-Point Unit): Khối tính toán dấu chấm động độc lập hỗ trợ các phép tính:

    • Cộng/Trừ số thực (FADD.S, FSUB.S): Căn chỉnh số mũ, cộng/trừ mantissa qua bù 2, kiểm tra tràn và chuẩn hóa kết quả.
    • Nhân số thực (FMUL.S): Cộng số mũ qua bộ cộng Kogge-Stone, trừ bias (127), nhân phần định trị 24-bit bằng thuật toán nhân Vedic, kiểm tra tràn/dưới tràn và làm tròn.
    • Chia số thực (FDIV.S): Trừ số mũ, cộng bias, chia mantissa theo thuật toán so sánh bit tuần tự.
    • Căn bậc hai (FSQRT.S), Tìm giá trị lớn nhất/nhỏ nhất (FMAX.S, FMIN.S).
    • Chuyển đổi kiểu dữ liệu (FCVT.S.W, FCVT.W.S) và truyền dữ liệu giữa tập thanh ghi (FMV.W.X, FMV.X.W).
    • Phân loại (FCLASS.S), can thiệp dấu (FSGNJ.S, FSGNJN.S, FSGNJX.S) và so sánh số thực (FEQ.S, FLT.S, FLE.S).
Tín hiệu FPU Hướng (I/O) Độ rộng bit Chức năng mô tả
in_Clk, in_Rst_N Input 1 Xung clock và reset tích cực mức thấp
in_FPU_Op Input 4 Tín hiệu mã chọn phép toán số thực
in_fmt Input 2 Lựa chọn định dạng tính toán
in_addsub_ctrl Input 1 Điều khiển chọn phép cộng hoặc trừ
in_ctrl_minmax_sgnj_cmp Input 3 Tín hiệu điều khiển các lệnh so sánh, chọn dấu, min/max
in_rs1, in_rs2 Input 32 Hai toán hạng đầu vào dạng Single Precision
in_start Input 1 Tín hiệu kích hoạt bắt đầu tính toán
out_data Output 32 Kết quả tính toán số thực 32-bit
out_stall Output 1 Tín hiệu dừng (stall) pipeline khi FPU đang bận tính toán

3. Tích hợp hệ thống SoC trên Vivado

Hệ thống được đóng gói thành IP và kết nối trong sơ đồ khối (Block Design) của Vivado qua chuẩn bus AXI4-Lite, tích hợp đồng bộ cùng các IP tiêu chuẩn của Xilinx:

  • IP MicroBlaze đóng vai trò cấu hình và điều khiển luồng thử nghiệm.
  • IP Local Memory phục vụ lưu trữ lệnh và dữ liệu.
  • IP AXI UART Lite phục vụ giao tiếp truyền nhận dữ liệu kết quả giữa bo mạch FPGA và máy tính qua giao diện nối tiếp UART.

Nội dung chính theo từng chương

Chương 1. Giới thiệu đề tài

Chương này trình bày nguồn gốc lịch sử của RISC-V từ phòng thí nghiệm Parlab (Đại học California, Berkeley) dưới sự dẫn dắt của David A. Patterson và Krste Asanović, cùng sự ra đời của tổ chức RISC-V International. Tác giả tiến hành phân tích so sánh chi tiết ưu nhược điểm giữa RISC-V với các kiến trúc vi xử lý hiện hành: x86 (phức tạp, độc quyền Intel), ARM (hiệu năng cao nhưng sở hữu đóng bởi ARM Holdings), MIPS (cấu trúc gọn gàng nhưng hạn chế thương mại hóa). Từ đó, chương xác định mục tiêu thiết kế bộ xử lý RISC-V RV32IF, ứng dụng thuật toán nhân Vedic trong khối FPU, tích hợp BPU/RAS và đặt ra yêu cầu hệ thống hoạt động ổn định ở tần số tối thiểu 100 MHz trên kit FPGA Virtex-7 (VC707).

Chương 2. Kiến trúc tập lệnh về RISC-V

Chương 2 cung cấp hệ thống lý thuyết nền tảng cho việc thiết kế:

  • Chi tiết về ISA RV32I và phần mở rộng RV32F, cấu trúc các trường lệnh của 6 định dạng (R, I, S, B, U, J) và quy ước 32 thanh ghi số nguyên cùng 32 thanh ghi số thực.
  • Danh mục 51 lệnh mà vi xử lý hỗ trợ đầy đủ bao gồm các lệnh thao tác số nguyên, lệnh rẽ nhánh, lệnh nhớ và toàn bộ tập lệnh dấu chấm động đơn.
  • Chuẩn biểu diễn số thực IEEE 754 (Single Precision, Double Precision, Quad Precision) và phân tích các trường hợp đặc biệt cùng 5 loại cờ báo lỗi (NV, DZ, OF, UF, NX).
  • Cơ chế toán học Vedic với phương pháp nhân ngang - chéo Urdhva Tiryakbhyam, sơ đồ khối thuật toán cộng, trừ, nhân, chia số thực.
  • Cấu trúc và nguyên lý hoạt động của khối BPU theo phương pháp Hybrid Prediction (kết hợp Bimodal và Gshare), ngăn xếp RAS và giao thức bus AXI4 (tập trung vào chuẩn giao tiếp AXI4-Lite với 5 kênh truyền tín hiệu).

Chương 3. Thiết kế của vi xử lý RISC-V

Chương này đi sâu vào thiết kế phần cứng ở mức chuyển thanh ghi (RTL):

  • Mô hình kiến trúc đường ống 5 tầng: IF, ID, EX, MEM, WB.
  • Thiết kế chi tiết giao tiếp ngõ vào/ngõ ra của khối Datapath, khối Controller, khối ALU và khối FPU.
  • Cấu trúc bên trong của các khối con trong FPU: khối cộng/trừ, khối nhân Vedic 32-bit (ghép tầng từ các khối $2\times 2$, $4\times 4$, $8\times 8$, $16\times 16$), khối chia số thực, khối căn bậc hai và khối chuyển đổi số nguyên - số thực.
  • Thiết kế bộ dự đoán rẽ nhánh BPU và khối RAS.
  • Sơ đồ kết nối Block Design trên phần mềm Vivado tích hợp vi xử lý cùng các khối IP phụ trợ (MicroBlaze, Local Memory, AXI UART Lite).

Chương 4. Kết quả đánh giá và kiểm định

Chương 4 ghi nhận quá trình kiểm thử chức năng và đánh giá hiệu năng phần cứng:

  • Kiểm thử độ chính xác các phép toán số thực dấu chấm động (cộng, trừ, nhân, chia) của khối FPU.
  • Mô phỏng toàn diện vi xử lý RISC-V trên phần mềm ModelSim qua hai trường hợp kiểm định cụ thể:
    • Trường hợp kiểm định 1: Đánh giá chuỗi lệnh nạp bộ nhớ, các phép toán cộng số nguyên, di chuyển dữ liệu giữa các thanh ghi và phép toán chia trên số dấu chấm động.
    • Trường hợp kiểm định 2: Đánh giá chuỗi lệnh so sánh trên số dấu chấm động (FEQ.S, FLT.S, FLE.S), lệnh nhân và cộng kết hợp trên số thực, lệnh trừ số thực.
  • Báo cáo kết quả sau khi Tổng hợp (Synthesis) và Thực thi (Implementation) trên phần mềm Vivado nhằm xác thực tính đúng đắn của thiết kế và kiểm tra các ràng buộc thời gian (timing constraints).
  • Đánh giá, so sánh kết quả thiết kế của bộ nhân số chấm động ứng dụng thuật toán Vedic so với các công trình nghiên cứu liên quan.

Chương 5. Kết luận và hướng phát triển

Tác giả tổng kết các hạng mục đã hoàn thành trong khóa luận, chỉ ra các giới hạn hiện tại và đề xuất hướng mở rộng nghiên cứu trong tương lai.


Kết quả và đóng góp

1. Kết quả kỹ thuật đạt được

  • Hiện thực hoàn chỉnh tập lệnh RV32IF: Thiết kế thành công bộ xử lý RISC-V 32-bit với đường ống 5 tầng, hỗ trợ toàn diện 51 lệnh bao gồm tập lệnh số nguyên cơ bản (RV32I) và tập lệnh số thực dấu chấm động mở rộng (RV32F).
  • Thiết kế FPU Single-Precision tối ưu: Xây dựng khối tính toán FPU xử lý chính xác các số thực 32-bit theo chuẩn IEEE 754, bao gồm các phép toán cộng, trừ, nhân, chia, căn bậc hai, so sánh và chuyển đổi kiểu dữ liệu; kiểm soát đầy đủ các trường hợp ngoại lệ ($\pm\infty$, $\pm 0$, Subnormal, NaN) thông qua 5 cờ trạng thái.
  • Tối ưu hóa bộ nhân phần cứng: Hiện thực thành công bộ nhân mantissa dựa trên thuật toán nhân Vedic Urdhva Tiryakbhyam kết hợp bộ cộng số mũ Kogge-Stone, giúp cấu trúc mạch nhân đạt tốc độ xử lý cao chỉ với các cổng logic cơ bản.
  • Tích hợp BPU và RAS: Tích hợp thành công khối BPU theo giải thuật Hybrid Prediction (Bimodal kết hợp Gshare FSM 2-bit) và ngăn xếp RAS nhằm giảm thiểu hiện tượng nghẽn (hazard) và độ trễ rẽ nhánh trong pipeline.
  • Xác thực phần cứng trên FPGA: Hệ thống được tổng hợp, định tuyến và thực thi thành công trên kit FPGA Xilinx Virtex-7 (VC707) thông qua giao thức AXI4-Lite, đáp ứng hoạt động ổn định ở mức xung nhịp tối thiểu 100 MHz.

2. Đóng góp của đề tài

  • Đóng góp một thiết kế RTL hoàn chỉnh bằng ngôn ngữ Verilog cho bộ xử lý RISC-V 32-bit tích hợp FPU, có cấu trúc module rõ ràng, sẵn sàng cho việc tái sử dụng trong các hệ thống SoC mở.
  • Chứng minh tính khả thi và hiệu quả của việc ứng dụng thuật toán toán học cổ đại Vedic (Urdhva Tiryakbhyam) vào thiết kế phần cứng vi mạch hiện đại, giúp đơn giản hóa mạch tổ hợp của bộ nhân số thực dấu chấm động trên FPGA.

Hạn chế và hướng nghiên cứu tiếp

1. Hạn chế

  • Thiết kế FPU hiện tại mới chỉ hỗ trợ định dạng độ chính xác đơn (Single Precision 32-bit), chưa mở rộng hỗ trợ định dạng độ chính xác kép (Double Precision 64-bit - tập lệnh RV32D) hoặc độ chính xác tứ (Quad Precision 128-bit - tập lệnh RV32Q).
  • Đề tài tập trung kiểm định chức năng và tần số trên nền tảng FPGA, chưa thực hiện đo đạc chuyên sâu về mức tiêu thụ năng lượng (Power Consumption) và diện tích thực tế (Silicon Area) khi sản xuất vi mạch chuyên dụng (ASIC).

2. Hướng nghiên cứu tiếp

  • Mở rộng tập lệnh FPU để hỗ trợ chuẩn Double Precision (RV32D/RV64D) và tập lệnh Vector (RVV) phục vụ tính toán song song ma trận.
  • Nghiên cứu tối ưu hóa sâu hơn khối chia (FDIV.S) và khối căn bậc hai (FSQRT.S) nhằm rút ngắn số chu kỳ xung nhịp thực thi.
  • Bổ sung cơ chế bảo mật phần cứng và tích hợp vi xử lý vào các hệ thống SoC phức tạp hơn phục vụ các ứng dụng học máy tại biên (Edge AI).

Giá trị tham khảo

Tài liệu khóa luận có giá trị tham khảo hữu ích cho các nhóm đối tượng:

  • Sinh viên và học viên chuyên ngành Kỹ thuật Máy tính, Điện tử - Viễn thông, Thiết kế Vi mạch: Là tài liệu tham khảo chi tiết về quy trình thiết kế vi xử lý từ mức kiến trúc tập lệnh (ISA), thiết kế vi kiến trúc đường ống (Pipeline), mô tả phần cứng bằng Verilog HDL cho đến kiểm định chức năng trên ModelSim và triển khai trên FPGA Vivado.
  • Người nghiên cứu kiến trúc RISC-V và thuật toán số học phần cứng: Phần trình bày về chuẩn IEEE 754, quy trình xử lý ngoại lệ số thực, thiết kế bộ nhân Vedic Urdhva Tiryakbhyam và cơ chế dự đoán rẽ nhánh BPU/RAS là nguồn tư liệu có tính ứng dụng cao cho các đề tài phát triển bộ tăng tốc tính toán phần cứng.

Câu hỏi thường gặp

1. Khóa luận hỗ trợ những tập lệnh nào của kiến trúc RISC-V?
Khóa luận hỗ trợ tập lệnh RV32IF (tổng cộng 51 lệnh), bao gồm tập lệnh số nguyên cơ bản RV32I (các lệnh số học ADD, SUB, logic AND, OR, XOR, dịch bit SLL, SRL, SRA, so sánh SLT, rẽ nhánh BEQ, BNE, nạp/lưu dữ liệu LW, SW...) và tập lệnh số thực mở rộng Single-Precision Floating-Point RV32F (FADD.S, FSUB.S, FMUL.S, FDIV.S, FSQRT.S, FMIN.S, FMAX.S, FEQ.S, FLT.S, FLE.S, FCVT, FMV, FSGNJ...).

2. Khối nhân trong FPU được tối ưu bằng thuật toán nào?
Khối nhân số thực trong FPU được tối ưu hóa bằng thuật toán nhân Vedic (công thức Urdhva Tiryakbhyam - nhân ngang và chéo) để xử lý tích phần định trị (mantissa) 24-bit. Thuật toán được xây dựng từ các khối cơ bản $2\times 2$ ghép tầng lên $4\times 4$, $8\times 8$, $16\times 16$ và $32\times 32$ bit chỉ sử dụng các cổng logic cơ bản (AND, Half Adder, Full Adder). Đồng thời, phần số mũ được cộng bằng bộ cộng song song Kogge-Stone.

3. Khối FPU xử lý những trường hợp đặc biệt và cờ cảnh báo nào theo chuẩn IEEE 754?
Khối FPU phát hiện và xử lý các trường hợp đặc biệt gồm: số âm/dương vô cùng ($\pm\infty$), số âm/dương dưới chuẩn (Subnormal), số zero âm/dương ($\pm 0$), Signaling NaN (sNaN) và Quiet NaN (qNaN). Hệ thống quản lý 5 cờ báo hiệu trạng thái: NV (Phép toán không hợp lệ), DZ (Chia cho số 0), OF (Tràn số trên), UF (Tràn số dưới), và NX (Kết quả không chính xác/đã làm tròn).

4. Cơ chế dự đoán rẽ nhánh (BPU) trong thiết kế hoạt động như thế nào?
BPU sử dụng phương pháp dự đoán lai (Hybrid Prediction) kết hợp giữa bộ dự đoán Bimodal (dựa trên địa chỉ thanh ghi PC) và bộ dự đoán Gshare (dựa trên phép XOR giữa địa chỉ PC và thanh ghi dịch lịch sử mẫu). Trạng thái dự đoán được lưu trữ và cập nhật qua máy trạng thái hữu hạn (FSM) 2-bit Counter. Đi kèm với BPU là khối Return Address Stack (RAS) giúp lưu trữ và dự đoán chính xác địa chỉ trả về khi thực thi các lệnh gọi và thoát hàm.

5. Thiết kế được kiểm tra và thực thi trên nền tảng phần cứng và công cụ nào?
Hệ thống được mô tả bằng ngôn ngữ Verilog HDL, mô phỏng kiểm tra chức năng bằng phần mềm ModelSim qua các bài kiểm tra số nguyên và số thực, sau đó được tổng hợp và thực thi bằng phần mềm Xilinx Vivado, giao tiếp qua bus AXI4-Lite và triển khai thực tế trên kit FPGA Xilinx Virtex-7 (VC707) ở tần số hoạt động 100 MHz.


Kết luận

Khóa luận tốt nghiệp của tác giả Đỗ Tuấn Thuận đã nghiên cứu và hiện thực thành công bộ vi xử lý RISC-V 32-bit cấu trúc pipeline 5 tầng tích hợp khối xử lý số dấu chấm động FPU độc lập (hỗ trợ tập lệnh RV32IF). Điểm nhấn kỹ thuật của công trình là việc ứng dụng thuật toán nhân Vedic Urdhva Tiryakbhyam vào bộ nhân mantissa và tích hợp khối dự đoán rẽ nhánh Hybrid BPU cùng ngăn xếp RAS để tối ưu hiệu năng luồng lệnh. Toàn bộ thiết kế phần cứng đã được kiểm định chức năng đầy đủ trên ModelSim và triển khai thành công trên kit FPGA Xilinx Virtex-7 ở tần số ổn định 100 MHz.