NC-Verilog仿真技巧

更新时间:2024-01-23 22:06:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

提高NC-Verilog仿真效率的技巧

本文回顾了一些NC-Verilog的命令行选项,并说明这些选项如何影响仿真效率。同时,我们也展示了一些技巧,以帮助用户的NC-Verilog在最大效率下仿真一个设计和测试平台。 文中的命令行选项语法采用单步启动的方式(ncverilog +),这些选项也适合多步启动模式(ncvlog, ncelab, 或ncsim)。 安装最新发布的软件

首先确认你是否安装了最新的Cadence LDV版本。自动1996年发布第一版NC-Verilog以来,我们的研发队伍一直把仿真器的仿真效率作为重点来研究。在后来推出的新版本里,不断按各种设计风格优化仿真器,因此使用最新版本是最有利的。直到2002年2月,最新版本是LDV 3.4(s1)。

使用NC-Verilog内置的profiler

NC-Verilog在仿真引擎内开发了一个profiler工具。该工具每秒中断仿真器100次,并将终端时的结构记录下来,生成一个日志文件。日志文件里列出了被中断次数最多的模块、代码行和结构类型。这些信息可以帮助你诊断是哪些代码或模块在仿真时耗费了最多的时间。通过修改这些模块,就能提升仿真效率。

Profiler功能很容易启动,并对仿真只产生非常小的影响。 % ncverilog +ncprofile or

% 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 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

% ncelab –tfile snapshot_name

时序控制文件的语法在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”

% ncelab –sdf_precision [10ps|1ps|100fs] 关于负时序(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

% 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 snapshot_name % 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精度和配置对象的访问属性。提高仿真效率、可靠性和准确性对于验证设计都很重要。

仿真工作流程(Verilog/Modelsim+Debussy)

作者:未知 时间:2007-05-14 20:22:19 来自:网上转载 浏览次数:847 文字大小:【大】【中】【小】

这是献给大家的第二篇,文章详细说明了本人近一年来,自己摸索出来的一套仿真工作流程。接触过Modelsim这类软件的朋友可能都会感觉上手比较困难,原因有二:一、对仿真机制不了解,对基于source+testbench的工作流程不熟悉(大多数朋友接触FPGA仿真可能以waveform的方式);二、对软件的安装和使用不熟悉,Modelsim软件破解和平时常用软件相比要麻烦一些,也不像常用软件那样易于上手。即使入门了,也不一定能够熟练使用,相信很多朋友后仿过程中都碰到过back-annotation error的问题:)与大家一样,我也是这样一步步摸索出来的……

设计语言完全采用verilog, 设计工具采用ModelSim + Debussy。目前我的工作平台是Windows, 使用的版本是ModelSim6.2a + Debussy5.3v9。

为了便于管理,在文件夹的管理上采用分级管理。举一个例子:如果顶层模块是A1;A1划分为B1,B2,B3;B1又划分为C1,C2,B2划分为C3, C4,B3划分为C5,C6。那么一共建立10个文件夹,分别命名为A1, B1, B2, B3, C1, C2, C3, C4, C5, C6。在各文件夹中存放相应的设计源文件.v和testbench文件.v,这样可以避免单个文件夹中文件过多,给管理上带来不便。

ModelSim有三种操作模式:GUI、Command-line和Batch。GUI模式比较麻烦,又要敲键盘,又要点鼠标,对我这样的懒人不合适:)而且初学者在做后仿的时候,.sdf文件的

back-annotation比较难掌握。我推荐的是采用编写.do文件或.bat文件的工作方式。. do文件的编写可以参照ISE自动生成的.fdo(功能仿真)和.tdo(后仿)文件。通过ISE调用ModelSim进行仿真,在工程的文件夹下会生成 *.fdo和*.tdo的文件,用编辑器打开文件查看,是诸如此类的一些命令:

## NOTE: Do not edit this file.

## Auto generated by Project Navigator for Post-PAR Simulation ##

vlib work

## Compile Post-PAR Model

vlog \ vlog \

vlog \

vsim -novopt +maxdelays -L simprims_ver -lib work testbench glbl do {testbench.udo} view wave add wave *

add wave .glbl.GSR view structure view signals run 10us ## End

这些命令并不一定都要写上,可以根据自己的需要加以精简,比如一个功能仿真的fsim.do文件如下所示:

vlib work

vlog \ vlog \ vlog \ vlog \ vlog \

vsim -t 1ns -lib work test view wave add wave * view structure view signals run 4ms

用ModelSim也可以查看波形图和进行调试,但是Debussy查错比较方便,下面说明如何利用ModelSim和Debussy进行仿真和调试。

