78
目: 5 段流水 CPU 设计 业: 信息安全 级: IS1301 号: U201315120 名: 王梦鸽 话: 13297915997 件: [email protected] 完成日期: 2015-12-23 指导教师: 谭志虎 计算机科学与技术学院 2016 计算机组成原理 课程设计报告

计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

  • Upload
    others

  • View
    55

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

题 目: 5 段流水 CPU 设计

专 业: 信息安全

班 级: IS1301

学 号: U201315120

姓 名: 王梦鸽

电 话: 13297915997

邮 件: [email protected]

完成日期: 2015-12-23

指导教师: 谭志虎

计算机科学与技术学院

2016

计算机组成原理 课程设计报告

Page 2: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的
Page 3: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

课程设计任务书

一、设计题目

基于 Logisim 软件仿真平台的 5 段流水 CPU 设计实现

二、设计内容

设计模型机系统的总体结构、指令系统和时序信号。在对该模型机系统中的部件

功能利用 EDA 软件的仿真功能进行仿真分析和功能验证的基础上,将部分电路下载

到 FPGA,并与适当的外围器件相配合,实现模型机的整机系统。要求所设计的整机

系统能支持自动和单步运行方式,能正确地执行存放在主存中的程序的功能,对主要

的数据流和控制流通过 LED 适时显示信息。

三、 设计要求

1) 支持 20 条基本指令;

2) 支持 5 段流水机制,可处理数据冒险,结构冒险,分支冒险;

3) 能运行由自己所设计的指令系统构成的一段测试程序,测试程序应能涵盖所有

指令,程序执行功能正确。

4) 能运行教师提供的标准测试程序,并统计执行时间。

四、设计流程

1) 根据课程设计指导书的要求,制定出设计方案;

2) 画出自己所设计计算机系统的原理框图,分析所需要的控制信号以及这些控制

信号的有效形式;

3) 画出各指令的指令周期流程图和所需要的控制信号;

4) 设计出实现指令功能的控制器;

5) 调试、数据分析、验收检查;

6) 课程设计报告和总结。

Page 4: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

五、成绩评定

成绩评定根据考勤、课程设计的过程、课程设计的效果、课程设计报告质量等进

行综合评定;其中设计过程和结果占 70%,课程设计报告占 30%;课程设计的成绩评

定等级为不及格、及格、中、良好、优秀五级;对基本功能进行扩展或设计具有非常

鲜明的特征和一定程度的创新,可根据实际情况加分。

六、设计报告要求

课程设计报告主要内容包括:设计题目、设计目的、设备器材、设计原理及内容、

设计步骤、遇到的问题及解决方法、设计总结、参考文献等。要求在适当位置配合相

应的实验原理图、数据通路图、实验接线图等图表进行说明。总结部分主要写设计工

作简介以及设计体会。应做到文理通顺,内容正确完整,书写工整,装订整齐。课程

设计报告采用《计算机组织与结构》专用设计报告模板,A4 纸双面打印。

七、时间安排

课程设计的总体时间为 2 周,具体安排如下:

1) 第 1 天:到实验室布置任务和集中讲解。

2) 第 1~3 天:学生查阅资料,开始方案设计。

3) 第 4 天:中期进度检查,单周期 CPU 验收检查。

4) 第 6 天:中期进度检查,理想流水线多周期 CPU 验收检查。

5) 第 10 天:最终结果验收。

6) 八、主要参考文献

[1] DAVID A.PATTERSON(美).计算机组成与设计硬件/软件接口(原书第 4 版).北

京:机械工业出版社.

[2] David Money Harris(美).数字设计和计算机体系结构(第二版). 机械工业

出版社

[3] 秦磊华,吴非,莫正坤.计算机组成原理. 北京:清华大学出版社,2011年.

[4] 袁春风编著. 计算机组成与系统结构. 北京:清华大学出版社,2011年.

[5] 张晨曦,王志英. 计算机系统结构. 高等教育出版社,2008年.

Page 5: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

I

华 中 科 技 大 学 课 程 设 计 报 告

目 录

1 课程设计概述 ....................................................................................... 1

1.1 课设目的 ...........................................................................................1

1.2 设计任务 ...........................................................................................1

1.3 设计要求 ...........................................................................................1

2 实验原理与环境 ................................................................................... 3

2.1 实验原理 ...........................................................................................3

2.2 实验环境 ...........................................................................................3

3 总体方案设计 ....................................................................................... 4

3.1 构建单周期 CPU ................................................................................4

3.2 可支持理想流水线的多周期 CPU 设计 .......................................... 12

4 详细设计与实现 ................................................................................. 18

4.1 构建单周期 CPU .............................................................................. 18

4.2 可支持理想流水线多周期 CPU ....................................................... 26

4.3 流水线冲突检测器 .......................................................................... 29

4.4 插入气泡的流水冲突处理 .............................................................. 31

4.5 数据重定向的流水冲突处理 .......................................................... 32

4.6 动态分支预测的流水冲突处理 ...................................................... 35

5 实验过程与调试 ................................................................................. 44

5.1 测试用例 .........................................................................................44

5.2 测试结果 ......................................................................................... 55

5.3 性能分析 ......................................................................................... 57

5.4 主要故障与调试 .............................................................................. 59

5.5 实验流程 ......................................................................................... 68

Page 6: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

II

华 中 科 技 大 学 课 程 设 计 报 告

6 设计总结与心得 ................................................................................. 70

6.1 课设总结 ......................................................................................... 70

6.2 课设心得 ......................................................................................... 70

参考文献 ................................................................................................... 72

Page 7: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

1

华 中 科 技 大 学 课 程 设 计 报 告

1 课程设计概述

1.1 课设目的

计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

组成原理及内部工作机制,包括计算机各大部件的工作原理、设计方法、逻辑实现

及互连构成计算机整机的技术。课程设计属于设计型实验,不仅锻炼学生简单计算

机系统的设计能力,而且通过进行设计及实现,进一步提高分析和解决问题的能力。

1.2 设计任务

计算机系统设计的总体目标是设计模型机系统的总体结构、指令系统和时序信

号。所设计的主机系统能支持自动和单步运行方式,能正确地执行存放在主存中的

程序的功能,对主要的数据流和控制流通过 LED 适时显示信息

具体设计任务如下:在 logisim 平台或 FPGA 开发板设计一款支持特定指令系

统的 5段流水 CPU。要求其支持 20条基本指令,支持 5段流水机制,可处理数据冒

险,结构冒险,分支冒险;能正确运行自己编写的测试程序,测试程序应能涵盖所

有指令;能正确运行教师提供的标准测试程序;具有自动统计功能,自动统计执行

周期,不同冒险冲突次数,动态预测成功次数。

1.3 设计要求

根据理论课程所学的至少,设计出简单计算机系统的总体方案,结合各单元实

验积累和课堂上所学知识,选择适当芯片,设计简单的计算机系统,具体要求如下:

(1) 支持 20 条基本指令,具体见表 1-1;

(2) 根据课设指导书的要求,制定设计方案;

(3) 支持 5 段流水机制,可处理数据冒险,结构冒险,分支冒险;

(4) 能运行由自己所设计的指令系统构成的一段测试程序,测试程序应能涵

盖所有指令,程序执行功能正确。

Page 8: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

2

华 中 科 技 大 学 课 程 设 计 报 告

表 1-1 指令集

# 指令 15~12 11~10 9~8 7~6 5~3 2~0 指令 指令功能

1 or 0 rs rt rd 0 0 or $rd = $rs | $rt

2 and 0 rs rt rd 0 1 and $rd = $rs & $rt

3 add 0 rs rt rd 0 2 add $rd = $rs + $rt

4 sub 0 rs rt rd 0 3 sub $rd = $rs - $rt

5 sllv 0 rs rt rd 0 4 sllv $rd = $rs << $rt

6 srlv 0 rs rt rd 0 5 srlv $rd = $rs >> $rt

7 srav 0 rs rt rd 0 6 srav $rd = $rs >> $rt 算术右移

8 slt 0 rs rt rd 0 7 slt $rd = ($rs < $rt) ? 1 :0

9 beq 1 rs rt offset-s beq beq = ?

10 bne 2 rs rt offset-s bne bne != ?

11 bgt 3 rs rt offset-s bgt bgt > ?(有符号比较)

12 DISP 4 rs rt immediate-u DISP DISP[imm] = $rs

13 lui 5 0 rt immediate-u lui $rt = imm << 8

14 ori 6 rs rt immediate-u ori $rt = $rs | imm

15 andi 7 rs rt immediate-u andi $rt = $rs & imm

16 addi 8 rs rt immediate-s addi $rt = $rs + imm

17 lw 9 rs rt immediate-s lw $rt = MEM[$rs + imm]

18 sw 10 rs rt immediate-s sw MEM[$rs+imm] = $rt

19 jump 11 jump address jump jump

20 halt 12 0 halt halt (时钟暂停)

Page 9: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

3

华 中 科 技 大 学 课 程 设 计 报 告

2 实验原理与环境

2.1 实验原理

根据计算机组成原理的相关知识,在 logisim 仿真平台上设计相关器件件加以封

装,设计数据通路完成单周期 CPU、五段流水 CPU 的设计。

2.2 实验环境

本实验在 MAC OS 系统中设计,利用 logisim 仿真平台完成。

Logisim 是一款数字电路模拟的教育软件,每一位用户都可以通过它来学习如

何创建逻辑电路,方便简单。 它是一款基于 Java 的应用程序,可运行在任何支持

JAVA 环境的平台,方便学生来学习设计和模仿数字逻辑电路。Logisim 中的主要组

成部分之一就在于设计并以图示来显示 CPU。当然 Logisim 中还有其他多种组合分

析模型来对你进行帮助,如转换电路,表达式,布尔型和真值表等等。同时还可以

重新利用小规模的电路来作为大型电路的一部分。

Page 10: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

4

华 中 科 技 大 学 课 程 设 计 报 告

3 总体方案设计

3.1 构建单周期 CPU

单周期 CPU 由程序计数器(PC)、 算术逻辑运算单元(ALU)、数据存储

器(DM)、数据寄存器堆(RF)、取指令部件(GetCode)、地址转移逻辑部件

(NPC)、 总控制器(Control)构成,然后通过数据通路连接各个模块实现了

整个单周期 CPU。

3.1.1 总体设计

单周期 CPU 主要分为如下八个模块,各个模块功能如下:

1) 数据通路:进行数据的运算、读取以及存储功能,通过总控制器产生的各个

控制信号,进而实现对数据的各项操作。

2) 程序计数器(PC):给出程序指令的地址,使得程序能够通过地址顺序执行。

3) 算术逻辑运算单元:数据通路调用此模块,根据得到的控制信号对输入数据

进行处理,处理功能有:addu、add、or、subu、sub、sltu、slt 等。

4) 数据存储器:当 MemWrite 控制信号为 1 时,此时就将输入数据存储到此存

储器中,当 MemWrite 为 0 时,则根据输入的地址,找到地址对应的单元将

单元中的数据输出。

5) 数据寄存器堆:由多个寄存器构成,用于存储各个数据结果。

6) 取指令部件:指根据 PC 所提供的地址从指令寄存器中取出要执行的指令,

再根据各控制信号,得出下一次要执行的指令的地址。

7) 地址逻辑转移部件:地址逻辑转移器通过各个信号和指令中的操作码,判断

下一条指令的地址,并能给出程序执行的下一条指令的地址。

