芯片有别于其他产品,一个显著特性就是它的一次性工程费用(NRE)非常的高昂。芯片内一个微小逻辑错误可能导致上千万美金损失。这也意味在流片前,工程师需要花大量时间利用数字仿真器来验证芯片,保证其功能的正确。
仿真技术是芯片验证必不可少的一个环节,它是保证芯片功能正常的关键手段。仿真主要是通过计算机结合测试激励(stimuli)来模拟芯片在真实环境下的运行状况;同时工程师可以通过各种调试手段来判断运行结果是否符合预期。数字仿真器主要是针对数字电路的仿真,设计工程师需要应用硬件描述语言(HDL)来设计电路,而验证工程师也需要用抽象层的HDL来搭建测试环境;仿真工具需要解释编译这些HDL代码,并计算出仿真结果,以便工程师检查结果。
图一 数字仿真器流程
二十年前,一百万门的设计可以被称作超大规模集成电路,而今数千万门的电路已经司空见惯。数字芯片集成度越来越高,伴随的设计验证语言和方法学不断推陈出新,各种应用平台也层出不穷。这一系列的技术发展都给数字仿真器带来了前所未有的挑战。设计具有竞争力的片上系统(SoC)需要合理地利用各种高精尖的技术。对于数字仿真器来说,它面临的挑战不仅仅是芯片规模上的增长,还有伴随而来的一系列问题,包括:算力受限、调试效率低下、平台单一化等。芯华章在数字仿真器领域做了深入的研究和探索。放眼未来,我们认为一款好的数字仿真器应该具备以下条件:
一、语义解析的合规性(conformity)
仿真器对语法正确解析决定了它能否正确理解设计意图,同时也可以避免相同的编码在不同的仿真器下产生不同仿真结果。设计仿真器最大的挑战在于对HDL语法全面的解析。Verilog标准(IEEE1364)和SystemVerilog标准(IEEE1800)定义的这两种语言的语义非常的复杂,关键字众多,各种组合情况近乎无穷。如SystemVerilog中的interface,在interface中可以做assert,可以在其中使用task,function,还可在其中扩展各种modport等。要做到全面完整的测试,需要在构建仿真器的测试用例时考虑的语法的各个方面,以及各种边界场景。
通常人们认为,计算机语言是形式化(formal)的表达式,不存在歧义,但实际上,IEEE标准中存在很多模糊的界定,尤其在对发生竞争冒险(race condition)时的行为没有明确的规定,处理这些问题,就需要开发者的经验和技巧。
二、良好的性能 (performance)
衡量仿真器的性能量化指标之一是:运行(runtime)时的CPU处理速度和内存消耗。现今的大规模集成电路动辄上亿门,如果还是依赖传统的仿真技术,当设计和环境的规模一旦达到某个数值,大部分商业仿真器性能都会显著下降,造成效率低下。这其实是因为传统的工具基本都是基于单机(single host)构架来设计的。在网络互联日益发达的今天,分布式数据库和多核并行计算等理论越来越成熟,仿真器也必须考虑并利用这些新技术取得更多性能上的突破。
三、卓越的调试功能(debuggability)
调试的重点在于可观测性和可控制性。在数字电路调试中可观测性表现形式有多种,如波形,记录文本(log file),电路图(schematics),源代码,事务级数据表图等等。调试工具的核心功能是针对不同的场景提供能够各种有效的数据表现形式,并在不同数据形式间的可以同步数据标注(annotation)。此外,降低工具的使用门槛,让初级用户非常快速地掌握调试技术,并且提供通用语言的二次开发的接口,也是优秀的调试工具需要着重考虑的。
四、支持跨平台(platform-independent)
传统的EDA工具大多数和单一CPU构架耦合度高,例如某些EDA工具仅支持x86的平台。一旦需要迁移到另一种平台上,所需要的研发工作量是巨大的。如今,处理器生态越来越多样化,未来的平台不再是某个单一处理器的平台,降低EDA工具对底层CPU构架的耦合度,可以让用户更加有效地把工具部署在任何平台上,也让产品有更多应用空间,比如:在移动端的和云端的交互仿真,在移动端和服务器端的联合仿真,利用FPGA和GPGPU的异构加速仿真等。
LLVM的存在为跨平台提供了技术支撑。LLVM是Chris Lattner博士于2000年开发的一种编译器的框架系统,他的目的在于提供一种可以适配多平台的编译系统,让前端语言和后端目标平台解耦。利用LLVM框架开发的仿真软件,理论上可以适配到任意目标平台,甚至可以部署在分布式操作系统上,产品应用范围显著扩大。
芯华章在跨平台方面做了研究探索,2020年11月,芯华章的仿真器利用LLVM技术已经成功将软件运行在国产CPU架构上。这一步工程量看似不大,但是现实意义非凡:这是中国EDA企业率先利用LLVM技术实现跨平台支持,从某种意义上,它说也推动了传统保守的EDA行业朝着更开放的技术领域拓展。
五、特定场景应用(scenario-based applications)
不同的应用场景对仿真器有不同的特殊要求,先进的仿真器需要具备各种场景下所需的功能。在大规模设计中,整个设计和验证环境的编译时间可能高达数十小时,这种速度在调试频繁的设计初期是无法接受。因此,如果仿真器能够只针对修改过的设计部分进行重编译,而保留大部分没改变已有编译结果(snapshot),那么重编译一次的时间就会大大减少,效率就得以提升。这种技术通常叫做:增量式编译(incremental elaboration),或者分区式编译(partition compilation)。
消费电子芯片中涉及到大量的冷复位和热复位,在这些复位情况下的不定态传播(x-state propagation)很大几率会造成芯片潜在的非确定性(indeterministic)功能故障。因此,检查不定态(X-state)在复位情况下的传播极为重要。传统的仿真器通常仅能在门级仿真(Gate Level Simulation)时检查这些功能,但是门级仿真已经属于设计后期,且仿真效率低下,即便检查出问题再修改,对项目进度来说也是压力巨大。如果仿真器能够在设计前期对RTL就能快速检查不定态传播,那么就可以节省更多后仿真时间。
当然,还有很多其他的场景应用,如基于多进程多核加速,基于异构系统的仿真等,囿于文章篇幅这里不能一一展开,我们将在今后的文章中择机叙述。
图二 先进仿真器
数字仿真在浩瀚的科学海洋只是某个分支,但也是一个技术密集型的多学科的领域,它涉及到各种技术,包括:编译原理、数据库、运筹学、形式逻辑、拓扑学、控制理论等。
在十四五计划指导下,我们深深意识到科学技术,尤其是EDA技术,从来没有像今天这样深刻影响着国家的前途命运。芯华章在EDA仿真技术领域不断探索进取,同时也深感肩负使命的迫切,我们非常愿意和业界专业人士交流分享,共同成为新时代科技创新的排头兵!
全部0条评论
快来发表一下你的评论吧 !