32位RISC处理器软核的设计与验证
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
32位RISC 处理器软核的设计与验证( Potato-I)
使用说明文档
1 CPU 流水线级数及各级功能
IF :取指令级,是从ROM 中读取指令,并在下一个时钟沿到来时把指令送到ID 级的指令缓冲器中。
ID :指令译码级,对IF 级来的指令进行译码,并产生相应的控制信号。整个CPU 的控制信号都是在这级上产生。
EX :执行级,对操作数进行算术或逻辑操作,此外LOAD ,STORE 指令所用的RAM 访问地址也是在EX 级上实现。
MEM :存储器访问级,只有在执行LOAD 、STORE 指令时对存储器进行读写,但对其他指令只起到缓冲一个周期的作用。
WB :回写级,把指令执行的结果回写到寄存器文件中,写入寄存器文件的数据来自于MEM 级上的缓冲值或来自于MEM 级上的存储器。
2指令集及编码格式
2.1指令集:
NOP,ADD,ADC,SUB,SUBC,AND,OR,NOT,ADDI,ANDI,ORI,NOTI,LSL,LSR,ASR,ROR,ROL,STR,LDR,BTC,JUMP,JUMPR,JUMPL,RET 。
2.2指令编码格式
例:ADD R1,R2,R3;
在上面的加法指令中 OP=2、DS=1、S1=2
、S2=3,对应的机器码为:
32’b000010_00001_00010_00011_XXXXXXXXXXX;
2) ADDI,ANDI,ORI,NOTI
例:ADDI R4,R8,5;
其中 OP=1、DS=4、S1=8、IMM=5,对应的机器码为:
32’b000001_00100_01000_0000000000000101;
3) LSL,LSR,ASR,ROR,ROL
例:LSL R4,R3, 5;
其中OP=C、DS=4、S1=3、IMM=5;(IMM=shift amount),对应的机器码为:
32’b001100_00100_00011_XXXXXXXXXXX_00101;
4) STR
例:STR R1,R2,5; //[R1+5]=R2;
其中OP=11、DS=X、S1=1、S2=2、IMM=5 (S2指定的寄存器内容存储到[S1+IMM]地址处),
对应的机器码为:32’b010001_XXXXX_00001_00010_00000000101;
5) LDR
例:LDR R1,R2,5; //R1=[R2+IMM]
其中OP=12、DS=1、S1=2、S2=X、IMM=5 ([S1+IMM]地址处的内容存储到DS指定的寄存器中),
对应的机器码为:32’b010010_00001_00001_XXXXX_00000000101;
6) BTC
例:BTC_EQ 5; // 如果有符号数相等,则转移到PC+5地址处
其中OP=13、DS=5、IMM=5 (DS=CONDITION,关于CONDITION见decode.v 模块中的generating
branch signal段),
对应的机器码为:32’b010011_00101_000000000000000000101;
7) JUMP,JUMPL
例:JUMP 5;
其中OP=14、IMM=5,
对应的机器码为:32’b010100_00000000000000000000000101;
7) JUMPR,RET
例:RET R4; // PC=R4;
其中OP=17、DS=4 (PC值被修改成DS指定的寄存器的内容),
对应的机器码为:32’b010111_00100_XXXXXXXXXXXXXXXXXXXXX;
3 软核的verilog实现
Potato-I RISC处理器IP核由ALU.V、 DECODE.V、 PC_GEN.、FORWARD.V、 IO_BUS.V、RAM.V、 ROM.V、 WRITE_BACK.V、 REGFILE.V、 REG_PIPELINE.V、CPU.V等模块组成。
到目前为止已经实现了条件转移、函数调用和数学逻辑运算指令在内的24条指令。
在verilog 代码设计中,为了尽量减少模块数,采用了统一的reg_pipeline.v模块来实现各级流水线寄存器功能。同时把设计中所用到的所有多路选择器都包括到不同的模块中去,而没有用单独的verilog语句实现。
4在FPGA 上的验证
在XILINX的BASYS板上验证了部分功能。验证时CPU与外设之间是通过P1,P2,P3,P4四个4bit I/O 连接,其中P1,P2为输出口,P3,P4为输入口。而BASYS板上的SW7-SW4,SW3-SW0作为两个输入设备输入数据,7段数码管作为输出设备显示输出信息。由于BASYS 板上芯片的容量问题,只能验证小规模代码,同时寄存器堆中的寄存器个数不能超过4个,分别为R1,R2,R3,R31。从ROM中代码可以看出代码实现的功能是从P3,P4口读取数据,并把数据输出到P1,P2端口。
5 XILINX公司的ISE 8.2软件仿真
仿真不受FPGA容量限制,因此可以对整个模块进行完整的仿真。仿真波形如下图所示。在I/O口P1上输出的是手机号码。
。
代码阅读、下载验证或仿真时注意事项:
阅读代码时建议从decode.v模块开始,并且若以原理图作为辅助工具将提高代码阅读的效率。为了方便代码阅读本设计中的所有模块端口名与原理图上的名称是一致的。下载代码并在BASYS板上验证代码时首先以注释的方法去掉regfile.v和rom.v中的module for simulate代码。对代码进行仿真时建议用注释的方法去掉module for BASYS board代码部