(转)提高NC-Verilog仿真效率的技巧 本文回顾了一些NC-Verilog的命令行选项,并说明这些选项如何影响仿真效率。同时,我们也展示了一些技巧,以帮助用户的NC- Verilog在最大效率下仿真一个设计和测试平台。 文中的命令行选项语法采用单步启动的方式(ncverilog +<options>),这些选项也适合多步启动模式(ncvlog, ncelab, 或ncsim)。
安装最新发布的软件
首先确认你是否安装了最新的Cadence LDV版本。自动1996年发布第一版NC-Verilog以来,我们的研发队伍一直把仿真器的仿真效率作为重点来研究。在后来推出的新版本里,不断按各 种设计风格优化仿真器,因此使用最新版本是最有利的。直到2002年2月,最新版本是LDV 3.4(s1)。
使用NC-Verilog内置的profiler
NC-Verilog在仿真引擎内开发了一个profiler工具。该工具每秒中断仿真器100次,并将终端时的结构记录下来,生成一个日志文件。日志文 件里列出了被中断次数最多的模块、代码行和结构类型。这些信息可以帮助你诊断是哪些代码或模块在仿真时耗费了最多的时间。通过修改这些模块,就能提升仿真 效率。
Profiler功能很容易启动,并对仿真只产生非常小的影响。
% ncverilog +ncprofile <other_options> or
% ncsim –profile snapshot_name <other_options>
在仿真结束时,profiler会创建一个日志文件(ncprof.out),文件里列出了profile运行的细节。关于如何利用profiler日志 文件,可参考Cadence在线文档(Cadence NC-Verilog Simulator Help, Version 3.4, Chapter 14)。
禁止时序验证来提升效率
缺省情况下,如果在设计中考虑了时序,NC-Sim将进行标准延迟格式(SDF)的全时序标注(annotation),并在仿真时检查时序。在进行功能 验证时,如果你不需要仿真时序,就可以通过禁止一些时序检查功能来提高NC-Sim的仿真速度。这样虽然不能验证时序,但是提高了仿真效率,减少了仿真内 存需求。
下面是一些用来禁止时序检查的一些命令行。
% ncverilog +delay_mode_distributed +notimingcheck
+noneg_tchk
或
% ncelab –delay_mode dist –notimingchecks –noneg_tchk
下面还列出了关于时序的全局选项:
ncverilog option ncelab option
+nonotifier -nonotifier
Disables notifier register
+notimingcheck -notimingchecks
Disables timing check
+delay_mode_unit -delay_mode unit
Delay 1 simulation time unit
+delay_mode_zero -delay_mode zero
Zero delay
+delay_mode_distributed -delay_mode dist
Ignores specify block delays
Cadence LDV 3.3(2001年7月)增加了通过一个时序控制文件来为各个模块设置时序选项的功能。你可以模块为单位来设置是否进行时序检查,是否允许I/O路径延 迟、端口延迟、库单元延迟和全时序检查。时序控制文件里要写明要配置的实例(instance)。命令行语法是:
% ncverilog +nctfile <timing_ctl_file> <other options>
或
% ncelab –tfile <timing_ctl_file> snapshot_name
<other_options>
时序控制文件的语法在Cadence 在线文档(Cadence NC-Verilog Simulator Help, Version 3.4, Chapter 8)中可以找到。
提高SDF的精度
时序信息通过SDF文件传递给一个设计。在LDV 3.1以前的版本里,缺省的SDF精度是10ps。从LDV 3.1开始,所有的时序宽度(包括小于10ps的)都允许使用,这样仿真的时序结果更加精确,但是仿真变得更慢。在多数情况下,10ps就足够了,因此你 也许想用下面的方法来改变精度:
% ncverilog +ncelabargs+”-sdfprecision 10ps” <other options>
或
% ncelab –sdf_precision [10ps|1ps|100fs] <other_options>
关于负时序(negative timing)检查
LDV 3.3缺省的仿真配置为负时序检查。这样,LDV 3.3和以前的版本的仿真结果就有所不同。
负时序检查有下列的选项:
ncverilog option ncelab option
+neg_tchk -neg_tchk
Still exists for backward compatibility
+noneg_tchk -noneg_tchk
Sets negative timing checks to zero
(matches previous behavior)
设置访问属性
缺省情况下,NC在非调试模式运行,仿真速度很快。可以通过设置访问属性和行调试(line-debug)功能来配置在仿真过程中信号、模块、和代码的访 问属性。这样做降低了仿真的速度。
如果你想在代码中设置断点,就必须使用行调试选项。该选项对仿真效率影响非常大。
% ncverilog +linedebug <other options>
或
% ncvlog –linedebug <other_options> <verilog_source_files>
也可以设置设计的全局访问属性。下列的命令可以用来配置设计为允许读、写和交叉访问(connectivity access)。
% ncverilog +access+[rwc] <other options>
或
% ncelab –access [rwc] snapshot_name <other_options>
r : read capability for waveform. dumping, code coverage, etc
w : write access for modifying values through PLI or tcl code
c : connectivity access to querying drivers and loads in C or tcl
前面曾经提到过,这些选项将降低仿真的速度。读属性是通常要使用的,它对仿真性能影响非常小。
为了给部分对象、模块或实例设置访问属性,可以创建一个访问属性文件,并在文件中说明那些对象的访问属性。然后用在运行 elaborator 时使用 –afile选项。
% ncverilog +ncafile+<access_filename> <other _options>
or
% ncelab -afile <access_filename> snapshot_name
<other_options>
% ncsim snapshot_name <other options>
也可以用 –genafile 选项来自动生成访问属性文件。当仿真使用了Tcl、PLI或probing功能,无法提前确定对象的访问属性,就可以采用自动生成访问属性文件的方法。 Elaborator 在生成仿真快照(snapshot)时会考虑你给出的 –genafile选项;然后,当运行仿真时,Tcl或PLI访问过的对象就会被记录下来。退出仿真的时候,访问属性文件就生成了。举个例子:
% ncverilog +ncgenafile+access.txt <other _options>
或
% ncelab -genafile access.txt test.top <other_options>
% ncsim test.top <other options>
仿真运行完成后,生成了一个access.txt 文件。你可以通过 –afile 选项来使用这个文件(象前面介绍的那样):
% ncverilog +ncafile+access.txt <other _options>
或
% ncelab -afile access.txt test.top <other_options>
访问属性文件的语法可在Cadence 在线文档(Cadence NC-Verilog Simulator Help, Version 3.4, Chapter 8) 中找到。
小结
本文提供各种提高仿真速度的方法。
提高仿真效率的最简单办法是选用最新版的Cadence LDV。我们应该经常运行NC-Sim Profiler来判断仿真器在哪里耗费最多的时间。然后集中精力优化那些代码。
还可以使用命令行选项来提高仿真效率。你可以通过这些选项来配置时序功能、改变SDF精度和配置对象的访问属性。提高仿真效率、可靠性和准确性对于验证设 计都很重要。
|