implementation-log
AI 样例
RISC-V 流水线 CPU:取指阶段实现记录
记录 PC 更新、指令存储器接口、基础仿真波形和第一轮实现约束。
RISC-VVerilogIF StageRTL
本次目标
先实现一个最小取指阶段。它只负责三件事:
- 保存当前
pc。 - 默认让
pc + 4成为下一条指令地址。 - 向指令存储器输出取指地址。
这个阶段暂时不处理分支跳转,也不处理流水线暂停。先把最小闭环跑通,后续再加控制信号。
模块接口
第一版接口保持克制:
module if_stage (
input wire clk,
input wire rst,
output reg [31:0] pc,
output wire [31:0] instr_addr
);
assign instr_addr = pc;
always @(posedge clk) begin
if (rst) begin
pc <= 32'h0000_0000;
end else begin
pc <= pc + 32'd4;
end
end
endmodule
这个写法的好处是容易观察:每个时钟上升沿之后,pc 都应该递增 4。如果第一条指令从地址 0 开始,那么波形中可以直接看到 0x0 -> 0x4 -> 0x8。
第一轮验证点
仿真时先不急着接完整 CPU,只检查取指阶段本身:
cycle 0: rst = 1, pc = 0x00000000
cycle 1: rst = 0, pc = 0x00000004
cycle 2: rst = 0, pc = 0x00000008
cycle 3: rst = 0, pc = 0x0000000c
如果这个序列不稳定,后面译码和执行阶段的错误会被放大,很难定位。
当前限制
这版实现还没有:
- 分支跳转入口。
- stall/flush 控制。
- 取指地址对齐异常。
- 指令存储器延迟建模。
这些限制是有意保留的。当前目标是让项目先有一个可以讨论和标注的最小技术记录页面。