华南农业大学
计算机组成原理 课程设计报告
小组成员:
刘兆坤(学号201330320313),郑文龙(学号201330320330) 吴立钦(学号201330320320)
教 师: 黄 沛 杰
提交日期: 2015年 11月28日
华南农业大学信息学院
课程设计
实验题目 课程名称 5级流水无cache CPU实验 计算机组成原理 起止日期 2015学年第一学期 学号 201330320313 学生姓名 刘兆坤 成绩 学生资料 学号 201330320320 学生姓名 吴立钦 成绩 学号 201330320330 学生姓名 郑文龙 成绩 无cache流水CPU的分析与改造 1. 理解无cache流水CPU的工作原理,明确系统总体结构和数据通路图,分析解决各种相关用到的主要信号,以及详细分析各流水段的功能和实现。 实验内容 2. 将16位的指令系统改为8位,设计新的指令系统,并修改相应的数据通路。 3. 修改规则文件(cpu.txt),并编写测试程序验证系统改造的正确性。 项目/分数 系统分析水平 系统改造水平 内容完成\\理解情况 优 □ □ □ □ □ 良 □ □ □ □ □ 中 □ □ □ □ □ 及格 □ □ □ □ □ 不及格 □ □ □ □ □ 评 语 与 成 绩 (小组) 设计报告撰写质量 课程设计总结情况 附加说明: 成绩 (优/良/及格/不及格) 指导教师 黄沛杰 2015 年 12 月 2
1、基本信息
1.1 小组基本信息
自评 学号 姓名 所做工作简述 (组长打分,百分制) 刘兆坤 在这次的实验中,我主要负责的工作是解决控制相关。另外,我还负责对Ex,Ma流水段模块进行理解和修改,并将五段流水合并起来进行调试和修改。接着我就对自己负责的那部分代码进行修改,然后把全部代码合并起来进行最后的校验。校验成功后就交个另一位组员编写测试代码进行调试,最后通过和组员在用测试代码的测试过程中完善了CPU的一些错漏并进行修改。 95 201330320313 201330320320 吴立钦 我主要负责无cache流水CPU的控制90 相关的解决和处理,把涉及到的关键信号,用来解决该相关。还有对IF,ID流水段的分析,理解该流水段的功能。最后就是对负责的部分的代码的修改,把16位的改成8位的。在这些工作完成后,再配合组长和另外一名组员来对CPU的调试和修改,并找出其中的毛病和缺点,进行修改。 201330320330 郑文龙 我所做的工作有数据相关冲突以及相关冲90 突解决办法。流水段的处理我负责wb回写模块的相关分析和相关信号分析,代码修改包括执行模块、访存模块、旁路处理模块、常量定义文件等。然后是对代码的调试和测试,测试过程中我负责书写测试代码,并实现正确的结果。负责实验报告最终的书写和修改。
3
1.2 总体基本信息
一开始,在老师的指导下阅读《课程设计实验要求》、《实践报告》、授课PPT等文档,了解5级流水无cacheCPU实验的原理和过程。回顾冯·诺依曼CPU结构及工作原理;回顾《计算机组成原理》课程综合实验;总结开放式实验CPU设计思路和方法;回顾流水线工作原理,并归纳流水线设计思路 ;无Cache流水线中结构冲突、数据相关、控制相关的解决办法;设计无Cache的5段流水线。第二周,我们各个小组向老师大概的介绍我们的设计,并阐述思路和做法。
第三周,查阅实验代码中的各个vhd文件,理解某一具体指令的执行流程;并对照ppt“无Cache流水线中结构冲突、数据相关、控制相关的解决办法”部分和实验代码,找到这个部分中解决三种相关分别涉及到的信号在代码中的位置,进而了解他们是怎么样用来解决各种相关的。第四周,在组长的带领下,编写一个说明某一条指令的执行过程的报告,并且解释相关的解决的办法。还有,我们在理清个流水段的功能和算法后,阅读代码,对流水段进行详细的分析,并提交实验报告。第七周,我们统一到机房对设计进行测试和讨论后续修改,而且让老师对我们进行中期检查,了解实验的进程。在前面几周的准备后,我们已经对5级流水无cacheCPU实验有了足够的了解了。接下来就开始将理清从16位转8位的处理方式和方法各组重新设计指令系统、数据通路图,将16位的数据通路改为8位。对于修改后的新指令系统,我们用表格写出修改后的指令系统的各指令的汇编语句、操作码、功能描述、指令类型等。
经过前面几周的准备后,我们已经完成了这个设计,唯一的是还没有对它进行测试。因而,我们在接下来的两三周里都在规定的时间里到机房进行测试,在发现问题后和其他的组员一起探讨并修改。有些问题实在搞不懂,我们便去询问老师的意见,再对设计进行完善。最后我们的最后一步就是撰写总的实验报告,对我们的这个实验进行总结,发现我们其中不足和问题,为下一次的成功做好铺垫!
4
2、系统总体结构及数据通路图
画出整个系统的总体结构图,并在图上标出有修改的部分。
使用文字对系统架构图以上各部分标注进行详细说明。 整个CPU由以下几个模块组成: ? 取指模块(IF):给出内存地址,读取指令并送入指令寄存器,为下一级准备数据。
由于PC控制模块处于取指模块中,因此控制相关的检测也置于取指模块。 ? 译码模块(ID):读取寄存器值和指令译码。我们采取一次译码,逐级传递的方式,译出后几
级流水所需的控制信号和数据(如立即数等),在每次时钟上升沿到来时送入下一级。实际上,结构相关、控制相关、数据相关的检测都可归入译码部分。考虑到“相关检测”涉及到的信号分属不同阶段以及整体结构的清晰性,我们将“相关检测”独立出来。 ? 执行模块(Ex):完成算术逻辑运算、计算有效地址和提供数据通道。 ? 访存模块(Ma):选择地址线的数据来源和数据线的流向。访存和取指在功能上是独立的,但
CPU对外只有一条地址线和数据线的事实决定了访存和取指是相互联系的。当执行LOAD/STORE指令时,地址线由ALU送入“访存段”的值提供;取指时,则由PC提供。当写内存时,CPU内部数据送数据线;当需要读内存时,CPU往数据线送高阻。 ? 回写模块(Wb):选择回写数据源和根据写使能信号wRegEn将数据回写到寄存器堆; ? HazardDetectUnit模块:检测结构相关; ? ForwardingUnit模块:检测数据相关。
执行模块(Ex)
执行模块的主要工作是完成算术逻辑运算、计算有效地址和提供数据通道。执行模块的主体部分是运算器,其总体结构和两级流水是相似的。主要不同之处在于增加了旁路模块,这是由于五级流水存在数据相关需要旁路处理。
5