基本情况
本多周期CPU支持RV32I指令集(fence,ecall,ebreak除外),已通过部分指令的测试,如代码有bug,欢迎指出。
模块划分代码将CPU划分为以下几个模块: 1.控制单元:ControlUnit 用于产生控制信号,是CPU的大脑,指挥中枢。 2.分支决策单元:BranchUnit 用于决定B型指令是否发生跳转 3.立即数单元:ImmUnit 用于从指令中解析出立即数. 4.寄存器堆:RegisterFile RISC-V的32个寄存器,其中x0寄存器恒为0,不可更改。 5.指令存储器:InstrMem 用于存储指令,目前仅支持32位指令,不支持16位指令,且地址是4字节对齐的。 6.数据存储器:DataMem 数据存储器,用于存储数据,可进行字、半字、字节的读写。 7.Data_Ext 用于load指令,从读出的字中获取需要的部分,并进行符号/无符号扩展。例如LH,LBU指令选取哪个半字、哪个字节,以及如何扩展为32bit。 8.PC生成单元:NPC_Generator 根据Jal,Jalr以及Branch生成下一条指令的地址(PCF),若上述三个信号均为无效电平,则更新为PCF+4