利用AMSVF进行混合信号SoC的全芯片验证
扫描二维码
随时随地手机看文章
近年来,消费电子和个人计算市场的发展增加了对于更强大且高度集成的芯片产品的需求。低成本、低功耗、复杂功能和缩短上市时间的需要,让越来越多的IC设计采用了SoC技术。
在这些SoC电路中,由于包含了数据转换器、功率管理及其它模拟电路,混合信号设计不可避免并且越来越多。在混合信号SoC设计中,为了避免芯片重制,确保一次性流片成功,全芯片混合信号验证成为关键一环。传统上,在复杂的混合信号SoC设计中,不同团队分别独立验证数字和模拟组件,并不进行全芯片综合验证,其主要原因是没有足够强大的EDA工具能够完成这个重要任务。如果所有的集成和接口问题仅仅是在测试平台中进行解决,那么就很难保证混合信号的正确连接和时序匹配。随着高速SPICE模拟工具的出现,设计师可以在晶体管级执行整个芯片系统的验证,这是一种较为有效的验证方法。该方法具有很高的精确性,并能够进行全面的功能分析,但是,此类验证只能在设计周期的最后阶段进行,那时所有的单元和定制元件都已经设计完成。此外,这种方法的模拟速度有时非常缓慢,必须动用大量的硬件资源。对于包含微处理器、ROM、RAM、PLL等的复杂系统,由于其元件数量实在过于庞大,高速SPICE模拟器几乎不可能执行全芯片晶体管级模拟。
然而,验证方法学应该贯穿于整个设计阶段,而不能仅局限于最终的验证阶段。同时,为了实现混合信号SoC验证在精确性和速度之间的完美平衡,设计师可能想要保持某些重要的模拟模块(如ADC、PLL)作为SPICE网表,而其它部分为Verilog行为级模块。这时,设计师可以选择使用晶体管级电路去替代特定的行为模块,并及时高效地继续设计验证过程。
为了实现精确而快速的全芯片验证,全新的模拟解决方案应运而生。
AMS Designer与AMSVF
作为新一代的模拟器,AMS Designer基于Virtuoso Spectre和Ultrasim Simulator以及Incisive Unified Simulator引擎的可靠技术,是一种单一核心(Single Kernel)的混合信号模拟器。它提供了两种模拟求解器——Spectre和Ultrasim,并支持几乎所有的语言和SPICE网表规格。Ultrasim求解器性能较高,有着堪比SPICE的精确性,并且容量几乎无限,因此较适合大型全芯片设计。
虽然AMS Designer为DFII流程提供了友好的图形用户界面,然而对于混合信号验证,多数设计师更需要该应用在命令行模式下执行全芯片验证。其原因不仅是因为命令行模式提供了强大而方便的批量运行功能,还因为设计本身是基于没有原理图的文本文档,或没有GUI环境。对于这种应用方式,AMSVF(AMS验证流程)更加适合。
AMSVF的应用模式
继承了NC-Verilog,AMSVF的使用支持ncverilog单步模式,它主要面向Verilog-XL用户;而3步模式会调用ncvlog剖析输入文件,调用ncelab构建电路结构,然后调用ncsim模拟器模拟电路。
目前,AMSVF可以为数字测试平台提供支持,其应用模式如图1所示。
图1 AMSVF的应用模式
Verilog/VHDL顶层也可以例示SPICE subckt,对于VHDL测试平台来说,需要提供Verilog wrapper。另外,顶层可以调用其它Verilog/VHDL模块。这种应用模式被命名为“Verilog on top”。中层SPICE subckt也可以例示最底层的Verilog/VHDL模块,这种应用模式被命名为“Sandwich”或“SPICE in middle”。另外,在一些复杂设计中,AMSVF还支持多个“Sandwich”应用模式,如“Verilog - SPICE - Verilog - SPICE - Verilog”。
这两种应用模式对于用户的全芯片验证应用是非常方便的。对于一个纯粹的数字系统设计,为了获得精确的结果,用户可以用SPICE网表替代一些Verilog模块,甚至使用寄生参数以获得更为精确的模拟结果。由于物理元件太多,模拟速度可能会变慢,这时,用户可以在SPICE网表中对基本门电路使用Verilog/VHDL行为级模块。那么,“Sandwich”应用模式就得以实现。这意味着用户可以自由而简单地切换应用模式。 funcTIon ImgZoom(Id)//重新设置图片大小 防止撑破表格 { var w = $(Id).width; var m = 650; if(w< m){return;} else{ var h = $(Id).height; $(Id).height = parseInt(h*m/w); $(Id).width = m; } } window.onload = funcTIon() { var Imgs = $("content").getElementsByTagName("img"); var i=0; for(;i