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

Trong tiến trình phát triển của công nghệ phần cứng và kiến trúc máy tính, các bộ vi xử lý ngày càng trở nên phức tạp và đòi hỏi tốc độ xử lý cao hơn. Việc giải quyết các bài toán tối ưu hóa ở tầng phần cứng (hardware level) đem lại hiệu năng vượt trội và tốc độ xử lý nhanh hơn đáng kể so với việc xử lý thuần túy ở tầng phần mềm. Tuy nhiên, tại Việt Nam ở thời điểm năm 2021, các công trình nghiên cứu và tài liệu chuyên sâu về thiết kế vi xử lý tiên tiến, đặc biệt là vi kiến trúc đa luồng (multithreading microarchitecture), còn rất khan hiếm.

Kiến trúc tập lệnh RISC-V (Instruction Set Architecture - ISA) là chuẩn kiến trúc tập lệnh mở dựa trên các nguyên lý tính toán tập lệnh rút gọn (RISC). Khác với các thiết kế thương mại đóng, tài liệu chuẩn RISC-V được tổ chức RISC-V International phát hành năm 2019 cho phép tự do sử dụng không giới hạn bản quyền trong thiết kế phần cứng và phát triển phần mềm. Nhờ ưu điểm này, nhiều tập đoàn công nghệ lớn trên thế giới (như Alibaba Group, NVIDIA) đã và đang phát triển các dòng CPU/SoC dựa trên RISC-V. Mặc dù vậy, các nghiên cứu quốc tế về vi xử lý đa luồng trên nền tảng RISC-V đa phần dựa vào việc tùy biến từ các lõi mở có sẵn như Klessydra – vốn có cấu trúc rất phức tạp và khó chỉnh sửa. Do đó, tác giả lựa chọn nghiên cứu và tự thiết kế một bộ vi xử lý RISC-V đa luồng từ đầu (from scratch) tích hợp các kỹ thuật đường ống nâng cao.

Mục tiêu và nhiệm vụ nghiên cứu của đồ án bao gồm:

  1. Thiết kế bộ vi xử lý RISC-V 32-bit dạng đường ống (pipelined) với vi kiến trúc đa luồng hỗ trợ tập lệnh RV32I và cơ chế đồng bộ hóa phần cứng.
  2. Xác thực bộ vi xử lý thông qua mô phỏng phần mềm (ModelSim) và kiểm thử thực tế trên bo mạch FPGA Altera (kit DE2 Board).
  3. Đạt tần số hoạt động kỳ vọng của bộ vi xử lý: 80 MHz.

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

  • Đối tượng nghiên cứu: Vi kiến trúc bộ vi xử lý RISC-V 32-bit, kỹ thuật đa luồng phần cứng mức tác vụ (Task Level Parallelism - TLP) cho 2 luồng đồng thời (2-slot threads), kỹ thuật thực thi ngoài thứ tự (Out-of-Order execution), kỹ thuật đổi tên thanh ghi (Register Renaming) và kỹ thuật dự đoán nhánh động (Dynamic Branch Prediction).
  • Phạm vi không gian và thời gian: Đồ án được thực hiện tại Khoa Kỹ thuật Máy tính, Trường Đại học Công nghệ Thông tin - ĐHQG-HCM, trong thời gian từ ngày 08/03/2021 đến ngày 25/06/2021 (theo Quyết định thành lập hội đồng số 462/QĐ-ĐHCNTT ngày 23/07/2021).

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

