SimpleScalar 模拟器的体系结构框架

来源:互联网 发布:荆州知满天 编辑:程序博客网 时间:2024/06/01 17:49

SimpleScalar 模拟器模拟的是一个超标量,5级流水的RISC体系结构的CPU模型,提供了从最简单到超标量乱序发射的不同的模拟程序。sim-outorder 是一个具有完整功能的模拟程序。在sim-outorder中使用了几乎所有的模拟资源,在阅读代码之前对模拟的体系结构和模拟资源充分的了解,能够大大提高下一步工作的效率。


SimpleScalar 中的虚拟的资源部件:
SimpleScalar模拟器采用的是执行模拟(对整个系统的模拟有若干种方法,这个也需要我以后慢慢整理,另外一个比较重要的系统模拟器是RSIM),所以在模拟器中要对大部分传统的RISC-CPU部件进行说明,诸如寄存器文件,存储系统(cache+mem),TLB,功能单元,保留站,再定序缓冲,分支预测部件,和5级流水线等。同时针对模拟的需要,在几乎所有硬件资源的软描述中都添加或简化了许多功能。建议在阅读的过程中首先对SimpleScalar模拟器乱序执行sim-outorder的执行流程有粗略的了解,千万不要求细求全。然后重点阅读模拟器中重要的数据结构,阅读的时候需要体系结构方面的背景知识,尤其是关于保留站、cache和分支预测的知识。


首先简要说明SimpleScalar模拟器的主要流程:

SimpleScalar是使用C语言编写的,主流程从main.c文件中的主函数main()开始。阅读main()可以看到它主要在作模拟前的准备工作,而真正的模拟执行跳转到sim-outorder.c文件中模拟主函数sim_main()。函数sim_main()主干是一个死循环,它的流程完全模拟流水线的处理过程,不同的是由于模拟的需要将流水的顺序逆转,以使逻辑上的流水站不要提前处理要下一拍才能处理的指令。模拟结束通过信号量返回主函数main(),退出。

看比较直观的模拟主函数sim_main()流程:

首先是一些准备工作,然后开始进入5级流水:ruu_commit()→ruu_writeback()→ruu_issue()→ruu_dispatch()→ruu_fetch(),然后在每个流水周期结束后,cycle需要加“1”。
SimpleScalar是采用的执行方式模拟,所以在模拟器中要对目标处理器+存储器的几乎全部单元进行说明,而被模拟程序就在这些虚拟的部件上“运行”,从中得到统计分析所需的数据。要理解SimpleScalar的代码,首先要熟悉它所定义的虚拟部件。模拟器中的资源部分是处理器的映像,部分是模拟所需引入的特有资源,不好直接映射到硬件资源。下面分别说明这些资源在模拟器中的描述方式:

 模拟器运行的可执行文件描述:
在模拟器中运行的是由SimpleScalar附带的编译器sslittle-na-sstrix/gcc或者ssbig-na-sstrix/gcc编译生成的。这种可执行文件并不是通常意义下的可执行文件,在现有的操作系统平台下这种文件是无法用shell直接执行的。它的可执行性是相对模拟器程序而言的,除了附带在./tests/目录下预先生成的文件外,其他的模拟程序都需要将c源代码使用上述的编译器得到可以在模拟器中运行的“可执行”文件。
 主存mem描述:
主要的文件是memory.c和memory.h文件。SimpleScalar模拟的主存结构实际上是一个段页式结构。但是这种段页式结构与现代操作系统中的段页式结构有明显的区别。首先它仅有一个虚拟进程(被模拟执行的可执行文件),其次每个段的基地址都是固定的,在mem.h中使用了几个宏定义来规定所有段的起始地址。
 cache描述
在SimpleScalar中cache是可选的。一级指令cache、二级指令cache、一级数据cache、二级数据cache和指令TLB与数据TLB,都是使用相同的cache结构来描述。与实际中的cache结构不同的是,模拟器中的cache与TLB在大多数情况下都不包含实际的指令或数据,它们仅仅记录当前结构中对应cache/TLB记录的标记,用于模拟cache算法。
 分支预测部件bpred描述
在现代处理器中分支预测是必不可少的,也是设计中比较复杂的部分。在SimpleScalar的乱序执行模拟sim-outorder中,控制指令的Next_PC在流水线的ruu_dispatch阶段计算出来,分支预测则是在取指阶段完成,预测的下一指令PC值信息跟随当前指令流入流水线。分支预测的模式有四种:
 BPred2Level: 两级分支预测模式
 BPred2bit:简单的两位直接映射预测模式,(分支目标缓存BTB)
 BPredTaken:分支发生静态预测模拟
 BPredNotTaken: 分支不发生静态预测模拟
 另外可以使用两级和位预测联合的预测模式(BPredComb)
 寄存器reg描述
SimpleScalar模拟器映射的是MIPS芯片的寄存器文件结构,包括的寄存器资源有:
 整数寄存器文件:regs_R[0:31];
 浮点寄存器文件:regs_F[0:31];
 记录乘/除法结果的寄存器:高位regs_HI,低位regs_LO;
 浮点条件码寄存器:regs_FCC;
 程序计数器:regs_PC;
 功能单元池 res_pool描述
对于处理器中的算术逻辑部件ALU、乘除法部件和浮点部件SimpleScalar使用资源池来描述。
 保留站RUU_station描述
保留站是乱序执行的核心,在SimpleScalar中保留站叫做寄存器更新单元RUU(Register UpdateUnit), 它的作用比一般意义上的保留站要强,它和保留站链接机构RS_link(Reserve station link)一起可以形成指令提交队列,完成在定序缓冲的功能。
 这儿是对整个系统做简单的介绍,至此起码可以知道模拟器中拥有哪些东西了。
接下来就需要对各个虚拟资源部件做比较详细的分析介绍了。

原创粉丝点击