使用 Verilog 语言完成的一个支持13条 MIPS 指令的单周期处理器。

Abstract

仅支持13条 MIPS 指令的单周期处理器,不支持溢出

Instruction Set

指令说明。

Total: 13

StatusIns TypeopfuncALUctrBranchJumpRegDstALUSrcMemtoRegRegWrMemWrExtOp
supportedaddu00000010000100000010010x
supportedadd00000010000000010010010x
supportedsubu00000010001110000010010x
supportedsub00000010001010010010010x
supportedand00000010010000100010010x
supportedor00000010010100110010010x
supportedsltu00000010101110100010010x
supportedslt00000010101010110010010x
supportedbeq000100x100110x0x00x
supportedjump000010xx01xxx00x
supportedlw100011x000100011101
supportedsw101011x000100x1x011
supportedori001101x001100010100

Modules

整个 CPU 分为 Datapath(数据通路)Control(控制单元) 两大模块,其下共有9个子组件。

Datapath

数据通路。

PC

Program Counter – 指令计数器

信号名方向描述
clkI时钟信号
rstI复位信号
niaddrI下一条指令的地址
iaddrO当前需要执行的指令地址

序号功能名称功能描述
1复位当复位信号有效时,PC被设置成 0x0000_3000
2保存 NPC 并退出在每个时钟上升沿保存 NPC,并将其输出

NPC

Next PC – 下指令部件

信号名方向描述
iaddrI当前需要执行的指令地址
branchI分支信号
jumpI跳转信号
zeroI判零标志
imm16II-指令的16位立即数
imm26IJ-指令的26位立即数
niaddrO下一条指令的地址

序号功能名称功能描述
1下一指令地址将指令地址移至下一条指令
2分支地址跳转当分支信号和判零标志有效时,使用I-指令中的16位立即数做逻辑扩展,使其扩展成30位,再将地址乘4,得到需要跳转的分支地址并将其输出
3绝对地址跳转当跳转信号有效时,使用J-指令中的26位立即数,与当前指令的高四位进行拼接,再将地址乘4,得到需要跳转的绝对地址并将其输出

DM

Data Memory – 数据内存

信号名方向描述
addrI读/写数据地址
dinI内存写入总线
wEnI写使能信号
clkI时钟信号
doutO数据输出总线

序号功能名称功能描述
1写入数据当写使能信号有效时,在每个时钟上升沿将写入总线的数据写进相应内存地址中
2读出数据将指定地址的数据通过数据输出总线进行输出

IM

Instruction Memory – 指令内存

信号名方向描述
iaddrI当前需要执行的指令地址
insO指令输出

序号功能名称功能描述
1写入指令使用 $readmemh 函数将 code.txt 中的指令写入指令内存中
2读出指令根据得到的指令地址从指令内存中读出相应的指令数据

MUX

Multiplexer – 选择器

信号名方向描述
aI缺省输入信号
bI选择输入信号
ctrl_sI选通控制信号
doutO选择器输出

序号功能名称功能描述
1缺省输出当选通控制信号无效时,选择器输出缺省输入信号
2选择输出当选通控制信号有效时,选择器输出选择输入信号

RF

Register File – 寄存器堆

信号名方向描述
busWI寄存器写入总线
clkI时钟信号
wEI写使能信号
rWI寄存器写入地址
rAI输出总线A读出的数据地址
rBI输出总线B读出的数据地址
busAO寄存器输出总线A
busBO寄存器输出总线B

序号功能名称功能描述
1写入数据当写使能信号有效时,在每个时钟上升沿根据写入地址写入寄存器数据
2读出数据根据A/B数据地址读出相应的寄存器数据并通过输出总线A/B输出

ALU

Arithmetic Logic Unit – 算术逻辑单元

信号名方向描述
ALUopI算术逻辑单元操作控制信号
aI输入总线A
bI输入总线B
resultO输出总线
zeroO判零标志

序号功能名称功能描述
1做加法根据操作控制信号,通过输出总线输出输入两数之和
2做减法根据操作控制信号,通过输出总线输出输入两数之差
1按位与根据操作控制信号,通过输出总线输出输入两数的按位与结果
2按位或根据操作控制信号,通过输出总线输出输入两数的按位或结果
1做比较根据操作控制信号,若输入总线A的数值小于总线B的数值,则为真,否则为假

EXT

Extender – 扩展器

信号名方向描述
imm16II-指令的16位立即数
extOpI扩展器控制信号
doutO扩展器输出总线

序号功能名称功能描述
1逻辑扩展当控制信号无效时,对输入的16位立即数逻辑扩展为32位
2算术扩展当控制信号有效时,对输入的16位立即数算术扩展为32位

Control

控制单元。

CTRL

Controller – 控制器

信号名方向描述
insI当前需要执行的指令
branchO分支信号
jumpO跳转信号
regDstO寄存器写入地址控制信号
aluSrcO算数逻辑单元输入控制信号
aluCtrO算术逻辑单元操作控制信号
regWrO寄存器写入使能信号
memWrO内存写入使能信号
extOpO扩展器控制信号
memtoRegO寄存器写入总线控制信号

序号功能名称功能描述
1由指令产生控制信号通过输入的指令分析出需要执行的操作,输出相应的控制信号

Code Repository

代码仓库。

GitHub: COExperiment_Repo

版权信息。

Copyright (c) 2017 TripleZ

Open source under the MIT License.


知识共享许可协议
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。