Khung lý thuyết của đề tài dựa trên các nguyên lý kiến trúc máy tính và tập lệnh RISC-V:

  • Kiến trúc tập lệnh RISC-V (RV32I và RV32A):
    • RV32I là tập lệnh số nguyên 32-bit cơ bản gồm 47 lệnh (trong đó có 40 lệnh phần cứng bắt buộc ở mức người dùng và 8 lệnh hệ thống/bẫy). Hệ thống bao gồm 31 thanh ghi mục đích chung (x1 đến x31, mỗi thanh ghi 32-bit), thanh ghi x0 cố định giá trị 0 và thanh ghi bộ đếm chương trình (PC). Các lệnh được chia thành 3 nhóm chức năng: tính toán (computation - định dạng R-type, I-type, U-type), rẽ nhánh/điều khiển luồng (control transfer - JAL, JALR, BEQ, BNE, BLT, BGE, BLTU, BGEU) và truy xuất bộ nhớ (memory access - LW, LH, LB, LHU, LBU, SW, SH, SB).
    • Tập mở rộng RV32A cung cấp hai lệnh nguyên tử phục vụ đồng bộ hóa bộ nhớ là Load Reservation (LR.W) và Store Conditional (SC.W), cho phép truy xuất bộ nhớ nguyên tử mà không xảy ra tranh chấp dữ liệu giữa các luồng.
  • Kỹ thuật đường ống (Pipelining) và xử lý xung đột (Hazards):
    • Phân tích và xử lý các loại xung đột dữ liệu (data hazard), xung đột điều khiển (control hazard) và xung đột cấu trúc (structural hazard).
    • Kỹ thuật thực thi ngoài thứ tự (Out-of-Order) kết hợp bảng đổi tên thanh ghi (Renaming Register File - RRF) nhằm giải quyết xung đột ghi sau đọc (WAR) và ghi sau ghi (WAW), cho phép các lệnh không phụ thuộc dữ liệu được thực thi trước.
    • Dự đoán nhánh động (Dynamic Branch Prediction) dựa trên bộ đệm đích nhánh (Branch Target Buffer - BTB) và thuật toán đếm bão hòa 2-bit (2-bit prediction algorithm) để giảm số chu kỳ trễ (stall cycles) khi nạp lệnh rẽ nhánh.
  • Kỹ thuật đa luồng phần cứng (Hardware Multithreading):
    • Tổng quan lịch sử phát triển từ IBM OS/360 MVT (1967), kỹ thuật SMT (Simultaneous Multithreading - 1997), Intel Hyper-Threading trên dòng Xeon/Core (Skylake, Kaby Lake, Coffee Lake, Comet Lake) và AMD SMT (Bulldozer FlexFPU, Zen microarchitecture).
    • Cơ chế đồng bộ hóa dữ liệu phần mềm (Mutex lock, Semaphore qua các thao tác nguyên tử wait/signal) và phần cứng (Memory barrier/fence, Test-and-Set, Compare-and-Swap - CAS, Atomic Variables).

