内嵌ARM9E内核系统级芯片的原型验证方法
扫描二维码
随时随地手机看文章
【摘要】随着大容量高速度的FPGA的出现,在流片前建立一个高性价比的原型验证系统已经成为缩短系统级芯片(SoC)验证时间,提高首次流片成功率的重要方法。本文着重讨论了用FPGA建立原型进行验证的流程、优缺点以及常用方法,并结合对一款内嵌ARM9E SoC 所进行的原型验证,说明这一方法在SoC验证中的应用。
【关键词】:SoC,验证,ARM9,FPGA,快速原型,软/硬件协同验证
1 引言
目前系统级芯片(SoC)规模飞速增长,嵌入式软件也日趋复杂,但是仿真软件的发展却相对滞后,设计团队已经意识到软件仿真的局限性,这种仿真不仅很难提供系统仿真所需要的仿真性能,而且非常耗时。随着大容量高速度的FPGA的出现,建立一个高性价比的原型验证系统要比其他的方法更加便宜和快速。
2 SoC原型验证的基本流程和优缺点分析
对于SoC设计的流程,每个公司都不尽相同,大的芯片公司都形成了自己特有的成熟的流程与方法。而对于加入原型验证之后的SoC设计基本流程如图1所示。在本文提到的一款内嵌ARM9E用于移动对讲通信的SoC开发中,采用的就是如图1所示的流程。在定义完软、硬件接口,明确软、硬件之间的通信协议后,就可以开始进行SoC的软、硬件设计了。如果采用全定制的FPGA原型,此时原型可以同软、硬件一起并行开发,因为全定制的原型开发也需要相当长的时间,如果在软、硬件设计完成之后再设计原型,那么不但不会加速设计过程,反而会延长设计周期。
FPGA在密度、速度方面和ASIC的相似性使得基于FPGA的原型运行速度接近于现实速度,不仅可以大幅度提高系统仿真速度,而且还可以使我们尽早地来测试SoC的应用软件,从而达到节省整个SoC开发时间的目的。此外,由于FPGA可配置,所以原型还可以重复使用,是一个性价比很高的验证方法。但是,随着SoC的快速发展,FPGA原型验证SoC的方法也存在着很多需要解决的问题。
主要的问题可以分为两大类,第一类问题是ASIC和FPGA的结构不同,我们必须把ASIC风格的代码移植到FPGA上。ASIC设计者可以使用支持不同语言结构的综合工具,但是FPGA的综合工具不一定支持不同的语言结构,比如说VHDL中的generic语句用来使设计保持可配置,而FPGA综合工具有可能会把generic语句替换为常数。另外,ASIC中有些模块是全定制的而并非可综合的代码,比如说存储器模块,而FPGA只能接受门级网表,这样的定制模块就只能用模型仿真,从而降低模拟速度。还有,ASIC设计中为了降低功耗经常使用门控时钟(gated clock),但是在FPGA中却不允许,需要用Synplicity CerTIfy工具将门控时钟转为相应的FPGA设计。
第二类问题在于FPGA的资源有限,主要体现在容量、时钟资源和I/O资源的有限上。业界有条规律,FPGA的等效门除以八才是FPGA上能实现的ASIC的门数,比如说一个200万门的Virtex II XC2V2000只能装下大约25万门的ASIC设计。这条规律是设计师应该心中有数的,笔者在设计FPGA原型的初期就由于在这个问题上面的忽视而导致了后期容量不够更改设计的问题。图2给出了业界估计的ASIC和FPGA工艺所能实现的等效门数,我们可以看出,未来设计者将不得不面对ASIC和FPGA之间的容量鸿沟。由于FPGA的资源不够,而目前SoC的规模又很大,要实现原型我们必须把系统划分到多片FPGA中去,这就带来了布线困难以及FPGA I/O紧张的问题,因为SoC的系统总线一旦暴露出来,就会使用FPGA数以千计的I/O,而目前最先进的FPGA也仅仅能提供一千多个I/O,步线困难又会引出原型可靠性的问题。目前解决的方法是采用管脚复用和用Synplify Certify对系统进行最优分割。FPGA厂商也通过集成专用的乘法器,片上RAM来改善FPGA资源紧张的问题。
3 SoC原型验证的常用方法
设计者有很多种方法可以建立起SoC原型,但是每种方法都有其优缺点及适用范围,所以设计者会从相关芯片和公司资源的实际情况出发,决定出性价比最高的方案。流行的方法有以下三种:
3.1 全定制的SoC原型。
设计者依据SoC的设计规范,在印刷电路板(PCB)上实现SoC的原型系统。全定制的SoC原型系统在很长一段时间内,是唯一的建立原型的方法,它容易使用,直观而且可以运行于一个比较高的频率,适用于小规模SoC。
3.2 通过SoC原型代工公司建立原型。
从2000年开始,硅谷出现了这种SoC原型代工的公司,这些公司以其专业性和快速的SoC原型设计时间使得很多芯片大公司成为他们的客户,但是这种方法也意味着昂贵、不可重用和不可控。
3.3 使用专业的SoC原型开发套件。
这是目前开发大规模复杂SoC原型的流行方法。由第三方公司提供功能强大、可重用的FPGA硬件平台、设计流程和相应的PC端应用程序,设计者可以用开发套件尽可能相似地实现SoC的原型。在这一市场有四种主要的产品,分别是ARM集成板(integrator)、APTIX MP3/MP4、Logic Express SoC-V20和FlexBench。
4 一款内嵌ARM9E SoC原型验证实例
笔者参与了清华大学与意法半导体合作开发民用对讲机(Digital Walkie-Talkie,简称DWT)芯片的项目,主要负责DWT SoC的原型验证。这款芯片用于409MHz免费频段的无线对讲通信,具体频段为409.750MHz到410MHz一段,分20个信道,信道间隔12.5kHz。这款芯片的设计思想是将处理器、各种外设、语音ADC/DAC以及射频电路全部集成到一块芯片中去,是一款典型的基于ARM的数模混和SoC。
我们选用了ARM946E-S处理器,它兼容DSP指令,使用0.13 m工艺的ARM946E-S最高可以运行于210MHz。由于其具有较强的运算能力,所以在软硬件划分的时候我们将这个系统的算法都用软件来实现,而协议由硬件来实现。模拟部分主要是音频和射频两个ADDA和24M与397.875M两个混频器。系统中基于AMBA的外设主要有DMA控制器、矢量中断控制器(VIC)、多端口存储控制器(MPMC)、实时时钟(RTC)、同步外设接口(SPI)、通用I/O(GPIO)和功耗管理单元(PMU)等。
在系统软硬件划分完毕后,就可以考虑采用何种方法建立此SoC的原型了。从芯片实际的情况出发,由于算法均由软件实现,所以相应的硬件开销较小,数字部分除了ARM9E处理器外,均为基于AMBA总线的外设,没有非常复杂的数字模块。而且SoC中的大部分外设都采用的ARM提供的IP,我们可以事先获得这些外设的ASIC门数资料,然后再留有冗余地估计出自己开发的模块的ASIC门数,最后得到的结果是在0.13 m工艺下大概数字部分总共20万门的规模(除去处理器 ),这完全可以用一块FPGA装下整个设计。意法半导体可以给我们提供ARM946E-S的测试片,所以从成本等多方面衡量,笔者放弃了用ARM integrator的想法,而是用全定制的方法建立SoC原型。
DWT SoC FPGA原型的框图,因为是数模混和的SoC,所以很难做到原型与SoC完全一致,笔者在设计中尽可能做到两者的最大相似。 在原型板上模拟部分的音频ADC和DAC由TI的一片Codec芯片代替,而射频部分则另外设计一块射频板,在原型板上只留与射频部分的接口。基于AMBA的外设全都放入一块200万门的Virtex II XC2V2000的FPGA中,AHB总线暴露在板上与ARM946E-S相连。无线对讲系统对实时性要求很高,由于只有一片FPGA,所以系统可以运行于一个比较高的频率上,我们可以验证系统的实时性能。板上的模拟模块均有开关控制,可以随时从系统中断开,而且FPGA可以同PC通过串口通信,所以整个原型系统不仅可以通过实际器件获得输入激励,还可以通过计算机输入激励获得结果进行比较,所以具有较好的可控性和可观测性。在选择FPGA的时候应注意FPGA提供的时钟引脚数目和存储单元容量一定要满足系统要求,在设计原型的时候应该将FPGA多数的I /O引到测试针脚上,以方便设计者使用逻辑分析仪进行信号的实时采集和分析,也可以让信号发生器产生一些特定的信号以供系统调试使用。
在这个FPGA原型板上笔者进行了模块功能验证和系统功能验证。对于DWT SoC中的各个模块,在进行原型验证前已经在工作站上通过了模块功能验证,模块功能验证程序是由ARM提供的APTEST系列的C程序,平台是RTL和行为级的混和,仿真结果通过自己编写Tube debugging displayer进行监控,这一过程非常耗时。笔者在FPGA原型板上使用了相同的APTEST的C程序,仿真结果通过ARM AXD Debugger CONsole进行监控。仿真速度上FPGA比工作站上的仿真快了3个数量级,在此种验证中我们发现了很少量的bug,说明在工作站上面跑的模块功能验证较为成功。
在FPGA原型板上进行系统功能验证才是进行原型验证真正的意义所在,由于硬件的可观测性较差,系统功能出错却很难找到问题所在,所以笔者编写了PC端的程序,其目的是产生每个系统功能程序所需要的激励样本,将其通过UART送入FPGA,并将取到的结果与期望样本进行比较。不过这种方法只能验证基带部分,基带部分接口的速率较低,可以通过UART与计算机实时通信,笔者通过此种方法成功地验证了数字基带部分的功能和实时性。对于系统全功能验证,是通过连接射频板进行的,在验证完基带部分后,用原型板与射频板的结合,实现整个系统原型。在笔者对DWT SoC进行的原型验证过程中,发现了一些严重的在工作站仿真时却没有发现的RTL bug。
五 小结
用FPGA建立SoC原型进行验证是一种高性价比的SoC验证方法,基于原型的速度接近于现实速度,可以使我们找出其他验证方法找不出的错误。软件仿真之后建立SoC的原型进行验证已经成为绝大部分芯片公司采用的方法,没有经过原型验证的SoC,会被认为是没有经过充分验证的SoC。