热度 25
2013-8-19 16:53
2656 次阅读|
5 个评论
芯片系统建模与分析 在最初开始确定一颗芯片的需求之后,需要进行系统分析,确定系统的架构。这个过程的方法,我相信是很多系统架构设计者苦苦思索,一直追求的事情。一般从学习标准开始,了解协议,研究算法,确定整个系统的框架,然后分析各个模块可能存在的行为模式,模块之间可能发生的通信与同步关系。最后逐步落实到可能用以实现该系统的芯片的架构是什么样的。 有很多问题需要在这个过程中,确定下来。如果越精确,对于芯片的设计者来说就越能做出精确无误的,经济实用的芯片。例如,cache需要多大,内存需要如何分布多大的空间,模块之间的互联关系如何,互联关系网络里面的数据流量有多大等等……不是所有的模块都需要互相访问,于是为增加吞吐量,系统分析的过程需要精确地得出哪些模块之间需要互联,否则会多出成倍的互联关系,使得最后系统的实现非常复杂,且面积很大,功耗很大,不可以被市场接受。 但就是这个过程本身要求蛮高,系统架构师设计者们可能都会寻求一些方法来完成。曾经,我也了解过synopsys的类似这方面的系统仿真工具。这样的工具使用的过程,需要基于它已有的模块库来搭建你可能设计出的芯片原型,基于systemC等工具。例如模块库里面内核是ARMXX就选择之,然后matrix是什么version,也选择之,然后有usb之类的模块等等。这样搭建处理的系统,其实有了很多前提条件,就是系统仿真的行为其实是你选择的这些模块的行为的集合体。跟真正你希望设计的系统并不一定能对应上。 那么,用通用的芯片搭建一个系统原型如何。例如,TI的6XXX的芯片如此强大,能用软件实现很多的系统原型机了。这个主意其实比上面那个要接近实际情况很多。但同样的问题是6XXX芯片的内核,例如可以同时发射8条指令,总线,以及他本身芯片所拥有的资源很大程度上确定了这个系统运行的行为模式。当然,确实的一个系统实现后,很多数据已经是可以参考的了,虽然他们存在误差。 所以,在最初的系统分析,架构设计阶段,其实借助与已经存在的仿真工具或者芯片原型机,会获得一些参考数据,但都存在各种误差,例如内核的pipeline不同,中断响应的速度不同,内存访问的速度不同,cache的效率不同等等,误差来自各个方面,精确是很难,只能做个范围。但事实上,我认为这个阶段的评估与分析,确实也不需要特别特别的精确。有一些基础数据做参考即可开始架构设计了。只要不是数量级上的错误就行。那么既然是这样,为什么要花昂贵的代价去购买仿真工具,并花很大的力气在仿真环境上去搭建系统,同样都是成本的。关键是系统架构师是否有足够的经验,知识与技能,包括信心来完成此项工作。 看来这个话题,说起来确实很长。FPGA是否为一个好的方法呢?其实FPGA的验证已经不属于架构设计阶段的内容了,属于芯片验证阶段的内容了。且通常FPGA的作用在于功能验证,性能验证希望在FPGA上做得很完整也是徒劳的。简言之,FPGA上要把完整的复杂的一颗SOC映射上去,可能就做不到;要运行到足够高的频率也存在问题。于是,FPGA能帮助的是已经基本完成设计的芯片的功能验证工作。全系统是不能通过FPGA来得以充分的仿真实现的,这并不是否则FPGA平台在芯片设计和验证过程中的作用,他是不可替代的,但他不是架构设计的工具。 所以,经过几年的学习和尝试,我弄明白了一件事,每个系统设计之初的分析与构建过程,需要的就是你的经验,知识与你自己的建模分析方法,行之有效,且不必付出太大的代价。