Ncverilog_的一些经验
NC-Verilog仿真技巧
NC-Verilog仿真技巧提高NC-Verilog仿真效率的技巧本文回顾了一些NC-Verilog的命令行选项,并说明这些选项如何影响仿真效率。
同时,我们也展示了一些技巧,以帮助用户的NC-Verilog在最大效率下仿真一个设计和测试平台。
文中的命令行选项语法采用单步启动的方式(ncverilog +),这些选项也适合多步启动模式(ncvlog, ncelab, 或ncsim)。
安装最新发布的软件首先确认你是否安装了最新的Cadence LDV版本。
自动1996年发布第一版NC-Verilog以来,我们的研发队伍一直把仿真器的仿真效率作为重点来研究。
在后来推出的新版本里,不断按各种设计风格优化仿真器,因此使用最新版本是最有利的。
直到2002年2月,最新版本是LDV 3.4(s1)。
使用NC-Verilog内置的profilerNC-Verilog在仿真引擎内开发了一个profiler工具。
该工具每秒中断仿真器100次,并将终端时的结构记录下来,生成一个日志文件。
日志文件里列出了被中断次数最多的模块、代码行和结构类型。
这些信息可以帮助你诊断是哪些代码或模块在仿真时耗费了最多的时间。
通过修改这些模块,就能提升仿真效率。
Profiler功能很容易启动,并对仿真只产生非常小的影响。
% ncverilog +ncprofileor% ncsim –profile snapshot_name在仿真结束时,profiler会创建一个日志文件(ncprof.out),文件里列出了profile运行的细节。
关于如何利用profiler日志文件,可参考Cadence在线文档(Cadence NC-Verilog Simulator Help, Version 3.4, Chapter 14)。
禁止时序验证来提升效率缺省情况下,如果在设计中考虑了时序,NC-Sim将进行标准延迟格式(SDF)的全时序标注(annotation),并在仿真时检查时序。
Ncverilog_的一些经验
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 ropeS -- Ports of the specified s cope and below, excluding library cellsC -- Ports of the specified s cope and below, including library cellsAS -- Signals of the specifie d scope and below, excluding library cellsAC -- 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 stepncverilog的三步模式为:ncvlog(编译) ncelab(建立snapshot文件) ncsim(对snapshot文件进行仿真)基于shell的ncverilog操作(尤其是单步模式)更适合于大批量操作ncverilog的波形查看配套软件是simvision,其中包含原理图、波形、信号流等查看方式三命令模式:ncvlog -f run.fncelab tb -access wrcncsim tb -gui第一个命令中,run.f是整个的RTL代码的列表,值得注意的是,我们需要把tb文件放在首位,这样可以避免出现提示timescale的错误注意:ncvlog执行以后将产生一个名为INCA_libs的目录和一个名为worklib的目录第二个命令中,access选项是确定读取文件的权限。
verilog课程期末总结
verilog课程期末总结一、引言Verilog(硬件描述语言)是一种用于描述电子系统的硬件结构和行为的语言,它广泛用于设计和验证数字电路,尤其是在集成电路和FPGA设计中。
在本学期的Verilog课程中,我们学习并实践了Verilog语言的基本概念和设计技巧,通过实验和项目开发,我们对Verilog语言的使用和应用有了更深入的了解。
本文将对这门课程进行总结,包括所学内容、实践经验以及未来的发展方向。
二、课程内容回顾本学期的Verilog课程共包含以下几个部分的内容:1. Verilog的基本语法和数据类型:在这个部分,我们学习了Verilog的基本语法,如模块定义、端口声明、数据类型定义等。
我们了解了如何使用Verilog语言进行模块化设计,利用不同的数据类型来描述数字电路中的信号和寄存器。
2. Verilog建模:这个部分教授了如何使用Verilog语言来建模和设计数字电路。
我们学习了组合逻辑和时序逻辑的建模方法,掌握了常用的门级建模和行为级建模技巧。
3. Verilog仿真:通过仿真可以验证我们设计的电路是否符合功能和时序的要求。
在这个部分,我们学习了如何使用Verilog语言进行仿真,以及如何编写仿真测试平台、编写仿真测试用例等。
通过仿真,我们可以对设计进行调试和验证,同时也方便了我们对电路性能和时序约束的分析。
4. Verilog项目开发:最后一个部分是课程的项目开发,通过一个实际项目的设计和实现,我们将所学的Verilog知识应用到实践中。
这个项目的设计还涉及模块间的通信和数据处理等方面,对我们综合运用所学知识的能力提出了更高的要求。
三、实践经验总结在学习和实践Verilog语言的过程中,我积累了一些宝贵的经验。
以下是我总结的几点实践经验:1. 充分理解和熟练掌握语法规则:Verilog语言的语法规则对于我们正确理解和使用这门语言非常重要。
通过不断的练习和实践,我渐渐熟练掌握了Verilog的语法规则,如模块的定义、端口的声明、数据类型的使用等。
Verilog 学习经验
在逻辑方面,我觉得比较重要的规范有这些:1.设计必须文档化。
要将设计思路,详细实现等写入文档,然后经过严格评审通过后才能进行下一步的工作。
这样做乍看起来很花时间,但是从整个项目过程来看,绝对要比一上来就写代码要节约时间,且这种做法可以使项目处于可控、可实现的状态。
2.代码规范。
a.设计要参数化。
比如一开始的设计时钟周期是30ns,复位周期是5个时钟周期,我们可以这么写:parameter CLK_PERIOD = 30;parameter RST_MUL_TIME = 5;parameter RST_TIME = RST_MUL_TIME * CLK_PERIOD;...rst_n = 1'b0;# RST_TIME rst_n = 1'b1;...# CLK_PERIOD/2 clk <= ~clk;如果在另一个设计中的时钟是40ns,复位周期不变,我们只需对CLK_PERIOD进行重新例化就行了,从而使得代码更加易于重用。
b.信号命名要规范化。
1) 信号名一律小写,参数用大写。
2) 对于低电平有效的信号结尾要用_n标记,如rst_n。
3) 端口信号排列要统一,一个信号只占一行,最好按输入输出及从哪个模块来到哪个模块去的关系排列,这样在后期仿真验证找错时后方便很多。
如:module a(//inputclk,rst_n, //globle signalwren,rden,avalon_din, //related to avalon bussdi, //related to serial port input//outputdata_ready,avalon_dout, //related to avalon bus...);4) 一个模块尽量只用一个时钟,这里的一个模块是指一个module或者是一个entity。
在多时钟域的设计中涉及到跨时钟域的设计中最好有专门一个模块做时钟域的隔离。
个人总结FPGA设计中Verilog编程的27条经验
个人总结Verilog编程27条经验1.强烈建议用同步设计;2.在设计时总是记住时序问题;3.在一个设计开始就要考虑到地电平或高电平复位、同步或异步复位、上升沿或下降沿触发等问题,在所有模块中都要遵守它;4.在不同的情况下用if和case,最好少用if的多层嵌套(1层或2层比较合适,当在3层以上时,最好修改写法,因为这样不仅可以reduce area,而且可以获得好的timing);5.在锁存一个信号或总线时要小心,对于整个design,尽量避免使用latch,因为在DFT时很难test;6.确信所有的信号被复位,在DFT时,所有的FlipFlop都是controllable;7.永远不要再写入之前读取任何内部存储器(如SRAM);8.从一个时钟到另一个不同的时钟传输数据时用数据缓冲,他工作像一个双时钟FIFO(是异步的),可以用Async SRAM搭建Async FIFO;9.在VHDL中二维数组可以使用,它是非常有用的。
在VERILOG中他仅仅可以使用在测试模块中,不能被综合;10.遵守register-in register-out规则;11.像synopsys的DC的综合工具是非常稳定的,任何bugs都不会从综合工具中产生12.确保FPGA版本与ASIC的版本尽可能的相似,特别是SRAM类型,若版本一致是最理想的,但是在工作中FPGA版本一般用FPGA自带的SRAM,ASIC版本一般用厂商提供的SRAM;13.在嵌入式存储器中使用BIST;14.虚单元和一些修正电路是必需的;15.一些简单的测试电路也是需要的,经常在一个芯片中有许多测试模块;16.除非低功耗不要用门控时钟,强烈建议不要在design中使用gate clock;17.不要依靠脚本来保证设计。
但是在脚本中的一些好的约束能够起到更好的性能(例如前向加法器);18.如果时间充裕,通过时钟做一个多锁存器来取代用MUX;19.不要用内部tri-state, ASIC需要总线保持器来处理内部tri-state,如IOcell;20.在top level中作pad insertion;21.选择pad时要小心(如上拉能力,施密特触发器,5伏耐压等),选择合适的IO cell;22.小心由时钟偏差引起的问题;23.不要试着产生半周期信号;24.如果有很多函数要修正,请一个一个地作,修正一个函数检查一个函数;25.在一个计算等式中排列每个信号的位数是一个好习惯,即使综合工具能做;26.不要使用HDL提供的除法器;27.削减不必要的时钟。
Ncverilog命令使用详解
Ncverilog命令使用详解NCVerilog是一种用于模拟、调试和分析Verilog和SystemVerilog 代码的命令行工具。
以下是对NCVerilog命令使用的详细解释。
1. `ncverilog`命令:启动NCVerilog编译器。
语法如下:```ncverilog [options] <file_list>```- `options`:附加的编译选项,例如`-sv`表示编译SystemVerilog 代码。
- `file_list`:包含要编译的源文件的列表。
2. `+access+r`选项:允许模拟工具读取源代码中的注释。
这对于调试和分析时非常有用。
3. `+define+<macro>`选项:定义一个宏。
这可以用于在模拟期间改变代码的行为。
例如:```+define+DEBUG```4. `+incdir+<dir>`选项:指定包含库文件的目录。
这对于使用外部库或模块时非常有用。
5. `+define+<macro>={value}`选项:为宏指定一个值。
例如:```+define+WIDTH=8```6. `+libext+<ext>`选项:指定库文件的扩展名。
可以用于指定Verilog或SystemVerilog库文件的不同扩展名。
``````8. `+vcs`选项:指定使用VCS编译器的系统Verilog代码。
这对于一些特定的系统Verilog代码可能是必需的。
9. `-y <dir>`选项:指定一个目录,其中包含其他用户定义的Verilog或SystemVerilog库文件。
10. `-v <file>`选项:指定一个要编译的单独的库文件。
11. `-f <file>`选项:指定一个包含文件列表的文件。
这可以用于指定要编译的多个源文件。
12. `-fsmdebug`选项:在编译期间为FSM(有限状态机)创建调试信息。
verilog_经验(适合初学者)
综合时不能正确地映射到所用的门。 12、IF: 如果变量没有在 IF 语句的每个分支中进行赋值,将会产生 latch。如果 IF 语句中产生了 latch,则 IF 的条件中最好不要用到算术操作。Case 语句类似。Case 的条款可以是变量。 如果一个变量在同一个 IF 条件分支中先赎值然后读取,则不会产生 latch。如果先读取,后赎值,则会 产生 latch。 13、循环: 只有 for-loop 语句是可以综合的。 14、设计时序电路时,建议变量在 always 语句中赋值,而在该 always 语句外使用,使综合时能准确 地匹配。建议不要使用局部变量。 15、不能在多个 always 块中对同一个变量赎值 16、函数 函数代表一个组合逻辑,所有内部定义的变量都是临时的,这些变量综合后为 wire。 17、任务: 任务可能是组合逻辑或者时序逻辑,取决于何种情况下调用任务。 18、Z: Z 会综合成一个三态门,必须在条件语句中赋值 19、参数化设计: 优点:参数可重载,不需要多次定义模块 四:模块优化 1、资源共享: 当进程涉及到共用 ALU 时,要考虑资源分配问题。可以共享的操作符主要有:关系操作符、加减乘除 操作符。通常乘和加不共用 ALU,乘除通常在其内部共用。 2、共用表达式: 如:C=A+B; D=G+(A+B); 两者虽然有共用的A+B,但是有些综合工具不能识别.可以将第二句改为:D=G+C;这样只需两个 加法器. 3、转移代码: 如循环语句中没有发生变化的语句移出循环. 4、避免 latch: 两种方法:1、在每一个 IF 分支中对变量赋值。2、在每一个 IF 语句中都对变量赋初值。 5:模块: 综合生成的存储器如 ROM 或 RAM 不是一种好方法,只是成堆的寄存器,很费资源。最好用库自带的 存储器模块。 五、验证: 1、敏感表: 在 always 语句中,如果敏感表不含时钟,最好将所有的被读取的信号都放在敏感表中。 2、异步复位: 建议不要在异步时对变量读取,即异步复位时,对信号赋以常数值。 Averilog 的流行,有两方面的原因; B verilog 与 VHDL 相比的优点 C 典型的 verilog 模块 D verilog 语法要点 A) verilog 的流行,有两方面的原因:
Ncverilog 命令使用详解
Ncverilog 命令使用详解我们知道,由于NC-Verilog使用了Native Compile Code 的技术来加强电路模拟的效率,因此在进行模拟时必须经过compile(ncvlog 命令)以及elaborate(n celab命令)的步骤。
编译之后,针对每一个HDL设计单元会产生中间表达。
接着elaborate命令会建立整个电路的结构,产生可以用来模拟的资料。
最后使用ncsim命令来进行模拟。
三命令模式命令如下:ncvlog -f run.fncealb tb -access wrcncsim 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 不显示版权信息。
Verilog 开发经验总结说明书
Verilog 开发经验总结●以硬件为基础的原则Verilog是硬件描述语言,所谓描述就是是在在描绘已经设计好的电路。
尤其是在刚开始学习HDL时,还没有能直接把语言对应到具体电路的能力,更不能上手直接写Verilog代码。
所以最优方案是先设计好硬件电路,再按照电路编写Verilog。
●模块化思想这个思想不仅仅是Verilog的开发了,就算是C语言甚至现在的超高级语言,也一直在强调封装的概念。
Verilog开发遵循的是自顶向下的模块化设计,思路基本是从最终功能不断细分,直到Verilog可以很直接地描述最基础的硬件单元,例如加法器,移位寄存器等等。
模块划分一定要尽量细,功能单一,且一定要留出使能、复位等接口以便于系统搭建。
说明以下,所谓Verilog可直接描述指的是按照规范描述出来的电路,开发工具能够很清晰地理解所要描述的功能,而不会发生误解等现象。
一个只使用编译器能理解的代码开发的电路,错误率会大大降低。
相反,如果功能划分不够清晰,使得一个模块的功能过于庞杂,不仅描述困难,编译器也可能产生很大的误解。
把握编译器的理解方式是有助于做Verilog的开发的,但这就需要一个长远的积累了,我在最后会给出一些例子。
●时序电路与逻辑电路完全分开Verilog中除了数据流模型和门级模型以外,最常用的是always即行为级模型描述电路。
一个always块可以理解为一个电路,或者实物上的一个芯片。
所以不要在一个always里杂糅时序电路和逻辑电路,那样很可能导致编译器综合出一些奇葩的结果。
时序always模块的敏感变量有且最多两个,一个是时钟边沿,一个是复位边沿,没有再多的敏感变量了。
组合逻辑always中敏感变量列表必须包含该模块所有涉及到的变量,或者直接用(*)代替,个人推荐后者。
●时序always块编写规范在时序always中,统一使用非阻塞赋值<=,因为时序always中在赋值号左侧的变量是真实的触发器,非阻塞赋值在触发时是同时赋值的,这很符合触发器在上升沿到来后同时将D输出到Q的实际情况。
Cadence中Verilog 的一些使用方法
Cadence中Verilog的一些使用方法一学习Verilog 的必要性随着电路规模的增大和复杂传统的图形输入模式已不可行语言描述电路成为潮流它的方便性和好的更改性维护性在实践中得到很好的体现尤其现在强大的综合工具和系统集成对核的需求性使Verilog更有用武之地每个硬件工程师应该学习掌握它二Verilog 的文本编辑器在进入Cadence后在命令行中键入textedit *.v↙(此处*为文件名在textedit 命令后应带上文件名)键入上述命令后进入文本编辑框和Windows 中常用的文本编辑框很象图1textedit文本编辑框界面图中的主菜单File View Edit Find及各自底下的子菜单和Windws中的文本编辑器差不多使用方法相似这里就不多说了编好程序保存可以进行后续工作了三Verilog 的模拟仿真1命令的选择在命令行中键入verilog↙会出现关于此命令的一些介绍如下-f <filename> read host command arguments from file.-v <filename> specify library file-y <filename> specify library directory-c compile only-s enter interactive mode immediately-k <filename> set key file name-u convert identifiers to upper case-t set full trace-q quiet-d decompile data structureSpecial behavioral performance options (if licensed):+turbo speed up behavioral simulation.+turbo+2 +turbo with second level optimizations.+turbo+3 +turbo+2 with third level optimizations.+listcounts generate code for maintaining information for $listcounts +no_turbo don't use a VXL-TURBO license.+noxl disable XL acceleration of gates in all modulesSpecial environment invocation options (if licensed):+gui invoke the verilog graphical environment在上面的参数选择中简单介绍几个常用的:(1)-c首先应该保证所编程序的语法正确性先进行语法的检查选择参数- c键入如下命令verilog –c *.v↙根据Cadence的报告查找错误信息的性质和位置然后进入文本编辑器进 行修改再编译这是个反复的过程直到没有语法错误为止(2)-s进入交互式的环境人机交互运行和下面的参数联合使用(3)+gui &verilog 仿真有命令和图形界面两种方式图形界面友好和windows使用很象很好掌握一般都使用图形方式&”符号是后台操作的意思不影响前台工作如此时你可以在命令行输入其它的命令其它的命令参数选择比较复杂这里就不介绍了故我们这里常用的命令是verilog –s *.v +gui &↙ (*代表文件名)进入图形交互界面$附命令行输入!!↙是执行上一条命令命令行输入!* ↙ (*代表字母)是执行最近的以*开头的命令上述附注对命令输入速度提高有所帮助2SimVision 图形环境SimVision是Verilog-XL的图形环境 主要有SimControl NavigatorSignal Flow Browswer Wactch Objects Window SimWave 等窗口(1)SimControl 窗口此窗口是主要的仿真控制窗口让用户和机器进行交互式操作执行各种Verilog-XL 命令(菜单)进行仿真分析调试你的设计该窗口可以显示设计的模块和模块显示和设置断点强制信号等创建用户自己的按钮和执行经常使用的操作Source Browser2SimControl 窗口界面图I/O RegionMessage Region各部分简介Menu Bar有许多的子菜单让你执行各种模拟仿真命令这里就不一一介绍到使用时在指明其功能和所在位置Tool Bar各种按钮代表最常用的操作和功能能快速对选中的物体执行各种命令你可以在工具条中加入自己定义的按钮来代表常用的操作命令使用Option-UserButtons-Create 菜单项用Options-User Buttons-Edit 菜单项修改修改按钮工具条还显示当前模拟时间当处于交互式的模拟状态时会随模拟更新时间因为工具条按钮的操作为常用操作下面各功能详细介绍一下运行模拟按钮 设置模块按钮 对对象执行操作按钮 调用其它显示窗口按钮放用户自定义按钮 是否显示程序代码 图3SimControl窗口中的工具条a Run Simulation按钮运行模拟若无断点直至完成图标变为停止模拟图标若有断点则运行到断点对应信号再改变的位置b Single Step按钮再任何模块每按一下执行到下一个可执行行即使在子程序中也是单步运行c Step Over 按钮在当前的模块中执行到下一个可执行行在子程序中步单步执行而是一步执行完 子程序d Set Scope 按钮由当前的调试模块转到被选中的模块e Scope Up 按钮由当前模块转到它的上一级模块但若有对象被选中不执行f Show Execution 按钮模拟时更新当前模块显示正在模拟的模块在当前刚执行完的代码行左边有一个箭头g Set Breakpoint 按钮设置断点当模拟过程中被选信号变化时发生代码左边的行号为高亮的可设为断 点灰色则不可以h Set Force 按钮弹出一个窗口里面有当前选中信号的名字和数值用户可以强制信号为一个希望 值i Show Value 按钮n程序代码是否显示的切换按钮显示当前被选信号的数值以下j k l m调用其它调试窗口具体介绍放到后面j打开Navigator窗口k打开Watch Objects 窗口显示被选中的对象l打开Singal Flow Browser窗口把被选中的对象放到浏览器中m打开SimWave窗口显示被选中对象的模拟波形Source Browser显示被调试的程序代码每行左边有行号你可以在其间选择信号和模块这种选择会影响其它工具的操作对象反过来其他工具操作对象的选择也会作用于SourceBrowser信号和对象的选择可在其间设置断点如前所说的在行号为高亮的行可设为断点灰色则不可以可在Source Browser中点鼠标的右键选择菜单进行操作另一个对选择对象的操作是双击该对象如双击信号得到它的数值双击模块则调 到 该模块描述处如图3中的n字母代表的按钮Source Browser可被关掉不显示Scope Region包含scope field 和subscopes field从下拉按钮选择不同的项跳不同的模块对应的Source Browser显示该模块的代码I/O Region显示执行的命令和模拟输出的结果你也可以直接在此键入命令执行操作I/ORegion 也可以被关掉不显示当点击Message Region右边的三角按钮可切换显示与否Message Region显示模拟状态3Navigator 窗口按下图3中j字母所代表的按钮(2)SimControl 窗口Tools-Navigator菜单项(3图8中按下和图3中j字母所代表的按钮一样的按钮打开Navigator窗口此窗口用图形在Scope Tree 中采用树的形式显示设计中各模块的层次关系在Objects List中显出Scope Tree中被选模块的当前模拟数值和描述图4Navigator窗口Menu Bar提供各种命令和操作有下拉菜单(如下面的图5)和右键弹出菜单两种选中对象点击右键可选择对对象操作所需的命令如下面的图6图5 Navigator窗口的菜单图6Navigator中的PoP-Up菜单Tool Bara设置模块 b对选择对象操作 c调用其他显示窗口图7Navigator中的工具条a b c同SimControl窗口中的工具条对应按钮的功能一样都是对选择对象进行相应的操作只是对象可以在SimControl窗口选择也可以在Navigator窗口中 选择互相影响Hierarchy Path显示当前模块的直接路径其他路径不显示可选择其间的模块点击右键弹出菜单进行操作Scope Tree对被选中的模块用树的形式表示出来在图5中Options-Scope Tree…菜单项中有 关于对象显示的的性质有Filters Formatting Layout三栏各有一些选项供 选择影响当前Scope Tree显示的内容Objects List显示当前调试模块里的信号和当前数值在在图5中Options-Objects List…菜单 选项有Filters Formatting两栏会影响Objects List中的显示内容在Selcet 子菜单中的选项(如图5)能选取某一类别的信号如都是Wires型或是Registers 型4Singal Flow Browser窗口该窗口跟踪可疑信号的值进入有三个方法(1) 按下图3中j字母所代表的按钮(2)SimControl 窗口Tools- Singal Flow Browser菜单项 (3) 图7Navigato中 的工具条中字母c的第二个按钮打开窗口(4) Wactch Objects Window中按下图 3中j字母所代表的按钮的一样的按钮界面如下图(没选信号时)8Singal Flow Browser窗口界面Tool Bar Trace fieldMenu对对象的操作命令可查看信号或输入的细节显示信号的驱动可用四种进制显示信号的数值见下图后面会阐述菜单项的功能图8Singal Flow Browser窗口菜单Tool Bar 中的按钮和前面出现的相同的按钮的功能一样这里就不重复了Trace field显示图2 SimControl 窗口Source Browser或者图4Navigator窗口中Objects List所选的信号也可在Trace field输入信号名Driver Frame显示被选的信号和数值以及所有影响该信号的信号及它们的数值假设某个时候的Driver和Value 如下图图9Driver 信号举例如果在上图中选中Driver信号选图8中 View-Driver info…的菜单项将弹出 Driver Details窗口显示信号的详细信息如下图图10Driver 信号Driver Details窗口当选中图9中的Driver 信号选图8中Trace-show inputs菜单项或者双击信 号将得到影响Driver 信号的有关信号的信息如下图图11Driver 信号的inputs信息图再次双击Driver 信号会隐去这些信息5Watch Objects 窗口显示所选信号及其数值当模拟中断时更新数值进入有三个方法(1) 按下图3中k字母所代表的按钮(2)SimControl 窗口Tools- Watch Objects菜单项 (3) 图7Navigator中的工具条中字母c的第一个按钮打开窗口(4) Singal Flow Browser 窗口中按下和图3中k字母所代表的按钮的一样的按钮界面如下图(没选信号时)图12Watch Objects 窗口你可以在打开Watch Objects窗口前选择观察信号如在Source Browser 中点选择信号或在SimControl窗口中(图2)的Select菜单下的菜单项选择或在图4中Navigator窗口的Objects List中选择也可以在打开Watch Objects窗口后 再选择信号如前选择好信号然后点击图12中工具条上的加号图标把选好信号加到窗口中窗口的菜单如下图菜单项的含义都比较明了就不多说了提一下Options-Heighlight Activity项使最新变化的信号项用高亮条表示Options-ContinousUpdate 项使信号随时变化即使按图3中的a Run Simulation按钮也会显示最后的结果否则不显示最后结果图13Watch Objects 窗口的菜单SimWave 窗口显示选择信号的波形和数值图14SimWave 窗口界面四一个示例这里举一个实际工作中编的例子演示前面所讲的内容但不一定面面俱到程序的清单见附录(alu.v)在命令行中敲textedit alu.v↙ 用textedit 编好程序的文本在命令行中敲verilog –c alu.v↙ 编译通过程序.在命令行中敲verilog –s alu.v +gui&↙ 进入交互式图形界面SimControl窗口(见图2)在Scope中选择test.talu在SimControl 窗口中的选中Select-Ports项选择端口按下图3SimControl窗口中的工具条中的k键打开Watch Objects 窗口并如图13选中Options-Continuous ,Highlight Activity两项按下图3SimControl窗口中的工具条中的m键,打开 SimWave 窗口按下图3SimControl窗口中的工具条中的a键,图15Watch Objects 窗口图16SimWave 窗口波形附alu.v源程序module alu(sum,c_out,a,b,c_in,m);output [3:0]sum;output c_out;input [3:0]a,b;input c_in,m;wire c4,cn,cout1;wire [3:0]sum1,a2;assign a2[0]=(b[0]&~m)|(~b[0]&m);assign a2[1]=b[1];assign a2[2]=(b[2]&~m)|(((~b[2]&b[1])|(b[2]&~b[1]))&m);assign a2[3]=(b[3]&~m)|(~b[3]&~b[2]&~b[1]&m);assign {c4,sum1}=a+a2+c_in;assign cn=c4|(sum1[3]&sum1[2])|(sum1[3]&sum1[1]);assign {cout1,sum}=sum1+{1'b0,cn,cn,1'b0}+1'b0;assign c_out=cn;endmodulemodule test;reg [3:0]ta,tb;reg tc,tm;wire [3:0]tsum;wire tcout;alu talu(tsum,tcout,ta,tb,tc,tm);initial$monitor($time,"c_out=%d,sum %d=%d+%d+%d,m=%d",tcout,tsum,ta,tb,tc,tm); initialbeginta=4'b1001;tb=4'b1000;tc=1'b0;tm=1'b0;#10 ta=4'b1001;tb=4'b1001;tc=1'b1;#10 ta=4'b0111;tb=4'b0010;tc=1'b0;#10 tm=1'b1;ta=4'b0111;tb=4'b0010;tc=1'b1;#10 ta=4'b0111;tb=4'b0100;tc=1'b1;#10 ta=4'b0101;tb=4'b0010;tc=1'b1;#10 $finish;endendmodule下图1718是程序对应的电路图图17 BCD码加法器图18 ALU原理图几个打开相关帮助的命令,在命令行中敲入openbook vlogtut&↙ (Verilog-XL Tutorial)openbook vlogref&↙ (Verilog-XL Reference)openbook vloguser&↙ (simwave user guide)openbook simwaveuser&↙ (open the Verilog-XL guide)校内网站ftp10.12.41.35有PC机版Verilog仿真工具如Modelshim,Active HDL4.2版Xilinx的FPGA等等还有Cadence 的一些资料如Verilog-XL Referenceuser_guide等等。
关于verilog的学习经验简单分享
关于verilog的学习经验简单分享 我学verilog语言进行FPGA设计也就半年时间,很多的东西就是在网上学到的,现在想说说自己对使用verilog进行FPGA设计的一些体会,我水平不高,主要是为新手朋友们介绍自己的一点经验少走点弯路。
1、verilog语言 学习verilog最重要的不是语法,因为10%的语法就能完成90%的工作,verilog语言常用语言就是always@(),if~else,case,assign这几个了,不用去专研繁杂的语法,有些问题等你碰到了查查书就好了。
这里推荐夏雨闻老师的《verilog数字系统设计教程》,一本很适合新手的好书。
2、硬件原则 虽然verilog语言很象c语言,但它和c语言还是有本质的区别的,因为verilog进行的是硬件设计,你写出来的东西是实实在在电路,所以要有数字电路的知识是肯定的。
数字电路就是由时序电路(触发器)和组合逻辑电路(各种逻辑门)构成的,用verilog写的程序在FPGA实现就是触发器和逻辑门,所以最重要的就是你对你写的语言生成的电路心中有数,做到这一点你就不会有写出来的程序不能综合的麻烦,电路的冗余逻辑肯定也是最少的。
还要注意一点就是verilog程序是并行的,不是象c那样是顺序执行的,这是因为fpga硬件可配置,可形成不同的任务单元同时工作;而单片机这种基于通用目的,硬件结构也固定了,它处理任务只能一件一件顺序的进行。
3、同步原则 在进行FPGA设计的时候,同步原则应该是最重要的原则之一了,因为异步电路的不可控性,很可能有毛刺产生,而在芯片内部的任何一点毛刺都会一级一级的传递下去,最终影响系统的稳定性。
同步原则用一句话来总结就是不要试图产生自己的时钟,最好一个设计或者一个模块只使用同一个时钟,这样所有的触发器都在同一个时钟沿跳变,当然最稳定了,系统也能跑到很高的速度。
一个小技巧就是多使用触发器的使能端和取沿电路。
4、养成好的代码习惯 很多的细节,比如缩进、命名、参数化、组合逻辑和时序逻辑分离、注释等等,也就是大家说的代码风格。
veriloghdl学习心得
竭诚为您提供优质文档/双击可除veriloghdl学习心得篇一:Verilog学习心得Verilog学习心得因为Verilog是一种硬件描述语言,所以在写Verilog语言时,首先要有所要写的module在硬件上如何实现的概念,而不是去想编译器如何去解释这个module.比如在决定是否使用reg定义时,要问问自己物理上是不是真正存在这个register,如果是,它的clock是什么?D端是什么?Q端是什么?有没有清零和置位?同步还是异步?再比如上面讨论的三态输出问题,首先想到的应该是在register的输出后面加一个三态门,而不是如何才能让编译器知道要“赋值”给一个信号为三态。
同样,Verilog 中没有“编译”的概念,而只有综合的概念。
写硬件描述语言的目的是为了综合,所以说要想写的好就要对综合器有很深的了解,这样写出来的代码才有效率。
曾经接触过motorola苏州设计中心的一位资深工程师,他忠告了一句:就是用verilog描述电路的时候,一定要清楚它实现的电路,很多人只顾学习verilog语言,而不熟悉它实现的电路,这是设计不出好的电路来的.一般写verilogcode时,对整个硬件的结构应该是很清楚了,最好有详细的电路图画出,时序问题等都应该考虑清楚了。
可以看着图直接写code。
要知道,最初Verilog是为了实现仿真而发明的.不可综合的Verilog语句也是很重要的.因为在实际设计电路时,除了要实现一个可综合的module外,你还要知道它的外围电路是怎样的,以及我的这个电路与这些外围电路能否协调工作.这些外围电路就可以用不可综合的语句来实现而不必管它是如何实现的.因为它们可能已经实际存在了,我仅是用它来模拟的.所以,在写verilog的时候应该要先明确我是用它来仿真的还是综合的.要是用来综合的话,就必须要严格地使用可综合的语句,而且不同的写法可能产生的电路会有很大差别,这时就要懂一些verilog综合方法的知识.就像前面说的,脑子里要有一个硬件的概念.特别是当综合报错时,就要想一想我这种写法能不能用硬件来实现,verilog毕竟还不是c,很多写法是不可实现的.要是这个module仅是用来仿真的,就要灵活得多了,这时你大可不必太在意硬件实现.只要满足它的语法,实现你要的功能就行了.有网友说关于#10clk=~clk的问题,虽然这种语句是不可综合的,但是在做simulation和verification是常常用它在testbench中来产生一个clock信号。
ncverilog使用
Ncverilog 使用在NC自带的帮助Cadence NC-Verilog Simulator Help中都可以找到。
以下整理自网络,有点乱 :(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 filefile文件内容: cnt_tb.v(注意把tb文件放在前)cnt.vtb文件中应该包含:initialbegin$shm_open("wave.shm"); //打开波形保存文件wave.shm$shm_probe(cnt_tb,"AS"); //设置探针endA -- signals of the specific scope 为当前层信号设置探针S -- Ports of the specified scope and below, excluding library cellsC -- Ports of the specified scope and below, including library cellsAS -- Signals of the specified scope and below, excluding library cells 为当前层以以下层信号都设置探针,这是最常用的设置方法AC -- Signals of the specified scope and below, including library cells还有一个 M ,表示当前scope的memories, 可以跟上面的结合使用, "AM" "AMS" "AMC"什么都不加表示当前scope的ports;$shm_close //关闭数据库查看结果时可以在source schemic wave register四个窗口同时查看保存波形信号的方法:1.SHM数据库可以记录在设计仿真过程中信号的变化. 它只在probes有效的时间内记录你setprobe 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_PLIPtrfsdb数据库文件的记录方法,是使用$fsdbDumpfile和$fsdbDumpvars系统函数,使用方法参见VCD注意: 在用ncverilog的时候,为了正确地记录波形,要使用参数: "+access+rw", 否则没有读写权限产生FSDB波形文件的若干技巧:/bbs/viewthread.php?tid=2539&;extra=page%3D1下载:/bbs/viewthread.php?tid=3357&;extra=page%3D1ncverilog编译的顺序: ncverilog file1 file2 ....有时候这些文件存在依存关系,如在file2中要用到在file1中定义的变量,这时候就要注意其编译的顺序是从后到前,就先编译file2然后才是file2.,信号的强制赋值force:首先, force语句只能在过程语句中出现,即要在initial 或者 always 中间. 去除force 用release 语句.;initial begin force sig1 = 1'b1; ... ; release sig1; end, force可以对wire赋值,这时整个net都被赋值; 也可以对reg赋值.Verilog和Ncverilog命令使用库文件或库目录ex). ncverilog -f run.f -v lib/lib.v -y lib2 +libext+.v //一般编译文件在run.f中, 库文件在lib.v中,lib2目录中的.v文件系统自动搜索,使用库文件或库目录,只编译需要的模块而不必全部编译Q:我的files里面只有一个help文件夹,里面是一个叫ncprotect文件,没有你所说的hdl.var文件啊A:1、NC-VERILOG在创建工程时会生成两个文件:cds.lib和hdl.var。
Verilog中的一些语法和技巧
1、.2、.3、Reg型的数据类型默认初始值为X。
reg型数据可以赋正值也可以赋负值,但是当一个reg型数据是一个表达式的操作数的时候,他的值被当做无符号数及正值。
4、在数据类型中?和Z均表示高阻态。
5、Reg型只表示被定义的信号将用在“always”模块内,并不是说reg型一定是寄存器或触发器的输出。
虽然reg型信号常常是寄存器或触发器的输出但是并不一定总是这样。
6、Verilog语言中没有多维数组的存在。
Memory型数据类型是通过扩展reg型数据的弟子和范围来生成的。
其格式如下reg[n-1:0]存储器名[m-1:0];7、在除法和取余的运算中结果的符号和第一个操作数的符号位是相同的。
8、不同长度的数据进行运算:两个长度不同的数据进行位运算时,系统会自动地将两者按有端对齐,位数少的操作数会在相应的高位用0填满以便连个操作数安慰进行操作。
9、= = =与!= = =和= =与!= =的区别:后者称为逻辑等是运算符,其结果是2个操作数的值决定的。
由于操作书中某些位可能不定值x和高阻态z结果可能是不定值x。
而 = = =和!= = =运算符对操作数的比较时对某些位的高阻态z和不定值x也进行比较,两个操作数必须完全一致,其结果才是1,否则是0.10、非阻塞和阻塞赋值方式:非阻塞赋值方式(如a<=b)上面语句所赋得变量值不能立即被下面语句所用,(2)快结束后才能完成这次赋值操作 3在编写克综合的时序逻辑模块时这是最常用的赋值方法。
阻塞赋值(如a=b)赋值语句执行完后,块才结束 2 b的值在赋值语句完成后立即执行 3在时序逻辑使用中,可能产生意想不到的结果。
11、模块的描述方式:(RTL为寄存器传输级描述)“(1)数据流描述方式:数据流行描述主要用来描述组合功能,具体用“assign”连续赋值语句来实现。
分为两种a、显式连续赋值语句;连线型变量类型[连线型变量为快]连线型变量名Assign #(延时量)连线型变量名=赋值表达式;显式连续赋值语句包含了两条语句;第一条是对连线型变量的进行类型说明的说明语句;第二句是对这个已得到声明的连线型变量进行连续赋值语句。
NCVerilog设计秘诀与点评
NCVerilog设计秘诀与点评NCverilogNCVerilog设计秘诀与点评1. * S) ]8 E. K" x% ZThis approach allows completely transparent mixed language, mixed-level, and mixed cycle-event simulations. It also lays the foundation for mixed signal simulations. ' y+ l3 s- ? E, q + C' J9 o+ Y4 C' w c2.External Interface:(1) VHDL: VHPI,OMI(2) Verilog: PLI, VPI, OMI% F9 z9 W1 G( J( [$ y(Modelsim和VCS也有这个功能)(PLI用的比较多,仿真器一般自带常用的PLI。
)8 s: s: o: u' _. a( y3 k( Z$ y(如果需要添加FSDB支持,需要将debussy提供的libpli.dll和libpli.lib 拷贝到tools/lib下面)_/ Z {; m X9 X+ ]; t E7 Y3. After elaboration, Single executable code stream, Affirma NC Simulator; ) P# J) n. h% [" D4.Code Coverage5. Verilog supported: $ e: Y1 k( @: f1 h/ j(1) OVI 2.0; 3 `8 t0 [- N0 i- o(2) IEEE 1364;(3) Verilog-XL implementation;6. NC-Verilog use: Library.Cell:View 0 [" {/ k" r, Z/ _4 }cds.lib: This file contains statements that define your libraries and that map logical library names to physical directory paths. 7 S f8 ~# `$ n8 L# h4 j% O+ Whdl.var:This file defines which library is the work library. ( c3i7 y6 e/ Y# T, F* q7. You can write a setup.loc file to change the directories to search or to change the order of precedence to use when searching for the cds.lib and hdl.var files. & T& R$ o6 ]5 ?1 O+ f, [2 a8. (仿真器的“构成-步骤”:ncvlog-parse,ncelab-elaborate,ncsim-simulate). {6 n/ o( s% [% u0 w" Q S& Y Single-step invocation: ncverilog : a parser called ncvlog; an elaborator called ncelab to build the model, and then invokes the ncsim simulator to simulate the model.Multi-step invocation: invoke ncvlog, ncelab, and ncsim separately. => : G0 K3 k- p: o) AThe cell binding mechanism is the major difference between the two invocation methods.9.ncpack:change the properties of a database to make it read-only or add-only. . E0 l& n1 q2 h) /; p" y3 `9 Yinca.architecture.lib_version.pakinca.sun4v.091.pakncls utility: list the objects contained in the library system,10. Library files protect:(1) file locking mechanism: ncpack -unlock, to unlock a file(2) signal handling mechanism ensures that any unexpected event, 0 _! X8 i. A( g! F+ S, C9 P5 r$ J: o0 T0 q) |11. cdsdoc:To invoke the Cadence documentation window 3 a+ e1 M) k3 ?* j# x: L) M% Jtool_name -helpnchelp [options] tool_name message_code ******* ; o' Q' y. D2 q# H p6 M0 d" hncsim> help [help_options] [command | all [command_options]]11. ; R* X" ^& [! O; A- lNCLaunch is a graphical user interfacenclaunch 3 e$ Q+ J: l3 S; c. O6 F( VSimVision Waveform Viewer,7 e" _1 i' r: y1 D' M* u/ Z12.Many of these options have a corresponding plus option that you ( J$ [8 b% o' t) Ucan use on the ncverilog command.ncvlog -ieee1364 => ncverilog +ncieee1364 4 h D; J8 [ |# _! ~6 aWhen you run ncverilog, the parser is invoked with the -update optionby default. 2 M8 O* k& L$ Y' F) p1 u2 [: ~8 h& f2 d13. ncverilog:(1) +debug. This option turns on read access to all objects in the design. , o' h5 y' Z/ ?1 R=> ncelab -access +r(2) +ncaccess+. Use this option to selectively turn on different kinds of access. * @0 g% D8 Y9 E, c$ g( /2 ve.x.: +ncaccess+r, +ncaccess+r+w - M/ q/ s5 F2 i" e0 b(3) +ncafile+access_file: to specify an access file, # [) j) K8 A' q5 O, Q# G- O/ Q6 Y2 n9 ^2 ]5 cThree access: ) I7 G$ M5 Y$ H1 G$ lEnabling Read, Write, or Connectivity Access to Simulation Objects.14. % d7 l7 A& ?$ R4 m' Rncsim -licqueue: license queue 9 w9 j4 U# W# H6 O( D% K(当license不足的时候,用这个语句可以确保有人退出的时候,你能及时获得license)" A. F8 I* b' B" IThe NC-Verilog simulator command language is based on T cl.TCL input file: +ncinput+filename or +tcl+filename;15.ncverilog.args in the snap.nc directory: command-line options of ncverilog ( r: Q8 N' D2 h6 p- y1 ^ C(所以前一次的命令在彼处有保存): g& D# d* w" E6 T7 P# s! F) v, V2 ccds.lib and hdl.var file in the INCA_libs directory. ! a. k( m; f' N8 k5 W4 ?% ]3 `2 J% S# g5 }- [7 ?All tools share a common log file named ncverilog.log.(查看log文件从而掌握运行时情况是最重要的debug方法之一)& g" t/ g$ D5 f8 y) @) L9 E: s9 s9 `" r: ]/ S0 FDesign units in files specified directly on the command line are compiled into the work library, and design units specified in -y libraries or -v library files are compiled into libraries that have the same names.9 X2 M$ u: `; i: Y( `Writes the SNAPSHOT variable to the hdl.var file in the snap.ncdirectory to store the name of the snapshot used in this run.3 }$ O0 o; L/ l# J---The SNAPSHOT variable in the hdl.var file is used to determine what snapshot wascreated the last time this directory was used.16. The next time you invoke ncverilog, it compares the current set of command-line options to the options stored in the ncverilog.args file. All of the plus options and dash options must be the same and in the same order for the options to be evaluated as equal. $ u6 o5 b2 r9 [8 h% V" B4 ~8 G. w3 x" `; q17. ' T9 N' n: _1 }# r* T( P2 ~4 }. OThe ncverilog +ncuid+ncuid_name option enables functionality in ncverilog that lets you run multiple simulations using the same intermediate objects and the same storage locations. The +ncuid+ option enables this functionality by providing a unique ID name for each simulation. : t7 ?) k* k+ j' S6 /0 G0 y/ y( M% y z18. (命令行参数含义)1 z2 R$ f0 `' B5 /, e+ F8 l+ b1 Gncverilog -h +all+cdslib+path+checkargs: Display a list of the arguments used on the command line. . m/ k: M7 H B6 i; F* T0 B+compile: Run ncvlog to compile the design, but do not invoke ncelab to elaborate the design or ncsim to simulate.+debug:Turn on read access to all objects in the design. 2 y z" K! i; V/ F9 YThis option is the same as +ncaccess+r. & ~( f4 e( F; y `: P( X +elaborate:Run ncvlog and ncelab % g0 C; a( p8 k3 a" L: z$ I +expand: Expand all vectors.+hdlvar+path-h ! J; Z7 a* t/ t3 A* u$ G: d9 x4 n5 n+import:Prepare this Verilog design for import to VHDL.+mixedlang:Search the library structure for a VHDL bindingfor instances that correspond to VHDL import. 9 v" J) q; a% S3 D1 y' H/ @5 n% Z+name+name: Use the specified name for the snapshot and for the INCA_libs/snap.nc directory. 0 v3 i1 h3 i6 O8 ]/ J +ncelabargs+string:Pass the specified ncelab command options to the elaborator before invoking it. 4 c1 q! G8 e3 t0 Y! B; l0 S3 H+ncelabexe+path_to_ncelab+ncerror+warning_code:Increase the severity level of the specified warning message from warning to error. 1 Q* ]$ C/ x7 a* u+ b7 }) s3 V +ncfatal+{warning_code | error_code}: Increase the severity level of the specified warning message or error message from warning or error to fatal.+nclibdirname+directory_name: to change INCA_libs+ncls_all:List all of the objects in all libraries.+ncls_dependents:Show the dependents for each object. & j2 j/ g- s, w0 D: V, Y+ncls_snapshots: List all snapshot (SSS) objects.+ncls_source:Show the source file dependents of each object.+ncsimargs+string $ Q8 F9 W4 M- X. {/ y+ncsimexe+path_to_ncsim+ncuid+ncuid_name+ncvlogargs+string ' X1 _0 O/ Z* l6 `: O7 X+noautosdf:Do not perform automatic SDF annotation. % o. {* Z {1 m+noupdate: prevents the writing of intermediate objects for design units that are up-to-date. + W7 p( g+ e2 G+ ` +ppe:Invoke the Post Processing Environment (PPE). 6 J) |4 _6 f- x -R: Invoke the simulator (ncsim) to simulate the snapshot in the INCA_libs/worklib directory. & Q% `, ^6 B( c [-r snapshot: Load the specified snapshot.+sdf_orig_dir:Put the compiled SDF file in same location as the original SDF file.+work+library_name:Use the specified library as the work library. ( K9 Z6 @0 ^8 G" [6 J-c Compile and elaborate only. //same to Verilog-XL & {0 M! O. P+ x& I 4 A; h( w% N& F* h0 T% m* C' W20. , S. ]4 b( g6 e* e& p3 A( kncverilog:+tcl+filename,+ncinput+filename:The NC-Verilog simulator command language is based on Tcl.21.The compiled SDF file:dcache.sdf.test1.X). " E% r2 L4 /9 [# n0 W: L6 QSnapshots are always named lib.cell:ncuid_name22. $test$plusargs% ncverilog -R +userarg 0 ~9 `! {7 j3 u2 L- r% ncverilog -R +some_other_userarg 3 |$ I& c7 q; w/ C% E5 v: E. N0 e3 S1 g- ?( T& O) b4 U7 T0 }( v23. // To understand the concept of Snapshot ; l! V9 e$ [1 L1 T- h! Ex% ncverilog source.v +ncuid+test1 # O: f( s1 r9 P' ~/ r$ V% ncverilog source.v +ncuid+test2Two snapshots are generated in the INCA_libs/worklib directory: worklib.top:test1 and worklib.top:test2.you generate two snapshots using the following command lines: $ o- p% |7 Q w: }1 c! J, /% ncverilog source.v +elaborate ) I+ a' J5 e: z+ o, E+ f% ncverilog source.v +elaborate +ncaccess+r+nclibdirname+MYINCA_libs +name+debug + ]' r8 L, R) ?$ V+ K- v => T o simulate this snapshot: 6 z9 A# a4 A% k6 d4 l! j % ncverilog -R +nclibdirname+MYINCA_libs +name+debug [+simulator_options]/doc/6e7742356.html,ing -r to Simulate a Saved Snapshot:% ncverilog -f verilog.vc +elaborate & F4 o" W* T9 |! q3 c% ncverilog -R -sncsim> run 1000ncsim> save save1ncsim> exit * [5 x& f, q7 T8 e//To simulate the saved snapshot, specify the snapshot name with the -r option,% ncverilog -r worklib.save1:v // or: ncverilog -r save1 2 q% {4 h) v5 c4 S/ @; ?' j=> Simulation Environment: + O! ^/ |' X; v" I* M: ^. ^' eIf you want to restore the full Tcl debug environment when you restart with a saved snapshot, make sure that you save the environment with the save -environment filename command. This command creates a Tcl script that captures the current breakpoints, databases, probes, aliases, and predefined Tcl variable values. You can then use the +ncinput+ option when you invoke ncverilog to execute the script, or you can invoke ncverilog in interactive mode with the -s option and then use the Tcl source command to source the script.. c$ k$ t1 S [3 l1 {ncsim> save -environment ckpt1.tcl * X) d3 ^2 B7 l& F$ /% U" G% R/ d! K$ ancverilog -s -r worklib.top:ckpt1 +ncinput+ckpt1.tclNote: If you set a breakpoint that triggers, for example, every10 ns (that is, at time 10, 20, 30, and so on) and restart with a snapshot saved at time 15, the breakpoint triggers at 20, 30, and so on, not attime 25, 35, and so on. * }( ?9 L7 P3 t( B0 M# A* }4 ^- r: B8 z& C' Z2 M6 l, G( Z25. 6 x. X" d# {+ M. s6 ?-R: The -R option lets you simulate the same snapshot multiple times using different simulatorcommand-line options.6 ?0 ~& I/ a8 D$ {$ D; /- {. Q-r: You can use the -r option to load a snapshot. - F) R+ o9 q;g) ]- M! E8 G2 j26.SDF versions 1.0, 2.0, 2.1, and 3.0. For versions 2.0 and above, use the SDFVERSION statement in the header of the SDF file to specify the version. # S1 p% O5 p; V& H+ C3 {; H. X- ESDF annotation is performed during elaboration. The elaborator recognizes $sdf_annotate system tasks in the design source files, ! I1 y+ @9 y! t; Nto override the default automatic SDF annotation mechanism and force annotation by using the +sdf_cmd_file+filename option , y. P+ j.d) a8 K3 u. i# M# v2 H" @& B3 }, }2 X9 E4 A( F- y8 LSDF: The NC-Verilog simulator reads only compiled SDF files.(1) text SDF file, cpu.sdf, ' L; W2 ~9 G. V" v6 B(2) compiled file: cpu.sdf.X.ncsdfc utility to automatically compile the SDF file.+ j: T" ]& Z$ ~9 BUsing $test$plusargs to Selectively Perform Annotations:if ($test$plusargs( preroute )) 4 b1 v2 R% W3 /% j+ V$sdf_annotate( preroute.sdf , m1);else if ($test$plusargs( postroute )) 8 s1 G& ^9 e6 R z$sdf_annotate( postroute.sdf , m1);The ncsdfc utility always compiles the SDF file with a precision of 1 fs. The elaborator annotates each module using the precision of the module or the precision set by using the ncelab -sdf_precision command_line option. 8 ? t- C7 L; `. /! o1 ?! ?8 H! E& P3 o. k. l0 s( V30.Turning Off SDF Annotation: * o. @% q/ d# Y; W3 h% Q. s0 x6 V (1) Use the +noautosdf option on the ncverilog command line. . J& W% b- H8 f I9 w(2) Comment out the $sdf_annotate system task(s) in the Verilog source file.31.+sdf_cmd_file+filename32.You can use the -ieee1364 command-line option when you compile the design with ncvlog and elaborate the design with ncelab to check your code forcompatibility with the IEEE standard. + P1 H( o" |, W! l6 E* H$ P3 y33. IEEE 1364 - 1995 Verilog: array of instances, bufif0 ar[3:0] (out, in, en); // array of tri-state buffers However, an array of instances must have a continuous range.34. Set up your environment: 2 ^* I- E* X {0 x! R% s( pcds.lib , Z9 o- j- k4 [. qhdl.varsetup.loc35. 7 R. K) ~: H# R/ F2 O+ U4 BVerilog: module, macromodule, or UDPVHDL: entity, architecture, package, package body, or configuration % s1 I% z- V# h, `7 V: J% h: |3 T+ r: h+ k. z) e/ {36. * O4 h; _4 V7 Tinternal intermediate objects: ' B) g" w" R- b. u( W+ tlibrary database file (.pak file) * C- K6 v+ c% L( /! M8 p+ n5 A7 s" Y) h: U6 f1 G37.cds.lib: 9 w; /& m0 ?9 I3 r8 @DEFINE worklib ../worklib ' C' m0 G. D: {0 r" i# JDEFINE lib_std /usr1/libs/std_lib6 s+ n9 n/ X+ i7 g3 t7 X$ b- F% u1 wYou can have more than one cds.lib file.Use the INCLUDE or SOFTINCLUDE statements to include a cds.lib file within a cds.lib If you are doing a pure VHDL or a mixed-language simulation, you must use the INCLUDE or SOFTINCLUDE statement in the cds.lib (System provide one) SOFTINCLUDE is the same as the INCLUDE statement, except that no error messages are printed if the file does not exist.8 z/ q* Y% w# u7 {$ m0 z, V38. Binding One Library to Multiple Directories:DEFINE iclib ./ic_lib 3 W( R- c; Y4 X3 ~ASSIGN iclib TMP ./ic_tmp_lib...UNASSIGN iclib TMP ; F5 i, U- T6 P& {0 D38. -- can be used to check the content of the cds.lib # Q- o/u# /5 k& w4 Q0 j% nchelp -cdslib 6 A8 {, W5 @9 }( {# C) H- s39. hdl.lib ; d' ]3 a# x0 J( y1 Y# fDEFINE WORK worklibDEFINE VERILOG_SUFFIX (.v, .vg, .vb)NCVLOGOPTS -messages -errormax 10 -update 1 O- G. l, i" B! q* N6 | U40. hdl.var% nchelp -hdlvar ; m3 H7 [' E _9 q; t8 a41. view & snapshot(1) The file mychip.v gets compiled into the default module view:worklib.mychip:module.It is created after compile, (ncvlog)(2) The elaborator generates a simulation snapshot for the design. * K+ I, j+ /5 C; a8 `) N" ZIntermediate objects created during the elaboration phase are stored in the .pak file.The snapshot is also a Lib.Cell:View. 9 q1 W" Y" S1 N; P. @3 y! Z9 p3 x+ }source =>(compile)=> module =>(elaborate) => snapshot => simulation, , M. /) R. `( g1.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 scropeS -- Ports of the specified scope and below, excluding library cellsC -- Ports of the specified scope and below, including library cellsAS -- Signals of the specified scope and below, excluding library cellsAC -- Signals of the specified scope and below, including library cells还有一个M ,表示当前scope的memories, 可以跟上面的结合使用, "AM" "AMS" "AMC"什么都不加表示当前scope的ports;$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数据库也可以记录信号的变化,它的优势是可以跟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_PLIPtrfsdb数据库文件的记录方法,是使用$fsdbDumpfile和$fsdbDumpvars系统函数,使用方法参见VCD注意: 在用ncverilog的时候,为了正确地记录波形,要使用参数: "+access+rw", 否则没有读写权限3. ncverilog编译的顺序: ncverilog file1 file2 ....有时候这些文件存在依存关系,如在file2中要用到在file1中定义的变量,这时候就要注意其编译的顺序是从后到前,就先编译file2然后才是file2.4. 信号的强制赋值force首先, force语句只能在过程语句中出现,即要在initial 或者always 中间. 去除force 用release 语句.initial begin force sig1 = 1'b1; ... ; release sig1; endforce可以对wire赋值,这时整个net都被赋值; 也可以对reg赋值.我们知道,由于NC-Verilog使用了Native Compile Code 的技术来加强电路模拟的效率,因此在进行模拟时必须经过compile(ncvlog 命令)以及elaborate(ncelab命令)的步骤。
verilog实用的小技巧
verilog实⽤的⼩技巧
(之后还会持续的更新)
移位操作的实现:
verilog有⼀种⾮常简单的移位操作实例如下:
reg [3:0] source;
reg out;
{out,source[3:0]}={source[3:0],1'b0};//向左移位。
且不循环
{source[3:0],out}={1'b0,source[3:0]}//向右移位,且不循环
{out,source[3:0]}={source[3:0],source[3]};//向左循环移位
切记不能使⽤多驱动对同⼀个⽹线进⾏赋值:
编译verilog时往往会出现如下错误:Error (10028): Can't resolve multiple constant drivers for net "cnt[24]" at TIME_Ctr.v(37),这是初学者往往遇到的错误,这是受C语⾔代码的影响所造成的。
也就是⼀个
变量往往在多个always语句中赋值,会产⽣竞争与冒险的⾏为,所以我们写在⼀个always语句中也只对⼀个变量赋值。
verilog不同于其他的编程语⾔的特点(并发性)要时刻的铭记于⼼。
在编写testbench的注意事项
1. 仿真调⽤模块时应尽可能的⽤按端⼝进⾏赋值。
2. 仿真的模块的输⼊应为reg类型,输出应该为线⽹类型,这点要注意这和函数的形参传值不⼀样,这个是相当于是⽤外部寄存器或是线
⽹来链接这个模块,这点要⾮常的注意!(其实顶层在调⽤⼦模块的时候也是⼀个道理)
3. clock仿真的时候⼀定要赋予初始值要不然就会保持⾼阻态的状态。
Verilog设计小技巧
Verilog(FPGA/CPLD)设计小技巧(来自Xilinx)这是一个在设计中常犯的错误列表这些错误常使得你的设计不可靠或速度较慢为了提高你的设计性能和提高速度的可靠性你必须确定你的设计通过所有的这些检查可靠性**为时钟信号选用全局时钟缓冲器BUFG• 不选用全局时钟缓冲器的时钟将会引入偏差 。
**只用一个时钟沿来寄存数据• 使用时钟的两个沿是不可靠的因为时钟的某沿或者两个沿会漂移; 如果时钟有漂移而且你只使用了时钟的一个沿你就降低了时钟边沿漂移的风险。
• 这个问题可以这样来解决就是允许CLKDLL自动纠正时钟的占空比以达百分之五十的占空比否则强烈建议你只使用一个时钟沿**除了用CLKDLL或DCM产生的时钟外不要在内部产生时钟.• 这包括产生门控时钟和分频时钟• 作为替代可以建立时钟使能或使用CLKDLL或DCM来产生不同的时钟信号。
• 对于一个纯同步设计建议你在任何可能的情况下只使用一个时钟**不要在内部产生异步的控制信号 例如复位信号或者置位信号• 内部产生的异步控制信号会产生毛刺• 作为替代可以产生一个同步的复位/置位信号这个信号的译码要比需要作用的时刻提前一个时钟周期**不要使用没有相位关系的多个时钟• 你也许并不总能避免这个条件在这些情况下确定你已使用了适当的同步电路来跨越时钟域**不要使用没有相位关系的多个时钟• 再次你也许并不总能避免这个条件相反许多设计都需要这样在这 些情况下确定你已适当地约束了跨越时钟域的路径**不要使用内部锁存器• 内部锁存器会混淆时序而且常常会引入另外的时钟信号• 内部锁存器在透明门打开时可以被看成是组合逻辑但在门被锁存时 可以被看成是同步元件这将会混淆时序分析• 内部锁存器常常会引入门控时钟门控时钟会产生毛刺使得设计变得不可靠性能**逻辑级的时延不要超过时序预算的百分之五十• 每个路径逻辑级时延可以在逻辑级时序报告或布局后时序报告中找到详细分析了每个路径之后时序分析器将生成每个路径时延的统计量检查一下总共的逻辑级时延超过了你的时序预算的百分之五十吗?**IOB 寄存器• IOB寄存器提供了最快的时钟到输出和输入到时钟的时延• 首先有一些限制对于输入寄存器在从管脚到寄存器间不能有组合逻 辑存在对于输出寄存器在寄存器和管脚之间也不能有组合逻辑存在对于三态输出在IOB 中的所有的寄存器必须使用同一个时钟信号和复位信号而且IOB三态寄存器必须低电平有效才能放到IOB中三态缓冲器低电平有效所以在寄存器和三态缓冲器之间不需要一个反相器• 你必须使软件能够选用IOB寄存器你可以设置全局实现选项为输入 输出或输入输出选择IOB寄存器缺省值为关(off)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 ropeS -- Ports of the specified s cope and below, excluding library cellsC -- Ports of the specified s cope and below, including library cellsAS -- Signals of the specifie d scope and below, excluding library cellsAC -- 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 stepncverilog的三步模式为:ncvlog(编译) ncelab(建立snapshot文件) ncsim(对snapshot文件进行仿真)基于shell的ncverilog操作(尤其是单步模式)更适合于大批量操作ncverilog的波形查看配套软件是simvision,其中包含原理图、波形、信号流等查看方式三命令模式:ncvlog -f run.fncelab tb -access wrcncsim 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 filefile文件内容: cnt_tb.v(注意把tb文件放在前)cnt.vtb文件中应该包含:initialbegin$shm_open("wave.shm"); //打开波形保存文件wave.shm$shm_probe(cnt_tb,"AS"); //设置探针endA -- signals of the specific scope 为当前层信号设置探针S -- Ports of the specified scope and below, excluding library cellsC -- Ports of the specified scope and below, including library cellsAS -- 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_PA TH :$LD_LIBRARY_PA TH(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_PLIPtrfsdb数据库文件的记录方法,是使用$fsdbDumpfile和$fsdbDumpvars系统函数,使用方法参见VCD注意: 在用ncverilog的时候,为了正确地记录波形,要使用参数: "+access+rw", 否则没有读写权限附:本人刚开始学习NCVerilog和Debussy, 有一点小小的心得与大家分享。
工作环境是sun服务器。
假定我的设计文件为alu.v, alu_test.v(第二个是testbench).1、在alu_test.v中加入如下代码initialbegin$fsdbDumpfile("alu.fsdb"); // 创建fsdb文件供Debussy调用,这样就可以观察波形了,名称自定义。
$fsdbDumpvars(0,alu_test); // alu_test为alu_test.v中的顶层模块名end2、ncverilog +access+r alu.v alu_test.v3、debussy alu.v alu_test.v &这样就可以在debussy中打开fsdb文件来看波形了。