Register Files
RV32I 可以使用的整型寄存器共有 32 个,本节将实现一个有 32 个 32-bit 寄存器的寄存器组。
模块实现
报告中需要给出你写出的完整代码。
Register File 需要实现读写指定寄存器的功能,并保证一定的时序。
考虑一个简单的指令 add x1, x2, x3
,它的含义是计算寄存器 x2
与 x3
的和,并将结果保存到寄存器 x1
中;在这个指令中 x2, x3
被称为源寄存器 (Source Registers,rs
),x1
被称为目的寄存器 (Destination Register,rd
)。
观察到,我们有可能在一个指令运算中需要读取两个源寄存器的值,因此需要同时支持两个读口;本次实验只需要在时钟上升沿进行一次写,即一个时钟周期只进行最多一次的寄存器写。
如果你对 Verilog 的结构和语法很生疏,请先学习基础内容,如 always
块、赋值等。
在附件 Regs/Regs.v
给出端口的基础上,你需要添加 32 个固定的地址读口以便 Lab4 中直接使用,你的端口应类似于:
Regs.v | |
---|---|
仿真测试
报告中需要给出 testbench 代码,测试波形与解释(波形截图需要保证缩放与变量数制合适)。
附件 Regs/Regs_tb.v
给出了基本的测试代码,你需要补充完善测试更多情况。
封装 IP Core
参考 slides p22-27 解决封装过程中 clk, rst
两个信号的问题。