体系架构仿真

处理器体系架构设计和性能评估离不开各种各样的仿真器,各个处理器设计的公司都有
针对特定架构的仿真器,从最简单的指令集仿真器(如spim),到能仿真硬件行为的性能
仿真器(如simplescalar),再到全系统仿真器以及针对特定目标的如功耗仿真器(wattch
 etc);仿真器实现技术又有分路径驱动,执行驱动等等...

 

仿真器叫做emulator,有的也叫simulator(模拟器),至于这两个有什么区别,我始终
也没搞明白。曾问过一个海龟这个问题,他回答也不十分肯定,只是说emulator偏向于
硬件实现,比如我做一个jtag仿真器,或者fpga仿真asic的功能;而simulator偏向于
软件的实现,比如我写一个C model从软件上模拟整个硬件的行为,功能等。

我曾经对simulator也感兴趣过,不过精力有限,没法在仔细深入研究了。著名的模拟器
simplescalar大家都知道。stanford有个simos项目,也是个类似模拟运行操作系统的项
目,好像很大,有兴趣的可以研究一下。还有什么xcopilot是个palm pda的模拟器。
各种游戏机模拟器,比如我们玩得街机模拟器,ps模拟器都是很牛B的模拟器。好像游戏
机很多都是用m68k系列cpu,ps用的是(mips架构的处理器,如果没记错。)

下面说说模拟器有啥用:
1.硬件系统级设计和仿真。asic设计流程大家一般都知道,前端包括是规范定义,系统级
设计,rtl,验证。对于大系统,为了研究其功能,在设计初期尤其是系统设计时并不
考虑具体电路实现,而是着重对结构和功能进行设计。这时候一般都做一个模型。通常用
C语言实现。用程序设计语言实现好处一个是执行速度快,总比hdl的仿真器处理起来快。
而且程序语言更适合写软件的model.

2.在前端验证时候使用。写完rtl后一般都有verification过程。验证就是要检查你的
rtl代码运行结果是否和你功能定义一致。那么就要写测试向量(test bentch)并让你的
rtl来执行。但执行结果怎么才能知道对与错呢?一个很好的办法就是在实现rtl同时
实现一个软件的模型,就是模拟器,这样,通过软件程序执行你的testbench再和rtl
执行结果比较,就可以发现你硬件代码的错误。

3.为系统性能作评估用。模拟器模拟的粒度并不一样,有的模拟器只是功能验证,只要
功能和硬件一样就可以了,比如模拟cpu执行加法指令,取到指令,直接做加法就行。
但有的模拟器为了更好分析系统性能,就需要更细的粒度,比如指令流水线如何实现,
转移预测,流水线停顿都要进行模拟。有一种叫cycle accurate的模拟器,基本和cpu
行为一致了,可以认为是一个软cpu。
模拟器相对硬件好处就是它使软件,灵活,扩展方便。我可以通过模拟器执行一段程序,
把cpu执行过程的整个trace记录下来,分析哪里冲突比较多,影响性能,这样就对后面
cpu的改进提供的数据。还有就是可以用于检测编译器的性能。假如你写了个编译器,
将你编译器生成的代码用模拟器跑一遍,可以记录下来有多少次转移预测失败,多少次
cache miss等。为你开发更优化的编译器提供指导数据。

4.为软件开发提供硬件平台。现在电子设计都受到上市时间(time to market)的压力,
电子产品开发时间要求越来越短,但复杂程度越来越高,这是一个矛盾。假如你开发一
款cpu,采用asic流程开发,可能需要1年,等芯片生产好了,调试通过,再开发相应的软件,
比如compiler,debugger,os,application可能1年多又过去了,根据摩尔定律,集成电路
18个月频率翻一番,你得产品上市后,距离最初设计2年过去了,估计也要淘汰了.
所以现在软件硬件是协同开发.硬件没做好,没有硬件平台时,就要开发软件.那么在哪里
运行软件呢?就需要一个虚拟的硬件平台.
所以一般在硬件设计时,同时也会做一个软件的模型,并在这个软件模型上,开发针对
这种硬件平台的软件.

搞过arm的人可能都玩过不少arm的模拟器.比如gdb本身就自带一个arm模拟器,uclinux
代码经过一些配置后,甚至直接在gdb里面就可以运行,跟踪,调试.再没有硬件平台情况下
就可以搞os移植,当然,模拟器不能100%反映真实硬件,所以这种移植真正到了硬件板上
还需要经过修改.

5.提供一个通用的平台。我们经常会碰到,比如linux/windows软件互不兼容,m68k/
powerpc/x86等程序互不兼容问题。通过模拟器,虚拟机技术,就可以让你在一个平台下
运行另一个平台的程序。还有java虚拟机,就是一种将java bytecode翻译成各目标机
指令的模拟器,不过它不是在一个平台下运行另一个平台程序,而是把java code
翻译成个种目标的code来运行,有点像模拟器反过来。

有一种技术叫binary translation,就和这些话题相关,在二进制级做到兼容的技术。


期待大家介绍更多仿真器/模拟器话题。
期待大家介绍更多仿真器/模拟器话题。

 

emulator只是提供functional的模拟。各种游戏模拟器都是emulator。

simulator要模拟每个细节的行为,至于到达什么程度,取决于各个simulator。
比如在一个支持microarchitecture精确timing的simulator,我可以设置有几个pipeline
stage,同时有几个instructions可以被issued,control speculation的算法,等等。
同样也可是设置cache的各种参数以及multi-processor中属于不同porcessor 的cache之间
的consistency protocol(i.e. MESI).

主要有两类simulator,一类叫做system simulator,也就是能够真正跑操作系统的,由于
这类simulator的工作量和难度都高,现在只有两个这样的simulator,一个是simos,但是
现在这个项目停了,前景不乐关;另外一个是simics,一个欧洲公司的产品,发展势头强劲

另外一类不能跑真正的操作系统,很多simulator都是这类。用这类simulator,要用这类
simulator提供的compiler编译source code(所以需要源代码),产生能被simulator执
行的trace,然后在simulator上跑。rice的RSIM是一个被广泛接受的microarchitecture的
simulator。

第一类simulator的重要意义在于很多情况下只有把OS考虑进去才能够的到全面的分析,
而且很多商用软件是没有办法或者很困难才能得到simulation trace。但是这类simulator
的缺点也很明显,就是速度。SIMCS所有细节打开,模拟4个processor,大约是真实速度
的1/1000。
Intel,SUN都有自己芯片的simulator,不过一般研究者是没有机会接触到。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值