1 课程设计概述
1.1 设计目的
计算机组成原理是计算机专业的核心基础课。该课程力图以“培养学生现代计算机系统设计能力”为目标,贯彻“强调软/硬件关联与协同、以CPU设计为核心/层次化系统设计的组织思路,有效地增强对学生的计算机系统设计与实现能力的培养”。课程设计是完成该课程并进行了多个单元实验后,综合利用所学的理论知识,并结合在单元实验中所积累的计算机部件设计和调试方法,设计出一台具有一定规模的指令系统的简单计算机系统。
课程设计属于设计型实验,不仅锻炼学生简单计算机系统的设计能力,而且通过进行中央处理器底层电路的实现、故障分析与定位、系统调试等环节的综合锻炼,进一步提高学生分析和解决问题的能力。
1.2 设计任务
本课程设计的目标总体目标是设计并实现一个满足以下条件的多周期和流水CPU:
1)若干段流水、可以处理冲突;
2)三种类型的指令若干条;
3)MIPS、ARM、RISC-V等类型CPU都可以;
4)下载到FPGA上进行验证(选)。
1.3 设计要求
1)根据课程设计指导书的要求,制定出设计方案;
2)分析指令系统格式,指令系统功能;
3)根据指令系统构建基本功能部件,主要数据通路;
4)根据功能部件及数据通路连接,分析所需要的控制信号以及这些控制信号的有效形式;
5)调试、数据分析、验收检查;
6)课程设计报告和总结。
1.4 技术指标
1)支持表1.4.1所示的50条32位MIPS指令;
2)支持5段流水机制,可处理数据冒险,结构冒险,分支冒险;
3)能运行由自己所设计的指令系统构成的一段测试程序,测试程序应能涵盖所有指令,程序执行功能正确;
4)运行测试程序所耗费的时钟周期数以及每种类型指令执行所需时间。
序号 | 指令 | 指令说明 | 指令格式 | OP 31-26 |
RS 25-21 |
RT 20-16 |
RD 15-11 |
SA 10-6 |
FUNCT 5-0 |
指令码 16进制 |
1 | addi | 加立即数 | addi rt, rs, immediate | 001000 | 00000 | 100000 | 20000000 | |||
2 | addiu | 加立即数(无符号) | addiu rd, rs, immediate | 001001 | 24000000 | |||||
3 | andi | 立即数与 | andi rt, rs, immediate | 001100 | 30000000 | |||||
4 | ori | 或立即数 | ori rt, rs, immediate | 001101 | 34000000 | |||||
5 | sltiu | 小于立即数置1(无符号) | sltiu rt, rs, immediate | 001011 | 2C000000 | |||||
6 | lui | 立即数加载高位 | lui rt, immediate | 001111 | 00000 | 3C000000 | ||||
7 | xori | 异或(立即数) | xori rt, rs, immediate | 001110 | 00000 | 00000 | 000000 | 38000000 | ||
8 | slti | 小于置 1(立即数) | slti rt, rs, immediate | 001010 | 00000 | 00000 | 000000 | 28000000 | ||
9 | addu | 加(无符号) | addu rd, rs, rt | 000000 | 00000 | 100001 | 00000021 | |||
10 | and | 与 | and rd, rs, rt | 000000 | 00000 | 100100 | 00000024 | |||
11 | beq | 相等时分支 | beq rs, rt, offset | 000100 | 10000000 | |||||
12 | bne | 不等时分支 | bne rs, rt, offset | 000101 | 14000000 | |||||
13 | j | 跳转 | j target | 000010 | 08000000 | |||||
14 | jal | 跳转并链接 | jal target | 000011 | 0C000000 | |||||
15 | jr | 跳转至寄存器所指地址 | jr rs | 000000 | 001000 | 00000009 | ||||
16 | lw | 取字 | lw rt, offset(base) | 100011 | 8C000000 | |||||
17 | xor | 异或 | xor rd, rs, rt | 000000 | 00000 | 100110 | 00000026 | |||
18 | nor | 或非 | nor rd, rs, rt | 000000 | 00000 | 100111 | 00000027 | |||
19 | or | 或 | or rd, rs, rt | 000000 | 00000 | 100101 | 00000025 | |||
20 | sll | 逻辑左移 | sll rd, rt, sa | 000000 | 00000 | 000000 | 00000000 | |||
21 | sllv | 逻辑左移(位数可变) | sllv rd, rt, rs | 000000 | 00000 | 000100 | 00000004 | |||
22 | sltu | 小于置1(无符号) | sltu rd, rs, rt | 000000 | 00000 | 101011 | 0000002B | |||
23 | sra | 算数右移 | sra rd, rt, sa | 000000 | 00000 | 000011 | 00000003 | |||
24 | srl | 逻辑右移 | srl rd, rt, sa | 000000 | 00000 | 000010 | 00000002 | |||
25 | subu | 减(无符号) | sub rd, rs, rt | 000000 | 00000 | 100010 | 00000022 | |||
26 | sw | 存字 | sw rt, offset(base) | 101011 | AC000000 | |||||
27 | add | 加 | add rd, rs, rt | 000000 | 00000 | 100000 | 00000020 | |||
28 | sub | 减 | sub rd, rs, rt | 000000 | 00000 | 100010 | 00000022 | |||
29 | slt | 小于置 1 | slt rd, rs, rt | 000000 | 00000 | 101010 | 0000002A | |||
30 | srlv | 逻辑右移(位数可变) | srlv rd, rt, rs | 000000 | 00000 | 000110 | 00000006 | |||
31 | srav | 算数右移(位数可变) | srav rd, rt, rs | 000000 | 00000 | 000111 | 00000007 | |||
32 | clz | 前导零计数 | clz rd, rs | 011100 | 00000 | 100000 | 70000020 | |||
33 | divu | 除(无符号) | divu rs, rt | 000000 | 00000 | 00000 | 011011 | 0000001B | ||
34 | eret | 异常返回 | eret | 010000 | 10000 | 00000 | 00000 | 00000 | 011000 | 42000018 |
35 | jalr | 跳转至寄存器所指地址,返回地址保存在R31这个寄存器 | jalr rs | 000000 | 00000 | 001001 | 00000008 | |||
36 | lb | 取字节 | lb rt, offset(base) | 100000 | 80000000 | |||||
37 | lbu | 取字节(无符号) | lbu rt, offset(base) | 100100 | 90000000 | |||||
38 | lhu | 取半字(无符号) | lhu rt, offset(base) | 100101 | 94000000 | |||||
39 | sb | 存字节 | sb rt, offset(base) | 101000 | A0000000 | |||||
40 | sh | 存半字 | sh rt, offset(base) | 101001 | A4000000 | |||||
41 | lh | 取半字 | lh rt, offset(base) | 100001 | 84000000 | |||||
42 | mfhi | 读 Hi 寄存器 | mfhi rd | 000000 | 00000 | 00000 | 00000 | 010000 | 00000010 | |
43 | mflo | 读 Lo 寄存器 | mflo rd | 000000 | 00000 | 00000 | 00000 | 010010 | 00000012 | |
44 | mthi | 写 Hi 寄存器 | mthi rd | 000000 | 00000 | 00000 | 00000 | 010001 | 00000011 | |
45 | mtlo | 写 Lo 寄存器 | mtlo rd | 000000 | 00000 | 00000 | 00000 | 010011 | 00000013 | |
46 | mul | 乘 | mul rd, rs, rt | 011100 | 00000 | 000010 | 70000002 | |||
47 | mult | 字相乘 | mult rs, rt | 000000 | 00000 | 00000 | 011000 | 00000018 | ||
48 | multu | 乘(无符号) | multu rs, rt | 000000 | 00000 | 00000 | 011001 | 00000019 | ||
49 | bgez | 大于等于 0 时分支 | bgez rs, offset | 000001 | 00001 | 04010000 | ||||
50 | div | 除 | div rs, rt | 000000 | 00000 | 00000 | 011010 | 0000001A |
2 总体方案设计
2.1 MIPS体系结构
MIPS是RISC处理器中的一种。MIPS即无内部互锁流水线的微处理器(Microprocessor