在testbench文件中initial begin后需添加两条语句: $fsdbDumpfile(\//文件名随便起 $fsdbDumpvars;

点击图标或在cmd下敲vsim启动ModelSim GUI,在Transcript窗口cd到该模块的文件夹下,运行do *.do(*.do为仿真的do文件,比如fsim.do)。ModelSim有个不好的地方,如果仿真波形不对,可能需要查看中间信号以便定位错误,这时用add wave命令添加中间信号

后,需要重新run一次,才能看到这些中间信号的值。而采用Debussy查看ModelSim生成的.fsdb文件的话,添加信号后立即就可看到值,给调试带来很大的方便。另外,Debussy还有个很有用的功能叫做active annotation,在nWave窗口点击波形图上的不同时间点,nTrace和nScheme的源代码和示意图上的表示出的信号值会随之变化,也大大方便了查错。关于Debussy的使用方法,请大家参考帮助文档,我只结合自己使用的经验强调2点:

1.在打开.fsdb文件之前,先在nTrace窗口Import Design一下,选择From File,Add所有相关的设计源文件和testbench文件,否则在nWave窗口打开.fsdb文件,用Get Signal添加信号后会显示NF。另外,在Get Signal之前请将ModelSim关掉,否则好像还是会显示NF。

2.再强调一遍,Import Design的时候要将testbench文件也添加进去,否则启动active annotation后,所有信号都会显示NF!这个问题曾郁闷了我很久,所以特别提出来。

可能大家都发现ModelSim的主要作用是产生.fsdb文件,我们并没有用它来进行查错,完全没必要启动GUI。这个问题我思考了很久,最后在网友 hamamdu的帮助下解决了这个问题。用文本编辑器生成一个.bat文件,文件内容和.do文件差不多,不过语句到vsim命令为止,此外vsim命令也要做一些修改,添加-c参数。下面给出一个.bat的例子: vlib work

vlog \ vlog \ vlog \ vlog \ vlog \ vsim -c work.test

运行这个.bat文件后,将会出现VSIM 1>提示,这时输入run 4ms,回车,将提示fsdb文件产生好了。

经我试验,开启Optimization后,对Command-line操作模式没有影响,但是最后一条语句不可写成vsim -c test,虽然这样也可产生fsdb文件,但是启动active annotation后Debussy软件会报错:(

写的比较仓促,大家试验中发现什么问题,请及时提出来:)

Ncverilog 命令使用详解

作者:5life 时间:2005-12-17 11:19:53 来自:本站原创 浏览次数:1003 文字大小:【大】【中】【小】

我们知道,由于NC-Verilog使用了Native Compile Code 的技术来加强电路模拟的效率,因此在进行模拟时必须经过compile(ncvlog 命令)以及elaborate(ncelab命令)的步骤。编译之后,针对每一个HDL设计单元会产生中间表达。接着elaborate命令会建立整个电路的结构,产生可以用来模拟的资料。最后使用ncsim命令来进行模拟。 三命令模式 命令如下:

ncvlog -f run.f

ncealb tb -access wrc ncsim tb -gui

第一个命令中,run.f是整个的RTL代码的列表,值得注意的是,我们需要把tb文件放在首

位,这样可以避免出现提示timescale的错误。

第二个命令中,access选项是确定读取文件的权限。其中的tb是你的tb文件内的模块名字。

第三个命令中,gui选项是加上图形界面

值得注意的是,在这种模式下仿真,是用“ - ”的。而下边要说的ncverilog是采用“ + ”的。 单命令模式

ncverilog +access+wrc rtl +gui

在这里,各参数与三命令模式相同。注意“ + ”。 在本文里将详细讲述ncverilog 的各种常用的参数,对于三命令模式,请读者自己查看资料。 +cdslib+... 设定你所仿真的库所在 +define+macro ... 预编译宏的设定

+errormax+整数 当错误大于设定时退出仿真 +incdir+path 设定include的路径

+linedebug 允许在代码中设定line breakpoint +log+logfile 输出到名为logfile的文件中 +status 显示内存和CPU的使用情况 +work 工作库

+access+w/r/c 读取对象的权限,缺省为无读(-w)无写(-r)无连接(-c) +gui 显示图形交互界面 +input script_file 输入脚本文件

+licqueque 如无licence等待licence

+run 如果在GUI交互界面下, 启动后将自动开始仿真 +loadpli1=... 动态加入PLI

+timescale 设定仿真单位和精度 +nocopyright 不显示版权信息

位,这样可以避免出现提示timescale的错误。

第二个命令中,access选项是确定读取文件的权限。其中的tb是你的tb文件内的模块名字。

第三个命令中,gui选项是加上图形界面

值得注意的是,在这种模式下仿真,是用“ - ”的。而下边要说的ncverilog是采用“ + ”的。 单命令模式

ncverilog +access+wrc rtl +gui

在这里,各参数与三命令模式相同。注意“ + ”。 在本文里将详细讲述ncverilog 的各种常用的参数,对于三命令模式,请读者自己查看资料。 +cdslib+... 设定你所仿真的库所在 +define+macro ... 预编译宏的设定

+errormax+整数 当错误大于设定时退出仿真 +incdir+path 设定include的路径

+linedebug 允许在代码中设定line breakpoint +log+logfile 输出到名为logfile的文件中 +status 显示内存和CPU的使用情况 +work 工作库

+access+w/r/c 读取对象的权限,缺省为无读(-w)无写(-r)无连接(-c) +gui 显示图形交互界面 +input script_file 输入脚本文件

+licqueque 如无licence等待licence

+run 如果在GUI交互界面下, 启动后将自动开始仿真 +loadpli1=... 动态加入PLI

+timescale 设定仿真单位和精度 +nocopyright 不显示版权信息

本文来源:https://www.bwwdw.com/article/2e3o.html

Top