3.1动态调度指令CPU的模块设计.docVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3.1动态调度指令CPU的模块设计.doc

详细设计 PAGE PAGE II : 动态调度流水线CPU 详细设计 (版本号V0.01)2cm(文档控制编号 宋体居中 五号字)xx-000-xxx00-1.0.0 年.月.日2 2cm (文档控制编号 宋体居中 五号字) xx-000-xxx00-1.0.0 年.月.日 2cm 小组成员:郭家华、李博杰、李帅 2cm(文档控制编号 宋体居中 五号字)xx-000-xxx00-1.0.0 年.月.日2cm2013年 4 月 13 日 2cm (文档控制编号 宋体居中 五号字) xx-000-xxx00-1.0.0 年.月.日 2cm PAGE 1 1引言 1.1编写目的 本文档旨在为之后CPU具体实现提供框架性设计。经过各种CPU方案的仔细调查研究,其中包括程序静态调度技术,VLIW,超流水线,多发射技术,考虑课程时间限制,我组决定采用下列新的设计方案: 采用自行设计的动态指令调度算法,参考Tomasulo算法,但改动较大,设计并用verilog实现所设计CPU。 1.2课题背景 本课题为中国科学技术大学计算机体系结构课程的课程实验,意在加深学生对CPU设计的理解,并锻炼学生的动手能力。 1.3参考资料 《Computer Architecture: A Quantitive Approach》 《计算机体系结构》,胡伟武等著 课上老师提供的各种资料 2 CPU各阶段设计 2.1阶段汇总表 动态调度指令CPU 阶段名称 功能简述 Fetch Instruction 完成分支预测和取指功能 Issue 重排序指令解决指令相关并发射 Execution 实际执行指令 Commit 交付执行完毕的指令,保证精确异常 2.2 CPU设计图 图 2.3阶段命名规则 根据《Computer Architecture: A Quantitive Approach》中的命名规范命名。 2.4 各阶段的详细功能 2.4. 1 Instruction Fetch(后简称IF) 本阶段主要完成分支预测和取指功能,主要模块由PC和IMEM(指令cache)组成,分支预测和取指功能均在PC模块中完成,下分条描述。 2.4.1.1 分支预测 对于高度流水并乱序执行的CPU来说,分支预测十分重要,缺失或糟糕的分支预测方案会导致流水线断流,造成CPU性能下降。 本次设计我组拟采用采用Gshare分支预测算法,它在龙芯2号、AMD、Intel Core处理器中被广泛采用。(参考文献:胡伟武等《计算机体系结构》,Wikipedia) 该算法使用一下两个硬件结构,其被继承在PC这个模块中: 转移模式历史表(Pattern History Table):两位饱和计数器,预测成功就加1(加到3为止),预测失败就减1(减到0为止)。如果高位为1就预测跳转,否则预测不跳转。 转移历史寄存器(Branch History Register):移位寄存器,处理器执行转移指令,就把BHR左移一位,最低位转移成功则填1,转移失败则填0,m位的BHR记录了m次转移历史。用BHR的m位值去索引2k个PHT项。 2.4.1.2 取指 此阶段的取指指令即是普通的取指指令,Mem通过PC值取出对应的指令,送入Issue阶段的指令队列中(Instruction Queue),当指令队列已满时,暂停取指。但值得说明的有以下几点: 我组的设计采用Havard结构,使用单独的指令cache,取指阶段从指令cache中取数。 取指不采用多发射等技术,一次仅取一条指令。 PC的值的默认下一个值是NPC,即PC + 4,但会被分支指令,异常,中断等改变。 2.4. 2 Issue 本阶段主要完成对指令队列中的指令进行重排序,以解决指令相关,并发射指令,当指令被发射时,将被执行的指令已获得所有操作数的值,不存在相关问题。本阶段的模块主要由指令队列(Instruction Queue,后简称IQ)、Read Operand模块(后简称RO)、寄存器文件(Register File,后简称RF)和commit阶段的Reoder Buffer(后简称ROB)组成,ROB的功能在commit阶段描述,此处仅描述其在issue阶段起到的作用。IQ根据RF和ROB给出的反馈信息,完成上述所有功能,下进行详细描述: IQ为FIFO队列,存在一定数目的表项,具体数目在实现完成时根据实际情况确定。IF阶段的指令被取得后被放入IQ中。 表项内容的格式如下: Issued(是否已发射) Dep1(操作数一是否可获取) Dep2(操作数二是否可获取) 指令 IQ完成对先IQ中的所有指令进行重排序,从而达到减少指令执行过程中等待周期数目的目

文档评论(0)

shiyouguizi + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档