分享
分销 收藏 举报 申诉 / 48
播放页_导航下方通栏广告

类型计算机组原课设.doc

  • 上传人:丰****
  • 文档编号:4312861
  • 上传时间:2024-09-05
  • 格式:DOC
  • 页数:48
  • 大小:765KB
  • 下载积分:12 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    计算 机组 原课设
    资源描述:
    2024 计算机组织与结构 课程设计报告 题 目: 5段流水CPU设计 专 业: 计算机科学与技术 班 级: 学 号: 姓 名: 电 话: 邮 件: 完成日期: 指导教师: 课程设计任务书 一、设计题目 基于Logisim软件仿真平台的5段流水CPU设计实现 二、设计内容 设计模型机系统的总体结构、指令系统和时序信号。在对该模型机系统中的部件功能利用EDA软件的仿真功能进行仿真分析和功能验证的基础上,将部分电路下载到FPGA,并与适当的外围器件相配合,实现模型机的整机系统。要求所设计的整机系统能支持自动和单步运行方式,能正确地执行存放在主存中的程序的功能,对主要的数据流和控制流通过LED适时显示信息。 三、 设计要求 1) 支持20条基本指令,具体见表1; 2) 支持5段流水机制,可处理数据冒险,结构冒险,分支冒险; 3) 能运行由自己所设计的指令系统构成的一段测试程序,测试程序应能涵盖所有指令,程序执行功能正确。 4) 能运行教师提供的标准测试程序,并统计执行时间。 四、设计流程 1) 根据课程设计指导书的要求,制定出设计方案; 2) 画出自己所设计计算机系统的原理框图,分析所需要的控制信号以及这些控制信号的有效形式; 3) 画出各指令的指令周期流程图和所需要的控制信号; 4) 设计出实现指令功能的控制器; 5) 调试、数据分析、验收检查; 6) 课程设计报告和总结。 五、成绩评定 成绩评定根据考勤、课程设计的过程、课程设计的效果、课程设计报告质量等进行综合评定;其中设计过程和结果占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年. 华 中 科 技 大 学 课 程 设 计 报 告 目 录 1 课程设计概述 2 1.1 课设目的 2 1.2 设计任务 2 1.3 设计要求 3 2 实验原理与环境 5 2.1 实验原理 5 2.2 实验环境 6 3 总体方案设计 7 3.1 构建单周期CPU 7 3.2 可支持理想流水线的多周期CPU设计 12 4 详细设计与实现 16 4.1 构建单周期CPU 16 4.2 可支持理想流水线多周期CPU 24 5 实验过程与调试 32 5.1 测试用例和功能测试 32 5.2 性能分析 39 5.3 主要故障与调试 39 5.4 实验流程 42 6 设计总结与心得 43 6.1 课设总结 43 6.2 课设心得 43 参考文献 44 44 1 课程设计概述 1.1 课设目的 计算机组成原理是计算机专业的核心基础课。本课程力图以“培养学生现代计算机系统设计能力”为目标,贯彻“强调软/硬件关联与协同、以CPU设计为核心/层次化系统设计的组织思路,有效地增强对学生的计算机系统设计能力的培养”。课程设计是学完该课程并进行了多个单元实验后,综合利用所学的理论知识,并结合在单元实验中所积累的计算机部件设计和调试方法,设计出一台具有自己指令系统的简单计算机系统。所设计的系统能在基于FPGA的实验平台或Logisim仿真平台上运行一段程序,通过检查程序结果的正确性来判断所设计计算机系统正确性。 课程设计属于设计型实验,不仅有助于学生增进对计算机组成相关知识的认知和理解,锻炼学生设计简单计算机系统的能力,而且通过进行主机系统底层电路的实现、故障分析与定位、系统调式等环节的锻炼,有助于进一步提高学生分析和解决问题的能力。 1.2 设计任务 计算机系统设计的总体目标是设计模型机系统的总体结构、指令系统和时序信号。所设计的主机系统能支持自动和单步运行方式,能正确地执行存放在主存中的程序的功能,对主要的数据流和控制流通过LED显示器适时显示信息。尽可能利用EDA软件或仿真软件对模型机系统中各部件进行仿真分析和功能验证。 具体设计任务如下: 1) 支持20条基本指令,具体见表1; 2) 支持5段流水机制,可处理数据冒险,结构冒险,分支冒险; 3) 能运行由自己所设计的指令系统构成的一段测试程序,测试程序应能涵盖所有指令,程序执行功能正确; 4) 能运行教师提供的标准测试程序,并自动统计执行时间; 5) 能自动统计各种冒险冲突次数,动态预测流水线能自动统计预测成功次数; 表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 DISP 1 rs rt immediate-u DISP DISP[imm]=$rs 10 lui 2 rs rt immediate-u lui $rt=imm<<8 11 ori 3 rs rt immediate-u ori $rt=$rs|imm 12 andi 4 rs rt immediate-u andi $rt=$rs&imm 13 addi 5 rs rt immediate-s addi $rt=$rs+imm 14 lw 6 rs rt immediate-s lw $rt=MEM[$rs+imm] 15 sw 7 rs rt immediate-s sw MEM[$rs+imm]=$rt 16 beq 8 rs rt offset-s beq beq =? 17 bne 9 rs rt offset-s bne bne !=? 18 bgt 10 rs rt offset-s bgt bgt >? 19 jump 11 jump address jump jump 20 halt 12 0 halt halt 1.3 设计要求 根据理论课程所学的知识,设计出简单计算机系统的总体方案,结合各单元实验积累和课堂上所学知识,选择适当芯片,设计简单的计算机系统,具体要求如下: 1) 根据课设指导书的要求,制定设计方案; 2) 画出自己所设计计算机系统的原理框图,分析所需要的控制信号以及这些控制信号的有效形式; 3) 画出各指令的指令周期流程图和所需要的控制信号; 4) 选择适当元器件,设计出实现指令功能的微程序控制器或硬布线控制器; 5) 调试、数据分析、验收检查; 6) 课程设计报告和总结; 2 实验原理与环境 2.1 实验原理 本次实验与之前的单元实验室层层推进的,而本次实验过程也是逐步推进。在前几次单元实验的基础上,结合学过的知识,不难设计出单周期CPU的逻辑电路图。 单周期CPU由PC、指令存储器IM、寄存器堆RF、运算器ALU、数据存储器DM五个主要功能部件组成。其电路原理图如图2.1。 图2.1 单周期CPU原理图 在单周期CPU的基础之上,完成支持理想流水线的多周期CPU的设计。将指令过程分成5个阶段IF、ID、EX、MEM、WB,每两个阶段之间设置缓冲接口部件,即锁存器,构建各阶段之间的接口部件,接口定义尽可能简化,流水线应向后续段传递数据信息、控制信息、反馈信息,后续部件对数据的加工处理依赖于前阶段传递过来的信息。ID段译码器生成每条指令的所有控制信号,控制信号逐段向后传递,后续部件控制信号不再单独生成。由于多周期CPU不是线性的,指令执行过程中可能会产生一些由于相关性造成的冲突,包括数据相关、结构相关、分支相关、Load-Use等等,所以在设计多周期CPU的过程中还要考虑设计能够消除上述相关性的模块。除此之外,还要考虑到效率问题。根据统计,分支指令占所有指令相当大的比例,若每次执行分支指令时都要判断分支结果、计算分支目的地址,效率想必比较低下。为此,需在IF段的PC和指令存储器之间增加分支预测模块,每生成一个新的PC就和分支预测模块中存储的PC作比较,若为分支指令地址,则直接取出对应的分支指令的目的地址,这样节省了判断分支结果和计算分支目的地址的时间,提高了整个CPU的效率。多周期CPU的电路原理图如图2.2。 图2.2 多周期CPU原理图 2.2 实验环境 配置了java环境的计算机操作系统(windows 7、windows 8等均可),Logisim汉化版。 Logisim是一款基于Java的应用程序,可运行在任何支持JAVA环境的平台,方便学生来学习设计和模仿数字逻辑电路。Logisim中的主要组成部分之一就在于设计并以图示来显示CPU。当然Logisim中还有其他多种组合分析模型来对你进行帮助,如转换电路,表达式,布尔型和真值表等等。同时还可以重新利用小规模的电路来作为大型电路的一部分。 3 总体方案设计 3.1 构建单周期CPU 构建单周期CPU的目的是为了熟悉取指令、译码、读写寄存器堆、运算、读写RAM等,为后续5段流水型多周期CPU的设计打好基础。 3.1.1 总体设计 本次单周期CPU的构建采用的是自顶向下的设计思路。先根据单周期CPU所需要实现的功能,实现这些功能需要执行哪些操作,将其划分为取指令、译码、产生控制信号、读寄存器堆、运算、访存、写回等功能模块,每个功能模块负责其中的一步操作。对于每一个功能模块,根据所要执行的操作,在Logisim软件平台上选择适当的电路部件搭建正确的逻辑电路并进行封装(封装尺寸尽可能小,为后续工作节省空间)。所有模块的逻辑电路搭建封装完成后,根据每个模块所执行的操作在整个指令执行流程中的顺序,将所有模块连接在一起,然后编写一段程序来检验单周期CPU的正确性。 单周期CPU的总体结构图如图 3.1所示。 图 3.1 单周期CPU总体结构图 3.1.2 主要功能部件 完整的单周期CPU电路由程序计数器PC、指令存储器ROM、指令译码器DECODE、控制中心CONTROL、寄存器堆Reg、运算器ALU、数据存储器RAM组成。具体设计思路如下。 1. 程序计数器PC 程序计数器的输出PC有三种选择:当前PC+1、jump指令的目的地址、bne(beq、bgt)指令的目的地址。这三个地址作为一个数据选择器MUX的输入端,数据选择端信号来自控制中心CONTROL产生的控制信号PC_OP,数据选择器的输出端接一个寄存器存放PC,然后将寄存器的输出端输出的数据作为指令的地址。 2. 指令存储器ROM 指令存储器ROM只由一个地址位宽和数据位宽均为16的ROM组成。 3. 指令译码器DECODE 指令译码器DECODE的输入是从ROM中取出的指令,使用一个分离器将指令分成16位,再根据指令格式表的要求将对应的bit位合成为rs、rt、rd、offset等。 4. 控制中心CONTROL 控制中心的输入是每条指令的OP字段和funct字段。由于R型指令的操作选择字段是funct,I型和J型指令的操作选择字段是OP,为了节省硬件成本和一些意想不到的错误,所以想方设法产生一个字段可以对R、I、J三种指令的操作作出选择。此外,以每条指令的OP字段作为解码器的选择端,这样当执行某条指令时,OP字段便会选择解码器的对应输出端为1,其余输出端为0;通过观察分许20条基本指令的特点,将解码器输出端的“0”、“1”信号通过适当的逻辑联系在一起生成新的控制信号,用于控制后续模块的正常工作。 5. 寄存器堆Reg 寄存器堆Reg由8个寄存器组成,第二列的4个寄存器主要是为了防止电路震荡,因为在单周期CPU中,同一时刻对于同一个寄存器的读写操作可能会造成冲突。 涉及到寄存器堆的读操作,需要考虑是要读哪个寄存器。需要设置两个位宽为2的字段R1(即rs)、R2(rt)分别选择读出哪两个寄存器的值作为ALU的两个源操作数,同时需要设置一个使能端控制位reg_r,该控制位由控制中心CONTROL产生。 涉及到寄存器堆的写操作,需要考虑是要写入哪个寄存器。需要设置一个位宽为2的字段W(即rt或者rd,因指令不同而不同)来选择向哪个寄存器写入数据。以W作为一个解码器的选择端,选择对应输出端口输出“1”,其余输出端口输出“0”,用这四个输出分别控制四个寄存器的使能端;同时,解码器也需要一个使能控制位reg_w,否则每条指令都有权限向寄存器中写入数据,该控制位也由控制中心CONTROL产生。 6. 运算器ALU 运算器ALU主要执行算术逻辑运算。运算器有两个输入一个输出,分别表示两个源操作数和一个目的操作数。运算部件由与门、或门、加法器、减法器、移位器(逻辑左移、逻辑右移、算术右移)、比较器组成。两个源操作数均经过这些运算器运算后得到八个结果,然后用一个数据选择器从中选择一个结果作为输出,数据选择器的数据选择端为ALU_OP,由控制中心CONTROL产生。 7. 数据存储器RAM 数据选择器由一块RAM芯片组成,地址位宽和数据位宽均为16,采用分离的加载和存储数据接口。 3.1.3 构造R型指令 R型指令包括指令表中的前8条指令,其指令格式和实现的功能如表2所示。 表2 R型指令格式表 指令 15~12 11~10 9~8 7~6 5~3 2~0 指令功能 or 0 rs Rt rd 0 0 $rd=$rs|$rt and 0 rs Rt rd 0 1 $rd=$rs&$rt add 0 rs Rt rd 0 2 $rd=$rs+$rt sub 0 rs Rt rd 0 3 $rd=$rs-$rt sllv 0 rs Rt rd 0 4 $rd=$rs<<$rt srlv 0 rs Rt rd 0 5 $rd=$rs>>$rt srav 0 rs Rt rd 0 6 $rd=$rs>>$rt slt 0 rs Rt rd 0 7 $rd=($rs<$rt)?1:0 这八条R型指令的OP字段和3~5位均为0,指令功能由指令的funct字段(0~2)决定,rs(10~11)表示第一源操作数的寄存器号,rt(8~9)表示第二源操作数的寄存器号,rd(6~7)表示目的操作数的寄存器号。R型指令主要负责与、或、加、减、移位等基本的算术逻辑运算,后面I型指令涉及到的算术逻辑运算也由这八条R型指令功能构成的ALU执行。 3.1.4 构造I型指令 I型指令是立即数型指令,主要包括一些数据传输、分支、立即数指令,其指令格式和实现的功能如表3所示。 表3 I型指令格式表 指令 15~12 11~10 9~8 7~6 5~3 2~0 指令功能 lui 2 rs Rt immediate-u $rt=imm<<8 ori 3 rs Rt immediate-u $rt=$rs|imm andi 4 rs Rt immediate-u $rt=$rs&imm addi 5 rs Rt immediate-s $rt=$rs+imm lw 6 rs Rt immediate-s $rt=MEM[$rs+imm] sw 7 rs Rt immediate-s MEM[$rs+imm]=$rt beq 8 rs Rt offset-s beq =? bne 9 rs Rt offset-s bne !=? bgt 10 rs Rt offset-s bgt >? 这些I型指令的功能由每条指令的OP字段决定。涉及到基本算术逻辑运算的操作由ALU完成。指令的0~7位为立即数或者分支偏移量。若是双目运算,则将rs的内容和立即数字段的值分别作为第一操作数和第二操作数,结果送rt指定的寄存器中;若是Load/Store指令,则将rs的内容和立即数字段的值经符号位扩展后的内容相加作为Load/Store的存储单元地址;若是分支指令,则对rs和rt寄存器中的数据进行操作码规定的运算,并根据运算的结果决定是否转移。当转移发生时,转移的目标地址采用相对寻址方式获得,即将PC的内容和立即数字段经符号位扩展后的内容相加得到。 3.1.5 构造J型指令 J型指令的格式如表4所示。 表4 J型指令格式表 指令 15~12 11~10 9~8 7~6 5~3 2~0 指令功能 jump 11 jump address jump J型指令主要是无条件转移指令,指令中给出的是OP字段和12位(0~11)直接地址,无条件转移的目标地址由PC高4位与12位直接地址作为低12位拼接而得到的。 3.1.6 DISP指令 DISP指令的格式及其功能如表5所示。 表5 DISP指令格式表 指令 15~12 11~10 9~8 7~6 5~3 2~0 指令功能 DISP 1 rs Rt immediate-u DISP[imm]=$rs DISP指令的立即数字段immediate只有0、1两个取值,用来选择在0号显示器显示还是在1号显示器显示;待显示的内容为rs对应的寄存器中的数据。 3.1.7 halt指令 halt指令格式如表6所示。 表6 halt指令格式表 指令 15~12 11~10 9~8 7~6 5~3 2~0 指令功能 halt 12 0 halt halt指令实现“停机”功能,具体实现方案是:时钟正常跳转,PC值不再更新,因此取出的指令一直是相同的,达到“停机”的目的。 3.1.8 控制器封装 控制器的作用是为整个CPU提供控制信号,它的输入是每条指令的OP字段和funct字段。由于R型指令的操作选择字段是funct,I型和J型指令的操作选择字段是OP,为了节省硬件成本和一些意想不到的错误,所以想方设法产生一个字段可以对R、I、J三种指令的操作作出选择。此外,以每条指令的OP字段作为解码器的选择端,这样当执行某条指令时,OP字段便会选择解码器的对应输出端为1,其余输出端为0;通过观察分许20条基本指令的特点,将解码器输出端的“0”、“1”信号通过适当的逻辑联系在一起生成新的控制信号,用于控制后续模块的正常工作。控制器封装时要留出必要的几个输入端口和所有的信号输出端口,还要注意封装尺寸不要过大,以免影响其他部分的布局。 3.2 可支持理想流水线的多周期CPU设计 3.2.1 总体设计 在单周期CPU的基础上,将指令过程分成5个阶段IF、ID、EX、MEM、WB,每两个阶段之间设置缓冲接口部件,即锁存器,构建各阶段之间的接口部件,接口定义尽可能简化,流水线应向后续段传递数据信息、控制信息、反馈信息,后续部件对数据的加工处理依赖于前阶段传递过来的信息。ID段译码器生成每条指令的所有控制信号,控制信号逐段向后传递,后续部件控制信号不再单独生成。由于多周期CPU不是线性的,指令执行过程中可能会产生一些由于相关性造成的冲突,包括数据相关、结构相关、分支相关、Load-Use等等,所以在设计多周期CPU的过程中还要考虑设计能够消除上述相关性的模块。除此之外,还要考虑到效率问题。根据统计,分支指令占所有指令相当大的比例,若每次执行分支指令时都要判断分支结果、计算分支目的地址,效率想必比较低下。为此,需在IF段的PC和指令存储器之间增加分支预测模块,每生成一个新的PC就和分支预测模块中存储的PC作比较,若为分支指令地址,则直接取出对应的分支指令的目的地址,这样可以节省判断分支结果和计算分支目的地址的时间,提高整个CPU的效率。总体结构图如图3.2所示。 图3.2 多周期CPU总体结构图 3.2.2 接口部件设计 构建各阶段之间的接口部件,即锁存器(本质是寄存器),一共有4个,分别是IF/ID、ID/EX、EX/MEM、MEM/WB。流水线通过接口传递与指令执行相关的数据信息、控制信息、反馈信息,后续部件对数据的加工处理依赖于前阶段传递过来的信息。 3.2.3 流水冲突检测器 流水线冲突是指流水线中由于相关的存在,导致流水线中出现“断流”或“阻塞”,后一条指令不能在预期的时钟周期流入到流水线中。相关包括数据相关、结构相关和控制相关,对应的流水线冲突包括数据冲突、结构冲突和控制冲突。 数据冲突是指这种情况:后续指令要用到前面指令的操作结果,而这个结果尚未产生或尚未送达指定位置,从而造成后续指令无法继续执行的状况。常见的数据冲突包括先写后读冲突(Read After Write,RAW)、先读后写冲突(Write After Read,WAR)、写后写冲突(Write After Write,WAW)。处理数据冲突的措施就是采用数据重定向。 结构冲突是指由于多条指令在同一时钟周期都需使用同一操作部件而引起的冲突。在本次实验中,消除结构冲突的一种高效的办法就是设置独立的指令存储器和数据存储器。 控制冲突是指:当流水线遇到分支指令或其他会改变PC值的指令时,由于分支指令跳转是否成功或改变后的PC值要等到EX段才能确定或计算出来,导致在指令执行阶段,无法确定应该去执行哪一段程序所造成的冲突。处理控制冲突的方法就是,用分支信号PC_OP和0比较,当等于0时表示不是分支指令,在原来PC基础上顺序执行,否则将PC改变成分支指令目标地址。 3.2.4 插入气泡的流水冲突处理 在以下几种情况下需要插入气泡处理流水冲突: 1) Load-Use。即当访存指令i的目的操作数寄存器号和紧跟其后的另外一条指令j的源操作数寄存器号相同时,从数据存储器中读取的数据可能还未写入对应寄存器,但是后面一条指令正好要去访问同一个寄存器,导致读出数据有误。出现这种情况,就要暂缓读取后续指令,即“暂停”更新IF段和IF/ID锁存器,同时清零ID/EX锁存器,即插入气泡,以免ID/EX中的数据流到EX段覆盖掉j指令的相关数据导致出错。 2) 分支指令。即当流水线遇到分支指令或其他会改变PC值的指令时,需要将已经取出的指令清空,转而跳转到改变后的PC值处继续执行。为了完成这一操作,需要清零IF/ID、ID/EX两个锁存器中的数据,即插入气泡。 3.2.5 数据重定向的流水冲突处理 数据重定向是用于处理数据冲突的。产生数据冲突的情况有一下两种:处于EX段的指令和处于MEM段的指令、处于EX段的指令和处于WB段的指令。因此,数据重定向就是要比较处于EX段的指令的两个源操作数对应的寄存器号和处于MEM段或者WB段的指令的目的寄存器号是否相同,若相同,则将待写回的数据直接送入ALU的输入端,否则按照正常顺序执行。 3.2.6 动态分支预测的流水冲突处理 当流水线遇到分支指令时,需要判断分支结果和计算分支目标地址,若每次遇到分支指令都执行上述两种操作,想必时间开销比较大 。动态分支预测模块的设置可以减少计算分支目标地址的时间开销。每生成一个新的PC就和分支预测模块中存储的PC作比较,若为分支指令地址,则直接取出对应的分支指令的目标地址,这样可以节省计算分支目标地址的时间。动态分支预测模块采用的淘汰算法是LRU,即“最近未使用”算法,模拟一个栈,当某个分支PC及其目标地址被使用时,就把它们放到栈顶,这样最近未使用的就存在于栈底,直接淘汰掉即可。 4 详细设计与实现 4.1 构建单周期CPU 开始 根据单周期CPU的工作流程,可画出指令流程图如图4.1所示。 取指令 指令译码 产生控制信号 寄存器堆reg读写操作 写回reg 待写回的数据二选一 ALU运算 读数据 对数据存储器操作 写数据 读数据 图4.1 单周期指令流程图 单周期CPU 的主电路图如图4.2所示。 图4.2 单周期CPU主电路图 接下来将对单周期CPU的几个主要功能部件的设计实现进行详细的解析。 4.1.1 主要功能部件实现 1. 程序计数器PC 选用的元器件: 位扩展器(输入位宽8,输出位宽16,扩展方式:符号数扩展)、加法器(数据位宽16)、位扩展器(输入位宽12,输出位宽16,扩展方式:以0填充)、或门(数据位宽16)、与门(数据位宽16)、多路选择器(数据位宽16,选择数据长度2)、寄存器(数据位宽16,触发方式:上升沿)、加法器(数据位宽16)。 输入: 时钟暂停信号(连接到主电路的时钟暂停信号)、清零信号(连接到主电路的清零信号)、offset(分支指令偏移量)、jump_addr(jump指令目标地址)、PC_OP(分支判断结果)。 输出: 寄存器的输出端PC。 具体实现: PC作为数据选择器的输入端0,jump_addr作为PC的低12位与PC的高4位拼接成新的PC作为数据选择器的输入端1,offet经符号扩展后加上PC+1作为数据选择器的输入端2,PC_OP接数据选择器的数据选择端,数据选择器的输出端接寄存器的数据输入端,寄存器的时钟端连接时钟清零信号,清零端连接清零信号,寄存器的输出端作为PC输出。具体电路如图4.3。 图4.3 程序计数器PC 2. 指令存储器ROM 选用的元器件:ROM芯片(地址位宽16,数据位宽16)。 输入:指令计数器的值PC。 输出:从ROM中取出的指令。 具体实现:将指令计数器的输出PC接到ROM的地址输入端,数据(指令)输出接译码器。具体电路如图4.4。 图4.4 指令存储器ROM 3. 指令译码器DECODE 选用的元器件:九个分离器。 输入:来自指令存储器的指令。 输出:指令格式中规定的几种(OP、rs、rt、rd、funct、立即数、address)。 具体实现:先用分离器将输入的指令分成16位输出,然后分别用分离器选择对应的位拼接在一起得到OP、rs、rt等。具体电路如图4.5。 图4.5 指令译码器DECODE 4. 控制中心CONTROL 选用的元器件:解码器(选择数据长度为4)、数据选择器(数据位宽4,选择数据长度4)、比较器(数据位宽16)、若干与门、若干或门、非门、分离器。 输入:每条指令的OP、funct、rs和rt寄存器中的数据。 输出:ALU的数据选择器的选择端ALU_OP、停机信号halt、判读位扩展方式的信号u、显示器显示信号disp、数据存储器的load信号mem_ld、数据存储器的store信号mem_str、程序计数器的PC选择信号PC_OP、寄存器堆的写使能控制信号reg_wtr、寄存器堆的读使能控制信号reg_read、ALU的两个源操作数选择信号in1、in2。 具体实现:OP作为解码器的选择数据输入端,当执行一条指令时,该条指令的OP便选择对应解码器输出端为1,其余输出端为0;根据指令表中哪些指令需要读写寄存器,哪些需要进行位扩展,哪些需要读写数据存储器等等,选取解码器的对应输出依据自己构建的逻辑表达式连接在一起形成正确的电路。OP同时也要连接到数据选择器的数据选择端,数据选择器的0号输入端接funct,其余输入端根据指令的功能接不通的数字常量。具体电路如图4.6。 图4.6 控制中心CONTROL 5. 寄存器堆Reg 选用的元器件:解码器(选择数据长度2)、八个寄存器(数据位宽均为16,第一列四个触发方式是低电平,第二列四个触发方式是上升沿)、两个数据选择器(数据位宽均为16,选择数据长度为2)。 输入:待写入寄存器的数据Din、写使能控制信号reg_w、写选择信号W、时钟信号、清零信号、读使能控制信号reg_r、读选择信号R1、R2。 输出:ALU的两个源操作数Do1、Do。 具体实现:Din分别接第一列四个寄存器的数据输入端,第一列寄存器的数据输出端接第二列寄存器的数据输入端,第二列的四个寄存器的数据输出端分别接到两个数据选择器的对应输入端,reg_w接解码器的使能端,W接解码器的选择端,解码器的四个输出端分别接第一列四个寄存器的使能端,R1、R2分别接两个数据选择器的数据选择端,reg_r接两个数据选择器的使能端,Do1、Do2分别接两个数据选择器的数据输出端,八个寄存器的时钟端和清零端接同一的时钟信号和清零信号。具体电路如图4.7。 图4.7 寄存器堆Reg 6. 运算器ALU 选用的元器件:与门(数据位宽16)、或门(数据位宽16)、加法器(数据位宽16)、减法器(数据位宽16)、移位器(逻辑左移、逻辑右移、算术右移,第一源操作数位宽16,第二源操作数位宽4)、比较器(数据位宽16)、位选择器(输入位宽16,输出位宽4)、分离器(位宽16,2个输出接口)、数据选择器(数据位宽16,数据选择端4)。 输入:in1(ALU的第一源操作数)、in2(ALU的第二源操作数)、ALU_OP(由控制中心产生)。 输出:out(ALU的运算结果)。 具体实现:in1和in2分别接与门、或门、加法器、减法器、比较器的两个输入端,比较器的输出端作为分离器的最低位,高15位置0;in1接移位器的输入端,in2经过位选择器后得到in2的低四位,接到移位器的距离端;所有的运算器输出端接到数据选择器的输入端,ALU_OP接数据选择器的数据选择端,out接数据选择器的输出端。具体电路如图4.8。 图4.8 运算器ALU 7. 数据存储器RAM 选用的元器件:RAM芯片(地址位宽16,数据位宽16,数据接口:分离的加载和存储)。 输入:将要访问的地址、数据将要存储的地址、store信号、load信号、时钟信号、清零信号。 输出:从地址加载的数据。 具体实现:ALU的运算结果接RAM的A端,即将要访问的地址;rt接D端,即数据将要存储的地址;store信号端接来自控制中心的mem_str信号;load端接来自控制中心的mem_ld信号;时钟端和清零端接主电路统一的时钟信号和清零信号。具体电路如图4.9。 图4.9 数据存储器RAM 4.1.2 构造R型指令 在给出的20条指令中,前八条为R型指令,它们的指令格式如表7所示。 表7 R型指令格式 OP(15~12) rs(11~10) rt(9~8) rd(7~6) 5~3 funct(2~0) 指令各位的功能描述如表8所示。 表8 R型微指令功能表 名称 位数 微指令的位置 功能 OP 4 15~12 R型指令的OP字段全为0 rs 2 11~10 存储第一源操作数的寄存器号 rt 2 9~8 存储第二源操作数的寄存器号 rd 2 7~6 存储目的操作数的寄存器号 funct 3 2~0 选择R型指令的功能 4.1.3 构造I型指令 在指令表中,lui、ori、andi、addi、lw、sw、beq、bne、bgt是I型指令,它们的指令格式如表9所示。 表9 I型指令格式 OP(15~12) rs(11~10) rt(9~8) imm/offset(7~0) 指令各位的功能描述如表10所示。 表10 I型微指令功能表 名称 位数 微指令的位置 功能 OP 4 15~12 选择I型指令执行的功能 rs 2 11~10 第一源操作数的寄存器号 rt 2 9~8 目的操作数的寄存器号 imm/offset 8 7~0 当为imm时,作为第二源操作数,当为offset时,作为跳转目标地址的组成部分 4.1.4 构造J型指令 在本次实验中,J型指令只由Jump一条,其指令格式如表11所示。 表11 J型指令格式 OP(15~12) address(11~0) 指令各位的功能描述如表12所示。 表12 J型微指令功能表 名称 位数 微指令的位置 功能 OP 4 15~12 选择J型指令执行的功能 address 12 11~0 作为直接跳转目标地址的低12位 4.2 可支持理想流水线多周期CPU 在单周期CPU的基础上,构建理想型的5段流水线。具体做法是:将指令过程分成5个阶段IF、ID、EX、MEM、WB,每两个阶段之间设置缓冲接口部件,即锁存器,构建各阶段之间的接口部件,接口定义尽可能简化,流水线应向后续段传递数据信息、控制信息、反馈信息,后续部件对数据的加工处理依赖于前阶段传递过来的信息,ID段译码器生成每条指令的所有控制信号,控制信号逐段向后传递,后续部件控制信号不再单独生成。理想型的5段流水线构建完成后,自己写一小段指令之间不存在相关性的程序来测试理想型的5段流水线的正确性。由于理想型流水线不是线性的,指令执行过程中可能会产生一些由于相关性造成的冲突,包括数据相关、结构相关、分支相关、Load-Use等等,所以在理想型流水线的基础上还要设计能够消除上述相关性的模块。除此之外,还要考虑到效率问题。根据统计,分支指令占所有指令相当大的比例,若每次执行分支指令时都要判断分支结果、计算分支目的地址,效率想必比较低下。为此,需在IF段的PC和指令存储器之间增加分支预测模块,每生成一个新的PC就和分支预测模块中存储的PC作比较,若为分支指令地址,则直接取出对应的分支指令的目的地址
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:计算机组原课设.doc
    链接地址:https://www.zixin.com.cn/doc/4312861.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork