# mult_cycle_cpu **Repository Path**: dunhedunhe/mult_cycle_cpu ## Basic Information - **Project Name**: mult_cycle_cpu - **Description**: 使用Verilog实现的多周期流水线CPU,可以运行部分MIPS指令,包括仿真波形图和上板验证 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2024-07-17 - **Last Updated**: 2025-06-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: Verilog, 流水线 ## README # Verilog实现的多周期五段流水线CPU > **南理硬件课设1项目** ## 效果 ### 波形图 ![image-20240717144928571](assets/image-20240717144928571.png) 输出信号的含义如下: ```verilog //用于在 FPGA 板上显示结果 wire [ 4:0] rf_addr; //读取寄存器的地址 wire [31:0] rf_data; //寄存器中读出的数据 reg [31:0] mem_addr; //要观察的内存地址 wire [31:0] mem_data; //内存地址对应的数据 // 取指 wire [31:0] IF_PC; //IF 模块的 PC wire [31:0] IF_IR; //IF 模块取出的指令 // 译码 wire [31:0] ID_PC; //ID 模块的 PC // 执行 wire [31:0] EXE_PC; //EXE 模块的 PC // 访存 wire [31:0] MEM_PC; //MEM 模块的 PC // 写回 wire [31:0] WB_PC; //WB 模块的 PC wire [31:0] now_state; //展示 CPU 当前状态 ``` ![image-20240717145007293](assets/image-20240717145007293.png) 下图是`PC=04H`时的逻辑左移指令,指令详细功能可参考报告。指令的内容是`sll $2, $1,#4`,它的十六进制机器码为`00011100`,指令执行后,2号寄存器中的值会变成`0000_0010H`。下图展示了指令的实际仿真效果,可以看到和我们预期的一致。 ![image-20240717145027816](assets/image-20240717145027816.png) 下图是`PC=2CH`时的存数指令,指令的内容是`sw $8, #28($0)`,将8号寄存器中的值存到0号寄存器中的地址加上28的偏移量的内存单元,也就是将0003H存到地址为001C的内存单元,指令的十六进制机器码为`AC08001C`。 ![image-20240718185113341](assets/image-20240718185113341.png) 下图是当`PC=44H`时的跳转指令,指令的内容是`jal #20`,当指令作用后,PC值会跳转到50H继续执行,指令的十六进制编码为`0C000014`。可以看到跳转的效果正常,从50H处开始继续执行。 ![image-20240718185128198](assets/image-20240718185128198.png) ### 上板验证 ![Snipaste_2024-07-17_23-19-01](assets/Snipaste_2024-07-17_23-19-01.jpg) ![Snipaste_2024-07-17_23-20-03](assets/Snipaste_2024-07-17_23-20-03.jpg) ## 环境和设置 Vivado2022 [下载链接](https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vivado-design-tools/archive.html),需要注册AMD账号。 然后修改一下波形图显示的范围,可以设为2000ns以上,才能看到完整的波形图。设置方法参考这个[链接](https://mbd.baidu.com/ma/s/Vh2N2JKC)。 如果改了.coe文件中的代码,但是看不到仿真的效果,就需要升级一下IP核。 搜索: ![image-20240714224134817](assets/image-20240714224134817.png) 然后给核升级: ![image-20240714224203957](assets/image-20240714224203957.png) ## 修改 要修改MIPS代码: 1. 在.coe文件中直接改,将十六进制代码放进去就可以了; 2. 然后修改`testbunch.v`,修改要展示的寄存器地址和内存单元地址; 仿真之后就能看到波形图效果了。 ![image-20240717145440284](assets/image-20240717145440284.png)