[TOC]
Datapath
PC
信号名 | 方向 | 描述 |
---|---|---|
clk | I | 时钟信号 |
rst | I | 复位信号 |
niaddr | I | 下一条指令的地址 |
iaddr | O | 当前需要执行的指令地址 |
序号 | 功能名称 | 功能描述 |
---|---|---|
1 | 复位 | 当复位信号有效时,PC被设置成 0x0000_3000 |
2 | 保存 NPC 并退出 | 在每个时钟上升沿保存 NPC,并将其输出 |
NPC
信号名 | 方向 | 描述 |
---|---|---|
iaddr | I | 当前需要执行的指令地址 |
branch | I | 分支信号 |
jump | I | 跳转信号 |
zero | I | 判零标志 |
imm16 | I | I-指令的16位立即数 |
imm26 | I | J-指令的26位立即数 |
niaddr | O | 下一条指令的地址 |
序号 | 功能名称 | 功能描述 |
---|---|---|
1 | 下一指令地址 | 将指令地址移至下一条指令 |
2 | 分支地址跳转 | 当分支信号和判零标志有效时,使用I-指令中的16位立即数做逻辑扩展,使其扩展成30位,再将地址乘4,得到需要跳转的分支地址并将其输出 |
3 | 绝对地址跳转 | 当跳转信号有效时,使用J-指令中的26位立即数,与当前指令的高四位进行拼接,再将地址乘4,得到需要跳转的绝对地址并将其输出 |
DM
信号名 | 方向 | 描述 |
---|---|---|
addr | I | 读/写数据地址 |
din | I | 内存写入总线 |
wEn | I | 写使能信号 |
clk | I | 时钟信号 |
dout | O | 数据输出总线 |
序号 | 功能名称 | 功能描述 |
---|---|---|
1 | 写入数据 | 当写使能信号有效时,在每个时钟上升沿将写入总线的数据写进相应内存地址中 |
2 | 读出数据 | 将指定地址的数据通过数据输出总线进行输出 |
IM
信号名 | 方向 | 描述 |
---|---|---|
iaddr | I | 当前需要执行的指令地址 |
ins | O | 指令输出 |
序号 | 功能名称 | 功能描述 |
---|---|---|
1 | 写入指令 | 使用 $readmemh 函数将 code.txt 中的指令写入指令内存中 |
2 | 读出指令 | 根据得到的指令地址从指令内存中读出相应的指令数据 |
MUX
信号名 | 方向 | 描述 |
---|---|---|
a | I | 缺省输入信号 |
b | I | 选择输入信号 |
ctrl_s | I | 选通控制信号 |
dout | O | 选择器输出 |
序号 | 功能名称 | 功能描述 |
---|---|---|
1 | 缺省输出 | 当选通控制信号无效时,选择器输出缺省输入信号 |
2 | 选择输出 | 当选通控制信号有效时,选择器输出选择输入信号 |
RF
信号名 | 方向 | 描述 |
---|---|---|
busW | I | 寄存器写入总线 |
clk | I | 时钟信号 |
wE | I | 写使能信号 |
rW | I | 寄存器写入地址 |
rA | I | 输出总线A读出的数据地址 |
rB | I | 输出总线B读出的数据地址 |
busA | O | 寄存器输出总线A |
busB | O | 寄存器输出总线B |
序号 | 功能名称 | 功能描述 |
---|---|---|
1 | 写入数据 | 当写使能信号有效时,在每个时钟上升沿根据写入地址写入寄存器数据 |
2 | 读出数据 | 根据A/B数据地址读出相应的寄存器数据并通过输出总线A/B输出 |
ALU
信号名 | 方向 | 描述 |
---|---|---|
ALUop | I | 算术逻辑单元操作控制信号 |
a | I | 输入总线A |
b | I | 输入总线B |
result | O | 输出总线 |
zero | O | 判零标志 |
序号 | 功能名称 | 功能描述 |
---|---|---|
1 | 做加法 | 根据操作控制信号,通过输出总线输出输入两数之和 |
2 | 做减法 | 根据操作控制信号,通过输出总线输出输入两数之差 |
1 | 按位与 | 根据操作控制信号,通过输出总线输出输入两数的按位与结果 |
2 | 按位或 | 根据操作控制信号,通过输出总线输出输入两数的按位或结果 |
1 | 做比较 | 根据操作控制信号,若输入总线A的数值小于总线B的数值,则为真,否则为假 |
EXT
信号名 | 方向 | 描述 |
---|---|---|
imm16 | I | I-指令的16位立即数 |
extOp | I | 扩展器控制信号 |
dout | O | 扩展器输出总线 |
序号 | 功能名称 | 功能描述 |
---|---|---|
1 | 逻辑扩展 | 当控制信号无效时,对输入的16位立即数逻辑扩展为32位 |
2 | 算术扩展 | 当控制信号有效时,对输入的16位立即数算术扩展为32位 |
Control
CTRL
信号名 | 方向 | 描述 |
---|---|---|
ins | I | 当前需要执行的指令 |
branch | O | 分支信号 |
jump | O | 跳转信号 |
regDst | O | 寄存器写入地址控制信号 |
aluSrc | O | 算数逻辑单元输入控制信号 |
aluCtr | O | 算术逻辑单元操作控制信号 |
regWr | O | 寄存器写入使能信号 |
memWr | O | 内存写入使能信号 |
extOp | O | 扩展器控制信号 |
memtoReg | O | 寄存器写入总线控制信号 |
序号 | 功能名称 | 功能描述 |
---|---|---|
1 | 由指令产生控制信号 | 通过输入的指令分析出需要执行的操作,输出相应的控制信号 |