【RISC-V设计-04】- RISC-V处理器设计K0A之架构

【RISC-V设计-04】- RISC-V处理器设计K0A之架构

1. 简介

在前几篇文章中,介绍了RISC-V处理器的结构和指令集,从本篇文章开始,介绍一个最简单的RISC-V内核,仅支持RV32E(和RV32I指令一致,但支持16个通用寄存器),并命名为RISCV-K0ARISCV-K0A是一个超轻量级的RISCV CPU内核,采用冯诺依曼结构,两级流水线,指令集为RV32E指令集(即整数指令集,16个通用寄存器),支持16个中断源。内核较为精简,面积极小、功耗低。

2. 主要特点

  1. RV32E+Zicsr指令集;
  2. 16个通用寄存器;
  3. 仅支持机器模式;
  4. 支持特权指令MRET;
  5. 实现了44条指令的处理;
  6. 两级流水线,取指、执行两个阶段;
  7. 冯诺依曼结构,指令总线和数据总线共享;
  8. 20位地址总线,最大支持1MByte地址空间;
  9. 支持16个外部中断源,支持晚到中断、咬尾中断;

3. 结构框图

BMU :总线管理单元(Bus Management Unit)
IDU :指令译码单元(Instr Decoder Unit)
ALU :算术逻辑单元(Arithmetic and Logic Unit)
GPR :通用寄存器(General Purpose Register)
CIC :核内中断控制器(Core Interrupt Contoller)
CSR :控制与状态寄存器(Control and Status Register)

4. 指令列表

序号类型指令周期功能说明
1RV32IADDI1Rd = Rs + imm立即数加法
2RV32ISLTI1Rd = Rs < imm ? 1’b1 : 1’b0立即数有符号小于
3RV32ISLTIU1Rd = Rs < imm ? 1’b1 : 1’b0立即数无符号小于
4RV32IXORI1Rd = Rs ^ imm立即数异或
5RV32IORI1Rd = Rs | imm立即数逻辑或
6RV32IANDI1Rd = Rs & imm立即数逻辑与
7RV32ISLLI1Rd = Rs << imm[4:0]立即数逻辑左移
8RV32ISRLI1Rd = Rs >> imm[4:0]立即数逻辑右移
9RV32ISRAI1Rd = Rs >>> imm[4:0]立即数算术右移
10RV32IADD1Rd = Rs1 + Rs2寄存器加法
11RV32ISUB1Rd = Rs1 - Rs2寄存器减法
12RV32ISLL1Rd = Rs1 << Rs2寄存器逻辑左移
13RV32ISLT1Rd = Rs1 < Rs2 ? 1’b1 : 1’b0寄存器有符号小于
14RV32ISLTU1Rd = Rs1 < Rs2 ? 1’b1 : 1’b0寄存器无符号小于
15RV32IXOR1Rd = Rs1 ^ Rs2寄存器异或
16RV32ISRL1Rd = Rs1 >> Rs2寄存器逻辑右移
17RV32ISRA1Rd = Rs1 >>> Rs2寄存器算术右移
18RV32IOR1Rd = Rs1 | Rs2寄存器逻辑或
19RV32IAND1Rd = Rs1 & Rs2寄存器逻辑与
20RV32ILB2Rd = M[Rs1 + imm]加载字节,有符号扩展
21RV32ILBU2Rd = M[Rs1 + imm]加载字节,无符号扩展
22RV32ILH2Rd = M[Rs1 + imm]加载半字,有符号扩展
23RV32ILHU2Rd = M[Rs1 + imm]加载半字,无符号扩展
24RV32ILW2Rd = M[Rs1 + imm]加载字
25RV32ISB1M[Rs1+imm] = Rs2存储字节
26RV32ISH1M[Rs1+imm] = Rs2存储半字
27RV32ISW1M[Rs1+imm] = Rs2存储字
28RV32IJAL1Rd = PC + 4; PC = PC + imm带返回的PC跳转
29RV32IJALR1Rd = PC + 4; PC = Rs + imm带返回的寄存器跳转
30RV32IBEQ1if(Rs1 == Rs2) PC = PC + imm相等跳转
31RV32IBNE1if(Rs1 != Rs2) PC = PC + imm不等跳转
32RV32IBLT1if(Rs1 < Rs2) PC = PC + imm小于跳转
33RV32IBGE1if(Rs1 >= Rs2) PC = PC + imm大于等于跳转
34RV32IBLTU1if(Rs1 < Rs2) PC = PC + imm无符号,小于跳转
35RV32IBGEU1if(Rs1 >= Rs2) PC = PC + imm无符号,大于等于跳转
36RV32ILUI1Rd = imm << 12加载立即数
37RV32IAUIPC1Rd = PC + (imm<<12)根据PC加载立即数
38ZicsrCSRRW1Rd = CSR; CSR = RdCSR寄存器读、写
39ZicsrCSRRS1Rd = CSR; CSR = CSR | RdCSR寄存器读、置1
40ZicsrCSRRC1Rd = CSR; CSR = CSR & ~RdCSR寄存器读、清0
41ZicsrCSRRWI1Rd = CSR; CSR = immCSR立即数读、写
42ZicsrCSRRSI1Rd = CSR; CSR = CSR | immCSR立即数读、置1
43ZicsrCSRRCI1Rd = CSR; CSR = CSR & ~immCSR立即数读、清0
44PrivMRET1PC = mepc中断返回指令