Phương pháp nghiên cứu thực nghiệm và thiết kế hệ thống:

  • Phương pháp phân tích và mô hình hóa: Nghiên cứu lý thuyết vi kiến trúc, ánh xạ cấu trúc tập lệnh RV32I và RV32A thành các khối chức năng phần cứng (Datapath và Controller).
  • Phương pháp thiết kế số và tổng hợp: Hiện thực phần cứng bằng ngôn ngữ mô tả phần cứng Verilog HDL trên môi trường Altera Quartus; thiết kế đường dữ liệu chia sẻ tài nguyên cho 2 luồng.
  • Phương pháp phát triển công cụ phần mềm hỗ trợ: Xây dựng trình biên dịch Assembler bằng ngôn ngữ PERL để chuyển đổi mã nguồn Hợp ngữ RISC-V thành mã máy nhị phân.
  • Phương pháp mô phỏng và kiểm thử (Verification): Sử dụng ModelSim để chạy mô phỏng trước tổng hợp (Pre-simulation) và sau tổng hợp (Post-simulation); kết hợp các công cụ sinh mã kiểm thử ngẫu nhiên (Giang's RTG, Test-case Generator) cùng bộ kiểm thử chuẩn RISC-V Test.
  • Phương pháp thực nghiệm phần cứng: Nạp cấu hình netlist lên kit Altera FPGA DE2 để kiểm tra chức năng và đo lường tài nguyên.

Thiết kế và triển khai

Hệ thống được tổ chức thành hai phần chính: Công cụ phần mềm (Assembler) và Vi kiến trúc phần cứng (Hardware Multithreaded Core).

+-------------------------------------------------------------+
|                      QUY TRÌNH HỆ THỐNG                     |
|                                                             |
|  [Mã nguồn Assembly] --> [Assembler (PERL)]                |
|                                  |                          |
|                                  v                          |
|                        [Mã máy nhị phân]                    |
|                                  |                          |
|                                  v                          |
|                [Instruction Memory ($writememb)]            |
|                                  |                          |
|                                  v                          |
|                [Vi xử lý RISC-V 2-Slot Multithread]         |
|                                  |                          |
|                                  v                          |
|                 [Kiểm tra kết quả ($readmemh)]              |
+-------------------------------------------------------------+

1. Công cụ phần mềm Assembler tùy biến (viết bằng PERL)

Trình biên dịch mã nguồn Assembly sang mã máy nhị phân được thực hiện qua quy trình 6 bước:

  • Bước 1 (Initial): Khởi tạo bảng băm (hashes) lưu trữ các trường mã opcode, funct3, funct7 cho toàn bộ tập lệnh RV32I và các lệnh đồng bộ.
  • Bước 2 (Read each line): Đọc tệp mã nguồn Assembly dòng theo dòng.
  • Bước 3 (Pre-Encoding): Xóa bỏ chú thích (comments), dòng trống, trích xuất địa chỉ các nhãn (labels) lưu vào bảng băm nhãn (Label Hash) và tạo tệp Assembly sạch.
  • Bước 4 (Read clean assembly): Đọc tệp Assembly sạch vừa tạo.
  • Bước 5 (Convert): Chuyển đổi từng dòng lệnh hợp ngữ thành chuỗi nhị phân 32-bit tương ứng dựa vào bảng băm và định dạng lệnh.
  • Bước 6 (Finish & Export): Ghi dữ liệu nhị phân vào tệp kết quả để nạp trực tiếp vào bộ nhớ lệnh (I-mem) qua tác vụ Verilog $writememb.

2. Vi kiến trúc phần cứng đường ống 5 tầng (5-Stage Pipelined Datapath)

Bộ vi xử lý được thiết kế theo kiến trúc đa luồng 2 khe (2-slot threads), cho phép 2 luồng thực thi song song và chia sẻ chung các tài nguyên: Tập thanh ghi (Register File), Bộ nhớ lệnh (Instruction Memory - I-mem) và Bộ nhớ dữ liệu (Data Memory - D-mem).

Tầng Pipeline Khối chức năng chính Vai trò và cơ chế hoạt động
Instruction Fetch (IF) PC với cơ chế chuyển luồng, I-mem, BTB (Branch Target Buffer) Nạp lệnh từ I-mem; hỗ trợ chuyển luồng độc lập; tích hợp BTB dự đoán nhánh động 2-bit; tính toán sớm địa chỉ lệnh JAL để tăng thông lượng nạp lệnh.
Instruction Decode (ID) Architecture Register File (ARF), Renaming Register File (RRF), ID Extension Tách trường toán hạng, đọc ARF, mở rộng tức thời lên 32-bit; thực hiện đổi tên thanh ghi đích qua RRF phục vụ thực thi ngoài thứ tự; điều khiển tín hiệu stall luồng.
Issue Reservation Buffer (RB) cho ALU và Branch Lưu trữ các lệnh kèm toán hạng/giá trị tức thời; giữ lệnh tại trạm chờ cho đến khi toàn bộ toán hạng sẵn sàng mới phát ra tầng thực thi.
Execute (EX) Arithmetic & Logic Execution Unit (ALU), Branch Execution Unit, Bộ cộng địa chỉ 32-bit, Synchronization Controller Thực thi tính toán số học/logic, tính toán điều kiện rẽ nhánh và tính địa chỉ bộ nhớ; quản lý Link Register và kiểm tra tính hợp lệ của cặp lệnh LR.W/SC.W.
Write-Back (WB) Write-Back Scheduler Bố trí sớm ngay sau tầng EX đối với các lệnh số học/logic nhằm giảm chu kỳ chờ; bộ lập lịch WB lựa chọn ưu tiên giữa kết quả từ ALU, Load, SC.W và lệnh nhảy.
Memory Access (MEM) Load Data Controller, Store Data Controller, D-mem Xử lý ghi dữ liệu vào D-mem (tạo tín hiệu enable theo từng byte) hoặc đọc dữ liệu từ D-mem (mở rộng dấu/zero cho byte, half-word, word qua Load Controller).

Cơ chế đồng bộ hóa phần cứng được thực thi thông qua khối Synchronization Controller tại tầng EX: khi thực hiện LR.W, bit bận (busy bit) của Link Register được thiết lập mức logic 1 và địa chỉ nạp được ghi nhận; khi lệnh SC.W của cùng luồng đi vào tầng EX, bộ điều khiển kiểm tra busy bit và so sánh địa chỉ lưu trữ với Link Register để quyết định cấp phép ghi vào bộ nhớ và trả về mã thành công/thất bại vào thanh ghi đích.


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

Chương 1: Tổng quan lý thuyết và kiến trúc tập lệnh RISC-V (Instruction Set Architecture & Microarchitecture Overview)

  • Hệ thống hóa các khái niệm nền tảng trong kiến trúc máy tính: mối quan hệ giữa tập lệnh (ISA), vi kiến trúc (Microarchitecture) và thiết kế hệ thống (Systems design).
  • Phân tích chi tiết tập lệnh RV32I: đặc tả 31 thanh ghi đa dụng 32-bit (x1-x31), thanh ghi hằng số không x0, thanh ghi PC; phân loại định dạng lệnh (R-type, I-type, U-type, J-type, B-type, S-type).
  • Trình bày tập mở rộng đồng bộ RV32A với hai lệnh LR.W và SC.W, chỉ rõ các điều kiện phần cứng khiến thao tác SC.W thất bại (địa chỉ không khớp với LR.W, xuất hiện thao tác ghi đè từ thiết bị hoặc luồng khác vào tập địa chỉ bảo lưu).
  • Phân tích ưu và nhược điểm của vi kiến trúc đa luồng; trình bày các mô hình đồng bộ phần mềm (Mutex, Semaphore) và các cơ chế hỗ trợ ở tầng phần cứng (Memory barrier, Test-and-Set, Compare-and-Swap, biến nguyên tử).
  • Đưa ra sơ đồ tổng quan vi xử lý đa luồng 2 luồng chia sẻ thanh ghi/bộ nhớ và kiến trúc đường ống 5 tầng.

Chương 2: Thiết kế hệ thống và công cụ phần mềm (System Design & Software Tools)

  • Trình bày kiến trúc tổng thể kết hợp giữa công cụ biên dịch phần mềm và vi xử lý phần cứng.
  • Mô tả chi tiết cấu trúc thuật toán và lưu đồ của trình biên dịch Assembler viết bằng PERL qua 6 bước (khởi tạo bảng băm opcode/funct3/funct7, đọc mã nguồn, xử lý nhãn và tiền mã hóa, sinh mã nhị phân).
  • Đặc tả chi tiết các tín hiệu vào/ra (I/O signals) và chức năng của từng tầng đường ống: Instruction Fetch (IF), Instruction Decode (ID), Issue, Execute (EX), Write-Back (WB) và Memory Access (MEM).

Chương 3: Thiết kế chi tiết các khối chức năng phần cứng (Hardware Functional Blocks Design)

  • Thiết kế chi tiết khối Program Counter (PC) tích hợp bộ chuyển mạch luồng (thread switching mechanism).
  • Thiết kế bộ đệm đích nhánh Branch Target Buffer (BTB) sử dụng thuật toán dự đoán 2-bit (2-bit counter) và bảng mô tả tín hiệu I/O của BTB.
  • Hiện thực chi tiết khối Architecture Register File (ARF) và Renaming Register File (RRF) nhằm phục vụ kỹ thuật Out-of-Order.
  • Thiết kế các bộ đệm Reservation Buffer (RB) chuyên biệt cho nhóm lệnh rẽ nhánh và nhóm lệnh số học/logic; hàng đợi truy xuất bộ nhớ Load-Store Queue (LSQ).
  • Thiết kế khối thực thi số học logic (ALU), khối thực thi rẽ nhánh (Branch Execution Unit), bộ điều khiển nạp dữ liệu (Load Controller), bộ điều khiển lưu dữ liệu (Store Controller) và bộ điều khiển đồng bộ (Synchronization Controller).

Chương 4: Kiểm tra, xác thực và đánh giá hiệu năng (Verification, Synthesis & Comparison)

  • Xây dựng kế hoạch kiểm thử theo hai pha:
    1. Kiểm thử các trường hợp nhỏ (Small tests): Xác thực thực thi ngoài thứ tự (Out-of-Order), kiểm tra tính đúng đắn của bộ dự đoán nhánh động (Dynamic Branch Prediction), kiểm tra cơ chế chuyển ngữ cảnh luồng (Context Switching) qua 5 đoạn mã hợp ngữ cho từng luồng, xác thực tính năng đồng bộ LR.W/SC.W trên 2 bài toán kinh điển: Bài toán Nhà sản xuất - Người tiêu dùng (Producer - Consumer) và Bài toán tăng biến đếm song song (Increasing problem).
    2. Kiểm thử hàng loạt (Myriad of test cases): Tự động hóa kiểm thử bằng công cụ sinh mã ngẫu nhiên Giang's RTG, Test-case Generator và bộ kiểm thử chuẩn RISC-V Test.
  • Báo cáo dạng sóng mô phỏng trước tổng hợp (Pre-simulation) và sau tổng hợp (Post-simulation) trên phần mềm ModelSim ở tần số 55 MHz.
  • Tổng hợp phần cứng trên phần mềm Altera Quartus, đo lường mức độ sử dụng tài nguyên (Hardware Utilization), tần số cực đại (Max Frequency) và sơ đồ kết nối chân nạp lên kit Altera FPGA DE2 Board.
  • So sánh chi tiết vi kiến trúc đa luồng được thiết kế với các bộ vi xử lý đơn luồng có đường ống (Pipelined), các bộ vi xử lý đa luồng mở (Klessydra) và kiến trúc đa lõi (Multicore).

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

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

  • Hiện thực thành công phần cứng vi xử lý: Xây dựng hoàn chỉnh mã nguồn RTL cho bộ vi xử lý 32-bit RISC-V đa luồng 2 khe (2-slot threads), hỗ trợ đầy đủ tập lệnh RV32I và cơ chế đồng bộ hóa phần cứng qua cặp lệnh LR.W / SC.W (RV32A).
  • Tích hợp các kỹ thuật vi kiến trúc nâng cao:
    • Hiện thực thành công cơ chế thực thi ngoài thứ tự (Out-of-Order) nhờ sự phối hợp giữa khối Reservation Buffer (RB) và khối đổi tên thanh ghi (Renaming Register File - RRF).
    • Tích hợp bộ đệm dự đoán nhánh động BTB với thuật toán 2-bit, giúp giảm thiểu số chu kỳ stall khi gặp lệnh rẽ nhánh.
    • Tối ưu hóa tầng ghi ngược (Write-Back) sớm ngay sau tầng EX cho các lệnh ALU kết hợp bộ lập lịch Write-Back Scheduler.
  • Xây dựng công cụ phần mềm hỗ trợ: Hoàn thành trình biên dịch Assembler bằng ngôn ngữ PERL hỗ trợ đầy đủ các định dạng lệnh RISC-V 32-bit, tự động hóa xử lý nhãn và xuất mã nhị phân trực tiếp cho bộ nhớ phần cứng.
  • Xác thực và đo lường phần cứng:
    • Mô phỏng thành công 100% các bài kiểm thử chức năng (Out-of-Order, Dynamic Branch Prediction, Context Switching, Producer-Consumer, Increasing problem, RTG và RISC-V Test suite).
    • Đạt tần số hoạt động mô phỏng sau tổng hợp (Post-simulation) là 55 MHz.
    • Tổng hợp thành công netlist và nạp kiểm thử trực tiếp trên bo mạch Altera FPGA DE2 Board.

2. Bảng tổng hợp so sánh đặc tính vi kiến trúc

Tiêu chí Vi xử lý đường ống đơn luồng chuẩn Vi xử lý đa lõi (Multicore) Vi xử lý đa luồng tự thiết kế trong đồ án
Mức độ song song Instruction-Level Parallelism (ILP) Thread/Task-Level Parallelism (TLP) Task-Level Parallelism (TLP) kết hợp ILP
Số lượng luồng/lõi 1 luồng / 1 lõi Nhiều lõi độc lập 2 khe luồng (2-slot threads) trên 1 lõi
Chia sẻ tài nguyên Không có chia sẻ Tách biệt hoàn toàn phần cứng mỗi lõi Chia sẻ Register File, I-mem, D-mem
Tiêu tốn phần cứng Thấp Rất cao (nhân đôi toàn bộ Datapath/ALU) Tiết kiệm (chỉ bổ sung khối quản lý luồng/đồng bộ)
Cơ chế thực thi In-Order In-Order hoặc Out-of-Order Out-of-Order (dùng RRF và Reservation Buffer)
Đồng bộ phần cứng Không yêu cầu Thông qua bộ nhớ dùng chung phức tạp Tích hợp trực tiếp lệnh LR.W/SC.W và Sync Controller

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

  • Là một trong những công trình nghiên cứu và tự thiết kế vi xử lý RISC-V đa luồng từ đầu (from scratch) tại Việt Nam, không phụ thuộc vào các lõi mã nguồn mở phức tạp như Klessydra.
  • Đưa ra giải pháp vi kiến trúc hoàn chỉnh kết hợp giữa đa luồng phần cứng mức tác vụ (TLP), thực thi ngoài thứ tự (OoO) và dự đoán nhánh động (Dynamic Branch Prediction) trên chuẩn tập lệnh mở RISC-V.
  • Cung cấp tài liệu thiết kế chi tiết các khối Datapath/Controller và quy trình kiểm thử RTL tự động hóa làm tài liệu tham khảo cho việc nghiên cứu thiết kế vi mạch trong nước.

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

1. Hạn chế của đề tài

  • Tần số hoạt động thực tế: Tần số sau tổng hợp và mô phỏng Post-simulation đạt mức 55 MHz, chưa đạt được mức tần số kỳ vọng ban đầu là 80 MHz do ảnh hưởng của đường trễ tới hạn (critical path) trên công nghệ FPGA Altera DE2.
  • Quy mô tập lệnh: Vi xử lý mới chỉ hiện thực tập lệnh số nguyên cơ bản RV32I cùng 2 lệnh đồng bộ LR.W/SC.W của RV32A; chưa tích hợp các tập mở rộng nhân chia phần cứng (RV32M), số thực dấu chấm động (RV32F/D) hay tập lệnh nén (RV32C).
  • Số lượng luồng đồng thời: Hệ thống giới hạn ở kiến trúc 2 luồng đồng thời (2-slot threads) chia sẻ chung một tập thanh ghi và bộ nhớ.

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

  • Tối ưu hóa các đường truyền dữ liệu và cấu trúc mạch logic để rút ngắn đường trễ tới hạn, nâng cao tần số hoạt động đạt và vượt mức 80 MHz.
  • Mở rộng hỗ trợ thêm các tập mở rộng chuẩn của RISC-V như RV32M (phép nhân/chia số nguyên phần cứng), RV32F/D (tính toán dấu chấm động) và đơn vị quản lý bộ nhớ (MMU) để hỗ trợ các hệ điều hành hoàn chỉnh.
  • Mở rộng kiến trúc cho phép hỗ trợ nhiều hơn 2 luồng chạy song song và thử nghiệm tổng hợp trên các công nghệ bán dẫn ASIC hoặc các dòng FPGA hiệu năng cao hơn.

Giá trị tham khảo

Đồ án có giá trị tham khảo chuyên môn đối với:

  • Sinh viên và học viên cao học chuyên ngành Kỹ thuật Máy tính, Điện tử - Viễn thông, Công nghệ Vi mạch: Dùng làm tài liệu tham khảo chi tiết về phương pháp thiết kế vi xử lý RISC-V, kỹ thuật đường ống, thiết kế bộ dự đoán nhánh BTB và hiện thực cơ chế Out-of-Order bằng Verilog HDL.
  • Kỹ sư thiết kế vi mạch số (ASIC/FPGA Design Engineers): Tham khảo kiến trúc phần cứng của khối Reservation Buffer, Renaming Register File, cơ chế điều khiển đồng bộ LR.W/SC.W và phương pháp xây dựng bộ công cụ kiểm thử tự động (RTG kết hợp ModelSim).
  • Các nhóm nghiên cứu công cụ hỗ trợ phát triển vi xử lý: Tham khảo cấu trúc và giải thuật của trình biên dịch mã nguồn Hợp ngữ sang mã nhị phân (Assembler) viết bằng ngôn ngữ PERL.

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

1. Bộ vi xử lý trong đồ án hỗ trợ những tập lệnh và phần mở rộng nào của kiến trúc RISC-V?

Bộ vi xử lý hỗ trợ tập lệnh số nguyên 32-bit cơ bản RV32I (gồm 47 lệnh, trong đó có 40 lệnh phần cứng bắt buộc ở mức người dùng phục vụ tính toán, điều khiển rẽ nhánh và truy xuất bộ nhớ) và hai lệnh nguyên tử Load Reservation (LR.W) cùng Store Conditional (SC.W) thuộc tập mở rộng RV32A phục vụ cơ chế đồng bộ hóa bộ nhớ giữa các luồng.

2. Cơ chế thực thi ngoài thứ tự (Out-of-Order execution) được thiết kế và hiện thực bằng các khối chức năng nào?

Cơ chế thực thi ngoài thứ tự được hiện thực thông qua sự kết hợp giữa khối Đổi tên thanh ghi (Renaming Register File - RRF) tại tầng Giải mã lệnh (ID) và các bộ đệm Reservation Buffer (RB) tại tầng Phát lệnh (Issue). RRF giúp loại bỏ các xung đột dữ liệu WAR và WAW bằng cách đổi tên thanh ghi đích; trong khi đó, Reservation Buffer lưu trữ các lệnh kèm toán hạng và chỉ phát lệnh đi thực thi tại tầng EX khi toàn bộ toán hạng cần thiết đã sẵn sàng, cho phép các lệnh độc lập được thực thi trước.

3. Cặp lệnh đồng bộ phần cứng LR.W và SC.W hoạt động như thế nào trong vi kiến trúc này?

Tại tầng Execute (EX), khối Synchronization Controller quản lý một thanh ghi liên kết (Link Register). Khi luồng thực thi lệnh LR.W, bộ điều khiển thiết lập busy bit của Link Register lên 1 và lưu lại địa chỉ nạp. Khi lệnh SC.W của cùng luồng đi vào tầng EX, bộ điều khiển kiểm tra busy bit và so sánh địa chỉ lưu với dữ liệu trong Link Register: nếu địa chỉ trùng khớp và chưa bị luồng/thiết bị khác ghi đè, thao tác ghi vào D-mem được cấp phép và trả về giá trị 0 (thành công) vào thanh ghi đích; ngược lại, thao tác ghi bị hủy bỏ và trả về giá trị khác 0 (thất bại).

4. Trình biên dịch Assembler trong đồ án được xây dựng bằng công cụ gì và gồm các bước xử lý nào?

Trình biên dịch Assembler được tác giả tự lập trình bằng ngôn ngữ PERL, thực hiện qua quy trình 6 bước: (1) Khởi tạo các bảng băm lưu trữ opcode, funct3, funct7; (2) Đọc mã nguồn Assembly từng dòng; (3) Tiền mã hóa nhằm loại bỏ comment, dòng trống và trích xuất địa chỉ nhãn vào Label Hash; (4) Đọc tệp Assembly sạch; (5) Dịch từng dòng lệnh hợp ngữ thành chuỗi nhị phân 32-bit; (6) Xuất tệp nhị phân để nạp trực tiếp vào Instruction Memory của phần cứng thông qua tác vụ $writememb.

5. Kết quả kiểm thử chức năng và tần số hoạt động của vi xử lý đạt được là bao nhiêu so với mục tiêu đề ra?

Thiết kế đã vượt qua 100% các bài kiểm thử chức năng trên phần mềm ModelSim (bao gồm kiểm thử đơn luồng, Out-of-Order, dự đoán nhánh động 2-bit, chuyển đổi ngữ cảnh, bài toán Producer-Consumer, bài toán Increasing và kiểm thử ngẫu nhiên từ RTG/RISC-V Test) và được tổng hợp nạp lên bo mạch Altera FPGA DE2. Tần số hoạt động sau tổng hợp (Post-simulation) đạt 55 MHz (thấp hơn mục tiêu kỳ vọng ban đầu là 80 MHz do giới hạn đường trễ tới hạn trên kit FPGA).


Kết luận

Khóa luận tốt nghiệp của tác giả Lê Nguyễn Hoàng Thiện đã nghiên cứu, thiết kế và hiện thực thành công bộ vi xử lý 32-bit RISC-V đa luồng 2 khe (2-slot threads) hỗ trợ tập lệnh RV32I và cơ chế đồng bộ RV32A (LR.W/SC.W) trên nền tảng phần cứng Altera FPGA. Công trình đã tích hợp các kỹ thuật vi kiến trúc tiên tiến bao gồm đường ống 5 tầng, thực thi ngoài thứ tự (Out-of-Order) với khối đổi tên thanh ghi RRF, dự đoán nhánh động 2-bit qua khối BTB và xây dựng trọn vẹn công cụ Assembler bằng PERL. Mặc dù tần số sau tổng hợp đạt 55 MHz (chưa đạt mức kỳ vọng 80 MHz), đồ án đã chứng minh tính khả thi, tính đúng đắn về mặt chức năng và cung cấp một tài liệu thiết kế vi mạch hoàn chỉnh, đóng góp thiết thực cho hướng nghiên cứu phát triển vi xử lý tiên tiến tại Việt Nam.