一种可配置的EDA仿真验证方法
扫描二维码
随时随地手机看文章
仿真测试是EDA设计过程中验证逻辑功能正确性的重要手段.由于验证的复杂度随设计规模成指数增长,对于占用5000以上逻辑单元(约十万等效门)以上的EDA设计而言,其激励信号的注人与仿真结果的分析难以手动进行.设计者通常需要借助EDA开发环境外的其他工程工具,或结合其他高级程序设计语言来完成.
然而,上述研究中的激励数据虽具有可配置的特点,但注人这些数据的触发方式却缺乏可配置能力.例如龙芯2号的仿真验证[41使用了可配置的随机程序生成器 CPRG(Configurable Random Program Generator)来产生测试向量,从而大大提高了效率和测试覆盖率.但由于仅使用了定时触发的方式,该系统仅在仿真初始化阶段进行注人,类似的案例还有.这种定时触发的仿真方法与仿真过程缺少交互,因此与真实系统存在较大差别.特别是对于需要根据仿真过程中某个信号的状态来注人故障或干扰信号,以检测电路的容错能力的案例,采用定时触发方式往往难以达到所需的验证效果.
采用事件触发方式可以解决定时触发的种种弊端.然而要实现触发事件的可配置,必须先实现测试台代码的可配置一 个典型的例子是信号处理系统.Husmann等采用了Perl脚本编写的配置管理模块来管理事先编写的测试台和测试向量,并维护仿真结果记录.配置管理的引人使得该系统具有一定的灵活性.但由于测试台仍需事先编写,不能称为完全的可配置仿真验证系统.
本文提出一种针对十万门以上规模集成电路的可配置仿真测试方法,使用配置脚本作为输入,通过CTG(Configurable Testbench Generator)自动产生测试台代码,实现了触发事件的完全可配置.本方法生成的测试系统中注人逻辑与数据文件分离,仍然可以通过Matlab等工程软件生成测试向量.实验表明该方法可避免重复编码带来的低效率和可靠性的降低,并节省保存仿真状态所需的存储空间.
1 可配置的仿真验证系统
1.1 基干CTG的仿真验证环境
基于可配置测试台生成器 CTG的仿真验证环境是实现可配置的事件触发方式的前提,它包含信号库、配置脚本、测试台生成引擎、激励数据库和仿真验证环境,如图1所示.信号库定义了待测系统的信号集合.配置脚本定义了激励、触发模式、事件与记录点,这些信息构成测试台生成规则,实现了触发事件的可配置.测试台生成引擎是系统的核心,它根据配置脚本指定的规则自动产生测试台代码,测试台代码中包含对被测电路的引用.激励数据库包含所需注人的数据以及其所对应的相对于触发点的注人时间,激励数据仍然可以按照上述的方法产生,对此本文不作深人讨论.
1.2 数据结构
用于描述可配置测试台产生规则的信息存储在信号库和配置脚本中,这些信息的逻辑结构如下.信号库定义了信号集合,对于给定的被测电路C,信号库中的信息固定不变.有如下定义:
定义 1 信号集合
定义2 激励(Stimulation)
定义3 触发模式(Trigger)
定义 4 时间触发事件
定义5 跳变触发事件
定义6 记录点
1.3 测试台生成
1.3.1 测试台结构
由CTG生成的测试台具有如下结构,如图 2所示
对于待注人信号sig_i,或待存储信号集合U_i,其触发条件具有如下形式:
对于待注人信号sig_i,其注人任务具有如下形式:
对于待存储信号集合U_i, 其存储任务具有如下基本形式:
为了便于分析所存储的数据,实际保存数据时往往加人一些附加信息,如当前时间、信号编号等.具体格式取决于所使用的离线分析工具,本文对此不进行具体讨论.
1.3.2 注入事件解析
由于不能在多个always块中对同一信号赋值,因此必须遍历激励集合,并按照待注人信号提取触发条件加人同一always块中.激励信号注人事件的解析围绕激励集合S展开,算法如下:
在复位状态,各激励s未激活,此时s.i被驱动为指定的缺省值s.v,加人初始化任务.CTG对于S中给定的每个s=(i,v,c,P,Ts),生成如下集合:
对于T1中的各触发模式t1,CTG生成 t1.e对 应的计数器,将计数器的超时信号加人s.t触发条件的if语句中,并在if程序体中按照t1.d的设定生成对应的注人任务.
对于T2中的各触发模式t2,CTG生成t2.e.u与t2.e.j比较的表达式,加人s.i触发条件的if语句中.对于t2.e.m不为循环触发方式时还需生成对应的计数器,同时将计数器未满条件加人if语句.最后在if程序体中按照t2.d的设定生成对应的注人任务.
1.3.3 存储事件解析
系统仿真状态的保存同样受事件触发,但并不要求在同一块语句中进行存储,因此其结构相对简单.算法如下:
CTG对于R中给定的每个r=(Er,w,U1)生成如下集合:
对于E1中的各事件e1,CTG生成对应的计数器,将这些计数器的超时信号组成逻辑"与"表达式。
对于E2中的各事件e2,CTG生成e.u与e.j比较的表达式,并与超时信号"与"表达式一起组成逻辑"与"表达式.该表达式加人r.Ur触发条件的if语句中,并在if程序体中生成对应的存储任务.
2 实验验证及分析
2.1 测试对象与实验环境
可配置仿真测试框架被用于自主研发的1553B总线协议IP核、基于类EIA架构的双核SIP处理器模型、可重构的ATPA处理器模型等仿真测试中.以1553B总线协议IP核为例:该IP核采用VerilogHDL编写,由45个模块组成.这些模块经过编译生成时序仿真库,并被包含在仿真测试台的顶层模块中.需注人的激励信号包括:来自外部处理器的读、写、片选信号、数据总线、地址总线、DMA响应信号、以及 1553B总线数据.
需要保存的状态信号包括:存储器数据、1553B总线数据、关键寄存器数据(状态字、命令块指针、当前命令字)、以及系统主状态机的状态变化数据经过映射,该 IP核在 Altera的 Cyclone EPIC12器件中占用2882个逻辑单元,主时钟频率为12MHz.
仿真试验在使用IntelPentium42.6GHz处理器、512Mbyte内存的PC机上进行,使用Quartus115.0软件进行综合与映射,使用 ActiveHDL.6.2软件进行仿真.
2.2 实验结果分析
在IP核的每种典型配置下,BC模式和RT模式除了正常传输外,分别需要83套和60套故障激励注人逻辑.在这145套激励逻辑下分别注人1024组数据进行了实验.实验系统中测试台生成引擎采用 C++语言编写,代码量约700行.仅需通过修改配置脚本便可使用CTG生成上述测试台.其中配置脚本规模在50~70行,所生成的测试台代码约为250~350行.所需编写的代码量对比如图 3所示.
从图3可以看出,随着仿真次数的增加,使用基于CTG的仿真验证系统所需编写的代码量远小于不可配置的仿真验证系统.
使用基于CTG的事件触发进行仿真状态存储可节省存储空间.以实验系统在BC模式下完成1024组正常数据传输为例,保存三种典型信号的仿真状态所需的存储空间对比如表 1所示(不包含存储时戳所需的空间.)
表1中的数据表明,对于不需要频繁存储的仿真信号,采用事件触发机制可大大减少存储空间的开销.值得注意的是,动态产生测试台后需要重新编译仿真库,从而产生了额外的时间开销 在2.1节介绍的实验环境中,仿真库的编译用时小于1s,仿真初始化需17s,每仿真100组数据约用时700 900&由此可知仿真过程累计用时约289.2~369.8h,其中编译仿真库的开销小于145s,可忽略不计.
3 结论
本文提出的可配置仿真验证方法适用而不仅限于十万门以上的超大规模 EDA设计,相对于已有研究具有下列特点:
(1)基于事件的触发机制,更接近真实系统
(2)可配置,自动产生测试台代码,减少编码量提高可靠性
(3)节省保存仿真状态所需的存储空间同时,由于具有可配置能力,一旦完成测试台生成引擎仅需修改信号库和配置脚本就能用于不同电路设计的仿真验证.