# Pipeline CPU
**《计算机组成原理》课程设计,基于 MIPS 系统的流水线 CPU 设计**
## 项目简介
本项目采用 Verilog 语言,实现了一个基于 MIPS 五级流水线 CPU 架构,且具有数据旁路机制解决数据冲突,总体结构框图如下:
<img title="" src="Pipeline.assets/structure.jpg" alt="" style="zoom:67%;">
### 指令集
本项目基于 MIPS 指令集,实现了 39 种不同的指令,指令的格式和编码与 MIPS 指令集保持一致。
| 汇编指令 | 指令码 | 功能描述 |
|:----------------:|:---------------------------------------:|:---------------------------------------------:|
| add Rd, Rs, Rt | 000000\|Rs\|Rt\|Rd\|00000\|100000 | RF[Rd] = RF[Rs] + RF[Rt] |
| and Rd, Rs, Rt | 000000\|Rs\|Rt\|Rd\|00000\|100100 | RF[Rd] = RF[Rs] & RF[Rt] |
| jr Rs | 000000\|Rs\|00000\|00000\|00000\|001000 | PC = RF[Rs] |
| mfhi Rd | 000000\|00000\|00000\|Rd\|00000\|010000 | RF[Rd] = HI |
| mflo Rd | 000000\|00000\|00000\|Rd\|00000\|010010 | RF[Rd] = LO |
| mthi Rs | 000000\|Rs\|00000\|00000\|00000\|010001 | HI = RF[Rs] |
| mtlo Rs | 000000\|Rs\|00000\|00000\|00000\|010011 | LO = RF[Rs] |
| mult Rs, Rt | 000000\|Rs\|Rt\|00000\|00000\|011000 | HI \| LO = RF[Rs] * RF[Rt] |
| nor Rd, Rs, Rt | 000000\|Rs\|Rt\|Rd\|00000\|100111 | RF[Rd] = ~(RF[Rs] \| RF[Rt]) |
| or Rd, Rs, Rt | 000000\|Rs\|Rt\|Rd\|00000\|100101 | RF[Rd] = RF[Rs] \| RF[Rt] |
| sll Rd, Rt, sa | 000000\|00000\|Rt\|Rd\|sa\|100111 | RF[Rd] = RF[Rt] << sa |
| sllv Rd, Rt, Rs | 000000\|Rs\|Rt\|Rd\|00000\|000100 | RF[Rd] = RF[Rt] << RF[Rs] |
| slt Rd, Rs, Rt | 000000\|Rs\|Rt\|Rd\|00000\|101010 | RF[Rd] = (RF[Rs] < RF[Rt]) ? 1 : 0 |
| sra Rd, Rt, sa | 000000\|00000\|Rt\|Rd\|sa\|000011 | RF[Rd] = RF[Rt] >>> sa |
| srav Rd, Rt, Rs | 000000\|Rs\|Rt\|Rd\|00000\|000111 | RF[Rd] = RF[Rt] >>> RF[Rs] |
| srl Rd, Rt, sa | 000000\|00000\|Rt\|Rd\|sa\|000010 | RF[Rd] = RF[Rt] >> sa |
| srlv Rd, Rt, Rs | 000000\|Rs\|Rt\|Rd\|00000\|000110 | RF[Rd] = RF[Rt] >> RF[Rs] |
| sub Rd, Rs, Rt | 000000\|Rs\|Rt\|Rd\|00000\|100010 | RF[Rd] = RF[Rs] - RF[Rt] |
| xor Rd, Rs, Rt | 000000\|Rs\|Rt\|Rd\|00000\|100110 | RF[Rd] = RF[Rs] ^ RF[Rt] |
| addi Rt, Rs, imm | 001000\|Rs\|Rt\|imm | RF[Rt] = RF[Rs] + imm |
| andi Rt, Rs, imm | 001100\|Rs\|Rt\|imm | RF[Rt] = RF[Rs] & imm |
| beq Rs, Rt, imm | 000100\|Rs\|Rt\|imm | if RF[Rs] == RF[Rt]: PC = PC + imm << 2 |
| bgez Rs, imm | 000001\|Rs\|00001\|imm | if RF[Rs] >= 0: PC = PC + imm << 2 |
| bgtz Rs, imm | 000111\|Rs\|00000\|imm | if RF[Rs] > 0: PC = PC + imm << 2 |
| blez Rs, imm | 000110\|Rs\|00000\|imm | if RF[Rs] <= 0: PC = PC + imm << 2 |
| bltz Rs, imm | 000001\|Rs\|00000\|imm | if RF[Rs] < 0: PC = PC + imm << 2 |
| bne Rs, Rt, imm | 000101\|Rs\|Rt\|imm | if RF[Rs] != RF[Rt]: PC = PC + imm << 2 |
| lb Rt, imm(Rs) | 100000\|Rs\|Rt\|imm | RF[Rt] = MEM[RF[Rs] + imm] |
| lh Rt, imm(Rs) | 100001\|Rs\|Rt\|imm | RF[Rt] = MEM[RF[Rs] + imm] |
| lui Rt, imm | 001111\|Rs\|Rt\|imm | RF[Rt] = imm << 16 \| 0x0000 |
| lw Rt, imm(Rs) | 100011\|Rs\|Rt\|imm | RF[Rt] = MEM[RF[Rs] + imm] |
| ori Rt, Rs, imm | 001101\|Rs\|Rt\|imm | RF[Rt] = RF[Rs] \| imm |
| sb Rt, imm(Rs) | 101000\|Rs\|Rt\|imm | MEM[RF[Rs] + imm] = RF[Rt] |
| sh Rt, imm(Rs) | 101001\|Rs\|Rt\|imm | MEM[RF[Rs] + imm] = RF[Rt] |
| slti Rt, Rs, imm | 001010\|Rs\|Rt\|imm | RF[Rt] = (RF[Rs] < imm) ? 1 : 0 |
| sw Rt, imm(Rs) | 101011\|Rs\|Rt\|imm | MEM[RF[Rs] + imm] = RF[Rt] |
| xori Rt, Rs, imm | 001110\|Rs\|Rt\|imm | RF[Rt] = RF[Rs] ^ imm |
| j imm | 000010\|imm | PC = PC[31:28] \| imm << 2 |
| jal imm | 000011\|imm | RF[$ra] = PC + 4; PC = PC[31:28] \| imm << 2 |
### 算术逻辑单元 ALU
ALU 模块由一个加法器、一个乘法器和一个 4-16 译码器构成,实现 12 种不同的运算,控制信号采用全译码法。
| 运算操作名称 | 控制信号编码 | 运算操作名称 | 控制信号编码 |
|:------:|:------:|:--------:|:------:|
| 加法 | 0001 | 按位或非 | 0111 |
| 减法 | 0010 | 逻辑左移 | 1000 |
| 小于条件设置 | 0011 | 逻辑右移 | 1001 |
| 按位与 | 0100 | 算术右移 | 1010 |
| 按位或 | 0101 | 立即数写入高半字 | 1011 |
| 按位异或 | 0110 | 乘法 | 1100 |
### 寄存器堆
寄存器堆内部共有 32 个通用寄存器,其中零号寄存器的值被硬编码为零,用于提供常数零。寄存器堆模块共有两个读端口用于同时读取两个操作数、一个写端口用于数据的写回以及两个测试读端口用于展示程序运行状态。
### 数据 RAM 存储器
- 数据 RAM 存储器共有 4KB 的存储空间,且内存按字节编址。
- 基于 Xilinx 提供的 RAM 双端口存储器 IP 核构建,由 4 个 1024 × 8bit 的 RAM 作位拓展组合而成。
- 支持 8 位(字节)、16 位(半字)、32 位(字)数据的读写。
- 不同位数数据读写的内存地址需要满足整数边界的要求。
- 双端口分别用于正常数据读写和测试读数据。
### 指令译码器
指令译码器根据指令的格式进行匹配,生成所实现的所有指令的独热编码,组合得到 CPU 内部各个模块所需的控制信号。
| 控制信号 | 描述 |
|:----------------:|:----------------------------------------------------------------------------------------------------------------- |
| jumps[8:0] | 所实现的 9 种不同的分支跳转指令独热编码 |
| alu_control[3:0] | ALU 模块控制信号 |
| alu_flag1 | ALU 源操作数 1 来源:<br/>取 0 表示来自 Rs 寄存器值<br/>取 1 表示来自指令 sa 段的值 |
| alu_flag2 | ALU 源操作数 2 来源:<br/>取 0 表示来自Rt寄存器值 <br/>取 1 表示来自指令中的 16 位立即数 |
| mem_ren[1:0] | 数据 RAM 模块读使能信号 |
| mem_wen[1:0] | 数据 RAM 模块写使能信号 |
| wb_flag | 是否需�
没有合适的资源?快使用搜索试试~ 我知道了~
计算机组成原理课程设计采用 Verilog 语言基于 MIPS 五级流水线 CPU 架构源代码,具有数据旁路机制解决数据冲突
共20个文件
v:10个
coe:4个
xci:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 15 浏览量
2024-11-08
16:15:23
上传
评论
收藏 107KB ZIP 举报
温馨提示
本项目采用 Verilog 语言,实现了一个基于 MIPS 五级流水线 CPU 架构,且具有数据旁路机制解决数据冲突,总体结构框图如下: 指令集 本项目基于 MIPS 指令集,实现了 39 种不同的指令,指令的格式和编码与 MIPS 指令集保持一致。 算术逻辑单元 ALU ALU 模块由一个加法器、一个乘法器和一个 4-16 译码器构成,实现 12 种不同的运算,控制信号采用全译码法。 寄存器堆 寄存器堆内部共有 32 个通用寄存器,其中零号寄存器的值被硬编码为零,用于提供常数零。寄存器堆模块共有两个读端口用于同时读取两个操作数、一个写端口用于数据的写回以及两个测试读端口用于展示程序运行状态。 数据 RAM 存储器 数据 RAM 存储器共有 4KB 的存储空间,且内存按字节编址。 基于 Xilinx 提供的 RAM 双端口存储器 IP 核构建,由 4 个 1024 × 8bit 的 RAM 作位拓展组合而成。 支持 8 位(字节)、16 位(半字)、32 位(字)数据的读写。 不同位数数据读写的内存地址需要满足整数边界的要求。 双端口分别用于正常数据读写和测试读数据。
资源推荐
资源详情
资源评论
收起资源包目录
Pipeline-main.zip (20个子文件)
Pipeline-main
Pipeline.assets
structure.jpg 112KB
Pipeline.xpr 14KB
Pipeline.srcs
sim_1
new
testbench.v 2KB
sources_1
coe
program2.coe 129B
program3.coe 147B
program1.coe 498B
program4.coe 318B
new
decoders
decoder4.v 842B
decoder2.v 299B
dataram.v 4KB
cpu.v 10KB
alu.v 3KB
regfile.v 798B
controller.v 7KB
arithmetics
multiplier.v 353B
adder.v 246B
ip
dataram8
dataram8.xci 11KB
instrom
instrom.xci 11KB
.gitignore 210B
README.md 12KB
共 20 条
- 1
资源评论
yanglamei1962
- 粉丝: 2491
- 资源: 817
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 课程设计项目:python+QT实现的小型编译器.zip
- (源码)基于AVR ATmega644的智能卡AES解密系统.zip
- (源码)基于C++插件框架的计算与打印系统.zip
- (源码)基于Spring Boot和Vue的苍穹外卖管理系统.zip
- (源码)基于wxWidgets库的QMiniIDE游戏开发环境管理系统.zip
- 通过C++实现原型模式(Prototype Pattern).rar
- 学习记录111111111111111111111111
- 通过java实现原型模式(Prototype Pattern).rar
- 通过python实现原型模式(Prototype Pattern).rar
- xiefrnsdklmkds
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功