8) 总控制器:总控制器通过从取指令部件获得的指令,进而产生各个控制信号,

并将控制信号返回个数据通路,就此实现各项功能。

总体结构图如图 3-1 所示。

Page 11: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

5

华 中 科 技 大 学 课 程 设 计 报 告

图 3-1 总体结构图

3.1.2 主要功能部件

1. 程序计数器 PC

程序计数器 PC 通过寄存器来实现,每个时钟周期触发一次寄存器改变,即每

个周期执行一条指令,从而实现了单周期。PC 的来源有三个:顺序执行下一条指令

(PC+1)、分支转移(PC+1+offset)、跳转指令(PC&F000|JMP_Addr),通过分支

控制信号 BranchSelect 来确定 PC。

2. 算数逻辑运算单元 ALU

ALU 的设计是将不同的功能部件进行封装,比如加法器、减法器、逻辑左移、

逻辑右移等等,然后组合在一起。通过操作符控制其输出。

3. 寄存器堆 RF

寄存器堆是将 4 个寄存器放在一起,利用数据选择器选定某个寄存器从而达到

寄存器编址的目的。同时寄存器堆要设计使能端和钟控端,便于统一时钟信号和实

现暂停程序的功能。

Page 12: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

6

华 中 科 技 大 学 课 程 设 计 报 告

4. 取指令部件

取指令部件将从指令寄存器中读取出来的指令进行分析,分析出操作符(OP)、

目的寄存器(rs)和源寄存器(rt)、以及立即数(IMM)等。可以利用分线器将 16

位指令进行拆分,输出 OP 段、rs 段、rt 段、IMM 段、funct 段等。(IMM 段利用分

线器将 rs、rt、IMM、shamt、funct 字段进行结合)

5. 控制器

控制器根据操作符的不同产生不同的控制信号,每种控制信号可以利用 logisim

的分析电路功能自动生成,不同的控制信号的生成电路独立封装,最后在控制器电

路中进行组合封装即可。

6. 地址转移逻辑部件 NPC

NPC 根据操作符和各个标志位的输出判断下一条将要执行的指令的地址

(NPC)。因而 NPC 可以将操作符 OP 和需要用到的标志位(比如 ZERO 位,进位位)

作为输出,将 BranchSelect(NPC 的来源进行选择信号)以及 JumpBranch(地址是

否进行跳转信号)作为输出,从而能唯一的确定出下一条指令的地址。

7. 数据存储器和指令存储器

数据存储器可以利用 RAM 实现,指令存储器可以利用 ROM 来实现。

3.1.3 控制信号

1. OP_trans 信号

将指令中的 OP 值和 funct 值转换成 ALU 的六位运算操作符。

2. RegWriteBack 信号

是否要写回到寄存器,若 RegWriteBack = 1, 则需要写回寄存器。

3. RegWriteSelect 信号

选择要写回的寄存器的数据,若 RegWriteSelect = 1,则将内存中得数据写入

寄存器;否则,写入端口的数据为 ALU 的运算结果。

Page 13: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

7

华 中 科 技 大 学 课 程 设 计 报 告

4. RegWrite_Num_Select 信号

选择要写回的寄存器编号。若 RegWrite_Num_Select=1 则将数据写回寄存器

rt;否则,写入寄存器 rd。

5. ALU_Out_Select 信号

选择 ALU 的输出结果。一般情况下 ALU 默认输出计算结果(ALU_Out_Select

为 0),但是当遇到 slt 指令,写回寄存器的数据是 1 或 0,即比较标志位扩展后的

输出。所以这个信号在 slt 指令的时候为 1。

6. Alusrc_A 信号

ALU 的 A 输入端的数据选择信号。若 Alusrc_A= 1,则将立即数 IMM 的数值

输入到 ALU 的 A 端口中;否则,将寄存器 rs 的数值输入到 ALU 的 A 端口中。

7. Alusrc_B 信号

ALU 的 B 输入端的数据选择信号。B 端的输入来源有三个。若 Alusrc_B= 00,

则将寄存器 rt 的数值输入到 ALU 的 B 端口中;若 Alusrc_B= 01,则将立即数 IMM

的数值输入到 ALU 的 B 端口中;若 Alusrc_B= 10,则将数值常量 8 的输入到 ALU

的 B 端口中。

8. MemWrite 信号

写入内存的信号。若 MemWrite = 1,则写入内存;否则,数据内存为只读,

不能写入修改。

9. Beq 信号

beq 信号,当有执行 Beq 指令的时候,Beq = 1;否则 Beq = 0。

10. Bne 信号

Bne 信号,当有执行 Bne 指令的时候,Bne = 1;否则 Bne = 0。

11. Bgt 信号

Bgt 信号,当有执行 Bgt 指令的时候,Bgt = 1;否则 Bgt = 0。

12. DISP 信号

DISP 信号,当有执行 DISP 指令的时候,DISP = 1;否则 DISP = 0。

13. Sign_EXT 信号

Sign_EXT 信号,当进行 8 位数据有符号扩展的时候,Sign_EXT = 1;否则

Sign_EXT = 0。

Page 14: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

8

华 中 科 技 大 学 课 程 设 计 报 告

14. Halt 信号

Halt 信号,当有执行 Halt 指令的时候,Halt = 1;否则 Halt = 0。

15. BranchSelect 信号

分支选择信号。PC 寄存器的来源有三个,顺序执行则 PC = PC(当前)+1;执

行 jump 指令,则 PC = pc&0xf000|address:若满足条件转移指令,则 PC =

pc+1|pc+1+offset。所以当 BranchSelect = 00,选通 PC+1;当 BranchSelect = 01,

选通 pc&0xf000|address;当 BranchSelect = 10,选通 pc+1|pc+1+offset。

16. JumpBranch 信号

地址是否进行跳转信号。若执行 jump 指令或者条件转移指令时候需要进行指

令跳转,则 JumpBranch = 1,将跳转后的地址写入 PC 寄存器中使得跳转后的程序

能够继续顺序执行下去;当 JumpBranch = 0 时,表示顺序执行。

3.1.4 其他功能部件

1. 立即数扩展部件

立即数扩展部件主要分为有符号扩展和无符号扩展,用于将 8 位立即数扩展为

16 位数据。扩展方式根据指令集中指令中立即数是否有符号来判断,有符号扩展主

要针对 beq、bne、bgt、addi、lw、sw 指令,其余指令中的立即数均采用无符号扩展。

符号扩展部件由 Sign_EXT 控制。特别地,slt 指令写回 16 位数据(1 或者 0),但

ALU 输出的是 1 位标志位数据,所以需要特别设计 1 位无符号扩展部件用于 slt 指

令。

2. Jump 转移地址获取部件

此外,jump 指令对应的转移地址需要将高四位置为当前 PC 的高四位,所以将

译码器译码得到的立即数进行无符号扩展后需要与当前 PC 的高四位进行或操作,

从而得到 jump 指令的跳转地址 JumpAddr。

3. 有符号比较部件

当执行 bgt 和 slt 指令的时候,需要进行有符号比较。所以在 ALU 中单独设计

Page 15: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

9

华 中 科 技 大 学 课 程 设 计 报 告

有符号比较部件,将其输出的比较结果作为 ALU 的输出标志位。当标志位为 1 时,

则表明 A < B ,否则 A >= B 。

3.1.5 控制器封装

将封装后的所有控制信号的子电路放在控制器电路中进行二次封装。控制器的

输入为与操作符有关的字段 OP 和 funct,输出为各个控制信号。

3.1.6 指令构造

本次课程设计主要有 R 型、I 型、J 型三种指令,如表 3-1 所示。

表 3-1各类型指令的划分

1. 构造 R 型指令

R 型指令的操作数来自寄存器,结果存入寄存器。但是存入寄存器中的数值有

两个来源,即运算器的输出和数据存储器的输出。故需要通过数据选择器将数据写

回到寄存器堆中。如图 3-2 所示。

图 3-2 构造 R型指令

Page 16: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

10

华 中 科 技 大 学 课 程 设 计 报 告

2. 构造 J 型指令

J 型指令分为无条件转移指令和暂停指令。

无条件跳转指令中给出的是 12 位直接地址,转移的目标地址由 PC 高 4 位与这

12 位直接地址组合而得到 16 为跳转地址,故需要将当前 PC 值和指令中的直接地址

组合形成转移地址反馈给 PC,如图 3-3 所示。

图 3-3构造 J型指令

另一种 J 型指令为 halt 指令,halt 指令的目的是暂停程序。程序暂停意味着此

后所有寄存器和内存中的数据不再进行改变,所以只需要将所有寄存器使能端关闭、

将存储器 RAM、ROM 的芯片关闭即可。

3. 构造 I 型指令

I 型指令中 7 位是立即数,故需要先将立即数进行符号扩展成为 16 为数据,此

后再进行运算,再送入到运算器中进行运算,因此这时运算器的数据来源又增加了

一种(立即数),所以要将寄存器的输出和符号拓展器的输出做数据选择,选择输入

到运算器中,如图 3-4 所示。

图 3-4 构造 I型指令

Page 17: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

11

华 中 科 技 大 学 课 程 设 计 报 告

I 型指令中包括一种特殊的指令——条件转移指令,这类指令需要先经过运算器

运算后才能判断是否进行跳转,根据立即数和当前 PC 值相加得到跳转地址,反馈

给 PC 作为下一条指令的地址。因此 PC 的来源也有多个,就需要构建一个 NPC 反

馈给 PC 正确的下一条指令地址。

3.1.7 数据通路构建

整个单周期 CPU 构建分 5 部分,通过 PC 从指令寄存器中读取指令、将指令送

入译码器中进行译码、译码得到的操作符字段送入控制器生成控制信号、控制信号

控制各个通路的通断和作为数据选择器的选择信号、同时,将译码得到的操作数送

入 ALU 进行运算,得到的运算结果进行写回、显示或者判断等。特别的,执行转

移指令时,PC 不再顺序执行,而是根据转移到跳转指令执行,这需要译码后判断更

改 PC 的数值。

由于单周期 CPU 若采用一般路线设计,存在迭代式设计模式,复杂度高,开发

周期长,正确率低的缺陷,所以这里采用工程化的方法。

根据指令系统构建数据通路表,数据通路表格描述了各部件之间的连接关系,

记录了各部件输入端数据来源,忽略控制类信号,仅保留数据类信号。本次设计构

建的指令系统数据通路表,如表 3-2 所示,之后根据该表格进行部件的连接和控点

安装,构建好数据通路后进行调试即可。

Page 18: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

12

华 中 科 技 大 学 课 程 设 计 报 告

表 3-2 数据通路表

3.2 可支持理想流水线的多周期 CPU 设计

3.2.1 总体设计

理想流水线可分为五个阶段,取指令阶段(IF)、译码阶段(ID)、执行阶段(EX)、

访存阶段(MEM)和写回阶段(WB),后续部件对数据的加工处理依赖于前阶段传

过来的信息。因而在不同部件之间设置缓存接口部件,各个阶段可以向前反馈信息

以及通过接口部件向后传递数据和控制信号。其中 ID 段译码生成该指令的所有控

制信号,后续部件的控制信号不再单独生成。

理想流水线的总体设计如图 3-5。

图 3-5理想流水线总体设计图

IF ID EX MEM WB

Page 19: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

13

华 中 科 技 大 学 课 程 设 计 报 告

3.2.2 接口部件设计