5. CSR指令集

I型指令:CSR指令
序号指令
31
20
19
15
14
12
11
7
6
0
1CSRRWcsrrs001rd1110011
2CSRRScsrrs010rd1110011
3CSRRCcsrrs011rd1110011
4CSRRWIcsrrs001rd1110011
5CSRRSIcsrrs010rd1110011
6CSRRCIcsrrs011rd1110011
CSRRW:
指令形式:csrrw rd, csr, rs1
指令功能:CSR寄存器读后写。记csr值为t,将rs1写入csr,再将t写入rd。
CSRRS:
指令形式:csrrs rd, csr, rs1
指令功能:CSR寄存器读后置位。记csr值为t,将t和rs1的按位或结果写入csr,再将t 写入rd。
CSRRC:
指令形式:csrrc rd, csr, rs1
指令功能:CSR寄存器读后清位。记csr值为t,将rs1的反码和t按位与,结果写入csr,再将t写入rd。
CSRRWI:
指令形式:csrrwi rd, csr, zimm[4:0]
指令功能:CSR寄存器读后写立即数。将csr 的值复制到rd 中,再将5 位立即数zimm 的零扩展结果写入csr。
CSRRSI:
指令形式:csrrsi rd, csr, zimm[4:0]
指令功能:CSR寄存器读后置位立即数。记csr 的值为t,将5 位立即数zimm 零扩展后,和t 按位或,结果写入csr,再将t 写入rd(csr 中的第5 及更高的位不变)。
CSRRCI:
指令形式:csrrci rd, csr, zimm[4:0]
指令功能:CSR寄存器读后清位立即数。记csr 的值为t,将5 位立即数zimm 零扩展后的反码和t 按位与,结果写入csr,再将t 写入rd(csr 中的第5 及更高的位不变)。

6. 中断返回指令

特殊型指令:中断返回指令
序号指令
31
28
27
24
23
20
19
15
14
12
11
7
6
0
1MRET00110000001000000000000001100111

7. 总结

本文重点阐述了 RISCV-K0A 的基本特性、整体架构以及所支持的指令集。RISCV-K0A 致力于打造一个最为简单的 RISC-V 处理器,其在面积和功耗方面有着强烈的追求,正因如此,并不支持在线调试这一功能。在后续的几篇文章中,将会对各个子模块分别进行介绍。

  • 39
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值