
导航:X技术最新专利计算;推算;计数设备的制造及其应用技术
本发明针对传统EDA仿真工具中断后无法恢复状态导致重复仿真耗时的问题,提出分段保存关键节点数据并采用多线程并行验证的解决方案。通过在仿真过程中分段保存寄存器、存储器等状态数据,后续仿真时各线程可从不同时间点恢复电路状态并行验证,显著缩短整体仿真时间。
逻辑电路的发展,硬件描述语言获得广泛的应用,其中使用最多的是verilog HDL。EDA (Electronic Design Automatic)技术是以计算机为工具,使用硬件描述语言
完成设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真等工作。EDA
技术的出现,极大地提高了电路设计的效率,减轻了设计者的劳动强度。 随着大规模逻辑电路的广泛应用和逻辑功能的日趋复杂,其验证逻辑功能是否正
确的测试方案也变得非常繁杂和烦琐。如此,对于逻辑设计验证工程师来说,如何提高效率
判断逻辑电路功能是否正确这一问题愈加突出,它也成为当前逻辑设计电路的仿真验证技
术领域的一大难点。 验证逻辑设计电路是否正确可以分为软件和硬件两种验证方案 —是验证人员采用EDA仿真验证软件,模拟电路的工作情况,根据仿真波形和时
序的结合来分析和判断仿真结果是否正确。 二是采用硬件验证法,通过采用CPLD或FPGA等可编程逻辑器件进行硬仿真,直接 验证需要测试的逻辑设计电路。利用诸如FPGA等可编程逻辑器件来进行逻辑验证时,需要 拥有数量巨大的逻辑门的FPGA、成本高、周期长。而且必须在基于FPGA的硬件电路完成调 试的情况下,才能用来验证待测的逻辑设计电路;即使基于FPGA的硬件电路完成调试,一 旦待测的逻辑设计电路出现逻辑错误,该测试环境给出的帮助信息较少,对于逻辑错误的 定位也非常困难。因此通过EDA仿真工具验证电路仍然是电路设计必不可少的阶段。
另外,在芯片级的集成电路设计的过程中,除了考虑芯片的性能之外,也需要将芯 片的上市时间要求考虑在内,这就直接涉及到了芯片的验证时间问题。但是,现有的EDA工 具在中断此次仿真后,不具备在下次仿真中恢复此次仿真环境的功能,因此每次仿真都需 要经过相同的向量激励后,电路才能运行到所需的状态,从而耗费了大量时间,严重影响了 芯片的设计进度。
本发明公开一种集成电路仿真测试方法,通过将原本单线程的仿真流程分割成多 个可并行执行的仿真线程,大幅减少了仿真的测试时间。
读入集成电路的网表,根据寄存器、锁存器、RAM、 ROM各自的数据生成对应的列表 文件,由列表文件按verilog硬件描述语言生成保存现场数据任务和恢复现场数据任务;
在不同仿真时间点时调用保存现场数据任务,对所指定的不同仿真时间点的仿真 现场数据进行保存; 产生多个相互独立的仿真线程,每个仿真线程均启动仿真软件,调用恢复现场数 据任务将每个仿真软件所仿真对应的集成电路初始化为在不同仿真时间点时保存的现场 数据,并启动各个仿真线程进行仿真验证。
其中,保存仿真现场数据的步骤包括 先停止集成电路中所有的时钟信号,并保存各时钟信号的状态; 然后分别保存各个寄存器、锁存器、RAM和ROM的当前数据。 其中,寄存器、锁存器、RAM和ROM的仿真现场数据分别保存在不同的文件中。 其中,寄存器、锁存器、RAM和ROM的仿真现场数据均保存在一个文件中。 其中,寄存器、锁存器、RAM和ROM的仿真现场数据以二进制格式保存在文件中。 其中,调用恢复现场数据任务将集成电路初始化的步骤包括 停止集成电路中所有的时钟信号; 以保存的仿真现场数据恢复各个寄存器、锁存器、RAM和ROM的状态值; 恢复集成电路中所有时钟信号。 与现有技术相比,本发明具有如下有益效果 本发明将仿真测试时间分成多个仿真段,对所指定的不同时间点的仿真现场的数 据保存,再启用多线程仿真程序,每个线程恢复一个时间点的仿真数据开始仿真测试。由于 每个仿真线程的电路均被初始化为不同的时间点的状态,因此每个仿真线程只需仿真验证 两个相邻时间点之间的状态,而这些相互独立的各个仿真线程可以并行执行,因此极大地 縮短了仿线是本发明对仿真时间分段的示意图;
如图1所示,本发明将仿真测试时间分成多个仿真段,对所指定的不同时间点的 仿真现场的数据保存,再启用多线程仿真程序,每个线程恢复一个时间点的仿真数据开始 仿真测试,使原本单线程的仿真流程分割成多个可并行执行的仿真线程,大幅减少了重新 仿线所示,本发明的实现可以分为以下三个阶段第一阶段数据准备 此阶段主要是生成各种数据类型的列表,以及根据这些列表生成数据保存(save) 和数据恢复(restore)的verilog task,具体流程如下 (1)、通过EDA软件读入集成电路的网表(netlist),根据寄存器(register)、锁存 器(latch)、随机存取存储器(RAM)、只读存储器(ROM)等各种类型的数据,生成各自的列表文件。 (2)、根据这些列表文件,按照verilog的语法,生成save和restore的verilog task文件。 (3) 、 save task的主要任务是保存当前数据到指定的文件,主要是通过verilog HDL的$fdisplay系统任务实现。 (4) 、 restore task的主要任务是根据保存的数据文件恢复之前的仿真环境。 Restore task比较复杂,它需要一系列的操作,使用了 verilog HDL中的force、 release、 $fSCanf等语法和系统任务。第二阶段数据保存(save)阶段 结合图3所示。在verilog亂的testbench中include之前产生的save task, 以单线程方式在仿真测试切割的各个时间点调用任务save—task分别保存各个时间点的 仿真现场数据。save_task的任务内容如下
endtask 从save—task的内容可以得知,当testbench调用此任务时,第一步是停止时钟信 号的变化,实现方式的例子如下force design, elk = 1 b0。时钟信号是同步设计电路 中重要的信号,它的变化会触发其他信号的变化,因此把时钟停止后,整个集成电路就处于 稳定的状态,后面所保存的register、 latch、 RAM、 ROM等数据也就是稳态的数据了 。
保存时钟信息之后,分别用不同的task对register和latch数据环境进行保存, 每个task均使用标准的verilog的系统任务$fdisplay实现数据保存的功能,因此在不 同的硬件平台和不同的仿真软件中都能使用,具有良好的通用性。实现方式的例子如下 $fdisplay (file_id,〃 %b〃 , design, register. Q); 接着,使用同样的系统任务实现RAM的数据环境的保存,实现方式的例子如下
$fdisplay(file_id,〃 % b〃 ,design. RAM. mem[i]); 同理,ROM的数据也可以用此方式保存下来 $fdisplay(file_id,〃 % b , design. ROM. mem[i])。 其中,寄存器、锁存器、随机存取存储器和只读存储器的状态可以保存在同一个文 本文件中,也可以根据不同的类型,保存在各自独立的文本文件中,一般是以二进制格式保 存在文件中;且使用标准的verilog硬件描述语言实现数据的保存,适用于所有EDA仿真工 具。 第三阶段数据恢复(restore)阶段 结合图4所示。首先,产生多个相互独立的仿真线程,这可以通过在计算机的操作 系统中开启多个命令行窗口 ,然后分别在各个命令行窗口中启动仿真软件。其中仿真线程的数量可根据save阶段的分割时间点的数量来决定,使一个仿真线程对应以一个时间点 保存的数据开始进行仿真测试。 其次,初始化各个仿真线程的电路状态。每个仿真线程的电路都会被初始化为不 同的状态,每个线程的电路初始状态对应一个save阶段的时间点的状态。这个初始化的操 作通过调用任务restore—task实现,所需的数据来源于save阶段所保存的文件。
endtask 从restore—task的内容可以得知,当调用此任务时,第一步操作是需要初始化寄 存器的数据。使用verilog语言中的force语句把数据赋值给寄存器的各个端口 ,实现对 寄存器状态的初始化,实现方式的部分例子如下
force design, register. CLK = save_reg_CLK[N]; 除了寄存器,还需要初始化锁存器,它的原理跟寄存器是一致的,也是使用force 语句把数据赋值给锁存器的各个端口 ,实现对锁存器状态的初始化。 寄存器和锁存器的数据初始化后,就可以用verilog语言中的release语句撤销 前面的force语句,但对时钟(clock)端口的force语句需要依然保持,因为一旦撤销它 们,所有寄存器都会动起来,但暂时还有其他内容需要初始化,所以还需要等待。实现方式 的例子如下releasedesign. register. Q。 初始化所有RAM的数据。使用verilog语言中的$fscanf或$readmemb系统命令 把这些仿真模型内部的变量都初始化为save阶段所保存的数据。实现方式的例子如下 $fscanf(file_id,〃 % b ,design. RAM. mem[i]); 同理,ROM的数据也可以用此方式初始化$fscanf(file_id, 〃%b〃, design. ROM. mem[i]); 此时,所有的数据都初始化完毕,但系统依然没有进入工作状态,因为clock还 没有release,所以最后的步骤就是释放所有的时钟信号。实现方式的例子如下release design, register. (XK。 至此,整个仿真电路已经被初始化为save阶段特定时间点的状态,接着可以以这 个初始状态为起点,按照正常的方式开始仿真验证的工作。 由于每个仿真线程的电路均被初始化为不同的时间点的状态,因此每个仿真线程 只需仿真验证两个相邻时间点之间的状态,而这些相互独立的各个仿真线程可以并行执 行,因此极大地縮短了仿真的时间。
一种集成电路仿真测试方法,其特征在于,包括步骤读入集成电路的网表,根据寄存器、锁存器、RAM、ROM各自的数据生成对应的列表文件,由列表文件按verilog硬件描述语言生成保存现场数据任务和恢复现场数据任务;在不同仿真时间点时调用保存现场数据任务,对所指定的不同仿真时间点的仿真现场数据进行保存;产生多个相互独立的仿真线程,每个仿真线程均启动仿真软件,调用恢复现场数据任务将每个仿真软件所仿真对应的集成电路初始化为在不同仿真时间点时保存的现场数据,并启动各个仿线所述集成电路仿真测试方法,其特征在于,保存仿真现场数据的步 骤包括先停止集成电路中所有的时钟信号,并保存各时钟信号的状态; 然后分别保存各个寄存器、锁存器、RAM和ROM的当前数据。3. 根据权利要求2所述集成电路仿真测试方法,其特征在于,寄存器、锁存器、RAM和 ROM的仿真现场数据分别保存在不同的文件中。4. 根据权利要求2所述集成电路仿真测试方法,其特征在于,寄存器、锁存器、RAM和 ROM的仿真现场数据均保存在一个文件中。
5. 根据权利要求2所述集成电路仿真测试方法,其特征在于,寄存器、锁存器、RAM和 ROM的仿真现场数据以二进制格式保存在文件中。
6. 根据权利要求1所述集成电路仿真测试方法,其特征在于,调用恢复现场数据任务 将集成电路初始化的步骤包括停止集成电路中所有的时钟信号;以保存的仿真现场数据恢复各个寄存器、锁存器、RAM和ROM的状态值; 恢复集成电路中所有时钟信号。
一种集成电路仿真测试方法,其包括步骤读入集成电路的网表,根据寄存器、锁存器、RAM、ROM各自的数据生成对应的列表文件,由列表文件按verilog硬件描述语言生成保存现场数据任务和恢复现场数据任务;在不同仿真时间点时调用保存现场数据任务,对所指定的不同仿真时间点的仿真现场数据进行保存;产生多个相互独立的仿真线程,每个仿真线程均启动仿真软件,调用恢复现场数据任务将每个仿真软件所仿真对应的集成电路初始化为在不同仿真时间点时保存的现场数据,并启动各个仿真线程进行仿真验证。本发明极大的缩短了仿真的时间,提高了仿真效率。
针对大规模路网仿真中并行计算导致的冲突车道处理异常问题,提出基于预设分层策略的解决方案。通过将相邻道路、冲突交叉道路及满足制动距离条件的道路分层处理,并结合子路网分割与线程错时计算,确保冲突车...
针对传统多线程下载启动延迟问题,提出通过试探请求预获取文件大小后立即划分下载区间段的解决方案。在获取文件大小后,立即启动除首段外的其他区间下载,首段下载在达到预设长度后终止,从而实现下载任务的...
针对自动化测试中多线程协作效率低、版本更新检测滞后的问题,提出基于多线程通信的终端仿真方法。通过初始化模块启动TCP服务与版本检测线程,运行模块递归遍历配置树并并行执行终端线程,消息循环模块实...
1.计算机网络安全 2.计算机仿线.网络安全;物联网安全 、大数据安全 2.安全态势感知、舆情分析和控制 3.区块链及应用
Copyright © 2014-2026 pg电子模拟器科技有限公司 (pg电子官方网站) 版权所有 保留一切权利 | B2B硬件制造与测试技术支持