Sự hình thành của RISC-V - Là một tổ chức phi lợi nhuận được thành lập vào tháng 8 năm 2015 đểquản lý công khai ISA, tiêu chuẩn hóa, bảo vệ và thúc đẩy kiến trúc tập lệnhRISC-V mở và miễ
Trang 1TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
Giảng viên: Ths.Hoàng Anh Tuấn
Sinh viên thực hiện
Hoàng Văn Nhật Anh 18200056
Nguyễn Công Danh 18200074
Trang 2MỤC LỤC
I Giới thiệu 3
1 Lịch sử 3
2 Sự hình thành của RISC-V 4
3 Trạng thái đặc điểm kỹ thuật 5
II TỔNG QUAN VỀ RISC-V 6
1 Quy ước đặt tên RISC-V ISA 6
2 Phần mở rộng tiêu chuẩn 6
3 Tập tin thanh ghi 7
4 Chế độ RISC-V 8
III Hướng dẫn RISC-V 9
1 RISC-V Reference 9
2 So sánh kích thước mã giữa RISC-V và ARM 12
3 Phần mở rộng nguyên tử theo tiêu chuẩn “A” (Atomic Instructions) 13
3.1 Hoạt động bộ nhớ nguyên tử 13
3.2 Các hướng dẫn tải - dự trữ/ lưu trữ có điều kiện 15
4 Hướng dẫn hàng rào (Fence instructions) 17
IV Ngắt RISC-V 18
1 Khái niệm Ngắt 18
2 Ngắt vào và Thoát 18
3 Thanh ghi trạng thái điều khiển ngắt 19
3.1 Thanh ghi trạng thái máy (mstatus) 19
Trang 33.2 Thanh ghi cho phép ngắt máy (mie) 19
3.3 Thanh ghi đang chờ xử lý ngắt của máy (mip) 20
3.4 Thanh ghi nguyên nhân máy (mcause) 20
3.5 Máy Bẫy Vector (mtvec) 21
4 Các ưu tiên ngắt quãng 22
V Thanh Ghi Điều Khiển Và Thanh Ghi Trạng Thái 22
1 Thanh ghi điều khiển và trạng thái (CSRs) 22
2 Nhận dạng thanh ghi điều khiển và trạng thái (CSRs) 25
3 Trạng thái máy 29
4 Bộ định thời CSRs 30
5 Bộ giám sát CSRs 31
6 Bộ nhớ ảo 32
7 Bảo vệ bộ nhớ vật lý 33
KIẾN TRÚC RISC-V
Trang 41 Giới thiệu
2 Lịch sử
- Thuật ngữ RISC (Reduced Instructions Set Computer - Máy tính với tậplệnh đơn giản hóa) có từ khoảng năm 1980 Trước đó, có một số kiến thức chorằng máy tính đơn giản hơn có thể hiệu quả, nhưng các nguyên tắc thiết kếkhông được mô tả rộng rãi Máy tính đơn giản, hiệu quả luôn được quan tâmtrong giới học thuật, và dẫn đến bộ hướng dẫn RISC DLX cho ấn bản đầu tiêncủa kiến trúc máy tính Phương pháp tiếp cận định lượng vào năm 1990, trong
đó David Patterson là đồng tác giả và sau đó ông đã tham gia vào RISC- Vduyên khởi DLX được thiết kế để sử dụng cho mục đích giáo dục; các nhà họcthuật và những người có sở thích đã triển khai nó bằng cách sử dụng các mảngcổng có thể lập trình trường, nhưng nó không bao giờ thực sự được dự định đểtriển khai thương mại CPU ARM , phiên bản 2 trở về trước, có tập lệnh miềncông cộng và vẫn được hỗ trợ bởi Bộ sưu tập trình biên dịch GNU (GCC), mộttrình biên dịch phần mềm miễn phí phổ biến Ba lõi nguồn mở tồn tại cho ISAnày, nhưng chưa bao giờ được sản xuất OpenRISC là một ISA mã nguồn mởdựa trên DLX, với các thiết kế RISC được liên kết và được hỗ trợ đầy đủ với cáctriển khai GCC và Linux , mặc dù nó cũng có ít triển khai thương mại
- RISC – V (phát âm Risk V) được bắt đầu bởi dự án 3 tháng vào năm
2010 của trường Đại học California Berkeley của nhóm nghiên cứu sinh YunsupLee và Andrew Waterman, Krste Asanovic Kế hoạch này là hỗ trợ cả ngườidùng học thuật và công nghiệp David Patterson tại Berkeley đã tham gia hợptác với tư cách là người khởi xướng Berkeley RISC, và RISC-V là thế hệ thứnăm cùng tên trong loạt dự án nghiên cứu hợp tác dựa trên RISC kéo dài củaông Ở giai đoạn này, sinh viên cung cấp phần mềm, mô phỏng và thiết kế CPUban đầu Các tác giả RISC-V và tổ chức của họ ban đầu lấy nguồn tài liệuISA và một số thiết kế CPU theo giấy phép BSD , cho phép các tác phẩm pháisinh - chẳng hạn như thiết kế chip RISC-V - mở và miễn phí, hoặc đóng và độc
Trang 5quyền Bản thân đặc tả ISA (tức là bảng mã của tập lệnh) đã được xuất bản vàonăm 2011 dưới dạng mã nguồn mở, với mọi quyền được bảo lưu Báo cáo kỹthuật thực tế (một biểu hiện của thông số kỹ thuật) sau đó đã được cấp phépCreative Commons để cho phép các nhà đóng góp bên ngoài nâng cao thông quaRISC-V Foundation và sau này là RISC-V International.
3 Sự hình thành của RISC-V
- Là một tổ chức phi lợi nhuận được thành lập vào tháng 8 năm 2015 đểquản lý công khai ISA, tiêu chuẩn hóa, bảo vệ và thúc đẩy kiến trúc tập lệnhRISC-V mở và miễn phí cùng với hệ thống phần cứng và phần mềm để sử dụngtrong tất cả các thiết bị máy tính
- RISC-V Foundation có 3 chức năng chính:
Chỉ đạo sự phát triển trong tương lai của ISA
Kiểm tra tuân thủ (kiểm tra sự phù hợp) là một kỹ thuật kiểm traphi chức năng được thực hiện để xác nhận xem hệ thống được phát triển cóđáp ứng các tiêu chuẩn quy định của tổ chức hay không
Quảng bá kiến trúc tại các sự kiện trong ngành
- Tổ chức có hơn 230 thành viên đại diện cho một loạt các thị trường
- Tính đến năm 2019, tổ chức này đã xuất bản các ấn phẩm tự do địnhnghĩa RISC-V và cho phép sử dụng không giới hạn của ISA cho cả thiết kế phầnmềm và phần cứng Tuy nhiên, chỉ những thành viên trả tiền của Tổ ChứcRISC-V mới có thể bỏ phiếu để phê duyệt các thay đổi hoặc sử dụng logo tươngthích đã đăng ký nhãn hiệu
- Thành viên RISC-V Foundation: Các thành viên như Qualcomm vàSamsung ở Marbella, cũng có các đại diện từ các công ty phần mềm với cáccông ty như Google, công cụ Picasa và các nhà cung cấp thiết bị hỗ trợ với cáccông ty như Sega, Lauterbach và IAR
KIẾN TRÚC RISC-V
Trang 6Hình 1: Các thành viên trong RISC-V Foundation
4. Trạng thái đặc điểm kỹ thuật
- Có một số đặc điểm kỹ thuật chính là user mode and privilege mode
User mode: phiên bản hiện tại của đặc tả User mode là phiên bản2.2, đã bị đóng băng vào năm 2014 ở phiên bản 2.0 và kể từ phiên bản 2.0,một số cập nhật nhỏ như các hướng dẫn CSR và FENCE.I chuyển ra khỏiphần mở rộng cơ sở "I", một số giải thích rõ về mô hình bộ nhớ
Privilege mode: chỉ được phê duyệt ở phiên bản 1.11
Thông số Debug: cũng đã được phê chuẩn ở phiên bản 0.13 Ngoài những thông số kỹ thuật chính còn có các thông số kỹ thuật phụ đang phát triển
Hình 2: Trạng thái đặc điểm kỹ thuật
Trang 75 TỔNG QUAN VỀ RISC-V
1 Quy ước đặt tên RISC-V ISA
- RISC-V sử dụng tiêu chuẩn quy ước đặt tên để mô tả các ISA được hỗtrợ trong một triển khai nhất định
- Tên ISA định dạng: RV[###][abc…xyz]
Trang 8- Ví dụ:
3 Tập tin thanh ghi
- RV32I / 64I có 32 thanh ghi số nguyên
Thanh ghi 32 FP tùy chọn với phần mở rộng F và D
RV32E giảm tệp thanh ghi xuống còn 16 thanh ghi số nguyên chocác thiết bị nhúng hạn chế khu vực
- Chiều rộng của thanh ghi được xác định bởi ISA
- RISC-V Application Binary Interface (ABI) xác định các chức năng tiêuchuẩn cho thanh ghi
Cho phép khả năng tương tác phần mềm
- Các công cụ phát triển thường sử dụng tên ABI cho đơn giản
Hình 4: Tập tin thanh ghi
32 thanh ghi, mỗi thanh ghi 32 bit
x0 có dây đến không
Ghi cổng được lập chỉ mục qua RW
đang giảm dần khi WE = 1
Trang 9 Đọc các cổng được lập chỉ mục qua RA, RB.
Chế độ người giám sát (S mode)
Chế độ siêu giám sát (H mode)
Trang 10imm[31:12] rd opcode U-type imm[20j10:1j11j19:12] rd opcode J-type
Hướng dẫn số nguyên cơ sở:
Inst Name FMT Opcode funct3 funct7 Description (C) Note add ADD R 0110011 0x0 0x00 rd = rs1 + rs2
sub SUB R 0110011 0x0 0x20 rd = rs1 - rs2
xor XOR R 0110011 0x4 0x00 rd = rs1 ˆ rs2
or OR R 0110011 0x6 0x00 rd = rs1 | rs2
and AND R 0110011 0x7 0x00 rd = rs1 & rs2
sll Shift Left Logical R 0110011 0x1 0x00 rd = rs1 << rs2
srl Shift Right Logical R 0110011 0x5 0x00 rd = rs1 >> rs2
sra Shift Right Arith* R 0110011 0x5 0x20 rd = rs1 >> rs2 msb-extends slt Set Less Than R 0110011 0x2 0x00 rd = (rs1 < rs2)?1:0
sltu Set Less Than (U) R 0110011 0x3 0x00 rd = (rs1 < rs2)?1:0 zero-extends addi ADD Immediate I 0010011 0x0 rd = rs1 + imm
xori XOR Immediate I 0010011 0x4 rd = rs1 ˆ imm
ori OR Immediate I 0010011 0x6 rd = rs1 | imm
andi AND Immediate I 0010011 0x7 rd = rs1 & imm
slli Shift Left Logical Imm I 0010011 0x1 imm[5:11]=0x00 rd = rs1 << imm[0:4]
srli Shift Right Logical Imm I 0010011 0x5 imm[5:11]=0x00 rd = rs1 >> imm[0:4]
srai Shift Right Arith Imm I 0010011 0x5 imm[5:11]=0x20 rd = rs1 >> imm[0:4] msb-extends slti Set Less Than Imm I 0010011 0x2 rd = (rs1 < imm)?1:0
sltiu Set Less Than Imm (U) I 0010011 0x3 rd = (rs1 < imm)?1:0 zero-extends
lb Load Byte I 0000011 0x0 rd = M[rs1+imm][0:7]
Trang 11lh Load Half I 0000011 0x1 rd = M[rs1+imm][0:15]
lw Load Word I 0000011 0x2 rd = M[rs1+imm][0:31]
lbu Load Byte (U) I 0000011 0x4 rd = M[rs1+imm][0:7] zero-extends lhu Load Half (U) I 0000011 0x5 rd = M[rs1+imm][0:15] zero-extends sb
0100011 0100011 0100011
0x0 0x1 0x2
M[rs1+imm][0:7] = rs2[0:7]
M[rs1+imm][0:15] = rs2[0:15]
M[rs1+imm][0:31] = rs2[0:31]
beq Branch == B 1100011 0x0 if(rs1 == rs2) PC += imm
bne Branch != B 1100011 0x1 if(rs1 != rs2) PC += imm
blt Branch < B 1100011 0x4 if(rs1 < rs2) PC += imm
bge
bltu Branch ≤Branch < (U) BB 11000111100011 0x50x6 if(rs1 >= rs2) PC += immif(rs1 < rs2) PC += imm zero-extends bgeu Branch ≥ (U) B 1100011 0x7 if(rs1 >= rs2) PC += imm zero-extends jal
jalr Jump And LinkJump And Link Reg JI 11011111100111 0x0 rd = PC+4; PC += immrd = PC+4; PC = rs1 + imm
lui
auipc Load Upper ImmAdd Upper Imm to PC UU 01101110010111 rd = imm << 12rd = PC + (imm << 12)
ecall Environment Call I 1110011 0x0 imm=0x0 Transfer control to OS
ebreak Environment Break I 1110011 0x0 imm=0x1 Transfer control to debugger
Phần mở rộng Nhân:
Inst Name FMT Opcode funct3 funct7 Description (C)
mul MUL R 0110011 0x0 0x01 rd = (rs1 * rs2)[31:0]
mulh MUL High R 0110011 0x1 0x01 rd = (rs1 * rs2)[63:32]
mulsu MUL High (S) (U) R 0110011 0x2 0x01 rd = (rs1 * rs2)[63:32]
mulu MUL High (U) R 0110011 0x3 0x01 rd = (rs1 * rs2)[63:32]
Inst Name FMT Opcode funct3 funct5 Description (C)
lr.w Load Reserved R 0101111 0x2 0x02 rd = M[rs1], reserve M[rs1]
sc.w Store Conditional R 0101111 0x2 0x03 if (reserved) { M[rs1] = rs2; rd = 0 }
amoswap.w Atomic Swap R 0101111 0x2 0x01 else { rd = 1 }rd = M[rs1]; swap(rd, rs2); M[rs1] = rd
amoadd.w Atomic ADD R 0101111 0x2 0x00 rd = M[rs1] + rs2; M[rs1] = rd
amoand.w Atomic AND R 0101111 0x2 0x0C rd = M[rs1] & rs2; M[rs1] = rd
amoor.w Atomic OR R 0101111 0x2 0x0A rd = M[rs1] | rs2; M[rs1] = rd
amoxor.w Atomix XOR R 0101111 0x2 0x04 rd = M[rs1] ˆ rs2; M[rs1] = rd
amomax.w Atomic MAX R 0101111 0x2 0x14 rd = max(M[rs1], rs2); M[rs1] = rd
amomin.w Atomic MIN R 0101111 0x2 0x10 rd = min(M[rs1], rs2); M[rs1] = rd
Phần mở rộng Dấu chấm động:
Inst Name FMT Opcode funct3 funct5 Description (C) flw Flt Load Word
Flt Store Word Flt Fused Mul-Add Flt Fused Mul-Sub Flt Neg Fused Mul-Add Flt Neg Fused Mul-Sub Flt Add
Flt Sub Flt Mul Flt Div
Trang 12Flt Square Root Flt Sign Injection Flt Sign Neg Injection Flt Sign Xor Injection Flt Minimum
Flt Maximum Flt Conv from Sign Int Flt Conv from Uns Int Flt Convert to Int Flt Convert to Int Move Float to Int Move Int to Float Float Equality Float Less Than Float Less / Equal Float Classify
2 So sánh kích thước mã giữa RISC-V và ARM
- Để so sánh RISC-V với một số kiến trúc tương tự, các điểm chuẩn cũngđược xây dựng cho RMv7m, ARMv8m và ARMv8a bằng cách sử dụng GCCARM Embedded phiên bản 2016q1 Kích thước mã cho các đối tượng do GCCtạo ra cho mỗi kiến trúc này được hiển thị bên dưới:
Trang 13- Giá trị trung bình (giá trị trung bình số học) được hiển thị trong bảngdưới đây:
- Trung bình, kích thước mã rất giống nhau giữa RISVC-V 32/64 vàARMv7m / ARMv8m, với mã RISC-V 32 nhỏ hơn một chút so với các kiến trúckhác
KIẾN TRÚC RISC-V
Trang 143 Phần mở rộng nguyên tử theo tiêu chuẩn “A” (Atomic Instructions)
4 Hoạt động bộ nhớ nguyên tử
- Các lệnh vận hành bộ nhớ nguyên tử (AMO) thực hiện các thao tác sửa-ghi để đồng bộ hoá đa xử lý và được mã hoá bằng định dạng lệnh kiểu R.Các lệnh AMO này tải nguyên tử một giá trị dữ liệu từ địa chỉ trong rs1, đặt giátrị vào thanh ghi rd, áp dụng toán tử nhị phân cho giá trị được tải và giá trị banđầu trong rs2, sau đó lưu trữ kết quả trở lại địa chỉ trong rs1 AMO có thể hoạtđộng trên các từ 64-bit (chỉ RV64) hoặc 32-bit trong bộ nhớ Đối với RV64,AMO 32 bit luôn ký-mở rộng giá trị được đặt trong rd và bỏ qua 32 bit trên củagiá trị ban đầu của rs2
đọc Đối với AMO, phần mở rộng A yêu cầu địa chỉ được giữ trong rs1 đượccăn chỉnh tự nhiên theo kích thước của toán hạng (tức là căn chỉnh tám byte chocác từ 64 bit và căn chỉnh bốn byte cho các từ 32 bit) Nếu địa chỉ không đượccăn chỉnh tự nhiên, một ngoại lệ lệch địa chỉ hoặc một ngoại lệ lỗi truy cập sẽ
Trang 15được tạo ra Ngoại lệ lỗi truy cập có thể được tạo ra cho một truy cập bộ nhớ mànếu không sẽ có thể hoàn thành ngoại trừ việc điều chỉnh sai, nếu truy cập bịlệch không nên được mô phỏng.
- Các hoạt động được hỗ trợ là hoán đổi, thêm số nguyên, theo chiều bitAND, theo chiều bit OR, theo chiều bit XOR, số nguyên tối đa và tối thiểu códấu và không dấu Không có ràng buộc về thứ tự, các AMO này có thể được sửdụng để thực hiện các hoạt động giảm song song, trong đó giá trị trả về thường
sẽ bị loại bỏ bằng cách ghi vào x0
- Để giúp triển khai đồng bộ hóa đa xử lý, các AMO tùy chọn cung cấpngữ nghĩa nhất quán phát hành Nếu bit aq được đặt, thì không thể quan sát thấycác hoạt động bộ nhớ sau này trong nhóm RISC-V này diễn ra trước AMO.Ngược lại, nếu bit rl được đặt, thì các harts RISC-V khác sẽ không quan sátAMO trước khi truy cập bộ nhớ trước AMO trong RISC-V hart này Đặt cả bit
aq và bit rl trên AMO làm cho trình tự nhất quán tuần tự, có nghĩa là nó khôngthể được sắp xếp lại với các hoạt động bộ nhớ trước đó hoặc muộn hơn từ cùngmột nhóm
- Ví dụ cho phần quan trọng được bảo vệ bởi spinlock kiểm tra và kiểmtra và thiết lập được thể hiện trong hình dưới Lưu ý AMO đầu tiên được đánhdấu aq để đặt mua khóa trước phần quan trọng và AMO thứ hai được đánh dấu
rl để đặt hàng cho phần quan trọng trước khi từ bỏ khóa
- Các hướng dẫn trong phần mở rộng “A” cũng có thể được sử dụng đểcung cấp lượng tải và cửa hàng nhất quán theo tuần tự Một tải nhất quán tuần tự
có thể được triển khai dưới dạng LR với cả bộ aq và rl Một cửa hàng nhất quántuần tự có thể được triển khai dưới dạng AMOSWAP ghi giá trị cũ vào x0 và có
cả bộ aq và rl
KIẾN TRÚC RISC-V
Trang 165 Các hướng dẫn tải - dự trữ/ lưu trữ có điều kiện
- Các hoạt động phức tạp của bộ nhớ nguyên tử trên một từ bộ nhớ đơnhoặc từ kép được thực hiện với các lệnh dành riêng cho tải (LR) và lưu trữ cóđiều kiện (SC) LR.W tải một từ từ địa chỉ trong rs1 , đặt giá trị mở rộng dấuhiệu vào rd và đăng ký một tập hợp đặt trước — một tập hợp các byte thay thếcác byte trong từ được địa chỉ hóa SC.W viết có điều kiện một từ trong rs2 vàođịa chỉ trong rs1 : SC.W chỉ thành công nếu đặt chỗ vẫn còn hiệu lực và bộ đặtchỗ chứa các byte đang được viết Nếu SC.W thành công, lệnh sẽ ghi từ trongrs2 vào bộ nhớ và nó ghi từ 0 vào rd Nếu SC.W không thành công, lệnh khôngghi vào bộ nhớ và nó ghi giá trị khác không vào rd Bất kể thành công hay thấtbại, việc thực hiện một lệnh SC.W sẽ làm mất hiệu lực của bất kỳ bảo lưu nào
do hart này nắm giữ LR.D và SC.D hoạt động tương tự trên các từ đôi và chỉkhả dụng trên RV64 Đối với RV64, LR.W và SC.W ký-mở rộng giá trị đượcđặt trong rd
- Mã lỗi có giá trị 1 được dành riêng để mã hóa lỗi không xác định Các
mã lỗi khác được bảo lưu tại thời điểm này và phần mềm di động chỉ nên giảđịnh mã lỗi sẽ khác 0
- Đối với LR và SC, phần mở rộng A yêu cầu địa chỉ được giữ trong rs1phải được căn chỉnh tự nhiên theo kích thước của toán hạng (tức là căn chỉnhtám byte cho các từ 64 bit và căn chỉnh bốn byte cho các từ 32 bit) Nếu địa chỉkhông được căn chỉnh tự nhiên, một ngoại lệ lệch địa chỉ hoặc một ngoại lệ lỗitruy cập sẽ được tạo ra Ngoại lệ lỗi truy cập có thể được tạo ra cho một truy cập
bộ nhớ mà nếu không sẽ có thể hoàn thành ngoại trừ việc điều chỉnh sai, nếutruy cập bị lệch không nên được mô phỏng
Trang 17- Một lệnh SC không bao giờ có thể được quan sát bởi một nhóm RISC-Vkhác trước lệnh LR đã thiết lập bảo lưu Chuỗi LR / SC có thể được cung cấpngữ nghĩa thu được bằng cách thiết lập bit aq trên lệnh LR Chuỗi LR / SC cóthể được cung cấp ngữ nghĩa giải phóng bằng cách đặt bit rl trên lệnh SC Đặtbit aq trên lệnh LR và đặt cả bit aq và bit rl trên lệnh SC làm cho trình tự LR /
SC nhất quán tuần tự, có nghĩa là nó không thể được sắp xếp lại với các hoạtđộng bộ nhớ trước đó hoặc muộn hơn từ cùng một nhóm
- Nếu không có bit nào được đặt trên cả LR và SC, chuỗi LR / SC có thểđược quan sát để xảy ra trước hoặc sau các hoạt động xung quanh bộ nhớ từcùng một nhóm RISC-V Điều này có thể thích hợp khi trình tự LR / SC được sửdụng để thực hiện hoạt động giảm song song
- Phần mềm không nên đặt bit rl trên lệnh LR trừ khi bit aq cũng được đặt,phần mềm cũng không nên đặt bit aq trên lệnh SC trừ khi bit rl cũng được đặt
LR rl và SC Các lệnh aq không được đảm bảo cung cấp bất kỳ thứ tự mạnh mẽnào hơn so với các lệnh có cả hai bit rõ ràng, nhưng có thể dẫn đến hiệu suấtthấp hơn
KIẾN TRÚC RISC-V