├── JOIN.v ├── NPC.v ├── PC.v ├── README.md ├── alu.v ├── cpu.v ├── decoder.v ├── dmem.v ├── ext16.v ├── ext18.v ├── ext5.v ├── imem.txt ├── imem.v ├── inst.asm ├── mux2x32.v ├── regfile.v ├── rom.data ├── run.png ├── top.v └── top_tb.v /JOIN.v: -------------------------------------------------------------------------------- 1 | `timescale 1ns / 1ps 2 | ////////////////////////////////////////////////////////////////////////////////// 3 | // Company: 4 | // Engineer: 5 | // 6 | // Create Date: 2020/05/25 00:04:48 7 | // Design Name: 8 | // Module Name: JOIN 9 | // Project Name: 10 | // Target Devices: 11 | // Tool Versions: 12 | // Description: 13 | // 14 | // Dependencies: 15 | // 16 | // Revision: 17 | // Revision 0.01 - File Created 18 | // Additional Comments: 19 | // 20 | ////////////////////////////////////////////////////////////////////////////////// 21 | 22 | 23 | module JOIN( 24 | input [27:0] a, 25 | input [3:0] b, 26 | output [31:0] s 27 | ); 28 | assign s[31:28]=b; 29 | assign s[27:0]=a; 30 | endmodule 31 | 32 | -------------------------------------------------------------------------------- /NPC.v: -------------------------------------------------------------------------------- 1 | `timescale 1ns / 1ps 2 | ////////////////////////////////////////////////////////////////////////////////// 3 | // Company: 4 | // Engineer: 5 | // 6 | // Create Date: 2020/05/23 18:31:24 7 | // Design Name: 8 | // Module Name: NPC 9 | // Project Name: 10 | // Target Devices: 11 | // Tool Versions: 12 | // Description: 13 | // 14 | // Dependencies: 15 | // 16 | // Revision: 17 | // Revision 0.01 - File Created 18 | // Additional Comments: 19 | // 20 | ////////////////////////////////////////////////////////////////////////////////// 21 | 22 | 23 | module NPC( 24 | input [31:0] pc_in, 25 | output [31:0] pc_out 26 | ); 27 | assign pc_out = pc_in + 32'd4;; //npc=pc+4 28 | 29 | endmodule 30 | -------------------------------------------------------------------------------- /PC.v: -------------------------------------------------------------------------------- 1 | `timescale 1ns / 1ps 2 | ////////////////////////////////////////////////////////////////////////////////// 3 | // Company: 4 | // Engineer: 5 | // 6 | // Create Date: 2020/05/23 18:22:12 7 | // Design Name: 8 | // Module Name: PC 9 | // Project Name: 10 | // Target Devices: 11 | // Tool Versions: 12 | // Description: 13 | // 14 | // Dependencies: 15 | // 16 | // Revision: 17 | // Revision 0.01 - File Created 18 | // Additional Comments: 19 | // 20 | ////////////////////////////////////////////////////////////////////////////////// 21 | 22 | 23 | module PC( 24 | input clk, 25 | input rst, 26 | input [31:0] data_in, 27 | output reg [31:0] data_out 28 | ); 29 | always@(posedge clk,posedge rst) 30 | begin 31 | if(rst) 32 | data_out<=32'b0; 33 | else 34 | data_out<=data_in; 35 | end 36 | 37 | endmodule 38 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 8-instruction single cycle MIPS32 CPU 2 | ### 1. 打开vivado,新建项目 3 | ### 2. 添加文件 4 | ``` 5 | Add or create design sources -> Add files -> Add Directories 6 | ``` 7 | ### 3. 更改imem.v里指令文件和dmem.v里的rom 的读取路径 8 | ### 4. 仿真 9 | ``` 10 | Run Simulation 11 | ``` 12 | 这是解释代码的视频链接: [MIPS单周期CPU设计 # 视频中dmem.v未对数据存储器进行初始化 会导致lw出错 代码已经改正](https://www.bilibili.com/video/BV1rD4y1D7h9)