登录站点

用户名

密码

处理器验证方法(科普类)

已有 115 次阅读  2012-08-30 16:54   标签处理器 
处理器仿真:声明本人不做处理器,只是为了用处理器仿真环境验证外设功能,所以要了解处理器仿真流程。所有内容仅代表本人观点,由于都是在地铁中用手机写的,没图,但是有真相,请多多包涵。

        处理器是MIPS架构的,实际调试需要了解MIPS系统的运行机理,出了问题至少应该知道这么定位。应该先介绍下Mips基本架构,包括指令集,寄存器,mmu tlb,协处理器,调试等各部分,但时间限制,以后慢慢介绍。

        处理器验证方法包括功能验证和随机验证.功能验证就是写一段汇编代码,代码的构成最好能够包含所有处理器支持的指令,并能测试处理器的各个部件,对于MIPS架构至少需要测试ALU,乘除法单元,协处理器,寄存器读写,访存,中断,EJTAG等,并将结果以可视的方法输出,这样执行完这段代码,基本的功能就可以验证了。在功能验证的基础上就可以进行随机验证了。

        为什么要进行随机验证呢?我们知道精筒指令集架构处理器流水线执行中为了提高流水线效率要求一条指令占用一个周期,但指令间又不可避免产生相关,表示为一条指令的执行结果要被他的下一条指令使用,或者两条指令需要操作同一个寄存器,那么后一条指令必须等待前一条指令操作完寄存器在进行操作,你可能会问那不是正常吗,前一条指令操作完后一条指令才操作,但是对于一个五级以上流水线的处理器,如果是写寄存器在第五阶段完成,下一条指令需要等待四个时钟周期才能取得有效数据。那么处理器的效率很低,实际设计中有很多设计方法保证最小情况的流水线阻塞,动态调度就是最有效的一种。有兴趣的可以参考相关书籍。

        好了,前面说了这么多就是想引出一个问题,就是处理器指令之间的组合会影响处理器执行,那么验证就要保障处理器在各种指令组合下都能执行正确。笔者计算了一下要想将一个支持二百条指令的处理器验证情况就是二百的阶乘,这么多指令组合即便是当今性能最强的计算机不是亿年数量级时间也可验证不完。

        那么问题出来了,即然处理器验证这么难,但英特尔每年还是要卖上亿片处理器,他们是如何验证的呢?凡事总有办法,这就需要某种方法,像抽样啊等,就是用某种算法产生随机指令,这些指令间的相互关系随机的,其运行情况一定程度上反应真实的情况,剩下的就是随机指令量的问题了。

        还有第二个问题,我们假设这些指令都产生了,几百亿条也好,万亿条也好,每条指令执行结果的正确性怎么验证呢?总不能一条条挨着对吧?现实的方法是这样的:我们用c语言写一个和我们要验证的处理器一样支持相同指令集的类处理器,将产生的随机指令首先在类处理器中跑一遍,将结果存在文件中,在testbench中将处理器的实际运行结果和保存的运行结果相比较,这样就可以方便的完成测试了。

前文提到的书籍先推荐两本:see mips run

MIPS处理器架构文档 www.mips.com

计算机体系结构 胡伟武,陈云霁    计算机体系结构方面的书有很多种,都是教科书,只有理论很少有实践,这本书是真正做过处理器的人写的,很有参考价值。 

上一篇: stm32应用例程 下一篇: 砸车愤青很崩溃——中国的芯片制造能力!

分享 举报