对于服务器芯片组设计来说,要考虑到所有可能的测试组合决非人的能力可为,也没有足够的人力和时间来编制和调试我们能够想到的所有测试项目。随机测试模式生成工具可以解决这个问题,但是,对多处理器服务器来说,合法的事务处理序列比可能的输入序列少得多。本文提出一种加快设计验证的方案,为中国从事网络服务器芯片设计和验证的工程师提供一个思路。
Robert Quinn
首席执行官
Network Virtual Systems
在进行大规模复杂ASIC的定义、开发和校验时,需要一种规范和被人们深入掌握的设计方法,只有这样才能达到一次设计成功的目的。在网络虚拟系统公司(NVS),设计初期我们将设计规范所要求的内容反映到行为原型上,并采用各个击破的战略,在高级的行为层次上解决结构问题和设计完整性问题,然后利用RTL仿真来验证设计的正确性。行为模型作为组件使设计人员能够建立灵巧和完整的结构。因此,迫切需要建立符合性能和功能准则的结构,以便在非常宽的工作条件下使设计达到功能正确。
设计流程
在构造设计的早期,要开发一个行为模型来评价不同的结构,描述存储器大小对性能的影响,分析设计参数对性能的灵敏度。结构选定后,要草拟功能需求,描述结构和每一个功能块。在开发每一个功能块的详细描述时,要编写顶层的Verilog代码,它们包括:I/O引脚、边界扫描寄存器、功能块头标、功能块接口以及顶层单元之间的互连。在编写过程中,要将顶层Verilog代码、模型描述和结构文件结合起来对设计进行描述。
接着要实现设计结构,首先编写空模型代码和编辑可再生模型,在实现过程中,要利用一套简单的系统级事务测试方法开发系统级验证框架,以便在编码完成之前进行调试,因而,可以避免模块级测试,只要完成一部分设计,就可以进行系统级测试。在编写模块代码的同时,要根据顶层Verilog代码和对每个模块大小的估计来开发底层规划,使其包含所有的互连信息。
底层规划完成后,利用顶层Verilog代码进行全局布线,并提取布线的全局延时。由于综合工具不能精确估计全程延时,所以不可能达到时序收敛,为此,要在芯片布局和布线完成后进行综合,并利用全局时序实现门级映射以满足时序要求。
结构设计阶段相对独立
设计早期,主要进行结构选项的特征提取(图1)。关键问题在于,建立实现模型细节的过程中不要花费太长时间来评估各个结构选项,为此,要开发芯片结构的分析模型。借助分析模型,才能开发重要结构单元行为的记录驱动模型(trace-drive model)。这些记录是在实际机器上运行的工作负载上收集的地址参考记录,它代表这些服务器的目标市场。这些记录必须大到足以包含工作负载的长期行为,并且每条记录需要存储数千兆位信息。服务器一般以其运行数据库和网络服务器所表现的性能作为比较的基准,因而要从运行基准的机器提取记录信息。
记录驱动模型通常要根据记录来提取工作负载参数。模型把记录解析成具体的事物处理,然后,由模型进行评估以便生成击中/漏失率、替换速率、拷回速率、失效速率和升级成功速率等参数。另外,要为分析模型开发适当的设置准则以便提取工作负载的特征,例如:提取地址记录可以获得周期混合、周期比、数据流密度图和到达速率分布等统计信息。特征提取可以用C语言工具进行。
分析模型利用这些参数和特征数据,为每一个关键工作负载生成性能评估。在每个待评估的结构中,要进一步研究诸如缓存联合特性、缓存大小以及升级策略等单元的性能优势。然后,检查每一个使性能有重大提高的单元,剖析其设计实现和验证的复杂度。要设计和实现这些单元,可能非常困难,进度之缓慢令人难以接受,也可能设计和实现相当容易,但验证非常困难,进度同样缓慢。在此,要平衡新型结构的优点及其相关进度的风险,并平衡诸如更大、更高相关性的缓存、所增加的功耗和成本等芯片结构的性能优势。
如果为上述结构创建一个周期精确的模型,则性能预测将更加精确。建立这样一个模型的任务艰巨且很费时间,验证一个特定的结构还不如用探测工具迅速地评估结构选项。当评估一个千兆位级事物处理记录时,周期精确模型(cycle-accurate model)的性能相对较慢,使我们不能采用“what-if”技术来研究结构选项。在当前的提取水平下可以快速建模,并用很短的时间执行地址记录数据集来建立参数。当评估不同竞争方案的优缺点时,参数的相对精度比绝对精度重要。
在行为级建型时,可以将目标与提取水平相匹配。设计目标是推出一个满足性能和功能要求的结构,该结构可以设计、实现、验证、映射到门电路并满足设计时间的要求。
设计内容
建立了符合性能和功能要求的结构后,就可以把功能分割成几个模块,复用过去设计的模块来增强内部的IP块,并根据经验和计算估计每一个模块的大小,然后根据对模块大小的估计确定底层规划和全局布线设计(图2)。
过去,通常考虑为所有的子模型创建C语言模型,然后将C语言模型编译成微结构的行为模型,该行为模型在外部和模型之间的边界都是周期精确的。C语言模型的优越性在于,在边界处周期精确并且速度高。一个经过编译的C语言模型一旦编译成工作站运行的源代码,每秒能产生数以千计的周期信号,相比之下,RTL仿真只能产生几十个周期。此外,C语言程序员的数目远远超过Verilog工程师的数目,因此,设计实现过程采用C语言模型就相当普遍。
周期精确的C语言模型的实际好处在于,增加吞吐量和快速发现设计错误。在模型之间的边界上,周期精确的C语言模型还可以作为模型级验证的测试工具。
然而,对于一个复杂的结构实现其周期精确C语言模型需要大量时间,因而必须采用各个击破的策略。第一步,利用高级行为模型改进结构;第二步,利用RTL模型检验设计和实现的正确性。两步分析模型方法的好处在于,能产生固定的结构。C语言模型的性能超过了RTL模型,但是与分析模型相比,C语言模型比较慢,且不适用于“what-if”方法的选择和大型记录数据库的分析。
与RTL事件仿真相比,C语言模型更容易发现设计错误。尽管如此,还是要进行RTL仿真以找到实现错误,对RTL验证来说,同时发现设计和实现错误的效率更高。例如:书写顺序的问题可能导致设计错误或者实现错误。C语言模型或RTL仿真能够发现相干性协议误解之类的设计错误,但是只有RTL仿真才能发现由实现错误引起的书写顺序问题。
RTL模型是极好的模型,它具备前向运载和映射到门电路的特性,但是,C语言模型不能前向运载。将C语言模型作为参考模型有助于模块级验证。但C语言模型和RTL模型一样,容易受到技术指标错误和设计错误的影响。通常,基于技术指标的验证和基于技术指标比较的验证是不够的。在模块边界之间精确的C语言模型还不能增强功能覆盖。
通常,仿真吞吐量仅是问题的一个方面。设计进度取决于测试的创建时间、仿真吞吐量、调试时间和实现确定的时间。过去,测试设计和测试实现耗费大量时间,为此,要利用商业测试平台工具自动完成测试工作。测试创建过程自动化,可以减少RTL仿真造成的时间浪费。
投片验证
系统级验证的目的是确认设计和实现的正确性,发现并定位所有的功能缺陷。利用iMODL公司的iControl工具可以实现系统级验证。
在多处理服务器的验证环境中,必须提供仿真数据流以代表各个服务器和I/O总线的状态。通常,仿真数据流相对观察的事物处理点来说呈现独立和异步的特性。但是对特定的仿真目标(例如事务处理冲突或队列满)必须调整和同步这些并发数据流。在此,利用连续的协议监视器来验证设计是否在所有时间都与目标处理器总线协议保持一致。整个验证环境是复杂的,但必须逐渐增加验证的复杂度。当设计开始时,只采用一个处理器,而设计稳定后,就可以增加处理器。
在验证过程中,要用iControl作为测试平台,并用iMODL的某些总线功能模块(BFM)和监视器来代表处理器检查设计与总线协议的兼容性,这样就可以利用模块来扩展测试平台的大小和复杂度。
要增加处理器时,只需在设计中简单地添加一个处理器总线功能模块,并将该模块连接到适当的端口,iControl工具能够处理其余的设计任务。由于不改变测试平台结构就能够增加验证环境的复杂度,从而避免在集成阶段出现死机问题。C语言实现的测试平台还可以极大地减小仿真负荷,这是大型多路仿真必备的重要特性。
利用iMODL工具,可以在高层次上创建复杂的系统级数据流图,还可以在结构级复制观察到的数据流图,或者利用iControl提供的模版产生新的数据流图。在仿真运行过程中,iControl通过产生自我核查事务处理序列来自动实现数据流图。该特性使工程师可以在多工作站上创建多数据流图和实现并行验证,整个过程不受创建新功能测试能力的限制。
因此,验证过程不受错误检测速度的限制。在某次整夜的一系列验证中,iControl能够创建新的测试以增加功能覆盖并识别系统级错误(图3)。为了监视和控制验证过程,要把错误划分成设计、实现、语法、文件、环境和仿真等类型。
建立有效的模型
系统级调试有三种类型的功能测试:回归测试、确定性测试和有效性测试。回归测试包括用于验证故障定位的测试实例和相关故障机制的分类。确定性测试包括所有功能原型的可操作性和大约170个单独的自我核查测试,它运行速度快,是用于故障定位的数据库登记处理器的一个组成部分。系统有效性测试由通用数据流图的高级描述自动产生,系统有效性的自动测试是验证和预投片的关键测试项目。
对于服务器设计来说,要考虑到所有可能的测试组合决非人的能力可为,也没有足够的人力和时间来编制和调试我们能够想到的所有测试项目。随机测试模式生成工具可以解决这个问题,但是,对多处理器服务器的设计来说,合法的事务处理序列比可能的输入序列少得多。如果要从真实错误中分离虚假错误,将削弱所有组合和排列的随机探测的优势。iMODL工具能自动产生和直接利用结构知识,该工具能够充分理解结构以产生和验证兼容协议的序列,因此可以创建针对特定目标的有效性测试方法,并产生我们考虑不到的感兴趣的测试实例。这样的测试覆盖能够突破故障检测上面临的徘徊不前的局面,并根据实际周期与预测设计稳定性的历史数据来推算故障率的曲线。
在结构设计阶段,激励和模型都按照行为来建模,可以把记录分解成事务处理并在记录模型上运行。在系统级验证中,激励表现出行为特征,而设计表现为RTL特征。要用BFM在行为激励和RTL设计之间建立一个桥梁。BFM能够创建我们感兴趣的事务处理序列,该序列独立于实际的应用程序,无论应用程序是否能达到相同I/O事务处理的密度或时序。如果采用全功能模型或指令集对处理器进行仿真,则仿真开销可能巨大。
对大多数的项目,必须经过两个设计阶段,一个是结构设计,另一个是RTL设计。建立有效模型的关键在于,明确要求模型解决何种问题,并缩小模型解决问题的范围。成功的设计策略是各个击破,以便在每个提取层次识别设计目标并减少重叠。
模型的价值和施加在模型上的激励一样。测试平台和激励创建需要时间和设计投入,这些成本有时是隐性的,但是确实存在于设计过程之中。了解验证的所有费用并做出明智的分配计划非常重要,加快验证进度毫无疑问将节省费用。
作者Robert Quinn是Network Virtual Systems公司的CEO,该公司拥有NVS结构和设计的服务器芯片组解决方案。