在理想流水线中,每个阶段存储一条指令以及该条指令产生的信号,所以接口

部件中采用寄存器来寄存指令的相关数据和相关信,接口部件的示意图如图 3-6。

图 3-6 接口部件示意图

3.2.3 流水冲突检测器

在流水线中,会涉及到三种冲突,即结构冲突、数据冲突和分支冲突。本次设

计中将指令存储器和数据存储器分离开,避免了结构冲突,但是数据冲突和分支冲

突依然存在。流水冲突检测器的目的就是检测出这两种冲突,从而方便后续的冲突

处理。

数据冲突是指前一条指令需要写回寄存器而后面的指令要用寄存器中的数值,

在前面的指令还没有执行到写回阶段的时,这时候后面指令读取的寄存器数值是错

误的导致运行失败。所以需要将后条指令的寄存器编号与后面各个阶段的目的寄存

器编号进行比较,如果相同且后者含有写回信号,则检测到数据冲突。

分支冲突是指前一条指令存在跳转行为,则其后续读入的指令不应该被执行,

但却留存在流水线中待执行,此时应该将其后续的误读入指令从流水线中清除。分

支冲突的检测可以通过控制器生成的是否发生跳转来判断,如果执行阶段的指令产

生了跳转信号,则说明发生了分支冲突。

Page 20: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

14

华 中 科 技 大 学 课 程 设 计 报 告

3.2.4 插入气泡的流水冲突处理

1. 数据冲突处理

插入气泡的流水冲突处理是检测 ID 与后面各个阶段是否存在数据冲突,当检

测到数据冲突的时候,不管是在 ID 与后续阶段中的哪一个检测到了冲突信号,都

将 IF、IF/ID 接口部件以及 ID/EX 接口部件先锁定一个周期,等待 ID/EX 中的指令

被锁存在 EX/MEM 接口部件中后,再在 ID/EX 接口部件中插入气泡,此后再进行

冲突检测,如果流水线中仍旧存在数据冲突,则继续如前面步骤一样插入气泡,直

到冲突信号消失则停止插入气泡。

图 3-7 插入气泡的数据冲突处理总体设计图

2. 分支冲突处理

当检测到分支冲突的时候,延迟一个周期等待 EX 阶段的指令运行到 MEM 阶

段后,将 IF/ID 和 ID/MEM 接口部件中的信号全部清零,从而达到了将错误读入的

后两条指令从流水线中清除的目的。

图 3-8 插入气泡的分支冲突处理总体设计图

Page 21: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

15

华 中 科 技 大 学 课 程 设 计 报 告

3.2.5 数据重定向的流水冲突处理

数据重定向用于处理数据冲突,当发生冲突的时候,不需要等待数值被写入寄

存器,而是直接将将要写入寄存器堆的正确数值重定向到 EX 阶段即可。

数据重定向只需要检测 EX 和 MEM、WB 的冲突即可,只当发生冲突的时候进

行重定向。所以需要先通过冲突检测确定发生冲突的寄存器编号,然后据此将正确

地数据重定向到对应的输入寄存器数据端。

图 3-9 数据重定向的流水冲突处理总体设计图

除此之外还有一种冲突是 LoadUse 冲突,即前一条指令是从内存中读取数据写

回寄存器堆(即 lw),而后一条指令需要需要用到相应寄存器中的数据,这时候将

MEM 的数据重定向回 EX 阶段显然是错误的,因为重定向回来的数据是内存的地址

而不是我们所需要的内存中的数值,所以这时候需要通过插入气泡的方式来解决冲

突。值得注意的是,这时候冲突检测应该在 ID 和 EX 阶段,当在这两个阶段检测到

冲突的时候,将 IF、IF/ID、ID/EX 先锁定,延迟一个时钟周期后(等待 lw 指令锁

存到 EX/MEM 接口部件中)在 ID/EX 中插入一个气泡。

数据重定向不能解决分支冲突,所以在数据重定向的流水冲突处理中分支冲突

仍旧采用插入气泡的方法来实现。

3.2.6 动态分支预测的流水冲突处理

动态分支预测的原理是通过过去该条指令发生跳转的状态来预测当下该条指令

是否发生跳转,从而减少了插入气泡的数量,优化了流水线的性能。

动态分支预测需要构造预测表(BTB 表),若当前指令能匹配到 BTB 表中的有

效表项,则 NPC 直接为表中的预测地址。在 EX 阶段判断预测是否成功,如果成功

则有效状态递增,PC 继续在跳转后的执行路径上执行;否则递减,且需要修正 PC

Page 22: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

16

华 中 科 技 大 学 课 程 设 计 报 告

的数值使得其回到不跳转的执行路径上来。

若检测到流水线中出现了跳转信号,则新增一条表项,新的表项替换已经失效

的数据,如果所有数据仍旧都有效,则通过 LRU 算法进行替换。

动态分支预测的流水冲突处理示意图如图 3-11 所示。

1. BTB 表构建

BTB 表中保存 4 条记录,每条记录包含的表项有: PC(指令)、TransAddr(预

测地址) 、LRU(LRU 替换算法的计数器)和 Valid(有效状态值),见表 3-3。

表 3-3 BTB 表

编号 PC TransAddr LRU Valid

0

1

2

3

各表项的具体意义如下:

PC:转移指令对应的 PC 值。

addr:对应转移指令转移的地址。

LRU: LRU 算法的计数数值,用于当所有记录都有效的时候,新纪录替换原有

记录。

Valid:保存此条记录的有效程度。长度为 2 位,初始值为 2,每预测成功一次

该值加 1,最大为 3;每预测失败一次该值减 1,最小为 0。当值为 0 时,说明此条

记录失效,可以被替换。分枝状态预测转换图如图 3-10。

图 3-10 分支预测状态转换图

Page 23: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

17

华 中 科 技 大 学 课 程 设 计 报 告

2. LRU 算法的实现

LRU 算法,即最近最少使用算法,算法根据数据的历史访问记录来进行淘汰数

据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”,即插

入新纪录时替换命中频度最低的记录来插入新的纪录。每预测成功一次,将该条记

录对应的 LRU 值置为 0,其他的加 1。当有新记录要插入时,就替换 LRU 值最大的

一条记录。

图 3-11 动态分支预测总体设计图

Page 24: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

18

华 中 科 技 大 学 课 程 设 计 报 告

4 详细设计与实现

4.1 构建单周期 CPU

4.1.1 主要功能部件实现

1. 程序计数器 PC

功能:程序执行的指令地址

输入: 时钟信号、清零信号。

输出: 寄存器的输出端。

具体实现: 计数器的时钟端连线时钟信号和halt信号的与结果,使得当程序暂停

时,计数器的数值不再变化(时钟端直接连接时钟信号同样可以,只是程序暂停后计

数器仍会不断计数,但不影响整个CPU的其他部分,此处采用第一种连线方法),计

数器的加载端分别连接JumpBranch信号和JumpBranch信号的非,计数器的数据端连接

PC的输出端(此处连线上设置控点JumpBranch信号,不跳转时候此处不通),计数器

的输出端连接数据选通器;寄存器的输入端连接数据选通器,输出连接指令内存ROM;

数据选通器选通三路(计数器、jump地址生成部件,转移指令生成部件),选择信号

由BranchSelect信号给出;转移指令部件由加法器实现,输入分别是PC寄存器和译码

得到的偏移地址;jump地址生成部件将译码得到的跳转地址与当前PC的高四位进行与

操作得到最终的跳转地址,如图 4-1所示。

PC的具体电路见图 4-2。

图 4-1 jump地址生成部件电路图

Page 25: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

19

华 中 科 技 大 学 课 程 设 计 报 告

图 4-2 PC电路图

2. 译码器

功能:将 16 位指令分离出各个字段的数据。

输入:16 位指令数据。

输出:OP 字段、rs 编号、rt 编号、IMM(立即数)、funct 字段、直接跳转地址

(JMPAddr)。

具体实现:将指令用分线器进行分离,根据指令格式将分离出来的各段进行重

组即可。比如 JMPAddr 的生成即可通过指令的低 12 位组合高四位 0 得到。其余生

成同理。译码器的电路图如图 4-3。

图 4-3译码器电路图

3. 寄存器堆

功能:寄存数据。

输入:Rs 编号、Rt 编号,写入寄存器编号、写入数据、时钟、清零信号、使

Page 26: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

20

华 中 科 技 大 学 课 程 设 计 报 告

能端。

输出:Rs 对应寄存器数值、Rt 对应寄存器数值、寄存器堆所有寄存器的数值。

具体实现:寄存器堆中的寄存器通过四个寄存器来实现,各个寄存器连接同一

个时钟端和清零端以及写入数据。当需要写入数据时,对应寄存器的使能端为 1,

否则为 0。可以通过解码器实现写入寄存器的选择。将写回寄存器的编号作为解码

器的选择信号,对应的输出位为 1,其余输出为为 0,这就实现了寄存器的选择。同

时,必须有写入信号时才能写入寄存器,写入信号送入使能端,所以将使能端与解

码器的各个输出相与的结果作为每个寄存器的使能端。

Rs、Rt 对应寄存器的输出通过数据选择器来输出。将 4 个寄存器的输出都送入

两个数据选择器中,将输入的 Rs、Rt 编号作为选择信号选择相对应的寄存器输出。

寄存器堆的电路图如图 4-4。

图 4-4寄存器堆电路图

4. 立即数扩展部件

功能:将 8 位立即数扩展为 16 位数据,实现有符号扩展和无符号扩展。

输入:8 位立即数、符号扩展信号。

输出:扩展后的 16 位立即数。

具体实现:立即数扩展分为有符号扩展和无符号扩展,有符号扩展则将 8 位立

即数的最高位(即符号位)分离出来作为 16 为寄存器的高八位数据,无符号扩展则

Page 27: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

21

华 中 科 技 大 学 课 程 设 计 报 告

直接将高八位置为 0 即可。将有符号和无符号的扩展结果作为数据选择器的两路数

据输入,将是否进行有符号扩展信号作为选择信号,则输出的数据即为扩展后的立

即数。

图 4-5立即数扩展部件电路图

5. 运算器 ALU

运算器的设计以上机实验设计的 ALU为基础,在此之上增加了比较标志位的设

置。表格 1 为运算器的操作符对应功能表。

表格 1 操作符对应功能表

012345 SSSSSS 运算功能 012345 SSSSSS 运算功能

000000 加法 001000 乘法

000001 减法 010000 除法

000010 与 011000 逻辑左移

000011 或 100000 逻辑右移

000100 非 101000 算数右移

000101 异或

为了方便处理条件转移指令,在 ALU原有标志位的基础上,增加了比较标志位

Sign_Cmp。比较标志位由有符号比较部件输出得到。有符号比较的结果由输入和输

出结果的符号位决定:当两个操作数异号时,则可立即得到比较结果,Sign_Cmp等

于操作数 A的符号位;当两个操作数同号时,Sign_Cmp等于相减结果的符号位。这

里用数据选择器实现了这一功能,当同号的时候,异或元件输出 0,选通结果的符

号位;当异号的时候,异或元件输出 1,选通异或的结果。有符号比较部件的电路

如图 3-1 所示。ALU的总电路图如图 4-7。

Page 28: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

22

华 中 科 技 大 学 课 程 设 计 报 告

图 4-6有符号比较电路图

图 4-7 ALU电路图

6. 控制器

控制器需要生成 3.1.3 节中的所有信号,按照设计要求,只需要分析指令中的操

