- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
- KMP算法中next数组的计算方法研究.pdf
- KnowledgeBased Methods for Reliability Analysis of Electric Power Networks.pdf
- Konqueror嵌入式浏览器的分析及移植详解.doc
- KNN综述.ppt
- KPMG笔试题.doc
- KPT 滤镜使用方法.doc
- KSSESA转正试题题目收集.xls
- K文件—关键部件的信息情况.doc
- L(+)酒石酸发酵工艺优化.pdf
- k_幂零矩阵的一个新性质.pdf
- MINITAB术语中英文对照表.doc
- MIS总体设计及其评审验收的探讨.pdf
- Mitigation Effect of Finite Larmor Radius on RayleighTaylor Instability in ZPinch Implosi.pdf
- Mispeed和ARM交叉编译环境的搭建.doc
- MITO measurements of the SunyaevZeldovich Effect in the Coma cluster of galaxies.pdf
- Mitra《数字信号处理基于计算机的方法》翻译武汉大学孙洪.pdf
- MIT课程 分析.doc
- miui制作锁屏教程.docx
- Mitsunobu反应及其在药物化学中的应用.pdf
- MixedLogit模型及其在交通方式分担中的应用研究.pdf
文档评论(0)