# 单周期CPU **Repository Path**: qiuyuli/single-cycle-cpu ## Basic Information - **Project Name**: 单周期CPU - **Description**: 北理工计算机组成原理大作业,实现一个支持RISC-V的单周期CPU;用RISC-V写一段排序程序在自己的CPU和RARS上完成仿真 - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2023-06-29 - **Last Updated**: 2025-06-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 单周期CPU #### 介绍 北理工计算机组成原理大作业,实现一个支持RISC-V的单周期CPU;用RISC-V写一段排序程序在自己的CPU和RARS上完成仿真。 CPU设计的可能不完美,甚至可能存在bug没有找出来;仅供参考,欢迎指正~ #### 软件架构 plus.v:Verilog描述的电路文件,在Vivado上运行生成电路图(编码GBK) test.v:testbench sort.asm:RISC-V编写的排序指令 sort.txt:由sort.asm生成的机器指令 Rars1_5.jar:Rars包 repost.pdf:实验报告,实验实现的详细说明 #### 实验环境 1. jdk环境 2. Vivado 3. windows系统 #### 支持的RISC-V指令: - ADD:两个寄存器内的数相加,结果存放在寄存器 - ADDI:寄存器内的数和立即数相加,结果存放在寄存器 - SUB:两个寄存器内的数相减,结果存放在寄存器 - ORI:寄存器内的数和立即数进行逻辑或,结果存放在寄存器 - SSLI:寄存器内的数和立即数进行逻辑左移,结果存放在寄存器 - BEQ:比较两个寄存器内的数,相等时跳转 - BNEZ:寄存器内的数不等于0时,跳转 - BGE:比较两个寄存器内的数,大于等于跳转 - JAL:无条件跳转 - LW:读内存,加载到寄存器 - SW:写内存,从寄存器写入 #### 实验步骤 1. 利用Vivado设计一个CPU,利用testbench仿真,进行unit test。 2. 用RISC-V写一段5个整数的排序代码。 3. 在Rars1_5.jar所在目录下运行RASR,导入sort.asm进行仿真。 ``` java -jar Rars.jar ``` 打开Rars后导入之前的.asm文件,运行Rars进行仿真。在Rars可以看到程序每一条指令执行后的寄存器情况、内存情况;也可以导出生成的机器指令。 #### 补充说明 1. CPU的控制信号在编程中使用的和report中写的不一样。编程中使用的控制信号如下: - jal:只有JAL指令时jal=1,其余均0 - branch:BEQ和BGE指令时branch=1,其余均0 - brlt:只有BGE指令时brlt=1,其余均0 - nequal:只有BNEZ指令时nequal=1,其余均0 - ALUop:指定ALU运算类型。ALUop=0时加法,ALUop=1时减法,ALUop=2时或,ALUop=3时逻辑左移 - ALUsrc:指定ALU的第2个操作数来源(第1个操作数都是寄存器),0表示寄存器,1表示立即数 - MemWR:需要写内存时MemWR=1 - RegW:需要写寄存器时RegW=1 - regS:写回数据的选择信号,0源于ALU,1源于DataMem,2源于PC+4 - PCx1:JAL的处理信号,此时将x1+offset的值写入PC 2. 指令仿真波形:这里是按RISC-V的指令格式自己编写若干条上述指令并转化为16进制表示,如ADD指令为0x00100133。 进行仿真时,把plus.v的取址、译码注释(第412~413行),并把test.v的最后代码取消注释。在test中写入指令码,这样指令码将直接送进CPU的控制模块(Control Unit)。 3. 为了实现排序功能,也可以自己选择其他相关指令实现。 4. 这里用组合逻辑电路实现每条指令的不同功能,也可以改用微指令实现。 #### 参与贡献 1. Yuli 2. Yutong Lee(除了嘲讽啥都没做) 3. Cindy He(史诗级白嫖怪) #### References 知乎@sanoverflow https://zhuanlan.zhihu.com/p/534553288 USTC计算机组成原理课程主页 http://staff.ustc.edu.cn/~llxx/cod/index.html