作符,通过构建真值表分析电路即可生成各个信号。

单周期 CPU 中将信号生成分为两个部件,一个是总控制器,一个是跳转信号生

成器。跳转信号生成器生成 BranchSelect 和 JumpBranch 信号,以供下一条指令地址

的选择,方便后续封装 NPC。剩下的信号均由总控制器实现。

跳转信号生成器的输入是指令操作符中的跳转操作类型信号(beq、bgt、bne、

jump)以及 ALU 的比较位和 Zero 位,输出是 BranchSelect 和 JumpBranch 信号。电

Page 29: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

23

华 中 科 技 大 学 课 程 设 计 报 告

路由构建的真值表分析电路实现。

总控制器的输入是指令中的 funct 字段和 OP 字段,输出是各个控制信号。总控

制器将封装后各个控制信号的生成电路进行二次封装。

7. DISP 部件

功能:将数据显示在对应的显示器上。

输入:DISP 信号,立即数、rs 寄存器的数值,暂停信号、时钟端、清零端。

输出:对应显示屏显示数据。

具体实现:用两个寄存器寄存对应显示屏的数值,寄存器连接同一个数据端、

时钟端和清零端。只有需要显示数据的显示屏对应的寄存器使能端打开,其余都关

闭。故当有 DISP 信号的时候,通过 IMM 的最低位确定哪个显示屏需要显示数据,

当为 0 的时候打开左边的寄存器,当为 1 时打开右边的寄存器,当有暂停信号的时

候两个寄存器都关闭不再更新,所以只需要将 DISP、IMM 进行逻辑与即可得到右

边寄存器的使能端输入,将 IMM 最低位取反与 DISP 信号逻辑与操作则可以得到左

边寄存器的使能端输入。

图 4-8 DISP电路图

4.1.2 构造 R 型指令

通过 IR 获取当前指令,通过译码器分析出指令中对应的各个字段,将相应字段

送入控制器中生成相对应的控制信号。由于 R 型指令的操作数为 rs 和 rt,需要将运

算结果写回寄存器堆即可。故只需要将译码器得到的 rs 和 rt 的编号输入到寄存器堆

中,将寄存器堆输出的对应寄存器的数值送入 ALU 中进行运算,将运算后的结果

写回到寄存器堆中对应的目的寄存器即可。

Page 30: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

24

华 中 科 技 大 学 课 程 设 计 报 告

特别的,R 型指令 slt 是根据比较结果写回目标寄存器,写回的数据是 16 位数

据,而比较结果输出的标志位是 1 位,所以需要将 1 位数据扩展成 16 位数据输出。

因此,需要在 ALU 后面添加一个数据选择器来选通是比较结果输出还是 ALU 运算

结果输出,选择信号由 ALU_Out_Select 给出。

4.1.3 构造 I 型指令

I 型指令分为条件跳转指令、DISP 指令,访存指令以及写回指令。

条件跳转指令只需要将向 rs、rt 输入到对应的寄存器堆中,将 ALU 运算后的标

志位送入 JumpSignal 部件中得到跳转信号,根据跳转信号控制得到 NPC。

DISP 指令只需要根据产生的 DISP 信号控制显示屏即可。

访存指令和写回指令需要将 rs 的数值与立即数做运算,所以需要将一个选择器

连接到 ALU 的另一个输入端,选择器的数据来源分别是立即数和 rt 寄存器的数值。

访存指令和写回指令都是写回到寄存器堆,但是前者是将数据存储器中的数据写回,

后者是将 ALU 运算结果写回,所以需要在寄存器堆的写回数据端口加入一个选择

器来选通这两种数据,控制信号由 RegWrite_Num_Select 给出。

特别的,写回指令中 lui 是将立即数与常数做逻辑运算写回到 rs 寄存器中,所

以 ALU 输入端口 1 的数据来源有两个分别为 rs 和 IMM,输入端口 2 的数据来源有

三个分别为 rt、IMM 和常量,两个端口分别需要通过数据选择器选通,控制信号由

Alusrc_A 和 Alusrc_B 给出。

由于采用的数据存储器是异步加载和存储,所以需要通过三态门来实现是数据

写入还是数据的读出,即通过 RegWriteBack 信号来控制在存储器输出端口的三态门

即可。

4.1.4 构造 J 型指令

J 型指令分为两种,直接跳转指令和暂停指令。

直接跳转指令只需要将直接跳转的地址反馈给 PC 即可,而暂停指令只需要控

制所有存储数据的器件的使能端即可。

Page 31: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

25

华 中 科 技 大 学 课 程 设 计 报 告

4.1.5 单周期 CPU 主电路

根据 3.1.7 节的数据通路表,构建所有指令通路,完成单周期 CPU 的主电路图

如图 4-9。

图 4-9单周期 CPU主电路图

Page 32: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

26

华 中 科 技 大 学 课 程 设 计 报 告

4.2 可支持理想流水线多周期 CPU

4.2.1 主要功能部件实现

1. 接口部件

实验共设计四个接口部件,分别为 IF/ID、ID/EX、EX/MEM 和 MEM/WB,各

个接口部件中通过寄存器实现信号和数据的暂存和传递。如错误!未找到引用源。 所

示,IF/ID 接口部件暂存了 PC 和 IR 的数值,并继续向后传递。其余部件中也通过

寄存器锁存了需要向后传递的数据和信号,其中 ID/EX 接口部件中寄存了控制器产

生的大部分控制信号,在向后传递的过程中依次传递给后续的各个阶段,因而每个

接口部件中的信号数量呈递减趋势,最后一个接口部件 MEM/WB 寄存了 PC、IR

等数据以及 MemWrite、RegWriteSelect 等信号,如图 4-11。其余接口部件于此类似,

在此不再赘述。

图 4-10 IF/ID接口部件电路图

图 4-11 MEM/WB接口部件电路图

Page 33: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

27

华 中 科 技 大 学 课 程 设 计 报 告

2. NPC 部件

功能:给出下一条指令的地址(NPC)。

输入:当前指令地址(PC),立即数(IMM)、直接跳转地址(JMPAddr),各

个跳转信号即 ALU 的标志位。

输出:NPC。

具体实现:流水线设计中,我将 NPC 做了修改和封装,只通过两个位宽为 1

的控制信号进行地址逻辑转移,而不再采用单周期 CPU 时候 PC 的二选三方法。删

除了 BranchSelect 信号,改为 JumpSelect 信号。

JumpSelect 信号控制是否发生分支跳转,JumpBranch 信号控制是选择条件跳转

地址还是直接跳转地址。

改进后的 NPC 信号生成部分将跳转信号和 ALU 的零标志位 ZERO、有符号比

较标志位 C 作为输入,通过分析电路根据真值表自动生成输出,即 JumpSelect 信号

和 JumpBranch 信号。然后通过产生的两个跳转信号选择 NPC 的数值,输出即程序

的下一条指令的地址。

NPC 的电路图如下图 4-12 所示。

图 4-12 NPC电路图

3. DISP 部件

为了主电路更加简洁明了,在理想流水线的设计中将 DISP 部件进行了封装。

将 rs、IMM、DISP 信号作为输入,输出两个 LED 的输出数据,电路设计同单周期

Page 34: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

28

华 中 科 技 大 学 课 程 设 计 报 告

CPU 设计,如图 4-13 所示。

图 4-13 DISP部件电路图

4. 其余部件

理想流水线中的控制器、寄存器堆 RF、运算器 ALU、PC、IM、符号扩展

部件 SE、DM 都复用单周期 CPU 中的部件。

4.2.2 理想流水线实现

主电路在单周期 CPU 的电路图上进行修改,首先将单周期 CPU 的电路图划分

成五个部分。将指令寄存器放在 IF 阶段,译码器和寄存器堆划分到 ID 阶段,ALU

和 NPC 放在 EX 阶段,数据寄存器放在 MEM 阶段,将控制写回操作数据的的二路

选择器放在 WB 阶段。

R 型指令要写回寄存器,故将写回操作的数据返回给寄存器堆,同时需要通过

写回信号判断是否要写回,通过写回寄存器编号确定写回的寄存器,于是在 WB 阶

段需要向 ID 阶段的 RF 返回当前指令的写回数据、写回信号以及写回寄存器编号。

J 型指令与 B 型指令类似,为统一起见,将二者的信号均传递给 EX 阶段后再

反馈给 IF 阶段。即将跳转信号或条件转移信号传递到 EX 阶段,再由 EX 阶段的

NPC 部件得到程序下一条指令地址返回给 IF 阶段的 PC。

DISP 指令的实现同样也通过将的 DISP 信号、立即数和 rs 传递到 EX 阶段后通

过 DISP 部件实现。

I 型指令、Halt 指令的设计同单周期 CPU。

理想流水线的总电路图如图 4-14。

Page 35: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

29

华 中 科 技 大 学 课 程 设 计 报 告

图 4-14 理想流水线主电路图

4.3 流水线冲突检测器

4.3.1 IR 操作数判断

流水冲突检测器需要先根据指令中的操作符分析出当前指令中是否用到了 rs、

rt 寄存器,故构建真值表如表 4-1。

表 4-1 操作符对应的 rs、rt值

op(15~12 位) rs rt op(15~12 位) rs rt

0000 1 1 0111 1 0

0001 1 1 1000 1 0

0010 1 1 1001 1 0

0011 1 1 1010 1 1

0100 1 0 1011 0 0

0101 0 0 1100 0 0

0110 1 0

根据真值表生成相对应的电路如图 4-15,则可根据此电路判断当前指令是否使

用了 rs 或者 rt 寄存器,如果是,则对应输出 1,否则为 0。

Page 36: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

30

华 中 科 技 大 学 课 程 设 计 报 告

图 4-15 指令操作数确认电路图

4.3.2 数据冲突检测器

在确认了指令的操作数之后,就需要判断是否发生数据冲突,哪一个操作数发

生了数据冲突。实现方法为将当前指令的 rs、rt 编号与检测阶段的目的寄存器 rd 的

编号进行比较如果相等且检测阶段的指令有写回信号,则判断发生了对应寄存器的

数据冲突,分别为 Rs_Hazard 和 Rt_Hazard,将两个信号进行逻辑或操作输出是否

发生数据冲突信号。

数据冲突检测电路如图 4-16。

图 4-16 数据冲突检测电路图

4.3.3 分支冲突检测器

分支冲突检测可以通过当前指令是否发生跳转来确定,当发生了跳转,则确定

发生了分支冲突。为此,我在 NPC 部件中新增了 Jump 输出,其值为 Jump_Select

的数值。若 Jump 信号输出为 1,则表明发生了分支冲突。

Page 37: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

31

华 中 科 技 大 学 课 程 设 计 报 告

4.4 插入气泡的流水冲突处理

4.4.1 气泡信号生成部件

插入气泡主要解决数据冲突和分支冲突,由于寄存器堆中的寄存器是下降沿有

效,则只需要检测 ID 阶段和 EX、MEM 阶段之间的数据冲突,当检测到冲突后将

冲突信号先暂存到寄存器中实现信号的延迟。

由于我设计在两个接口部件(IF/ID,ID/EX 接口部件)每次冲突插入一个气泡,

故输出两个气泡信号 BubbleID 和 BubbleIF。当发生数据冲突时候在 ID/EX 中插入

一个气泡,前面的阶段均锁定,当发生分支冲突的时候在 ID/EX 和 IF/ID 接口部件

