MIPSI指令集32位CPU设计实例-Read.pptVIP

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

MIPSI指令集32位CPU MiniCore设计实例 赵继业 处理器特性介绍 全32位操作,32个32位通用寄存器,所有指令和地址全为32位 静态流水线(3~5级) Forwarding技术 片内L1 Cache,指令、数据各4KByte,硬件初始化 没有TLB,但系统控制协处理器(CP0)具有除页面映射外的全部功能 MIPSI指令格式介绍 1、R类型指令(寄存器) OP rs rt rd shamt funct 2、I类型指令(立即数) OP rs rt Imm 3、J类型指令(跳转) OP target MiniCore所支持的指令 算术逻辑类指令 ADD、ADDI、SUB、AND、OR、NOR、SLL、SRL、SRA 访存类指令 LW、SW、MTC0、MFC0、CACHE(0、1) 跳转类指令 J、JR、BEQ 其他指令 ERET、TEQ MiniCore流水线结构 单条指令运行步骤 Fetch Decode(取指并译码) Issue(发射) Execute Writeback(执行并写回) 存储系统体系和管理 ? 操作方式:用户态、核心态 MiniCore功能模块结构 取指模块(Fetch) PC- 指令Cache - 指令- 译码 PC的来源:PC+4(通常)、跳转指令(目标地址)、例外处理(例外处理向量入口地址、EPC内容) 停止取指的情况(发射堵塞、特殊指令) 跳转指令的Delay Slot(延迟槽) 指令Cache的实现问题(同步与异步RAM) PC的来源 停止取指的情况 发射堵塞(Issue_stall) 出现指令有相关情况 特殊指令(Special Instruction) 有些情况需要停止取指,如Cache0、跳转指令(无转移预测)、出现取指地址错例外等等 如何处理 设置PC的有效位,一旦停止取指,有效位置无效 跳转指令的延迟槽(Delay Slot) 延迟槽的意义 MIPS指令系统的规定,由编译器自动处理 处理跳转指令的方法 遇见跳转指令就停止取指,直到获得目标地址(流水线的要求) 采用分支预测 J指令的处理,在ALU模块中计算转移地址 原则:必须保证处在延迟槽的指令被运行! 指令Cache对取指模块的影响 RAM的同步、异步问题 同步写入,读出的同步、异步问题 指令Cache必须保证一拍结果返回 采用异步读RAM的处理方式(正常方式) 解决方法 提前将PC的内容放入RAM中 相应的考虑 指令Cache的比较对象(必须一致) 设置PC备份寄存器 设置pc_in_en,决定PC是否可以进入寄存器 pc_valid的考虑(实际上提前一拍) 译码模块(Decode) 由MIPS指令转化为CPU内部操作码 内部操作码的定义 应当分组(ALU、MEM、Branch) 分组示例 ALU:ADD - 00001、SUB - 00011 MEM:LW - 10000、 SW - 10001 Branch: J - 11000、BEQ - 11010 发射模块(Issue) 静态流水线 遇到相关情况就停止发射,直到相关解决 相关情况分析 ALU和跳转指令一拍完成,即使出现这些指令间的相关也没有问题 MFC0、MTC0、CACHE0和CACHE1指令也是一拍完成 访存指令中的LW、SW指令执行时间不确定,其后指令有相关必须停止发射 停止发射也必须同时停止取指 发射模块中必须考虑的问题 两个功能部件(ALU和数据Cache) 区别:执行指令的周期数不同 结果:指令的结束顺序被打乱(前面访存指令的结果尚未返回,后面与之不相关的ALU指令已经完成) 必须考虑:一旦指令(包括ALU指令和访存指令)运行中出现例外,如何处理? 修改发射策略 访存等待 一旦遇到访存指令,必须等访存指令结果返回后,下一条指令才能发射出去 优点:顺序发射,顺序结束,例外处理比较简单方便 缺点:指令间没有相关也必须等待! 乱序执行时的精确例外处理 两种方式: 乱序发射,顺序结束(龙芯-1采用的方式) 指令执行完后,等待,直到允许写回才能写入到寄存器中 顺序发射,乱序结束(MiniCore采用的方式) 分析乱序结束出现的情况 一条访存指令运行结束前,之后数条ALU指令已经执行完毕 MiniCore的解决方式 ALU指令出现例外 停止取指,停止发射,停止写回,直到访存结果返回之后,进入例外处理程序 访存指令出现例外 例外种类,地址错例外 处理方式,判断地址错例外的时机,一拍完成 优缺点 优点:不出现前后指令相关则无需等待 缺点:例外处理比较复杂 Forwarding技术 什么是Forwarding? 发射时必须判断寄存器内容是否可用 运算指令即便一拍完成,该指令结果也必须在下一拍对发射可用 实现对运

文档评论(0)

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

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

1亿VIP精品文档

相关文档