Chương 1: Giới thiệu đề tài - Chương đầu tiên giới thiệu về dé tài khóa luận và một số nghiên cứu liên quan. - Chương 2: Cơ sở lý thuyết - Chương này trình bày những cơ sở lý thuyết được sử dụng có liên quan đến nội dung nghiên cứu của đề tài như tìm hiểu sơ lược về kiến trúc tập lệnh mở RISC-V bao gồm: nội dung tổng quan về kiến trúc tập lệnh cơ sở, kiến trúc tập lệnh mở rộng và trình bày về kiến trúc tập lệnh được chọn để hiện thực đề tài. Hơn nữa ở chương này nhóm cũng sẽ nói sơ lược về sơ đồ hệ thống xác minh chức năng của bộ xử lý, tìm hiểu lý thuyết của các khối chức năng trong sơ đồ hệ thống đó bao gồm các khối: Random Test Generator, Testbench Controller, Comp-runner và Coverage Monitor. - Chwong 3: Thiết kế đề xuất - Dựa vào những kiến thức về cơ sở lý thuyết đã tim hiểu được ở chương 2 thì chương 3 này sẽ thê hiện thiết kế hệ thống một cách chỉ tiết của khóa luận.
Ngoài ra nhóm sẽ giải thích và minh họa cách thức hoạt động của từng khối trong hệ thống. Ở chương này nhóm cũng sẽ giới thiệu sơ lược về ngôn ngữ lập trình và phần mềm sử dụng để hiện thực khóa luận. - _ Chương 4: Mô phỏng và Đánh giá kết quả - Ở chương này, nhóm thực hiện sẽ trình bày những kết quả mà khóa luận đã đạt được thông qua một số biêu đồ thông kê số liệu. Ngoài ra nhóm sẽ trình bày độ bao phủ đạt được của RISC-V RTG.
Hơn nữa là kết quả của bộ phát sinh chương trình kiểm tra ngẫu nhiên cho thiết kế RISC-V sẽ được so sánh với các nghiên cứu liên quan. - Chương 5: Kết luận và Hướng phát triển - Chương cuối sẽ đúc kết lại khóa luận, tóm tắt toàn bộ công việc của nhóm thực hiện và những kết quả, thành tích đã đạt được. Đồng thời ở chương này nhóm thực hiện sẽ đưa ra đề xuất cho hướng phát triển tiếp theo của đề tài trong tương lai. Sơ lược về kiến trúc tập lệnh RISC-V 2.
Tổng quát Kiến trúc tập lệnh RISC-V được thiết kế theo kiểu module nhằm cho phép các nhà phát triển vi xử lý RISC-V có thể linh hoạt lựa chọn được kiến trúc phù hợp nhất cho ứng dụng của họ. RISC-V định nghĩa kiến trúc tập lệnh số nguyên 32-bit RV32I là kiến trúc tập lệnh cơ bản nhất. Với kiến trúc tập lệnh cơ sở này, vi xử lý RISC-V đã có tat cả những lệnh cơ bản, những lệnh điều khiển luồng, bộ thanh ghi, bộ nhớ, cách đánh địa chỉ bộ nhớ,. đủ dé thực hiện một vi xử lý đơn giản dạng tổng quát hỗ trợ đầy đủ cho phần mềm và trình biên dịch.
Từ kiến trúc tập lệnh cơ bản này, nhà phát triển vi xử lý RISC-V có thể linh hoạt chọn kết hợp với một hay nhiều tập lệnh mở rộng tùy chọn khác cho các ứng dụng mục tiêu. Tập lệnh mở rộng có thể là tập lệnh mở rộng chuẩn của RISC-V hoặc tập lệnh mở rộng phi tiêu chuẩn của nhà phát triển vi xử lý RISC-V cho một sản phẩm mục tiêu nhất định.1: Bảng các tập lệnh cơ sở và mở rộng của RISC-V Tên viết tắt Tên đầy đủ Chú thích RV32I Base Integer Instruction Set, 32-bit RV32E Base Integer Instruction Set (embedded) 4 tập lệnh cơ bản RV641 Base Integer Instruction Set, 64-bit RVI28I Base Integer Instruction Set, 128-bit M Integer Multiplication and Division Các mở rộng tiêu A Atomic Instruction l chuân F Single-Precision Floating-Point D Double-Precision Floating-Point Q Quad-Precision Floating-Point Decimal Floating-Point Dé hỗ trợ tốt hơn cho việc phát triển hệ sinh thái phần mềm của vi xử lý RISC- V, RISC-V đã cung cấp sẵn một tập các tập lệnh mở rộng tiêu chuẩn, bao gồm phép nhân chia số nguyên (M), các toán tử đơn nguyên (A), phép toán với số thực dau phẩy động độ chính xác đơn (F), phép toán với số thực dấu châm động độ chính xác kép (D). Một kiến trúc tập lệnh hỗ trợ tập lệnh cơ bản RV32I cùng với tat cả các tập lệnh vừa nêu (M, A, F, D) gọi là kiến trúc tập lệnh đa dụng, viết tắt là tập G, ví dụ như RV32G. Ngoài ra, RISC-V còn cung cấp một tập lệnh mở rộng tiêu chuẩn hữu ích nữa là tập lệnh nén dé giảm kích thước của mã máy (C).
Kiến trúc tập lệnh cơ ban Kiến trúc tập cơ sở đầu tiên và cơ bản nhất được RISC-V định nghĩa là kiến trúc tập lệnh RV32I, bao gồm 47 lệnh có thé được phân chia dựa trên chức năng và opcode thành 9 nhóm như trong Bảng 2.2: Phân loại các nl óm lệnh của tập lệnh RV32I Phân loại Opcode Lệnh Nhóm lệnh rẽ nhánh | 11_000_1 BEQ, BNE, BLT, BGE, BLTU, BGEU 00_000_1 LB, LH, LW, LBU, LHU Nhóm lệnh nạp 00 001_1 FLW, FLD 01_101_1 LUI 01_000_1 SB, SH, SW Nhóm lệnh lưu 01_001_1 FSW, FSD ADDI, SLTI, SLTIU, XORI, ORI, ANDI, 00_100_11 SLLI, SRLI, SRAI , ADD, SUB, SLL, SLT, SLTU, XOR, Nhóm lệnh sô học va SRL, SRA, OR, AND, MUL, MULH, luận lý 01_100 11 MULHSU, MULHU, DIV, DIVU, REM, REMU 00_101_11 AUIPC LR.W, Atomic Operations 01_011_11 AMOAND.W SCALL, SBREAK, RDCYCLE, RDCYCLEH, EDTIME, RDTIMEH, Nhóm lệnh hệ thống 11 100 11 RDINSTRET, RDINSTRETH, FRCSR, FRRM, FRFLAGS, FSCSR, FSRM, FSFLAGS, FSRMI, FSFLSGSI Nhóm lệnh đồng bộ 00 011 11 FENCE, FENCE.I Nhóm lệnh nhảy 11 011 11 JAL, JALR Nếu xét về định dang của lệnh thực thi RV32I được chia thành 6 nhóm: R- TYPE, I-TYPE, S-TYPE, SB-TPYE, U-TYPE, UJ-TYPE. Trong đó các định dạng R, I, S, U là bốn nhóm chính, hai nhóm SB-TPYE va UJ-TYPE giống hoàn toàn S- TYPE và U-TYPE ngoại trừ khác nhau về phần toán hạng số tức thời.3 trình bày chỉ tiết về các lệnh thuộc 6 định dạng lệnh và Bảng 2.4 trình bày cấu trúc của định dạng lệnh.3: Định dạng lệnh của các lệnh RV321 ISA Định dạng lệnh Lệnh R-TYPE ADD, AND, OR, XOR, SLL, SRL, SLT, SLTU, SUB, SRA. ADDI, ANDI, ORI, XORI, SLTI, SLTIU, SLLI, ray SRLI, SRAI, LB, LH, LW, LBU, LHU, JALR. S-TYPE SB;SH, SW: SB-TYPE BEQ, BNE, BLT, BGE, BLTU, BGEU.
UJ-TYPE JAL. U-TYPE AUIPC, LUI.4: Cấu trúc của định dạng lệnh Cấu trúc lệnh Lệnh funct7 rs2 ml funct3 rd opcode | R-type imm[11] | imm(10:5] | imml4:1] | imm[0] rsl funet3 rd opcode | Ixype imm{11] | imm[10:5] n2 ml imm[4:1] | imm[0] | opcode | S-type imm[12] | imm[10:5] n2 sl imm[4:1] | imm[11] | opcode | SB-type imm(31] imm[30:20] imm[19:15] | imm[14:12] sả opeode | U-type imm{20] | imm{10:5] | imm{4:1} | imm[0] | imm[19:15] | imm[14:12] sả opeode | U-type 11 Về thanh ghi, RV32I có một thanh ghi PC và 32 thanh ghi trong đó một thanh ghi x0 luôn mang giá trị là 0, cộng với 31 thanh ghi đa dụng x1-x31. Tat cả đều có độ rộng 32-bit. Tương tự như kiến trúc tập lệnh RISC, RV32I cũng có kiến trúc LOAD-STORE.
Điều đó có nghĩa là chỉ có các lệnh Load và Store truy cập vào bộ nhớ, còn lại các phép toán số học đều chi sử dung các thanh ghi. Ngoài ra RV32I có nghĩa là không gian địa chỉ là 32-bit và sử dung little endian. Tương ứng, RV64I có nghĩa là không gian địa chỉ là 64-bit và RV128I có không gian địa chỉ là 128-bit. RV64I và RV128I cũng được xem là những kiến trúc tập lệnh cơ sở.
Bên cạnh đó, còn một kiến trúc tập lệnh cơ sở nữa là RV32E định nghĩa cho những hệ thống nhúng. RV32E chỉ có 16 thanh ghi 32-bit và những bộ đếm của RV32I được tùy chọn có hay không. Kiến trúc tập lệnh mớ rộng Như danh sách các kiến trúc tập lệnh cơ bản và mở rộng của RISC-V đề cập ở trên, RISC-V định nghĩa rất nhiều tùy chọn tập lệnh mở rộng. Trong số đó, một số đã hoàn thiện và đặc tả kỹ thuật, còn lại vẫn còn đang phát triển.
Dưới đây là những mở rộng hiện có: M: tập những lệnh nhân chia số nguyên. A: tập những lệnh đơn nguyên Atomic. F: Single-precision floating point (IEEE 754-2008). D: Double-precision floating point (IEEE 754-2008).
Q: Quad-precision floating point (IEEE 754-2008). C: tập những lệnh nén (16-bit) để giảm kích thước của mã lệnh. Những tập lệnh mở rộng đang được phát triển và sẽ có sẵn trong tương lai gần là tập L (decimal float), B (bit manipulation), J (dynamically translated languages), T (transactional memory), P (packed SIMD), V (vector operations), N (user-level interrupts). RISC-V 321 Khóa luận này, nhóm sẽ sử dung kiến trúc tập lệnh RISC-V 32I (viết tắt là RV32I) dựa trên ISA.
Chức năng, ý nghĩa của nhóm lệnh rẽ nhánh được trình bay trong Bảng 2.7 lần lượt trình bày chức năng, ý nghĩa của nhóm lệnh nạp, nhóm lệnh lưu. Chức năng, ý nghĩa của nhóm lệnh số học và luận lý, nhóm lệnh nhảy được trình bày lần lượt tại Bang 2.5: Chức năng của nhóm lệnh rẽ nhánh Phân loại Lệnh Ví dụ Ý nghĩa Nếu hai thanh ghi có giá trị bằng BEQ BEQ x5, x6, 100 nhau, thì sẽ nhảy đến PC = PC + Immediate. Nếu hai thanh ghi có giá trị không BNE BNE xế, x6, 100 bằng nhau, thì sẽ nhảy đến PC = PC + Immediate. Nếu thanh ghi 1 có giá trị nhỏ hon BLT BLT x5, x6, 100 thanh ghi 2, thì sẽ nhảy đến PC = PC Nhóm + Immediate.
lệnh rẽ Nếu thanh ghi | có giá trị lớn hơn nhánh BGE BGE x5, x6, 100 hoặc bằng thanh ghi 2, thì sẽ nhảy đến PC = PC + Immediate. Nếu thanh ghi | có giá trị nhỏ hơn BLTU BLTU x5, x6, 100 thanh ghi 2, thì sẽ nhảy đến PC = PC + Immediate. Nếu thanh ghi | có gia tri lớn hơn BGEU BGEU x5, x6, 100 hoặc bằng thanh ghi 2, thì sẽ nhảy đến PC = PC + Immediate.6: Chức năng của nhóm lệnh nạp Phân loại Lệnh Ví dụ Ý nghĩa Tính địa chỉ memory với base lưu trong thanh ghi và offset lưu ở lệnh, LB LB x5, 40(x6) sau đó đến địa chỉ đó lấy byte kế tiếp lưu vào thanh ghi. Tinh địa chi memory với base lưu trong thanh ghi va offset lưu ở lệnh, LH LH x5, 40(x6) sau đó đến địa chỉ đó lấy halfword kế tiếp lưu vào thanh ghi.
Tinh địa chi memory với base lưu trong thanh ghi va offset lưu ở lệnh, LW LW x5, 40(x6) sau đó đến địa chỉ đó lấy word kế tiếp lưu vào thanh ghi. Nhóm Tính dia chi memory với base lưu lệnh nạp trong thanh ghi va offset lưu ở lệnh, sau đó đến địa chỉ đó lấy byte kế tiếp LBU LBU x5, 40(x6) lưu vào thanh ghi và sẽ mở rộng bit dựa vào MSB của số đã nạp, chèn bit 0 vào ở phía bên trái.