中各插入一个气泡。所以无论发生数据冲突还是分支冲突 ID/EX 中都要插入气泡,

故 BubbleID 信号由分支冲突信号和数据冲突信号进行或操作得到,BubbleIF 只由分

支冲突信号决定。考虑到会发生毛刺现象,将数据冲突的气泡信号寄存在一个下降

沿有效的寄存器中,分支冲突信号也寄存在一个下降沿有效的寄存器中,但是由于

ID/EX 在 IF/ID 后面,所以 BubbleID 的分支冲突信号给出要比 BubbleIF 的晚半个周

期以确保错误指令被清除。故 BubbleID 的分支冲突信号来自一个上升沿有效的寄存

器,该寄存器连接 BubbleIF 的气泡寄存器,气泡信号生成部件如图 4-17。

图 4-17气泡信号生成部件电路图

4.4.2 插入气泡的流水线冲突处理主电路

插入气泡即将接口部件中的数据全部清零,所以只需要将插入气泡的信号连接

Page 38: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

32

华 中 科 技 大 学 课 程 设 计 报 告

接口部件中的清零端即可。

若检测到数据冲突,则锁定 ID/EX 接口部件以及之前的所有接口部件和 PC,

延迟一个周期后,在 ID/EX 接口部件中加入气泡,此后再进行冲突检测,若仍有冲

突,则继续插入气泡,直到流水线中不存在冲突则不插入气泡。

若检测到分支冲突,则延迟一个周期后,直接在 ID/EX 接口部件和 IF/ID 接口

部件中插入一个气泡,达到清除错误指令的目的。

插入气泡的流水冲突处理主电路图如图 4-19。

4.5 数据重定向的流水冲突处理

4.5.1 数据重定向部件

在数据重定向中只检测 EX 阶段与后面两个阶段是否发生了数据冲突,如果是,

则将发生冲突阶段的数据重定向回 EX 阶段。在 MEM 阶段需要将暂存在 EX/MEM

接口部件中的 ALU 运算结果重定向回 EX,该数据记作 ME_data;在 WB 阶段需要

将写回数据重定向回 EX,该数据记作 WB_data。

因为需要进行两个阶段的检测,所以采用两个冲突检测部件,每个部件输出当

前阶段的检测结果,并作为数据选择信号选择需要重定向的数据。若两个阶段在同

一个寄存器同时发生冲突,则优先选择 MEM 阶段的数据。数据重定向部件输出 rs

重定向回的数据和 rt 重定向回的数据,如图 4-18 所示

图 4-18 数据重定向部件

4.5.2 LoadUse 冲突处理

当发生 LoadUse 冲突时,重定向回来的 MEM 的数据是错误的地址而非对应的

数据,所以当遇到这种情况的时候,需要通过插入气泡来解决。

Page 39: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

33

华 中 科 技 大 学 课 程 设 计 报 告

图 4-19插入气泡的流水冲突处理主电路图

Page 40: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

34

华 中 科 技 大 学 课 程 设 计 报 告

首先需要判断前一条指令是否为 lw 指令,如果是则与冲突检测部件输出的冲突

信号进行与操作,当二者同时为 1 的时候,说明发生了 Loaduse 冲突。此时需要输

出一个锁定信号。特别的,这里使用寄存器作为延时部件,达到延缓一个周期后输

出 Bubble 信号来插入气泡的目的。

图 4-20 LoadUse冲突处理电路图

4.5.3 冲突处理

除了 LoadUse 冲突中需要在 ID/EX 中插入气泡,遇到分支冲突也需要在 ID/EX

和 ID/ID 中同时插入气泡,则将 LoadUse 冲突部件和分支冲突部件封装到一起形成

Bubble 部件,输出是否要在 IF/ID 中插入气泡的信号 BubbleIF 和是否要在 ID/EX 中

插入气泡的信号 BubbleID。这里同样用寄存器实现信号的延迟。

图 4-21数据重定向处理冲突插入气泡电路图

4.5.4 数据重定向的流水冲突处理主电路

将上述部件进行二次封装得到重定向的部件,如图 4-22。封装后的部件可以直

接放入流水线主电路中,将该部件所需要的信号输入即可,同时将部件的输出信号

反馈给流水线即可。

Page 41: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

35

华 中 科 技 大 学 课 程 设 计 报 告

图 4-22 数据重定向的流水冲突处理

将重定向的部件放入流水线中可以得到数据重定向的流水冲突处理的主电路图

如图 4-23。

4.6 动态分支预测的流水冲突处理

4.6.1 构建 BTB 表

总的 BTB 表栏分为 PC,TransAddr、Valid 和 LRU。

1. PC

功能:存储 BTB 表中的 PC 值。

输入:EX 阶段的指令地址 PC_EX、IF 阶段的指令地址 PC_IF、LRU 算法给出

的替换位置 LRU、是否增加新纪录信号 New、时钟端和清零端。

输出:匹配到的 PC 的转移地址、是否匹配到的信号 Match_IF 和匹配的到表项

标号 MatchItem_IF。

具体实现:PC 表栏中存储发生转移的指令的 PC,每个 PC 中存储在寄存器中。

当要新增一条记录的时候,根据 LRU 给出的位置通过解复用器选定要插入 PC

的寄存器使得其使能端打开,其他的寄存器仍旧锁定,当一个时钟信号到来更新该

寄存器的数值。

当要匹配 PC 中的表项的时候,解复用器输出为全 0,则所有寄存器都被锁定。

将所有寄存器的数值与 IF 阶段的 PC 值进行比较,如果匹配到则输出匹配到得 PC

得数值,同时通过优先编码器输出匹配到得寄存器的编号,当没有匹配到的时候,

Page 42: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

36

华 中 科 技 大 学 课 程 设 计 报 告

图 4-23 数据重定向的流水冲突主电路图

Page 43: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

37

华 中 科 技 大 学 课 程 设 计 报 告

有限编码器会输出 1,这时取反作为匹配信号的输出。PC 的电路图如图 4-24

图 4-24 PC电路图

2. TransAddr

功能:存储 BTB 表中对应的转移地址。

输入:EX 阶段的转移地址 TransAddr_EX,LRU 算法给出的替换位置 LRU、匹

配到的表项编号 MatchItem_IF、是否增加新纪录信号 New、时钟端和清零端。

输出:预测的转移地址

具体实现:同 PC 电路的实现,只不过这里不需要进行地址匹配。

图 4-25 TransAddr电路图

Page 44: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

38

华 中 科 技 大 学 课 程 设 计 报 告

3. LRU

功能:保存表项中记录的 LRU 数值。

输入:EX 阶段的转移地址 TransAddr_EX、是否进行替换信号 replace、失效的

表项的编号 UnvalidItem、匹配到的表项编号 MatchItem_EX、是否增加新纪录信号

New、是否预测命中信号 hit、时钟端和清零端。

输出:LRU 算法给出的替换位置 LRU、各个表项的 LRU 数值。

具体实现:LRU 输出当前失效的表项的编号,当当前表项全部有效的时候就输

出当前 LRU 数值最大的表项,因而 LRU 输出需要通过二路选择器给出,选择信号

由是否进行替换信号 replace 给出。

LRU 的比较通过比较输出,先两两比较,然后将比较结果中较大的再进行比较,

因为一共四条记录,则恰好可以根据输出比较器的输出利用分离器来确定最大的

LRU 表项的编号。

因为 LRU 需要进行增减操作,所以用计数器来进行存储。当要插入一条新纪录

的时候,通过当前 LRU 给出的位置利用解复用器选定对应的寄存器,这时候将 0

加载进去。

当预测成功时候,通过 MatchItem 给出的表项编号作为解复用器的选择数据端,

选定预测成功的表项,这时候相应计数器将 0 加载进去,其余计数器递增 1。

其余时候计数器均在时钟信号来临的时候将计数器中的数值加 1,因而解复用

器增加了使能端,这时候使能端关闭,解复用器全部输出 0,这时候计数器执行累

加操作。

LRU 的电路图如图 4-26。

图 4-26 LRU电路图

Page 45: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

39

华 中 科 技 大 学 课 程 设 计 报 告

4. Valid

功能:保存表项中记录的 Valid 数值。

输入:LRU 算法给出的替换位置 LRU、是否进行替换信号 replace、失效的表

项的编号 UnvalidItem、匹配到的表项编号 MatchItem_EX、是否匹配到信号

Match_EX、是否有新纪录信号 New、是否预测命中信号 hit、时钟端和清零端。

输出:当前各个表项的 Valid 数值,当前各个表项是否有效 valid、当有新纪录

的时候是否需要替换信号 replace、当前失效的表项编号 UnvalidItem。

具体实现:如果有预测且命中则对应表项的 valid 数值加 1,预测失败则减 1,

新增一条表项则加载初始值 2,此外 valid 的数值保持不变。利用解复用器根据真值

表生成各个计数器加载端和计数端的控制信号。

通过优先编码器得到当前表项中失效表项的编号,如果没有失效表项,则优先

编码器的另一个端口输出值 1,表明需要替换。所以可以将优先编码器该端口输出

的数值作为 replace 信号。Valid 电路图如图 4-27。

图 4-27 Valid电路图

4.6.2 PC_out 部件

1. 预测情况部件 Signal

功能:生成预测情况相关的各个信号。

输入:EX 阶段的指令是否发生跳转信号 jump、该条指令是否匹配预测信号

match。

输出:预测成功信号 hit、预测失败信号 fail、没有预测却跳转(表明这是一条

Page 46: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

40

华 中 科 技 大 学 课 程 设 计 报 告

将要插入 BTB 表的新纪录)信号 New、没有预测也没有跳转的信号 normal。

具体实现:我们需要根据预测结果来动态输出 NPC 的数值。所以根据在 EX 阶

段是否跳转和是否匹配到 BTB 表中的表项来判断当前的预测情况,构建真值表如下

图 4-28,然后分析电路生成预测情况部件。

图 4-28 预测相关信号生成真值表

2. 动态分支预测 NPC

当预测且跳转后,说明预测成功,这时 NPC 为当前 IF 阶段的 PC 加 1;当预测

却没有跳转,说明预测失败,这是需要修正 PC 的数值,则给出 NPC 为当前 EX 阶

段的 PC 加 1;当没有预测,则根据 NPC 部件给出的地址执行。通过选择器来选择

输出的 NPC 的数值,如图 4-29。

同时该部件通过 Signal 部件同时输出预测相关的信号,方便其他部件的使用。

Page 47: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

41

华 中 科 技 大 学 课 程 设 计 报 告

图 4-29 PC_out 电路图

4.6.3 预测信号部件

功能:输出是否进行预测,使得下一条指令为预测跳转地址的信号。

输入:BTB 表各个表项的有效值,匹配到的表项编号 MatchItem_IF、是否匹配

到表项 Match_IF、预测失败信号 fail。

输出:对当前指令是否进行预测的信号 Predict。

具体实现:并不是每次只要匹配到了表项就进行预测,是否预测还取决与匹配

到的表项的 valid 数值是否可以预测,且前面是否存在指令预测失败的情况。如果

EX 阶段检测到预测失败信号 fail,则此时不进行预测转移,而使用修正地址。所以

将 fail 信号取非与匹配过后的预测信号进行逻辑与操作才能得到最终是否进行预测

跳转的信号 Predict。预测信号部件电路图如图 4-30。

图 4-30预测信号生成部件

Page 48: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

42

