本文回顾了一些NC-Verilog的命令行选项,并说明这些选项如何影响仿真效率。同时,我们也展示了一些技巧,以帮助用户的NC-Verilog在最大效率下仿真一个设计和测试平台。
文中的命令行选项语法采用单步启动的方式(ncverilog +
首先确认你是否安装了最新的Cadence LDV版本。自动1996年发布第一版NC-Verilog以来,我们的研发队伍一直把仿真器的仿真效率作为重点来研究。在后来推出的新版本里,不断按各种设计风格优化仿真器,因此使用最新版本是最有利的。直到2002年2月,最新版本是LDV 3.4(s1)。
NC-Verilog在仿真引擎内开发了一个profiler工具。该工具每秒中断仿真器100次,并将终端时的结构记录下来,生成一个日志文件。日志文件里列出了被中断次数最多的模块、代码行和结构类型。这些信息可以帮助你诊断是哪些代码或模块在仿真时耗费了最多的时间。通过修改这些模块,就能提升仿真效率。
Profiler功能很容易启动,并对仿真只产生非常小的影响。
% ncverilog +ncprofile
% ncsim –profile snapshot_name
在仿真结束时,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 optionncelab 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
或
% ncelab –tfile
时序控制文件的语法在Cadence 在线文档(Cadence NC-Verilog Simulator Help, Version 3.4, Chapter 8)中可以找到。
时序信息通过SDF文件传递给一个设计。在LDV 3.1以前的版本里,缺省的SDF精度是10ps。从LDV 3.1开始,所有的时序宽度(包括小于10ps的)都允许使用,这样仿真的时序结果更加精确,但是仿真变得更慢。在多数情况下,10ps就足够了,因此你也许想用下面的方法来改变精度:
% ncverilog +ncelabargs+”-sdfprecision 10ps”
或
% ncelab –sdf_precision [10ps|1ps|100fs]
LDV 3.3缺省的仿真配置为负时序检查。这样,LDV 3.3和以前的版本的仿真结果就有所不同。
负时序检查有下列的选项:
ncverilog optionncelab 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
或
% ncvlog –linedebug
也可以设置设计的全局访问属性。下列的命令可以用来配置设计为允许读、写和交叉访问(connectivity access)。
% ncverilog +access+[rwc]
或
% ncelab –access [rwc] snapshot_name
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+
or
% ncelab -afile
% ncsim snapshot_name
也可以用 –genafile 选项来自动生成访问属性文件。当仿真使用了Tcl、PLI或probing功能,无法提前确定对象的访问属性,就可以采用自动生成访问属性文件的方法。Elaborator 在生成仿真快照(snapshot)时会考虑你给出的 –genafile选项;然后,当运行仿真时,Tcl或PLI访问过的对象就会被记录下来。退出仿真的时候,访问属性文件就生成了。举个例子:
% ncverilog +ncgenafile+access.txt
或
% ncelab -genafile access.txt test.top
% ncsim test.top
仿真运行完成后,生成了一个access.txt 文件。你可以通过 –afile 选项来使用这个文件(象前面介绍的那样):
% ncverilog +ncafile+access.txt
或
% ncelab -afile access.txt test.top
访问属性文件的语法可在Cadence 在线文档(Cadence NC-Verilog Simulator Help, Version 3.4, Chapter 8) 中找到。
本文提供各种提高仿真速度的方法。
提高仿真效率的最简单办法是选用最新版的Cadence LDV。我们应该经常运行NC-Sim Profiler来判断仿真器在哪里耗费最多的时间。然后集中精力优化那些代码。
还可以使用命令行选项来提高仿真效率。你可以通过这些选项来配置时序功能、改变SDF精度和配置对象的访问属性。提高仿真效率、可靠性和准确性对于验证设计都很重要。