单周期 MIPS 微处理器
华中科大 EIC 数字逻辑课程实验:8 模块 Verilog 设计 + ROM 汇编 + Vivado 仿真。
CPU 总览
单周期实现,每条指令 1 个 clock 完成 fetch / decode / execute / mem / writeback 全流程。数据通路连接 8 个模块。
模块详解
PC(程序计数器)
module pc(
input clk, rst,
input [31:0] next_pc,
output reg [31:0] pc_out
);
always @(posedge clk or posedge rst) begin
if (rst) pc_out <= 32'h0;
else pc_out <= next_pc;
end
endmodule
IM(指令存储器) · DM(数据存储器)
IM 只读,存放 ROM 程序;DM 读写,按字节寻址 + 字对齐写入。
RegFile(寄存器堆)
32 × 32-bit 寄存器,双读端口 + 单写端口;$0 永远 0。
ALU
支持 ADD / SUB / AND / OR / XOR / SLT / SLL / SRL / SRA 9 种操作,由 4 位 op 码选择。
Control · SignExt · PCCalc
Control 译码 opcode/funct 产生控制信号;SignExt 16→32 位符号扩展;PCCalc 计算 PC+4 / branch / jump 地址。
指令集与 ROM 程序
支持的指令:lw / sw / add / sub / and / or / beq / j / jal / addi / sll。ROM 程序用 .coe 文件初始化,跑斐波那契数列前 10 项。
仿真验证
每个模块单独写 testbench;整体集成测试观察 PC、RegFile、DM 的波形变化。
踩坑 · 单周期下分支必须在 ID 阶段决定,否则 PC 会取错指令;本实现把 branch 判定放在 ALU 输出端用组合逻辑提前回写 next_pc。
实验心得
最大收获是搞清楚"指令周期"与"时钟周期"的关系,以及为什么单周期 CPU 的频率被最长路径限制(lw 要走 IM → RegFile → ALU → DM → RegFile,是关键路径)。