华 中 科 技 大 学 课 程 设 计 报 告

4.6.4 动态分支预测部件

将上述部件在预测部件中进行二次封装,得到动态分支预测部件如图图 4-31。

图 4-31 动态分支预测部件

4.6.5 跳转信号部件

功能:输出分支预测中是否仍旧需要进行解决分支冲突信号。

输入:当前 EX 阶段的跳转信号 In_Jump,预测成功信号 hit,预测失败信号 fail。

输出:是否仍旧需要解决分支冲突信号 Aft_Jump。

具体实现:当预测失败后,需要插入气泡进行修正,但预测成功后,不需要插

入气泡。所以此时重定向部件中的 jump 输入应该输出预测后的是否仍需要跳转信

号。当 EX 阶段产生跳转信号 In_jump,但是预测成功后,这时候不需要向重定向部

件中输入 Jump 信号让其插入气泡。此外都需要进行跳转来解决分支冲突。所以将

In_Jump 与 hit 信号进行异或操作后,再与 fail 信号进行或操作得到最终用于插入气

泡的跳转信号。跳转信号部件如图 4-32 所示。

图 4-32 跳转信号电路图主电路实现

4.6.6 动态分支预测的流水冲突处理主电路

将动态分支部件放入主电路图中,同时将最终跳转信号部件添加到主电路图中,即完成了动态分

支预测的流水冲突处理。动态分支预测的主电路图如

图 4-33。

Page 49: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

43

华 中 科 技 大 学 课 程 设 计 报 告

图 4-33 动态分支预测的流水冲突处理主电路图

Page 50: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

44

华 中 科 技 大 学 课 程 设 计 报 告

5 实验过程与调试

5.1 测试用例

5.1.1 理想流水线测试

lui $r0, 0

lui $r1, 0

lui $r2, 0

lui $r3, 0

ori $r0, 1

ori $r1, 2

ori $r2, 3

ori $r3, 4

disp $r0, 0

disp $r1, 0

disp $r2, 0

disp $r3, 0

sw $r0, 0($r0)

sw $r1, 0($r1)

sw $r2, 0($r2)

sw $r3, 0($r3)

halt

5.1.2 数据相关测试

lui $r1, 0

ori $r1, 1

lui $r0, 0

Page 51: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

45

华 中 科 技 大 学 课 程 设 计 报 告

ori $r0, 1

lui $r2, 0

ori $r2, 0

sw $r1, 0($r1)

add $r3, $r1, $r0

add $r1, $r3, $r0

add $r0, $r3, $r1

add $r3, $r1, $r0

add $r1, $r3, $r0

add $r0, $r3, $r1

add $r3, $r1, $r0

add $r1, $r3, $r0

add $r0, $r3, $r1

add $r3, $r1, $r0

add $r1, $r3, $r0

add $r0, $r3, $r1

sw $r0, 0($r2)

halt

5.1.3 JMP 测试

lui $r1, 1

jump Next1

lui $r1, 1

lui $r2, 2

lui $r3, 3

Next1:disp $r1, 0

Jump Next2

lui $r1, 1

Page 52: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

46

华 中 科 技 大 学 课 程 设 计 报 告

lui $r2, 2

lui $r3, 3

Next2:disp $r2, 0

Jump Next3

lui $r1, 1

lui $r2, 2

lui $r3, 3

Next3:disp $r3, 0

Jump Next4

lui $r1, 1

lui $r2, 2

lui $r3, 3

Next4:halt

5.1.4 B 指令测试

lui $r0, 1

lui $r2, 255

lui $r1, 1

lui $r3, 3

beq $r0, $r2, Next2

beq $r0, $r0, Next2

lui $r1, 1

lui $r2, 2

lui $r3, 3

Next2:disp $r0, 0 //$r0 可能会引起相关,注意

bne $r1, $r1, Next3

bne $r1, $r2, Next3

lui $r1, 1

lui $r2, 2

Page 53: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

47

华 中 科 技 大 学 课 程 设 计 报 告

lui $r3, 3

Next3:disp $r0, 1

bgt $r2, $r2, Next4

bgt $r3, $r2, Next4

lui $r1, 1

lui $r2, 2

lui $r3, 3

Next4:disp $r3, 0

halt

5.1.5 移位测试

li $r0, 1 //简单移位,循环测试,0 号区域显示的是初始值 1 左移 1 位重复

15 次的值,1 号区域是累加值

li $r1, 1

li $r3, 1

disp $r1, 0

disp $r3, 1

SHIFT:

sllv $r1, $r1, $r0 //逻辑左移一位

disp $r1, 0

add $r3, $r3, $r1 //$r3 存放累加值

disp $r3, 1 //显示累加值

slt $r2, $r1, $r0 //判断移位是否溢出

beq $r2, $r0, NEXT

jump SHIFT

NEXT:li $r0, 1 // 算 术 移 位 测试 , 8000 算 术 右 移, 依次 显 示 为

F000,FF00,FFF0,FFFF

li $r1, 15

Page 54: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

48

华 中 科 技 大 学 课 程 设 计 报 告

sub $r1, $r1, $r0

add $r1, $r1, $r0

sllv $r3, $r0, $r1 //$r3=0X8000

disp $r3, 0

li $r1, 3

srav $r3, $r3, $r1 //0x8000-->0XF000

disp $r3, 0

li $r1, 4

srav $r3, $r3, $r1 //0xF000-->0XFF00

disp $r3, 0

srav $r3, $r3, $r1 //0xFF00-->0XFFF0

disp $r3, 0

srav $r3, $r3, $r1 //0xFFF0-->0XFFFF

disp $r3, 0

halt

5.1.6 走马灯测试

li $r0, 1 //走马灯测试,测试 lui,andi,sllv,srlv andi,or,disp 0 号显示区域按走马

灯方式来回

li $r1, 15

sllv $r3, $r0, $r1

srav $r3, $r3, $r1 //$r3=0xFFFF

li $r0, 0

li $r1, 4

lui $r2, 12

srlv $r2, $r2, $r1

srlv $r2, $r2, $r1 //$r2=12

Page 55: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

49

华 中 科 技 大 学 课 程 设 计 报 告

Loop:addi $r0, $r0, 1

andi $r0, $r0, 15

sllv $r3, $r3, $r1 //走马灯左移

or $r3, $r3, $r0

disp $r3, 0

sllv $r3, $r3, $r1

or $r3, $r3, $r0

disp $r3, 0

sllv $r3, $r3, $r1

or $r3, $r3, $r0

disp $r3, 0

sllv $r3, $r3, $r1

or $r3, $r3, $r0

disp $r3, 0

addi $r0, $r0, 1

andi $r0, $r0, 15

sllv $r0, $r0, $r2

srlv $r3, $r3, $r1 //走马灯右移

or $r3, $r3, $r0

disp $r3, 0

srlv $r3, $r3, $r1

or $r3, $r3, $r0

disp $r3, 0

srlv $r3, $r3, $r1

or $r3, $r3, $r0

disp $r3, 0

Page 56: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

50

华 中 科 技 大 学 课 程 设 计 报 告

srlv $r3, $r3, $r1

or $r3, $r3, $r0

disp $r3, 0

srlv $r0, $r0, $r2

bne $r0, $r2, Loop

halt

5.1.7 排序测试

li $r0, 0 //coments

li $r1, 15

DISP: disp $r0, 0

disp $r1, 1

lw $r2, 0($r0)

lw $r3, 0($r1)

bgt $r2, $r3, 2

sw $r2, 0($r1)

sw $r3, 0($r0)

addi $r1, $r1, -1

bne $r0, $r1, DISP

jump JMP

nop

or $r0, $r0, $r0

JMP: addi $r0, $r0, 1

li $r1, 15

bne $r0, $r1, DISP

halt

Page 57: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

51

华 中 科 技 大 学 课 程 设 计 报 告

mv $r0, $r1 #macro instruction

5.1.8 benchmark 测试

andi $r0, $r0, 0 //简单移位,循环测试,0 号区域显示的是初始值 1 左移 1 位重

复 15 次的值,1 号区域是累加值

addi $r0, $r0, 1

andi $r1, $r1, 0

addi $r1, $r1, 1

andi $r3, $r3, 0

addi $r3, $r3, 1

disp $r1, 0

disp $r3, 1

SHIFT:sllv $r1, $r1, $r0 //逻辑左移一位

disp $r1, 0

add $r3, $r3, $r1 //$r3 存放累加值

disp $r3, 1 //显示累加值

slt $r2, $r1, $r0 //判断移位是否溢出

beq $r2, $r0, NEXT

jump SHIFT

NEXT:andi $r0, $r0, 0// 算术移位测试, 8000 算术右移,依次显示为

F000,FF00,FFF0,FFFF

addi $r0, $r0, 1

andi $r1, $r1, 0

addi $r1, $r1, 15

sub $r1, $r1, $r0

add $r1, $r1, $r0

Page 58: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

52

华 中 科 技 大 学 课 程 设 计 报 告

sllv $r3, $r0, $r1 //$r3=0X8000

disp $r3, 0

andi $r1, $r1, 0

addi $r1, $r1, 3

srav $r3, $r3, $r1 //0x8000-->0XF000

disp $r3, 0

andi $r1, $r1, 0

addi $r1, $r1, 4

srav $r3, $r3, $r1 //0xF000-->0XFF00

disp $r3, 0

srav $r3, $r3, $r1 //0xFF00-->0XFFF0

disp $r3, 0

srav $r3, $r3, $r1 //0xFFF0-->0XFFFF

disp $r3, 0

andi $r0, $r0, 0//走马灯测试,测试 lui,andi,sllv,srlv andi,or,disp 0 号显示区域按走

马灯方式来回

addi $r0, $r0, 1

andi $r1, $r1, 0

addi $r1, $r1, 15

sllv $r3, $r0, $r1

srav $r3, $r3, $r1 //$r3=0xFFFF

andi $r0, $r0, 0

addi $r0, $r0, 0

andi $r1, $r1, 0

addi $r1, $r1, 4

lui $r2, 12

srlv $r2, $r2, $r1

srlv $r2, $r2, $r1 //$r2=12

Loop:addi $r0, $r0, 1

Page 59: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

53

华 中 科 技 大 学 课 程 设 计 报 告

andi $r0, $r0, 15

sllv $r3, $r3, $r1 //走马灯左移

or $r3, $r3, $r0

disp $r3, 0

sllv $r3, $r3, $r1

or $r3, $r3, $r0

disp $r3, 0

sllv $r3, $r3, $r1

or $r3, $r3, $r0

disp $r3, 0

sllv $r3, $r3, $r1

or $r3, $r3, $r0

disp $r3, 0

addi $r0, $r0, 1

andi $r0, $r0, 15

sllv $r0, $r0, $r2

srlv $r3, $r3, $r1 //走马灯右移

or $r3, $r3, $r0

disp $r3, 0

srlv $r3, $r3, $r1

or $r3, $r3, $r0

disp $r3, 0

srlv $r3, $r3, $r1

or $r3, $r3, $r0

disp $r3, 0

srlv $r3, $r3, $r1

or $r3, $r3, $r0

disp $r3, 0

srlv $r0, $r0, $r2

Page 60: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

54

华 中 科 技 大 学 课 程 设 计 报 告

bne $r0, $r2, Loop

andi $r0, $r0, 0 //排序测试程序,将 0-15 号内存区间数据排序

addi $r0, $r0, 0

andi $r1, $r1, 0

