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四个窗口同时查看

保存波形信号的方法:
  1.SHM数据库可以记录在设计仿真过程中信号的变化. 它只在probes有效的时间内记录你set probe on的信号的变化.
  2.VCD数据库也可以记录在设计仿真过程中信号的变化. 它只记录你选择的信号的变化.
          $dumpfile("filename"); //打开数据库
          $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数据库也可以记录信号的变化,它的优势是可以跟debussy结合,方便调试.
    如果要在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的时候,为了正确地记录波形,要使用参数: "+access+rw", 否则没有读写权限

 

附:

本人刚开始学习NCVerilog和Debussy, 有一点小小的心得与大家分享。
工作环境是sun服务器。
假定我的设计文件为alu.v, alu_test.v(第二个是testbench).
1、在alu_test.v中加入如下代码
initial
    begin
      $fsdbDumpfile("alu.fsdb");                 // 创建fsdb文件供Debussy调用,这样就可以观察波形了,名称自定义 。
      $fsdbDumpvars(0,alu_test);              // alu_test为alu_test.v中的顶层模块名
    end
2、ncverilog +access+r alu.v alu_test.v         
3、debussy alu.v alu_test.v &
这样就可以在debussy中打开fsdb文件来看波形了。

你可能感兴趣的:(FPGA)