ncverilog
ncverilog仿真详解仿真详解仿真详解仿真详解 发表在 ASIC/FPGA/汇编, 学习笔记, 编程开发 | 由 阿布 | 十一月 26, 2011 | 0 标签: ncverilog, 仿真 数位IC工具简介——Simulator 工具 ModelSim ModelSim是Mentor公司所推出的软体, 主要用来当作VHDL的模拟器, 也是目前CIC在VHDL方面的主要的模拟软体;但ModelSim不仅支援VHDL的模拟,同样也可用来当Verilog的模拟器, 更进一步的, ModelSim也支援VHD&Verilog的混合模拟, 这对於单晶片系统(SoC)的发展上, 矽智产(IP)是来源来自不同的地方, 有些矽智产是采用VHDL描述, 有些是Verilog描述, 因此这是不可或缺的功能. 所以CIC引进ModelSim这一套软体. NCSim NC-SIM 为 Cadence 公司之 VHDL与Verilog混合模拟的模拟器 (simulator),可以帮助 IC 设计者验证及模拟其所用VHDL与Verilog混合计设的 IC功能. NCVerilog NC-Verilog 为 Cadence 公司之 Verilog 硬体描述语言模拟器 (simulator),可以帮助 IC 设计者验证及模拟所设计 IC 的功能.使用 NC-Verilog软体,使用者必须使用 Verilog 硬体描述语言的语法来描述所要设计的电路. VCS VCS 为 Synopsys 公司之 Verilog 硬体描述语言模拟器 (simulator),可以帮助IC设计者验证及模拟所设计 IC 的功能.使用 VCS 软体,使用者必须使用Verilog 硬体描述语言的语法来描述所要设计的电路. ncverilog使用使用使用使用(2009-04-20 16:07:14) 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文件来看波形了。 Ncverilog 常用命令使用详解常用命令使用详解常用命令使用详解常用命令使用详解 工作状态:建立仿真环境 我们知道,由于NC-Verilog使用了Native Compile Code 的技术来加强电路模拟的效率,因此在进行模拟时必须经过compile(ncvlog 命令)以及elaborate(ncelab命令)的步骤。编译之后,针对每一个HDL设计单元会产生中间表达。接着elaborate命令会建立整个电路的结构,产生可以用来模拟的资料。最后使用ncsim命令来进行模拟。 三命令模式三命令模式三命令模式三命令模式 命令如下: ncvlog -f run.f ncelab 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 不显示版权信息
注意: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文件来看波形了。 Ncverilog 常用命令使用详解常用命令使用详解常用命令使用详解常用命令使用详解 工作状态:建立仿真环境 我们知道,由于NC-Verilog使用了Native Compile Code 的技术来加强电路模拟的效率,因此在进行模拟时必须经过compile(ncvlog 命令)以及elaborate(ncelab命令)的步骤。编译之后,针对每一个HDL设计单元会产生中间表达。接着elaborate命令会建立整个电路的结构,产生可以用来模拟的资料。最后使用ncsim命令来进行模拟。 三命令模式三命令模式三命令模式三命令模式 命令如下: ncvlog -f run.f ncelab 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 不显示版权信息