# 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 | 是否需�
yanglamei1962
- 粉丝: 2615
- 资源: 910
最新资源
- 14-【培训体系构建】-如何塑造一支高效的企业内训师队伍.doc.docx
- 15-【培训体系构建】-如何提高企业文化培训活动的实效性——5W2H.doc.docx
- 13-【培训体系构建】-如何进行企业文化培训评估.doc.docx
- 16-【激励体系构建】-员工满意度调查问卷.doc.docx
- 18-【激励体系构建】-如何有效实施企业文化考核?.doc.docx
- 20-【传播体系构建】-企业文化主题宣传计划表(不含活动).doc.docx
- 21-【传播体系构建】-企业文化传播载体分类清单.doc.docx
- 19-【激励体系构建】-企业文化激励方案设计表.doc.docx
- 22-【传播体系构建】-企业文化活动费用预算表.doc.docx
- 23-【传播体系构建】-联想的单向传播、双向传播与体验传播.doc.docx
- 24-【传播体系构建】-海尔企业文化的全方位传播.doc.docx
- 26-【融入体系构建】-以“八大体系”为核心的企业文化工作评估.doc.docx
- 25-【融入体系构建】-企业文化评估体系构建实践指导.doc.docx
- 27-【融入体系构建】-企业文化调查问卷.docx
- 28-【融入体系构建】-班组文化建设考核指标体系.doc.docx
- 30-【融入体系构建】-常用管理制度清单.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