Bối cảnh và vấn đề nghiên cứu
Trong lịch sử phát triển vi xử lý từ những năm 1970, việc nâng cao hiệu năng tính toán truyền thống chủ yếu dựa vào tăng tần số xung nhịp hoạt động. Tuy nhiên, phương pháp này đã chạm ngưỡng vật lý vào khoảng giai đoạn 1983–2002 do giới hạn tiêu tán công suất nhiệt, hiện tượng dòng rò (leakage current) khi thu nhỏ kích thước bóng bán dẫn và trần tần số hoạt động thực tế (xấp xỉ 4 GHz). Thêm vào đó, theo quy luật Pollack (Pollack's rule), hiệu năng vi kiến trúc tăng tỉ lệ thuận với căn bậc hai của độ phức tạp logic, nghĩa là việc tăng gấp đôi số lượng bóng bán dẫn trên một lõi đơn chỉ giúp cải thiện khoảng 40% hiệu năng. Do đó, việc chuyển đổi sang kiến trúc vi xử lý đa nhân (multi-core processor) là hướng tiếp cận tất yếu nhằm khai thác tính song song ở mức luồng và mức dữ liệu với hiệu quả năng lượng cao.
Song song với sự phát triển phần cứng, kiến trúc tập lệnh mở RISC-V ra đời từ Đại học California, Berkeley đã tạo điều kiện cho các đơn vị nghiên cứu tự phát triển bộ xử lý mà không phải chịu chi phí bản quyền như x86 hay ARM. Trên thế giới, các nghiên cứu vi xử lý RISC-V đơn nhân (như RVCoreP, Shakti) hoặc đa nhân (như thiết kế 4 nhân của Manoj Kumar Gouda & D., thiết kế 36 nhân của nhóm Ahmed Kamaleldin) đã đạt được nhiều tiến bộ. Tuy nhiên, các thiết kế đa nhân nêu trên chưa tích hợp tập lệnh nguyên tử (atomic instructions) để giải quyết bài toán đồng bộ phần cứng, hoặc các nhân mã nguồn mở có sẵn (Pulpino RISCY, PicoRV32, Freedom) thường đi kèm nhiều khối phần cứng phụ trợ không cần thiết làm suy giảm hiệu năng. Tại Việt Nam, nghiên cứu vi xử lý RISC-V trước đó của An Xuân Tuấn (Khoa Kỹ thuật Máy tính, Trường Đại học Công nghệ Thông tin - ĐHQG-HCM) chỉ dừng lại ở vi xử lý đơn nhân hỗ trợ chế độ giám sát (supervisor mode) với tần số 12 MHz. Chưa có công trình trong nước nào công bố về thiết kế vi xử lý đa nhân hoàn chỉnh trên nền tảng RISC-V.
Đồ án tốt nghiệp kỹ sư ngành Kỹ thuật Máy tính của sinh viên Nguyễn Phan Hoàng Phúc (MSSV: 17520909), dưới sự hướng dẫn của ThS. Hồ Ngọc Diễm tại Trường Đại học Công nghệ Thông tin - ĐHQG-HCM (thực hiện từ ngày 08/03/2021 đến ngày 25/06/2021, bảo vệ theo Quyết định số 462/QĐ-ĐHCNTT ngày 23/07/2021), được triển khai nhằm giải quyết các vấn đề trên với 4 mục tiêu cụ thể:
- Thiết kế vi xử lý 32-bit đa chu kỳ/đường ống có khả năng thực thi tập lệnh cơ sở RV32I và phần mở rộng tập lệnh nguyên tử RV32A phục vụ đồng bộ.
- Thiết kế bộ trọng tài (Arbitrator) kiểm soát và xử lý các vi phạm truy xuất bộ nhớ dữ liệu dùng chung giữa các nhân trong quá trình vận hành.
- Kiểm chứng thiết kế bằng các phương pháp công nghiệp chuẩn hóa (mô phỏng ModelSim, sinh tập kiểm thử ngẫu nhiên RTG, nạp thực tế lên FPGA).
- Đảm bảo tần số hoạt động tối đa ($F_{max}$) của bộ xử lý đạt tối thiểu 100 MHz trên kit FPGA Altera DE2.
Cơ sở lý thuyết và phương pháp
Đồ án xây dựng dựa trên các nền tảng lý thuyết vi kiến trúc và kiến trúc tập lệnh máy tính:
- Kiến trúc tập lệnh RISC-V (RV32I và RV32A): Tập lệnh số nguyên 32-bit RV32I bao gồm 40 lệnh người dùng bắt buộc, chia thành 3 nhóm chức năng (tính toán số học/logic, điều khiển rẽ nhánh/nhảy, nạp/lưu dữ liệu bộ nhớ theo kiến trúc load-store). Hệ thống thanh ghi gồm 32 thanh ghi đa dụng 32-bit ($x_0 - x_{31}$, trong đó $x_0$ luôn gán giá trị 0) và con trỏ lệnh PC. Tập mở rộng RV32A cung cấp các lệnh đọc-sửa-ghi nguyên tử (Atomic Memory Operations - AMOs) và cặp lệnh độc quyền Load-Reserved / Store-Conditional (
lr.w, sc.w) để thực hiện đồng bộ giữa các nhân mà không bị xung đột dữ liệu.
- Mô hình bộ nhớ và tính nhất quán (Coherence & Consistency): Trong hệ thống đa nhân chia sẻ bộ nhớ, tính toàn vẹn dữ liệu được đảm bảo thông qua bộ trọng tài phần cứng kết hợp mô hình nhất quán tuần tự (Sequential Consistency) nhằm duy trì trật tự truy xuất dữ liệu giữa các nhân.
| Kiến trúc tập lệnh (ISA) |
Ưu điểm chính |
Nhược điểm chính |
| x86 |
Hệ sinh thái phần mềm đồ sộ, phổ biến trên PC/Server |
Kiến trúc CISC phức tạp, tập thanh ghi hạn chế, khó ảo hóa cổ điển |
| ARMv7 / ARMv8 |
Tối ưu cho thiết bị di động, phân chia nhiều profile (A, R, M) |
Kiến trúc phức tạp, cấu trúc tập lệnh cồng kềnh, yêu cầu phí bản quyền cao |
| MIPS |
Mã hóa 4-byte cố định, giải mã đơn giản |
Không gian mở rộng opcode hạn chế, tối ưu quá mức cho đường ống 5 tầng |
| RISC-V |
Mã nguồn mở, miễn phí bản quyền, mã hóa trường lệnh đồng nhất, tính tùy biến cao |
Nhiều tập mở rộng còn ở dạng dự thảo, hệ sinh thái đang trong giai đoạn hoàn thiện |
Phương pháp nghiên cứu thực nghiệm và thiết kế kỹ thuật bao gồm:
- Phương pháp thiết kế và tổng hợp phần cứng: Hiện thực hóa vi kiến trúc bằng ngôn ngữ mô tả phần cứng, tổng hợp mạch netlist theo quy trình thiết kế Altera FPGA Design Flow trên phần mềm Quartus II.
- Phương pháp mô phỏng và kiểm thử tự động: Sử dụng phần mềm ModelSim để mô phỏng dạng sóng. Xây dựng bộ tạo ca kiểm thử ngẫu nhiên (Random Test Generator - RTG) kết hợp bộ công cụ Assembler tự phát triển để kiểm tra tự động hàng loạt kịch bản thực thi.
- Phương pháp thực nghiệm phần cứng: Nạp tệp cấu hình và kiểm chứng hoạt động thời gian thực trên bo mạch FPGA Altera DE2.
Thiết kế và triển khai
Hệ thống được thiết kế hoàn chỉnh gồm hai cấu phần chính: công cụ phần mềm hỗ trợ (Assembler, RTG) và phần cứng vi xử lý 2 nhân (Dual-core Processor System).
Thiết kế phần mềm hỗ trợ (Assembler)
Chương trình Assembler được phát triển nhằm tự động chuyển đổi mã nguồn hợp ngữ RISC-V thành chuỗi nhị phân phục vụ nạp vào bộ nhớ lệnh và sinh tệp hiển thị phục vụ gỡ lỗi (.dis):
- Khởi tạo dữ liệu và bảng băm nhãn: Khởi tạo bảng băm cho các trường
opcode, funct3, funct7 và danh sách thanh ghi. Quét toàn bộ mã nguồn hợp ngữ để phát hiện nhãn, ghi nhận địa chỉ nhãn tương ứng và xử lý các giả lệnh (pseudo-instructions) như chuyển đổi li thành cặp lệnh lui và addi.
- Định dạng và phân tách trường lệnh: Loại bỏ các khoảng trắng thừa và dòng chú thích (ký tự
# hoặc //). Phân tách chuỗi lệnh thành các toán tử và toán hạng theo dấu phân cách.
- Xác thực và mã hóa nhị phân: Hỗ trợ đầy đủ 6 định dạng lệnh cơ bản (R, I, S, B, U, J) và định dạng lệnh nguyên tử AMOs. Tự động kiểm tra tính hợp lệ của phạm vi hằng số trực tiếp (immediate), độ dài chuỗi và báo lỗi chi tiết nếu phát hiện câu lệnh sai cú pháp.
Thiết kế phần cứng vi kiến trúc
Hệ thống phần cứng bao gồm bộ xử lý 2 nhân độc lập, bộ nhớ lệnh hai cổng, bộ nhớ dữ liệu hai cổng và khối phân xử trung tâm:
| Khối phần cứng |
Đặc tả cấu trúc và chức năng |
| Nhân xử lý (Core 0 & Core 1) |
Kiến trúc đường ống 6 tầng (6-stage pipeline): 1. IF (Instruction Fetch): Nạp lệnh từ bộ nhớ lệnh theo con trỏ PC. 2. ID (Instruction Decode): Giải mã lệnh, sinh tín hiệu điều khiển, quản lý đặt trước địa chỉ nguyên tử (atomic reservation) và phát hiện xung đột (hazard detection). 3. B (Branch/Bypass): Tính toán địa chỉ nhảy/rẽ nhánh và chuyển tiếp dữ liệu (data forwarding) từ tầng MEM/WB. 4. EX (Execute): Khối ALU tính toán số học, logic và xử lý dịch bit. 5. MEM (Memory Access): Giao tiếp truy xuất đọc/ghi bộ nhớ dữ liệu. 6. WB (Write Back): Ghi kết quả thực thi trở lại tập thanh ghi. |
| Bộ nhớ lệnh (Instruction Memory) |
Bộ nhớ hai cổng (Dual-port ROM/RAM), cung cấp luồng lệnh độc lập cho từng nhân thông qua các bus địa chỉ inst_address_0 và inst_address_1. |
| Bộ nhớ dữ liệu (Data Memory) |
Bộ nhớ hai cổng chia làm 3 không gian độc lập: - Phân vùng riêng cho Core 0 (Private Region 0). - Phân vùng riêng cho Core 1 (Private Region 1). - Phân vùng dùng chung cho cả hai nhân (Shared Region). |
| Khối trọng tài (Arbitrator) |
Gồm 2 bộ phân xử con (sub_arbitrator) chịu trách nhiệm giải mã bus điều khiển và bus địa chỉ từ 2 nhân. Ngăn chặn xung đột khi cả 2 nhân cùng ghi vào một địa chỉ trong vùng nhớ chung tại cùng chu kỳ xung nhịp, đồng thời chặn hành vi ghi trái phép vào vùng nhớ riêng của nhân khác. |
| Thanh ghi đường ống bộ nhớ (Pipeline Registers) |
Chèn 2 tầng thanh ghi trung gian giữa nhân và bộ nhớ dữ liệu để tối ưu hóa đường truyền tín hiệu tới hạn (critical path), giúp tăng xung nhịp $F_{max}$. Thao tác đọc/ghi bộ nhớ tốn thêm 2 chu kỳ và kích hoạt tín hiệu tạm dừng (stall) cho đến khi nhận phản hồi từ bộ nhớ. |
Nội dung chính theo từng chương
Chương 1. Introduction to instruction set architecture
Chương 1 trình bày tổng quan về 3 thành phần cốt lõi của kiến trúc máy tính: kiến trúc tập lệnh (ISA), vi kiến trúc (microarchitecture) và thiết kế hệ thống (system design). Tác giả so sánh chi tiết ưu nhược điểm của RISC-V với các kiến trúc x86, ARMv7, ARMv8, MIPS; phân tích cấu trúc tập lệnh RV32I, quy ước 32 thanh ghi, các chế độ định vị địa chỉ và cơ chế mở rộng nguyên tử RV32A. Đồng thời, chương này khảo sát các mô hình vi kiến trúc kinh điển (VLIW, Multithreaded, Out-of-order, Multi-core), làm rõ bài toán xung đột dữ liệu bộ nhớ (coherence and consistency) và giới thiệu mô hình bộ nhớ tuần tự (Sequential Consistency) cùng mô hình RVWMO.
Chương 2. System design
Chương 2 mô tả thiết kế mức hệ thống bao gồm luồng làm việc giữa công cụ phần mềm Assembler và kiến trúc phần cứng. Tác giả đặc tả giao tiếp bus tổng thể giữa 2 nhân vi xử lý, khối trọng tài và hệ thống bộ nhớ. Các luồng tín hiệu chính bao gồm bus địa chỉ lệnh (inst_address_0/1), bus dữ liệu trả về (data_return_0/1), bus dữ liệu ghi (data_write_0/1), bus địa chỉ dữ liệu (data_address_0/1) và bus điều khiển ghi (control_bus_0/1, write_bus_0/1).
Chương 3. Detail Design
Chương 3 đi sâu vào thiết kế chi tiết từng module phần mềm và khối phần cứng:
- Phần mềm: Thuật toán lập bảng băm nhãn, thuật toán phân tách chuỗi lệnh và giải thuật kiểm tra/chuyển đổi định dạng lệnh nhị phân (R, I, S, B, U, J, AMOs).
- Phần cứng: Sơ đồ nguyên lý và giao tiếp vào/ra (I/O interface) của bộ nhớ lệnh, bộ nhớ dữ liệu, bộ phân xử con (
sub_arbitrator), bộ điều khiển trọng tài (arbitrator_controller) và các quy tắc vận hành bộ nhớ. Thiết kế chi tiết từng tầng đường ống của nhân xử lý: IF, ID (bộ giải mã, bộ điều khiển, mã hóa trường điều khiển), B (bộ rẽ nhánh và chuyển tiếp dữ liệu), EX (khối ALU và bộ giải mã điều khiển ALU), MEM và WB.
Chương 4. Directed test verification
Chương 4 trình bày kế hoạch kiểm chứng toàn diện thông qua các phương pháp:
- Kiểm thử có hướng (Directed test) cho từng lệnh đơn lẻ và chuỗi lệnh phụ thuộc.
- Kiểm thử tự động bằng bộ tạo ca kiểm thử ngẫu nhiên (RTG) để đánh giá khả năng xử lý rẽ nhánh, hazard và nạp/lưu dữ liệu.
- Kiểm chứng tập lệnh mở rộng RV32A và các kịch bản vi phạm truy xuất bộ nhớ qua mô phỏng dạng sóng trên ModelSim (kiểm tra chuỗi lệnh
lr.w/sc.w, các lệnh tính toán nguyên tử AMO).
- Tổng hợp phần cứng sau thiết kế (Post-synthesis), đo đạc tần số cực đại $F_{max}$, kiểm tra nội dung bộ nhớ dữ liệu và phân tích so sánh tài nguyên vi xử lý với các kiến trúc đường ống và vi xử lý đa nhân khác.
Conclusion & Future Work và Phụ lục
Tổng kết các hạng mục công việc đã hoàn thành, chỉ ra các giới hạn về mô hình bộ nhớ và định hướng nâng cấp. Phụ lục giới thiệu mở rộng về các tập lệnh x86, ARM, MIPS và các vi kiến trúc tiên tiến (VLIW, Out-of-Order).
Kết quả và đóng góp
Kết quả đạt được
- Hiện thực hóa vi kiến trúc đa nhân RISC-V hoàn chỉnh: Thiết kế thành công vi xử lý 2 nhân, mỗi nhân sở hữu đường ống 6 tầng thực thi đầy đủ 40 lệnh của tập lệnh cơ sở RV32I và toàn bộ các lệnh nguyên tử thuộc tập mở rộng RV32A (
lr.w, sc.w, amoswap.w, amoadd.w, amoand.w, amoor.w, amoxor.w, amomin.w, amomax.w, amominu.w, amomaxu.w).
- Kiểm soát xung đột và đồng bộ bộ nhớ dữ liệu: Khối trọng tài phần cứng hoạt động chính xác theo 3 phân vùng bộ nhớ, xử lý thành công tất cả các trường hợp tranh chấp ghi đồng thời và truy xuất vùng nhớ vi phạm mà không làm sai lệch dữ liệu trong môi trường mô phỏng ModelSim.
- Xây dựng chuỗi công cụ kiểm chứng tự động: Phát triển hoàn chỉnh phần mềm Assembler và bộ sinh kiểm thử ngẫu nhiên RTG, rút ngắn đáng kể thời gian kiểm thử và đối soát kết quả dạng sóng.
- Tổng hợp phần cứng và thực nghiệm: Hệ thống được tổng hợp thành công bằng công cụ Quartus, vượt qua các bài kiểm tra mô phỏng sau tổng hợp (Post-synthesis simulation) và được nạp thực tế lên kit phát triển FPGA Altera DE2 với tần số hoạt động đạt yêu cầu đề ra ($\ge 100\text{ MHz}$).
Đóng góp học thuật và kỹ thuật
- Đây là một trong những công trình nghiên cứu và hiện thực hóa thành công vi xử lý đa nhân kiến trúc RISC-V 32-bit có tích hợp tập lệnh đồng bộ nguyên tử RV32A đầu tiên ở cấp độ đồ án tốt nghiệp kỹ sư tại Trường Đại học Công nghệ Thông tin - ĐHQG-HCM.
- Cung cấp giải pháp phần cứng phân xử bộ nhớ chia sẻ kết hợp phân vùng dữ liệu riêng/chung rõ ràng, loại bỏ hiện tượng tranh chấp dữ liệu giữa các nhân mà không cần hệ thống phần cứng phụ trợ quá phức tạp.
Hạn chế và hướng nghiên cứu tiếp
- Hạn chế:
- Hệ thống sử dụng mô hình nhất quán tuần tự (Sequential Consistency), đòi hỏi nhân vi xử lý phải tạm dừng (stall) trong các chu kỳ truy xuất bộ nhớ dữ liệu qua các thanh ghi đường ống, làm giảm hiệu suất tổng thể khi mật độ truy xuất bộ nhớ tăng cao.
- Vi kiến trúc của từng nhân vẫn là xử lý tuần tự theo thứ tự (in-order), chưa hỗ trợ cơ chế thực thi ngoài trật tự (out-of-order) hay siêu vô hướng (superscalar).
- Hướng nghiên cứu tiếp:
- Nâng cấp vi kiến trúc từng nhân thành vi xử lý Out-of-order hoặc Superscalar nhằm nâng cao năng lực khai thác song song mức lệnh (ILP).
- Nghiên cứu triển khai mô hình nhất quán nới lỏng (Relaxed Consistency) hoặc chuẩn RVWMO của RISC-V để giảm thiểu thời gian chờ nạp/lưu dữ liệu.
- Tích hợp thêm các tập mở rộng tiêu chuẩn khác của RISC-V như RV32M (nhân/chia số nguyên), RV32F/D (xử lý số thực dấu chấm động đơn/đôi) và RV32C (nén lệnh 16-bit).
Giá trị tham khảo
Đồ án tốt nghiệp là tài liệu kỹ thuật có giá trị thực tiễn cao đối với sinh viên, học viên cao học và kỹ sư thuộc các chuyên ngành Kỹ thuật Máy tính, Thiết kế Vi mạch (IC Design) và Hệ thống Nhúng. Cụ thể:
- Phần thiết kế đường ống 6 tầng (IF, ID, B, EX, MEM, WB): Là tài liệu tham khảo trực quan cho việc hiện thực hóa bộ xử lý RISC-V trên RTL, đặc biệt là kỹ thuật tách tầng B (Branch/Bypass) để tối ưu giải mã và chuyển tiếp dữ liệu.
- Thiết kế khối Trọng tài và phân vùng bộ nhớ dữ liệu: Cung cấp mô hình giải quyết bài toán đồng bộ phần cứng và truy xuất bộ nhớ đa cổng cho các hệ thống vi xử lý đa nhân.
- Quy trình kiểm thử tự động (Assembler + RTG + ModelSim + Quartus): Cung cấp phương pháp luận và công cụ kiểm chứng mạch số bán dẫn tiệm cận với quy trình công nghiệp.
Câu hỏi thường gặp
1. Tại sao tác giả lại chọn kiến trúc tập lệnh RISC-V thay vì x86, ARM hay MIPS?
Kiến trúc x86 và ARM có cấu trúc tập lệnh phức tạp, cồng kềnh và đòi hỏi chi phí bản quyền thương mại rất lớn. MIPS tuy có định dạng 4-byte cố định nhưng mã hóa kém tối ưu (lãng phí 5-bit trong lệnh R-type) và không gian mở rộng opcode hạn chế. RISC-V được chọn vì là chuẩn ISA mở, miễn phí bản quyền, cấu trúc mã hóa trường thanh ghi cố định vị trí giúp giải mã song song với nạp thanh ghi, đồng thời cho phép mở rộng module linh hoạt (RV32I, RV32A, RV32M...).
2. Tầng B (Branch/Bypass) trong cấu trúc đường ống 6 tầng của mỗi nhân có vai trò gì?
Tầng B nằm giữa tầng ID và EX, đảm nhiệm hai nhiệm vụ chuyên biệt: (1) Tính toán giá trị con trỏ lệnh PC và đưa ra quyết định rẽ nhánh/nhảy nếu lệnh đang thực thi là lệnh branch/jump; (2) Thực hiện cơ chế chuyển tiếp dữ liệu (data forwarding/bypass) trực tiếp từ tầng MEM hoặc WB về cho các lệnh kế tiếp nhằm giải quyết xung đột dữ liệu (data hazard) mà không làm tắc nghẽn đường ống.
3. Bộ trọng tài (Arbitrator) xử lý các xung đột bộ nhớ giữa hai nhân bằng nguyên tắc nào?
Bộ nhớ dữ liệu được chia làm 3 vùng: 2 vùng nhớ riêng cho từng nhân và 1 vùng nhớ chia sẻ chung. Bộ trọng tài (chứa 2 sub-arbitrator) sẽ giám sát liên tục tín hiệu điều khiển và bus địa chỉ từ cả hai nhân: nếu phát hiện hai nhân cùng ghi vào một địa chỉ trong vùng nhớ chung tại cùng chu kỳ xung nhịp, hoặc một nhân cố tình ghi vào vùng nhớ riêng của nhân còn lại, bộ trọng tài sẽ ngăn chặn thao tác ghi sai quy tắc để bảo đảm tính toàn vẹn dữ liệu.
4. Phần mở rộng RV32A giải quyết bài toán gì trong hệ thống vi xử lý đa nhân của đồ án?
Trong hệ thống đa nhân có bộ nhớ chia sẻ, việc đọc và ghi dữ liệu đồng thời dễ dẫn đến tình trạng tranh chấp (race conditions). Tập mở rộng RV32A cung cấp các lệnh độc quyền lr.w/sc.w (Load-Reserved/Store-Conditional) và các phép toán nguyên tử AMO (Swap, Add, And, Or, Xor, Min, Max), cho phép nhân thực hiện chuỗi thao tác Đọc - Sửa - Ghi (Read-Modify-Write) trên một ô nhớ một cách nguyên tử, đảm bảo không bị nhân khác can thiệp giữa chừng.
5. Công cụ Assembler tự phát triển hỗ trợ những tính năng gì cho quá trình kiểm chứng?
Assembler tự động đọc mã nguồn hợp ngữ .asm, lọc bỏ chú thích và dòng trống, quét và lập bảng băm cho nhãn (labels), phân tách toán tử và toán hạng, hỗ trợ chuyển đổi các giả lệnh (như li) và xử lý định dạng ngoặc đơn imm(rs1) của lệnh bộ nhớ. Sau đó, nó xác thực tính hợp lệ của lệnh và xuất ra tệp nhị phân .bin để nạp vào bộ nhớ lệnh cùng tệp hiển thị .dis phục vụ gỡ lỗi.
Kết luận
Đồ án tốt nghiệp của sinh viên Nguyễn Phan Hoàng Phúc đã nghiên cứu và hiện thực hóa thành công hệ thống vi xử lý đa nhân (2 lõi) 32-bit hoàn chỉnh dựa trên kiến trúc tập lệnh RISC-V (RV32I và RV32A). Thiết kế đường ống 6 tầng kết hợp cùng khối trọng tài phân xử bộ nhớ chia sẻ đã giải quyết triệt để bài toán đồng bộ phần cứng và bảo toàn tính nhất quán dữ liệu giữa các nhân. Với quy trình kiểm thử tự động toàn diện trên ModelSim và tổng hợp đạt tần số trên 100 MHz trên bo mạch FPGA Altera DE2, công trình là một đóng góp kỹ thuật tiêu biểu trong lĩnh vực thiết kế vi mạch và hệ thống nhúng tại Việt Nam.