Ncverilog 的一些经验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Ncverilog 的一些经验

1.Verilog和Ncverilog命令使用库文件或库目录

ex). ncverilog -f run.f -v lib/lib.v -y lib2 +libext+.v //一般编译文件在run.f中, 库文件在lib.v中,lib2目录中的.v文件系统自动搜索使用库文件或库目录,只编译需要的模块而不必全部编译

2.Verilog Testbench信号记录的系统任务:

1). SHM数据库可以记录在设计仿真过程中信号的变化. 它只在probes有效的时间内记录你set probe on的信号的变化.

ex). $shm_open("waves.shm"); //打开波形数据库

$shm_probe(top, "AS"); // set probe on "top",

第二个参数: A -- signals of the specific sc rope

S -- Ports of the specified s cope and below, excluding library cells

C -- Ports of the specified s cope and below, including library cells

AS -- Signals of the specifie d scope and below, excluding library cells

AC -- Signals of the specifie d scope and below, including library cells

还有一个 M ,表示当前scope的m emories, 可以跟上面的结合使用, "AM" "AMS" "AMC"

什么都不加表示当前scope的por ts;

$shm_close //关闭数据库

2). VCD数据库也可以记录在设计仿真过程中信号的变化. 它只记录你选择的信号的变化.

ex). $dumpfile("filename"); //打开数据库

$dumpvars(1, top.u1); //scope = top.u1, depth = 1

第一个参数表示深度, 为0时记录所有深度; 第二个参数表示scope,省略时表当前的scope.

$dumpvars; //depth = all scope = all

$dumpvars(0); //depth = all scope = current $dumpvars(1, top.u1); //depth = 1 scope = top. u1

$dumpoff //暂停记录数据改变,信号变化不写入库文件中

$dumpon //重新恢复记录

3). Debussy fsdb数据库也可以记录信号的变化,它的优势是可以跟debus sy结合,方便调试.

如果要在ncverilog仿真时,记录信号, 首先要设置debussy:

a. setenv LD_LIBRARY_PATH :$LD_LIBRARY_PATH

(path for debpli.so file (/share/PLI/nc_xl//nc_loadpli1)) b. while invoking ncverilog use the +ncloadpli1 option.

ncverilog -f run.f +debug +ncloadpli1=debpli:deb_PLIPtr fsdb数据库文件的记录方法,是使用$fsdbDumpfile和$fsdbDumpvars系统函数,使用方法参见VCD

注意: 在用ncverilog的时候,为了正确地记录波形,要使用参数: "+acces s+rw", 否则没有读写权限

3. ncverilog编译的顺序: ncverilog file2 file1 ....

有时候这些文件存在依存关系,如在file2中要用到在file1中定义的变量,这时候就要注意其编译的顺序是从后到前,就先编译file2然后才是file1.

4. 信号的强制赋值force

首先, force语句只能在过程语句中出现,即要在initial 或者 always 中间. 去除force 用 release 语句.

initial begin force sig1 = 1'b1; ... ; release sig1; end force可以对wire赋值,这时整个net都被赋值; 也可以对reg赋值.

ncverilog使用

ncverilog是shell版的,nclaunch是以图形界面为基础的,二者调用相同内核;ncverilog的执行有三步模式和单步模式,在nclaunch中对应multiple step和single step

ncverilog的三步模式为:ncvlog(编译) ncelab(建立snapshot文件) ncsim(对snapshot文件进行仿真)

基于shell的ncverilog操作(尤其是单步模式)更适合于大批量操作

ncverilog的波形查看配套软件是simvision,其中包含原理图、波形、信号流等查看方式

三命令模式:

ncvlog -f run.f

ncelab tb -access wrc

ncsim tb -gui

第一个命令中,run.f是整个的RTL代码的列表,值得注意的是,我们需要把tb文件放在首位,这样可以避免出现提示timescale的错误

注意:ncvlog执行以后将产生一个名为INCA_libs的目录和一个名为worklib的

目录

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

注意:ncelab要选择tb文件的module,会在snapshot文件夹下生成snapshot 的module文件

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

在这种模式下仿真,是用“- ”的。而下边要说的ncverilog是采用“+ ”的三命令模式下GUI界面较好用,其对应的命令会在console window中显示

注意:选择snapshot文件夹下生成的module文件进行仿真

单命令模式:

ncverilog +access+wrc rtl +gui

在这里,各参数与三命令模式相同。注意“+ ”

通常都使用单命令模式来跑仿真,但要配置好一些文件

单命令模式下文件的配置:

目录下有源文件、测试台文件、file、run四个文件

在linux下执行source run后再执行simvision来查看

run文件内容: ncverilog +access+rw -f file

file文件内容: cnt_tb.v(注意把tb文件放在前)

cnt.v

tb文件中应该包含:

initial

begin

$shm_open("wave.shm"); //打开波形保存文件wave.shm

$shm_probe(cnt_tb,"AS"); //设置探针

end

A -- signals of the specific scope 为当前层信号设置探针

S -- Ports of the specified scope and below, excluding library cells

C -- Ports of the specified scope and below, including library cells

AS -- Signals of the specified scope and below, excluding library cells 为当前层以以下层信号都设置探针,这是最常用的设置方法

AC -- Signals of the specified scope and below, including library cells

在simvison中,左边窗口是当前设计的层次化显示,右边窗口是左边选中模块中包含的信号

查看结果时可以在source schemic wave register四个窗口同时查看

相关文档
最新文档