addi $r1, $r1, 15

DISP: disp $r0, 0

disp $r1, 1

lw $r2, 0($r0)

lw $r3, 0($r1)

bgt $r2, $r3, 2

sw $r2, 0($r1)

sw $r3, 0($r0)

addi $r1, $r1, -1

bne $r0, $r1, DISP

jump JMP

nop

or $r0, $r0, $r0

JMP: addi $r0, $r0, 1

andi $r1, $r1, 0

addi $r1, $r1, 15

bne $r0, $r1, DISP

halt

mv $r0, $r1 #macro instruction

//各段程序可单独汇编运行,也可以一次测试运行

Page 61: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

55

华 中 科 技 大 学 课 程 设 计 报 告

5.2 测试结果

5.2.1 单周期 CPU

测试结果见表 5-1。

表 5-1 单周期 CPU测试结果

周期数

寄存器堆终值 显示屏终值 数据存储器

Reg0 Reg1 Reg2 Reg3

数据相关测试 21 377 233 0 144 0000 0000 全 0

JMP 测试 9 0 256 0 0 0000 0000 全 0

B 指令测试 14 256 256 -256 768 0300 0100 全 0

移位测试 133 1 4 1 -1 FFFF FFFF 全 0

走马灯测试 200 12 4 12 -13108 CCCC 0000 全 0

排序测试

(加载 benchmark) 962 15 15 -31487 -32767 000E 000F

前 16 个数从

大到小排序

benchmark 测试

(加载 benchmark) 1293 15 15 -31487 -32767 000E 000F

前 16 个数从

大到小排序

5.2.2 支持理想流水线多周期 CPU

测试结果见表 5-2。

表 5-2 理想流水线测试结果

周期数

寄存器堆终值 显示屏终值 数据存储器

Reg0 Reg1 Reg2 Reg3

理想流水线测试 20 1 2 3 4 0004 0000 全 0

5.2.3 插入气泡的流水冲突处理

测试结果见表 5-3。

Page 62: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

56

华 中 科 技 大 学 课 程 设 计 报 告

表 5-3 插入气泡方案测试结果

周期

气泡

寄存器堆终值 显示屏终值 数据存储器

Reg0 Reg1 Reg2 Reg3

数据相关测试 54 31 377 233 0 144 0000 0000 全 0

JMP 测试 20 13 0 256 0 0 0000 0000 全 0

B 指令测试 23 10 256 256 -256 768 0300 0100 全 0

移位测试 293 173 1 4 1 -1 FFFF FFFF 全 0

走马灯测试 471 274 12 4 12 -13108 CCCC 0000 全 0

排序测试

(加载 benchmark) 1978 1246 15 15 -31487 -32767 000E 000F

前 16 个数从

大到小排序

benchmark 测试

(加载 benchmark) 2730 1687 15 15 -31487 -32767 000E 000F

前 16 个数从

大到小排序

5.2.4 数据重定向的流水冲突处理

测试结果见表 5-4。

表 5-4 数据重定向方案测试结果

周期

气泡

寄存器堆终值 显示屏终

值 数据存储器

Reg0 Reg1 Reg2 Reg3

数据相关测试 24 0 377 233 0 144 0000 0000 全 0

JMP 测试 20 8 0 256 0 0 0000 0000 全 0

B 指令测试 23 6 256 256 -256 768 0300 0100 全 0

移位测试 166 30 1 4 1 -1 FFFF FFFF 全 0

走马灯测试 213 10 12 4 12 -13108 CCCC 0000 全 0

排序测试

(加载 benchmark) 1551 586 15 15 -31487 -32767 000E 000F

前 16 个数从

大到小排序

benchmark 测试

(加载 benchmark) 1922 626 15 15 -31487 -32767 000E 000F

前 16 个数从

大到小排序

Page 63: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

57

华 中 科 技 大 学 课 程 设 计 报 告

5.2.5 动态分支预测的流水冲突处理

测试结果见表 5-5。

表 5-5 动态分支预测方案测试结果

周期

气泡

寄存器堆终值 显示屏终值 数据存储器

Reg0 Reg1 Reg2 Reg3

数据相关测试 24 0 377 233 0 144 0000 0000 全 0

JMP 测试 20 4 0 256 0 0 0000 0000 全 0

B 指令测试 23 6 256 256 -256 768 0300 0100 全 0

移位测试 140 4 1 4 1 -1 FFFF FFFF 全 0

走马灯测试 207 4 12 4 12 -13108 CCCC 0000 全 0

排序测试

(加载 benchmark) 1169 204 15 15 -31487 -32767 000E 000F

前 16 个数从

大到小排序

benchmark 测试

(加载 benchmark) 1508 212 15 15 -31487 -32767 000E 000F

前 16 个数从

大到小排序

预测效果见表 5-6。

表 5-6 预测效果

预测次数 预测成功次数 预测失败次数 成功率

数据相关测试 0 0 0 ——

JMP 测试 0 0 0 ——

B 指令测试 0 0 0 ——

移位测试 14 14 0 100%

走马灯测试 5 5 0 100%

排序测试(加载 benchmark) 418 394 24 94.26%

benchmark测试(加载benchmark) 437 413 24 94.51%

5.3 性能分析

每个方案进行各项测试的时钟周期数见表 5-7。

Page 64: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

58

华 中 科 技 大 学 课 程 设 计 报 告

表 5-7 各方案时钟周期数

单周期 插入气泡 数据重定向 动态分支预测

数据相关测试 21 54 24 24

JMP 测试 9 20 20 20

B 指令测试 14 23 23 23

移位测试 133 293 166 140

走马灯测试 200 471 213 207

排序测试(加载 benchmark) 962 1978 1551 1169

benchmark 测试(加载 benchmark) 1293 2730 1922 1508

性能分析:

1、单周期方案中每条指令执行一个周期,不需要额外的周期处理冲突,所以各

项测试的周期数最少。

2、插入气泡方案对流水线中不仅每条指令执行一个周期,此外所有数据冲突和

分支冲突都进行插入气泡处理,每插入一个气泡就会增加一个周期,所以在各项测

试的周期数最多。

3、数据重定向方案在插入气泡方案的基础上进行优化,因为减少了因为数据冲

突而插入气泡的数量,所以周期数少于插入气泡方案,在性能上优于插入气泡的流

水线冲突处理。

4、动态分支预测方案在数据重定向方案的基础上进行优化,因为减少了因为分

支冲突而插入气泡的数量,所以周期数少于数据重定向,在性能上是所有流水线冲

突处理中最优秀的。

Page 65: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

59

华 中 科 技 大 学 课 程 设 计 报 告

5.4 主要故障与调试

5.4.1 故障 1

故障现象: 启动了时钟后,加载镜像后,运算器结果出现红线,ALU 的输入

端 A 没有输入值,如图 5-1。

图 5-1立即数读取出错

原因分析: 执行 liu 指令后,ALU 的 A 端口应输入立即数 IMM,但是探测器

并没有探测到输入值,说明译码后得到的立即数 IMM 存在错误。查看指令译码器,

如图 5-2,发现有不兼容位宽的错误,即对立即数的位扩展有误。

图 5-2 立即数扩展有误

解决方案:重新设计一个有符号 8 位置扩展子电路,如下图所示,电路实现了

将 8 位带符号扩展成 16 位。将该子电路加入到指令译码电路中,如图 5-3 所示。

图 5-3 立即数扩展

Page 66: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

60

华 中 科 技 大 学 课 程 设 计 报 告

5.4.2 故障 2

单周期:数据被覆盖。

故障现象:测试数据相关实验程序时候,执行 sw $r0, 0($r2),触发上升沿将数

据写入内存时,当触发下降沿时候,其数据被覆盖,如图 5-4。

图 5-4 写入内存数据被覆盖

原因分析:寄存器堆是下降沿有效,因而可能下降沿时候触发了写操作将寄存

器中的数值更改了,所以相应地在下降沿又将修改过的寄存器数值写入了内存。原

因在于寄存器写信号有误。

解决方案:修改寄存器写信号,用写回信号与跳转信号共同控制寄存器堆的使

能端,当写信号为 0 时,寄存器不能被写入,即数值不能更改。修改后的使能端输

入如下图。可以看出当发生跳转指令或者写回寄存器堆信号为 0 时候,寄存器堆的

使能端为 0,寄存器不能被写入修改,如图图 5-5

图 5-5 寄存器堆的使能端

5.4.3 故障 3

单周期: ALU 输出错误。

故障现象:移位操作中发现赋值操作计算出现问题。

原因分析:ALU 的输入是正确地,输出是错误的,这时候发现操作符是错误的,

addi 操作 OP=8 对应 ALU 的加法操作,此时在对应的 ALU 操作符应该为 000000,

发现这时候 ALU 的操作符为 000001,对应减法,所以运算出错。据此分析应该是

控制器中 ALU 的 OP 转换器件有误,可能是真值表填写有误。

Page 67: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

61

华 中 科 技 大 学 课 程 设 计 报 告

解决方案:分析电路得到真值表看出确实真值表填写错误,如下图。重新填写

真值表,如图 5-6,生成新的转换电路即可。

图 5-6操作符转换真值表

5.4.4 故障 4

单周期:内存写入存在冲突。

故障现象:两个连续的写入指令时候,会出现前后两个地址被同时写入第二个

数据。

原因分析:logisim 没有时延,所以当第二条写入指令被读取后,内存的地址端

和写入端理论上应该同时更新,则内存能被正确写入。但是由于没有时延,所以

logisim 将更新后的写入端数据同时写入到了两个地址。

解决方案:利用时钟端控制。将三态门的控制端设置为下降沿时候写入,即有

写入指令时,不立即写入,而是等待所有数据都准备完毕后,在在时钟周期的下半

段将数据写入内存,这时将不会发生冲突写入。控制端如下图 5-7。

Page 68: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

62

华 中 科 技 大 学 课 程 设 计 报 告

图 5-7 控制端

5.4.5 故障 5

单周期:转移指令出现错误。

故障现象:不能根据偏移地址进行正确转移。

原因分析:通过探测 pc 地址,发现转移后的地址有问题,经研究,发现是对立

即数的扩展有误,需要分为有符号扩展和无符号扩展两种情况,而我粗心把全部都

做成无符号扩展了。

解决方案:重新制作符号扩展器件。控制信号电路如下图,符号扩展器件如下

图。当控制信号为 1 时,进行有符号扩展,否则进行无符号扩展。

图 5-8 符号扩展信号生成电路

5.4.6 故障 6

单周期:指令运行错误。

故障现象:地址转移有误,且存在单条指令运行两个周期的现象,PC 电路如图

5-9。

Page 69: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

63

华 中 科 技 大 学 课 程 设 计 报 告

图 5-9 错误 PC电路

原因分析:没有暂存当前 PC 的寄存器,可能是时序有问题。

解决方案:在 MUX 后面添加一个 PC 寄存器,因为计数器的时序是下降沿有

效,而 PC 在之后读取地址,所以将 PC 时序置为上升沿有效。认真分析发现,IR

的时序应该在当前 PC 后面,否则会读取到上一条指令。因而将 IR 的触发方式改为

高电平有效。

图 5-10 改正后的 PC电路

5.4.7 故障 7

单周期:数码管显示错误。

故障现象:数码管 0 显示有误,经常显示中间数和另一只数码管的显示结果,

数码管数据寄存器经常误更新,如图 5-11。

Page 70: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

64

