MIPS处理器的SystemC实现_孙伟斌.pdf.pdfVIP

  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文档。上传文档
查看更多
MIPS处理器的SystemC实现_孙伟斌.pdf

MIPS 处理器的SystemC 实现 学号:1060379012 孙伟斌 B0603791 前言 这篇文档讲述了如何使用 SystemC 来实现一个多周期的流水 MIPS 处理器。通过对 MIPS 处理器的五步进行描述,本文详细阐述了作业中的 SystemC 实现如何来构建者五步流 水中的每一个细节。对于流水中的一些问题,如 Hazard 等的处理,本文中也在讲述流水实 现时作了具体的解释。作业中使用 SystemC2.1 来实现一个 MIPS 的逻辑仿真。 第一节 SystemC 概述 SystemC 是一个 C++库,里面定义了一系列的类,用来对系统进行建模,SystemC 主要 是对系统进行逻辑验证。工业中构建芯片或系统,可以先使用 SystemC 来建立它的逻辑模型, 经过各方面验证正确后可以进行实际设计。 SystemC 构建的系统是由Module 构成的,Module 就是系统的各个模块,模块可大可小, 而模块与外界交互的通道是 Port ,端口。端口负责输入输出,就像我们的I/O 端口一样。模 块内部的处理流程被构建为一个 SC_METHOD ,输入的数据经过其加工作为输出。而模块 之间通过 Signal,信号来进行连接,我们看线路图上的连线,就可以认为是SystemC 中的 Signal。 我们使用 SystemC 来构建 MIPS,就是用模块来模拟CPU 的各个部件,用端口来模拟部 件的输入输出,用信号来模拟部件之间的连线。 第二节 MIPS 架构 这一节来介绍要模拟的 MIPS 的架构图。MIPS 是一个RISC 处理器,因此David Patterson 的教材中提到的一个典型的MIPS 的特性都体现在我们要实现的CPU 中,我们参考 李亚明的设计来实现MIPS: 1 / 11 这个设计实现的是一个五级流水的 MIPS ,这五个步骤分为IF 、ID/Reg 、EXE 、MEM 与WB 阶段,是一个简单的流水设计。我们在这个系统上不仅实现了流水,还实现了解决 Data Hazard 的Forwarding 以及解决Control Hazard 的Delayed Branch 技术。 作业中用 SystemC 实现MIPS 就是按照上图,每个部件成为一个 SC_MODULE 来构建, 实现中的每个模块与图中的部件对应,端口与图中端口对应,而信号线也差不多是一一对应。 在接下来的讲述中会不时地牵扯到实现中的代码,我用这些代码来解释 MIPS 的执行过程。 第三节 所实现的MIPS 指令 这一小节来介绍作业中实现的 MIPS 的指令,总共有三种指令:运算、控制与Memory 访问指令。具体细节参见下表: 2 / 11 就像一个典型的 MIPS 一样,上述指令定长、操作数位置固定、简单的内存访问、并且 控制指令的目的地址计算简单。作业中的 MIPS 实现与上面的二进制代码兼容,因此可以运 行用上面的代码编写的指令程序。 第四节 五步流水的SystemC 实现 在这一节中,将结合作业中的 MIPS 实现来讲述MIPS 的五步流水。 一 IF 阶段 3 / 11 图中IF 阶段用红色表示,我们看到PC 确定指令地址,然后到指令存储器里取出指令, 放到 IF/ID 流水寄存器中,此外,通过多路复用开关Mux 把 PC +4 的值,也就是下一条指令 的地址也存入IF 流水寄存器。这个时候我们注意到,上面的那个 Mux ,在实现中称为 MUX_Branch ,代码如下: // mux for branch, PC+4 or PC+offset. SC_MODULE(MUX_Branch) { sc_in bool Is_Branch; // branch or not, BR

文档评论(0)

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

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

1亿VIP精品文档

相关文档