华 中 科 技 大 学 课 程 设 计 报 告

图 5-11 数码管显示错误

原因分析:数码管 0 的的控制端只受到 IMM 的控制,更新数码管 1 的时候,

DISP 指令为 1,数码管 0 的使能端由 1 变为 0,但是因为有非门的作用,存在临界

险象的问题,此时有一瞬间两个端口同时为 1,寄存器将错误数据更新进去。

解决方案:将寄存器改成时钟驱动,上升沿给出 DISP 信号,下降沿封存数据。

此时使能端由 IMM 的最低位和 DISP 控制信号共同作用得到。

5.4.8 故障 8

单周期:周期计数错误

故障现象:当运行测试程序的时候,周期数计数有误。

原因分析:单独运行子程序,发现移位操作的测试程序运行出来的周期数和正

确数相差 7,正好是一个移位循环的周期数。说明程序跳转出口不对。分析发现,

是 r2 的写入错误,slt 命令中当 rs<rt, r2 中写入 1。slt 命令是有符号比较,通过减

法实现。之前的做法是根据输出结果的符号位输出标识位 C(C=1 表示结果为负数)

来比较大小。但是发现当有溢出时候标识位就输出错误,比如 0x0001 - 0x1000 =

0xdfff,C=0,但是 0x0001 却小于 0x1000,不能正确地跳出循环。所以要修改比较

控制信号。

解决方案:根据 ALU 输入输出的符号位设计比较电路,当输入两个数的符号

位不同时,取被减数的符号位为标志位 C;当输入两个数的符号位相同时,一定不

会发生溢出,取结果的符号位为标志位 C。电路图如图 5-12。

Page 71: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

65

华 中 科 技 大 学 课 程 设 计 报 告

图 5-12 比较信号生成电路

5.4.9 故障 9

理想流水线:写入寄存器发生错误

故障现象:运行测试程序发现,当执行写入操作时,最后一个数据不能被写入。

原因分析:调试发现,是流水线的周期顺序搞错,误用前面指令产生的控制信

号来控制后面指令数据的选择器,使得被选择的数据发生错误,导致不能正确写入。

如图 5-13 所示,故障原因在于用 WB 阶段产生的 RegWrite_Num_Select 信号来选择

ID 阶段的写入寄存器编号,忽略了这两个阶段分别处于不同的指令,因而导致写入

错误。

图 5-13 选择信号错误

解决方案:在 ID 阶段将每条指令的写入寄存器编号存入接口部件中,按照流水

线的方式向后运行,直至 WB 阶段再将其取出按次序写回到寄存器中,这样就可以

保证每次写回的写回信号和写回编号都出自同一指令。

5.4.10 故障 10

流水线:发生死循环

故障现象:有转移指令的时候发生死循环

原因分析:流水线在 EX 阶段判断是否有跳转指令,若需要跳转,则通过 NPC

Page 72: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

66

华 中 科 技 大 学 课 程 设 计 报 告

向 IF 阶段反馈下一条指令的地址。原来的设计是通过 ID/EX 接口部件中的信号输

入到 NPC 中得到 NPC 的数值向前反馈给 PC,在下一个时钟上升沿读入 PC。但是

当发生分支冲突时,同一个周期的下降沿需要在 ID/EX 中插入气泡,导致 NPC 的

输入全为 0,则输出为 0,即反馈给 PC 的 NPC 错误(为 0),PC 于是又从头开始执

行程序,导致死循环。分支检测的电路图如图 5-14。

图 5-14 分支冲突检测电路图

解决方案:增加延时装置,等待一个周期后再插入气泡,即等待下一条指令读

入 ID/EX 接口部件的时候再将其置为零(即插入气泡)。具体实现方式就是在 Bubble

信号前加入一个寄存器用来寄存插入气泡的信号,等下一个周期是输出插入气泡的

信号,从而实现延时的目的。

5.4.11 故障 11

动态分支预测:预测地址错误

故障现象:程序进行预测后执行地址错误。

原因分析:错误的使用了 EX 阶段的匹配表项编号 MatchItem_EX 来选择 BTB

表中的转移地址,MatchItem_EX 是之前的指令的旧数据,用来当前指令的选择显然

是错误的,所以这导致 IF 阶段指令匹配了错误的预测转移地址

解决方案:预测地址应该由 IF 阶段的匹配项选择而非当前 EX 阶段接口部件中

传递的匹配表项编号,改正后的电路如图 5-15。

Page 73: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

67

华 中 科 技 大 学 课 程 设 计 报 告

图 5-15 预测地址选择

5.4.12 故障 12

动态分支预测:排序错误

故障现象:排序有误,如图 5-16。

原因分析:用是否命中 hit 信号作为是否将跳转信号输入到冲突处理部件中的

决定因素,但是 hit 为 0,但是预测失败的时候,也消除了跳转信号的输入,这样就

未能解决这一次分支冲突,未能消除错误指令,导致程序指令执行轨迹发生错误。

图 5-16排序错误

解决方案:在跳转信号 jump 与 hit 异或的结果后与 fail 信号进行或操作,这样

当发生上述情况的时候,Aft_jump 信号仍为 1,此时输入到冲突处理部件中后会在

流水线中插入气泡,将预测指令清除,修改后的电路如图 5-17

图 5-17预测后是否将跳转信号送入冲入处理器

5.4.13 故障 13

动态分支预测:跳转地址有误

Page 74: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

68

华 中 科 技 大 学 课 程 设 计 报 告

故障现象:当相隔出现两个跳转指令的时候,程序出现执行路径错误。

原因分析:没有考虑到预测跳转的优先级,即若前面有一条跳转指令进行了预

测但是预测失败需要修正地址,此时 IF 阶段也刚好有一条跳转指令匹配到了 BTB

表,产生预测信号,并给 PC 预测地址,这时程序应该选择修正地址不进行当前跳

转指令的预测,但却错误的产生了预测信号并反馈给 PC 相应地预测地址。

解决方案:在预测信号的产生电路中进行限制,即当流水线中 EX 阶段存在预

测失败的指令时,当前 IF 阶段的跳转指令不再进行预测,即此时 PC 应优先接纳前

面预测失败指令的修正地址,只需要将先前的预测信号与取反的 fail 信号进行与操

作即可得到正确地预测信号。改正后的预测信号生成电路如图 5-18。

图 5-18 是否预测信号生成电路

5.5 实验流程

1. 完成单周期 CPU 的设计和实现

2. 在单周期 CPU 的基础上设计实现理想流水线

3. 实现插入气泡的流水线冲突处理

4. 实现数据重定向的流水线冲突处理

5. 实现分支动态预测的流水线冲突处理

表 5-8 课程设计进度表

时间 进度

第一天 复习相关知识,设计 PC、ALU、控制器等部件,构建基本通路。

第二天 完成单周期 CPU 设计。

第三天 完成理想流水线的设计。

第三天 复习流水线相关知识,构建冲突检测器。

Page 75: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

69

华 中 科 技 大 学 课 程 设 计 报 告

第四天 设计实现插入气泡的流水冲突处理。

第五天 设计数据重定向的流水冲突处理。

第六天 对数据重定向的流水冲突处理进行调试。

第七天 设计 BTB 表和 LRU 电路。

第八天 设计动态分支预测部件。

第九天 对分支动态预测电路进行调试。

第十天 完成分支动态预测的流水线冲突处理。

Page 76: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

70

华 中 科 技 大 学 课 程 设 计 报 告

6 设计总结与心得

6.1 课设总结

在本次课程设计中,我主要做了如下工作:

1. 设计并实现了单周期 CPU 的电路。

2. 设计并实现了理想流水线的电路。

3. 设计并实现了插入气泡的流水线冲突处理电路

4. 设计并实现了数据重定向的流水线冲突处理电路

5. 设计并实现了动态分支预测的流水线冲突处理电路

6.2 课设心得

本次课设规定有两周的时间,而我由于中途外出参加学院交流活动,时间更为

紧张,但是越大的压力往往激发出越高的工作效率,现在回想起来,完成本次课程

设计的时间加起来也仅有 8 天时间,在这八天里,我收获良多。

因为计算机组成原理已经是上个学期的课程,经过了一个假期,对相关知识点

难免有些生疏和淡忘,所以起初的课设实施并不顺利,因为很多细节的疏漏,导致

每次都会出现各种各样的故障,因此也需要调试了很久才能发现故障的根源所在。

虽然调试的过程很痛苦,但是在这样一个发现问题、解决问题的过程中,不仅加深

了我对相关知识的具体理解,同时也无形中培养了我对于问题的发现能力和解决能

力。

在设计单周期 CPU 的过程中,我对于计算机 CPU 的组成和原理有了更为深刻

和形象的了解,而不再仅仅限于课本上略显抽象的知识点。如果说那时上课学习

CPU 原理的时候还存在大致懂得原理的阶段,那么当我最终完成了单周期 CPU 的

设计,可以说对 CPU 已经有了相当透彻的了解,具体到每一个数据,每一个信号的

生成和转换,我都有了清晰和深刻的了解。

单周期 CPU 的完成占用了大概三分之一的时间,接下来要挑战的就是 5 段流水

Page 77: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

71

华 中 科 技 大 学 课 程 设 计 报 告

线的设计,相较于单周期 CPU,这部分知识对我来说更为生疏,理解更是欠透彻和

详尽。设计初期,我查阅了大量的资料,将书上相关的内容也重新复习了一遍,在

这个阶段中,我感到了知识的充实。具备了一定的理论基础后,再进行流水线的设

计就稍稍容易一些,于是我很快完成了理想流水线。在后续的冲突处理中,才是本

次课设中我认为困难最大的地方,由于电路更加复杂,信号更为繁多,使得对故障

的排查过程更为艰难,经常一个错误需要调半天,但是排错的过程其实是一个深入

的过程,不仅是深入电路的各个部件,更是深入了解一个程序的指令是如何一步一

步具体地在 CPU 中执行的。最终完成了所有课设任务后,我感觉自己不论从知识上

还是能力上都有了质的提升和飞跃。

我觉得这次课设的内容设计很合理,难度适中,只要认真钻研就一定可以完成

任务,同时也感谢老师的严格要求,严格的考勤和定期检查制度有效地督促了我按

照进度完成课设,不可以有丝毫的懈怠。

很感谢本次课程设计,让我从中不仅收获了更为详实的知识,更宝贵的是收获

了很多可贵的能力或者品质,让我学会如何进行宏观设计和微观实现,明白该怎样

透析到问题本质,也让我积累了日后宝贵的大型设计经验。

Page 78: 计算机组成原理 课程设计报告 - cs.hust.edu.cncs.hust.edu.cn/__local/1/11/9B/5C475C0BD8A5E348346EC0E898F_6A6D7F9E_… · 计算机组成原理是计算机专业的核心专业基础课。主要介绍计算机单机系统的

72

华 中 科 技 大 学 课 程 设 计 报 告

参考文献

[1] DAVID A.PATTERSON(美).计算机组成与设计硬件/软件接口(原书第 4版).北京:

机械工业出版社.

[2] David Money Harris(美).数字设计和计算机体系结构(第二版). 机械工业出

版社

[3] 秦磊华,吴非,莫正坤.计算机组成原理. 北京:清华大学出版社,2011年.

[4] 袁春风编著. 计算机组成与系统结构. 北京:清华大学出版社,2011 年.

[5] 张晨曦,王志英. 计算机系统结构. 高等教育出版社,2008年.