ncverilog Verilog - tutorial 文档 - 图文

更新时间:2024-04-24 20:00:01 阅读量: 综合文库 文档下载

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

Candence NC-Verilog simulator tutorial

第一章 介绍

这个手册将向你介绍使用NC-Verilog simulator和SimVision。

本文使用的是一个用Veilog硬件编程语言编写的一个饮料分配机,通过这个例子你将学会:

·编译Verilog源文件,描述设计,在NC-Launch(用于管理你的大型设计的图形交互接口)上进行设计的仿真。NCLaunch帮助你配置和启动编译器,描述器和仿真器。当然你还可以在NCLaunch上运行像SDF compiler,HDL Analysis and Lint, Code Coverage Analyzer, NCBrowse, and Comparescan.之类的工具。

·在SimVision分析环境下进行对设计中的问题的调试。

SimVision是一个candence 仿真器统一的图形化的调试环境。

SimVision可以用于调试用verilog,vhdl,SystemC或者它们混合写成的数字,仿真,或数模混合电路的设计。 你可以在以下几种模式运行SimVision: ·Simulate模式

在Simulate模式下你可以实时的看到仿真的数据。也就是说,你可以在仿真仿真的过程中就进行数据的分析。你可以通过对设计设置断点和分步来达到控制仿真的。

为了帮助你追踪整个仿真过程,SimVision提供了几个工具:

·控制台窗口 Console Window ·源浏览器 Source Browser ·设计浏览器 Design Browser ·循环阅读器 Cycle Viewer

·原理图追踪 Schematic Tracer ·信号流浏览器 Signal Flow Browser ·波形窗口 Waveform Window ·寄存器窗口 Register Window 这些窗口之间是连接了的,所以如果你在一个窗口中选中了一个对象,那么在其它窗口中也会被选中。

·Post-processing environment (PPE)模式

在PPE模式下,对仿真结果数据的分析是在仿真过程结束了后进行的。除了仿真器之外,你能访问所有的SimVision的工具。就像Simulator模式中一样,这里所有的窗口也是连接了的,你在一个窗口中选择了的目标也会在其它窗口中选中。要在PPE模式下运行,你必须先对设计进行仿真,然后把仿真的资料存到一个文件中,你可以随时从simulation模式切换到PPE模式,但是不能在PPE模式切换到simulation模式中去。

本指南将向你介绍SimVision的主要几个工具: 控制台Console window:

Console window允许你输入tcl仿真的命令和SimVision的命令。 Design Browser:

Design Browser让你进入设计的各层,以及信号和变量的数据库。

Register window:

Register window让你可以使用一个开放式的图形编辑

器来定义一些记录簿,每个都包含了一个自定义的仿真数据的观点。

Signal Flow Browser:

Signal Flow Browser让你追踪信号的变化。

Source Browser:

Source Browser让你可以看到设计的源代码。

Waveform window:

Waveform window把仿真的资料在X-Y坐标系里面描绘出来。数据通常被显示为值和时间的关系,但是它也可以是已经记录下了的数据。

饮料机的例子

饮料机由以下几个模块组成:

Drink-machine:用于计算用户给了的钱,对饮料进行分发,并且给用户找钱。

Coin-counter:用硬币和机器相连,并且确定机器什么时候没有找头了。 Can-counter:用饮料和机器相连,并且确定机器什么时候没有饮料了。 这个例子同样有一个测试模块,它用于初始化饮料机并且用nickel(五美分),dime(十美分),quarter(二十五美分)的不同组合对机器进行投币来买饮料。对于接受硬币和分发饮料的行为被建模成一个状态机。用户已经投入的硬币总量决定了当前的状态。接下来用户投入的硬币的类型决定了下一个状态。举例来说,当没有钱投入的时候,机器处于空闲状态。当用户投入一个nickel的时候,机器进入下一个状态——five。当当前状态是five的时候用户又投入了一个quarter,机器就进入了下一个状态——thirty。当用户投入的钱到了五十美分的时候,机器就分发一罐饮料,同时进入空闲状态。 当用户投入的钱超过了五十美分的时候,机器分发一罐饮料,找回零钱,然后进入空闲状态。

表 1—1 饮料机的状态表 当前状态 idle 4`d0 变化值 下一状态 five 4`d1 ten 4`d2 twenty_five 4`d5 ten 4`d2 fifteen 4`d3 thirty 4`d6 fifteen 4`d3 twenty 4`d4 thirty_five 4`d7 twenty 4`d4 twenty_five 4`d5 forty 4`d8 twenty_five 4`d5 thirty 4`d6 forty_five 4`d9 thirty 4`d6 thirty_five 4`d7 fifty 4`d10 thirty_five 4`d7 forty 4`d8 nickel_out 4`d11 forty 4`d8 forty_five 4`d9 dime_out 4`d12 forty_five 4`d9 fifty 4`d10 nickel_dime_out 4`d14 fifty 4`d10 nickel_out 4`d11 two_dime_out 4`d14 idle idle idle idle idle nickel_in dime_in quarter_in five 4`d1 nickel_in dime_in quarter_in ten 4`d2 nickel_in dime_in quarter_in fifteen 4`d3 nickel_in dime_in quarter_in twenty 4`d4 nickel_in dime_in quarter_in twenty_five 4`d5 nickel_in dime_in quarter_in thirty 4`d6 nickel_in dime_in quarter_in thirty_five 4`d7 nickel_in dime_in quarter_in forty 4`d8 nickel_in dime_in quarter_in forty_five 4`d9 nickel_in dime_in quarter_in fifty 4`d10 nickel_out 4`d11 dime_out 4`d12 nickel_dime_out 4`d13 two_dime_out 4`d14 更多的信息

SimVision还提供了其它的没有在这个指南里面用到的工具。

工具/Feature 介绍 原理描述器显示了用Verilog或者Vhdl编写的设计的原理图,可以让你描述在设计中的信号。 在SimVision的用户指南里面看12章,看一个设计的示意图。 Simulation Cycle Debugger Simulation Cycle Debugger让你在一个仿真过程中,在各个时间点,Delta Cycle,仿真阶段,或者是时间进行过程中停止。它对于Verilog-XL或者AMS是不可用的 看SimVision 用户指南的11章:在Delta Cycle 层面上进行调试 第二章 开始

在你仿真你的设计以前,你必须编译和描述它。编译过程将把源文件中的用HDL编写的单元编译成内在的描述。描述设计将在设计的实例化,结构化信息的基础上建立设计的层次结构,建立信号的连接,计算所有对象的初始值。你编译,描述和仿真你的设计要用到以下的工具:

Ncvlog: 编译Verilog源文件。

ncelab 描述设计并且生成仿真的snapshot。 ncsim 对snapshot进行仿真仿真。

当然你也可以利用ncverilog的命令以一步实现(single-step)的模式来运行NC-Verilog。你也可以使用单一的工具,NCLaunch——一个可以帮助你建立大型的设计工程的用户图形接口平台。NCLaunch帮助你配置和启动仿真的工具。 你可以在多步实现(multi-step)或者单步实现(single-step)的模式下运行这些工具。它也可以让你打开 Comparescan, SDF Compiler, HDL Analysis 和 Lint, Code Coverage Analyzer, NCBrowse, 以及其它仿真仿真的工具。这个指南将向你展示怎么在多步实现(multi-step)的模式下使用NCLaunch。

拷贝指南的数据

本例的所有源文件包含在Candence的安装包中。源文件在下面的这个地址: install_dir/doc/ncvlogtut/examples 建立一个新的檔夹(比图说:tutorial), 然后拷贝指南的文件到这个檔夹。例:

mkdir tutorial cd tutorial

cp install_dir/doc/ncvlogtut/examples/* .

启动NCLaunch

1. 在你拷贝了指南的源文件的那个檔夹下启动NCLaunch: nclaunch -new &

-new选项指名你想要在一个新的设计(design)下面进行接下来的工作。 NCLaunch将出现一个你能运行这个工具的模式的列表,如图2.1。

图2.1NCLaunch运行模式选择

多步模式(Multiple Step)使用ncvlog和ncelab命令来编译和描述你的

设计;单步模式(Single Step)使用ncverilog命令。 2. 选择Multiple Step.

NCLaunch显示的主窗口如图2.2 :

图2.2 NCLaunch主窗口

左边的窗口显示了当前目录下的所有的文件,在你编译和描述了设计以后,右边窗口就会显示设计的库。上面是菜单和一些用于启动工具的按键。

编译(compiling)源文件

在你仿真仿真你的设计以前,你必须用编译器编译源文件,并且用描述器(elaborator)把设计描述成snapshot的形式。Snapshot是仿真器将调用的你的设计的表述,它和其它由compiler和elaborator产生的中间目标一起保存在库中。

NCLaunch的主窗口让你可以连接你编译和描述设计所需要的工具,当然还有其它的程序。你利用Tools和Utilities菜单,或者你也可以利用工具栏里面的工具按钮,你可以打开工具和其它程序。不是所有的工具和程序都放在工具栏里面,但是你可以通过自己定义工具栏来确定把自己喜欢的工具和程序放在工具栏里面。

表2-1例出了在工具栏里面的工具。

表 2-1 NCLaunch工具栏的按钮 按钮 工具 VHDL 编译器(compiler) Verilog 编译器(compiler) 描述器(Elaboretor) 仿真/仿真器(Simulator) NC浏览(NCBrowse) 波形察看窗口(Waveform Window) 1.编译你的设计:

选中在设计时建立的Verilog文件: can_counter.v coin_counter.v drink_machine.v drink_machine_top.v test_drink.v.

要选择多个檔,需要按住Ctrl键并选中每个檔。

2.按下编译器按钮:

在窗口底部的输入输出区域会显示由于你的选择而输入的命令和运行后的结果,同时它也显示了NC-Verilog在编译过程中的消息。

默认的,NC-Verilog将产生一个叫INCA_libs的目录以及一个叫worklib的目录。所有设计中的模块都将编译在worklib目录下面。注意INCA_libs现在就出现在了NCLauch左边的浏览器中,同时设计的库worklib也加入了库浏览器(右边窗口)中。

描述(elaborate)你的设计

要描述(elabrate)你的设计,典型的你要展开你的库(worklib),选择顶层(top-level)的单元,然后选择描述(elabrate)按钮。

尽管如此,为了做一个指南,这里在你描述以前你必须设置一些选项。按照以下几步进行选项的选择然后描述你的设计:

1.通过电击帽子图示旁边的加号展开工作库(worklib)

2.展开顶层设计单元,在这个例子中,顶层设计单元是一个Verilog的测试模块:test_drink.

3.选择module

4.选择Tools- Elaborator以打开Elaborate模式,如图2.3

注意这里的Access Visibility按钮选中并且它的值是All,这个选项意味着全部存取(读,写,连接探测)来仿真目标,这样你就可以在仿真的数据库里面探测目标和范围,调试你的设计。

注意:在使用NCLaunch时,默认是可以调用仿真目标的。但是用命令行接口的时候,进入默认是关闭了的,你必须要输入-access命令来启动elaborator,例:

ncelab -access +rwc worklib.test_drink:module

5.在这个饮料机中只有一个模块包含了时间表的编译指示。因为其它模块都没有定义时间表,为了防止elaborator报错,这里启动Other Option选项然后再文本框输入-timescale 1ns/1ns,如图2.3: 6. 按下OK以开始描述(elaborate)设计。

底部的输入输出窗口显示了ncelab命令,它就是由于你的选择而输入的命令,然后还显示了the elaborator generates的消息。 提示 如果你收到了elaborator error的消息你可能是由于在运行这几步的时候出错了。例如:

1.你是不是选择了正确的设计单元名称? 2.是否记得设置-timescale的选项

当你收到了错误的消息以后重新进行这些步骤。

启动Simulator

为了启动simulator:

1.展开Snapshots文件夹,以显示在你的库中你可以选择的snapshot。 2.选中你想要仿真的snapshot,如图2.4

图2.4 选中要仿真的snapshot

3.按下仿真按钮

设计浏览器(Design Browser)和控制窗口(Console window)就会出现。你可以在设计浏览器(Design Browser)中进入设计的各个层,你也可以在控制窗口(Console Window)输入命令来进入SimVision和Tcl Simulator。

图2.5展示了设计浏览器(Design Browser)打开时的情况。 Simvision把仿真定位在了各层的上面,同时给它定义了名字叫做Simulator。设计的各层的最高层就放置在了仿真的下面。在这个例子中它就叫做test_drink。

图2.5 Design Browser

在启动的时候,控制窗口(Console Window)有两个窗口,如图2.6。SimVison窗口让你可以输入SimVison的命令;仿真器(simulator)窗口让你可以输入Tcl simulator命令。在你运行仿真的时候,控制窗口(console window)同样会在SimVision和simulation窗口中显示消息。

图2.6 Console Window

Video :视频

编译和描述设计文件。

退出NCLaunch

调用了仿真器(simulator)以后,你就可以退出NCLaunch了。 要退出NCLaunch:

·点击NCLaunch窗口使之成为当前窗口,然后选择File菜单下的Exit。

更多的信息

本章向你介绍怎么用NCLaunch让NC-Verilog运行在多步的模式下。其实还有其它的方法为你的设计仿真做准备。 工具/要素 描述 NCLaunch 你可以利用NCLaunch ncverilog support一步完成编译源文件,描述设计,启动仿真器,见NCLaunch User Guide。 NC-Verilog, 你可以编译了源文件,描述了设计然后用ncvlog,ncelab和Multiple Step ncsim命令启动仿真器(simulator),见NC-Verilog Simulator mode Help 中的Multi-Step Invocation (Library-Based Mode章节。 NC-Verilog, 你可以用ncverilog命令完成对源文件的编译和描述。见Single Step NC-Verilog Simulator Help的Single-Step Invocation with mode ncverilog 章节

第三章 设计仿真

SimVision让你控制和查询你的设计仿真。 他可以帮助你定位和特定的仿真事件相关的程序段。如果你发现设计中有错误,你可以直接编辑源文件,重新编译和描述,而不用离开SimVision的环境。

SimVision中你可以存储个别目标或者范围的仿真数据,这可以使得仿真数据尽量的小。晚些时候,你可以在Waveform中加载仿真数据再检验仿真的结果。 选择存储的仿真数据

你可以执行simulator命令来存储仿真器运行过程中的仿真数据。Simulator 命令在仿真过程中对设计进行探测,然后它把探测目标的值存入数据库。

有两种类型探测的命令:

·探测一个特殊的目标或多个目标。这些特殊目标的值存在数据库中。 ·探测一个特殊的范围或多一个范围。你可以选择你想存储的信息类型,比如说,这个范围内的输入信号,你能决定探测的是探测一些还是全部的范围。

要探测所有的模表和范围,要从模块的top开始:

1. 在设计窗口中,点击test_drink 图示旁边的加号,展开设计的层次结构。

2. 选择top范围。在右边窗口里面的信号的列表列出了top范围内的全部信号,如图3.1。信号列表显示了所有输入信号,输出信号,输入输出信号,内部信号,或者事务级的信号。 。

图3.1 选择top范围

3.选择菜单Simulation--〉Create Probe

SimVision打开Probe的设置窗口,如图3.2,这个窗口允许你选择一层或者多层子范围,选择你要探测的信号类型, 然后记录探测信息到任何数据库。

图3.2 设置probe的窗口

针对这个探测: ·选择Include sub-scopes下拉菜单中的all选项以包含所有设计的子域。 ·选择Include within each scope下拉菜单中的all选项以包含输入,输出 和端口。

·取消选中Add to waveform display。

4. 点击OK确认probe的设置然后关掉窗口。 提示

如果你在控制窗口(console window)输入以下信息你就可以成功的创建probe:

ncsim> database -open waves -into waves.shm -default Created default SHM database waves

ncsim> probe -create test_drink.top -depth all -all -shm Created probe 1

5. 在控制窗口(console window)中选择Simulation—〉Run。SimVision就会仿真仿真设计,然后把仿真的结果数据存在默认的数据库里面。在它运行的时候将会显示如下信息:

ncsim> run 400loading machine with 5 cans

400 *** machine empty! *** 700 enter nickel 900 enter dime 1100 enter quarter 1300 enter dime 1500 enter quarter

1500 ->drink dispensed

------------------------------- 1800 enter nickel 2100 enter nickel 2300 enter dime 2500 enter dime

2600 *** machine empty! *** 2700 enter quarter 2700 nickel changed 3000 enter nickel 3200 enter dime 3400 enter quarter 3600 enter dime 3800 enter quarter

3900 -> drink dispensed

------------------------------- . . .

------------------------------- 68400 enter quarter 68700 enter nickel 69000 enter nickel 69200 enter dime 69400 enter dime

Simulation complete via $finish(1) at time 69600 NS + 0 ./test_drink.v:48 $finish; ncsim>

提示

当你完成了这些步骤,你的工作目录下面将会出现一个新的名为waves.shm 的目录,它里面包含了waves.dsn和 waves.trn两个文件。如果它们的大小分别远小于65500bytes和360bytes,那么在仿真过程中你就没有探测到了所有的

目标。

为了纠正问题,在控制窗口(console window)中选择Simulation—〉 Reinvoke Simulator重新启动simulator或者退出simulator再用下面的命令重新启动simulator:

ncsim -gui worklib.test_drink:module 然后重新执行本章讲的几个步骤。 更多的信息

本章描述了设置探针(probe)和运用控制窗口(console window)来启动仿真器(simulation)。尽管如此,还有其它的方式来运行以上的步骤,如下: Tool(工具)/Feature(内容) Description(描述) $shm_open 你可以在你的Verilog源文件中调用这些$shm_probe 系统任务。当你仿真你的设计的时候,这些系$shm_close 统任务打开你的数据库,设置探针到希望的目标,当你仿真结束的时候又关闭数据库。 在你的 NC-Verilog Simulator Help中参阅Displaying Waveforms with the SimVision Waveform Viewer章节以得到这些系统任务的具体细节。 database -open probe 你可以从tcl命令行接口中调用-create run simulator命令,或者你也可以把它们都打包在一个命令文件中,以批处理模式来运行。 参阅你的NC-Verilog Simulator Help 中probe,database和run的章节 Simulation database 为了疹错的方便你可以为不同的设计建立management (仿真数据管理) 包含各自设计成份的不同的仿真数据库。或者你可以用其它工具打开数据库。 查阅SimVision User Guide第六章Managing Simulation Databases Probes (探针) 你可以打开,关闭探针,也可以删除探针,或者你还可以在工具窗口中创建新的探针。当然你还可以就在Waveform窗口中增加一个信号的探针而不用设置探针的窗口来增加 参阅SimVision User Guide第七章 Creating and Managing Probes。 Breakpoints (断点) 或许你想仿真运行到某点的时候就停下来这样方便你检查运行的状态。为了控制仿真在哪里停下可以设置breakpoint 查阅SimVision User Guide第八章Setting and Managing Breakpoints Simulation control (仿真控你可以运行一个仿真到breakpoint停止,制) 然后进入一个子程序。你也可以存储仿真的状态,或者是检查点,然后在那个点重新启动仿真。 参阅SimVision User Guide第十章Controlling the Simulation

第四章 以波形的形式研究仿真的资料

波形显示了信号在仿真过程中任意事件的值,它可以帮助你很好地理解你的设计的行为

波形窗口(waveform window)可以让你选择你想要看的信号以及它在显示的时候的基数,甚至你还可以自己建立一个显示的形式,叫做mnemonic map(助记符映射),这样就可以让图以你最适应的方式显示。 选择显示的信号

在设计浏览器(Design Browser), 你可以选择目标然后把它们放到波形窗口(Waveform window)中

为了要选择你想要显示的信号到波形窗口(Waveform window)中:

1. 点击Edit Buffer

按钮打开edit buffer,如图4.1。edit buffer

让你可以在不同的范围内选择目标,安排他们以你希望的顺序显示,然后把它们都列到波形窗口(Waveform window)中去

图4.1打开edit buffer

2. 在top模块中选择你想要在波形窗口(waveform window)中显示的信号。为了取样检查,选择nickel_in, dime_in, quarter_in, dispense, nickel_out, dime_out, two_dime_out, and clk 信号。当你点击各个信号的时候,SimVision把它们加入到edit buffer中去。

3. 展开top,然后在vending模块中选择current_state 把它加入edit buffer中去。

4. 点击Waveform中显示。 5. 点击

按钮,让这些信号在波形窗口(waveform window)

隐藏 Edit Buffer按钮,使edit buffer 在设计浏览窗口收

回。

Displaying Data in the Waveform Window

在波形显示窗口(waveform window)中,信号的名字和它们的当前值都显示在了窗口的左边,它们的波形显示在了右边。如图4.2:

图4.2 有波形显示的波形显示窗口(waveform window)

提示

你可以在一个有工具条的波形显示窗口(waveform window)中进入设计浏览或者是设计搜索的窗口中去。更进一步的讲解请查阅SimVision User Guide中的 Using the Design Browser Sidebar 和 Using the Design Search Sidebar

在波形窗口(waveform window)中,在波形数据的上方,你可以看到当前窗口中仿真的数据的启始和终止时间。在波形数据的下方的滚动条显示的是整个仿真的时间。你可以通过输入一个新的时间范围来调整当前窗口中显示的波形数据的范围

为了输入一个新的范围: 1.在Time Range 文本框中输入一个时间段. 在这个例子中,输入的是0:3000, 如图4.3:

图4.3 输入一个新的时间段

2.点击Enter键以应用新的时间段。

3.在波形数据上方的下拉菜单中选择Keep this view ,这样你就可以保存你的缩放设置。如图4.4:

任意时刻,你能通过下拉菜单选择来快速地回到显示这个缩放段

图4.4 存储一个波形资料的情景

在波形窗口(waveform window)中有两个指标,分别叫做TimeA和Baseline。你可以把它们移到仿真时间的任意点,然后以它们为参考点。

输入一个新的仿真时间: ·你可以拖动指标到你想要探测的时间点,也可以在指标时间输入文本框中输入一个仿真时间来实现目的。

例,改变TimeA的仿真时间到16,700ns,如图4.5:

图4.5 设定指针时间

控制波形数据的显示

波形窗口(waveform window)让你可以控制波形数据的显示方式,比如说你想让信号数据在什么进制下进行显示。

例,要把的current_state显示变成十进制:

1. 在波形窗口(waveform window)的目标列表中选择current_state 。 2. 在Format—〉Radix/Mnemonic菜单中选中Decimal(十进制)

当观察一个波形的时候,有时候把信号的值显示成ASCII码串很有用。比如说,当current_state的值是1的时候,用户投入了5美分;当current_state的值是2的时候,用户投入了10美分。把current_state的波形显示成5和10比显示成1和2更容易理解。

要把信号定义信号值为ASCII串,需要定义一个mnemonic map:

1. 选择Windows—〉Tools—〉Mnemonic Maps打开Mnemonic Maps的属性设置窗口,如图4.6:

图4.6 Mnemonic Maps的属性设置窗口

当你定义了一个mnemonic map,你不仅可以定义特殊信号的文本显示方式,而且你还可以定义值在波形窗口(waveform window)中的显示方式 ,包括波形的形状,联合一个值的特殊情况的图示和颜色。

2. 点击新建Map

按钮,新建一个 mnemonic map.

3. 定义mnemonic map的第一个入口,如下: a. 改变默认的进制,点击’h 不放然后选择’d. b. 双击Values Matching…区域,输入0, 然后按Tab键,进入Relabel As… 区域。

c. 在Relabel As…区域, 键入串idle然后按Tab键进入下个目标的Values Matching…

前面的区域显示了Waveform窗口会在current_state 等于0的时候怎么显示。它将显示一个里面写着idle的长方形。

4.定义下面的状态: Values Matching Relabel As 0 idle 1 five 2 ten 3 fifteen 4 twenty 5 twenty_five 6 thirty 7 thirty_five 8 forty 9 10 11 12 13 14 forty_five fifty nickel_out dime_out nickel_dime_out two_dime_out 5. 在名字的区域里面,改变新的map给current_state。 6. 点击Apply按钮。

现在current_state的十进制值0,1,10,等等就被显示成了idle,five,fifty,等等, 如图4.7:

图4.7 由于Mnemonic Map信息所显示的值

7. 选择—〉File—〉Close Window关闭选项窗口。 更多的信息

本章描述了一些你显示和组织信息在波形窗口(waveform window)中显示的方法。其它有些工具和内容可以对你显示波形的时候有帮助: Tool/Feature Description Design Search Window(搜索你可以不必关心各层的结构而在几个数据库里窗口) 面搜索信号,变量和范围 参阅SimVision User Guide第五章Searching for Design Objects Groups and expressions(组你可以把信号列到一起或者列在一个式子里面。 和等式) 这些动作可以让你把信号的设置看成一个信号的实体 参与SimVision User Guide第十五章Organizing Signals into Groups, Expressions, and Comparisons。 Markers(指针) 你可以放置类似于指针的标记在仿真的时间轴上面。你可以在各个标记之间切换以对比仿真在不同时间的结果。但是你不能用标记与测量的作用。 参阅SimVision User Guide第十六章, Navigating through Simulation Time Measurement window (测量窗你可以在一个特殊的仿真时间点上建立一个用口) 于测量变量的特征值的平台。比如说,你可以看它们的范围,最大值,最小值。在测量相似的信号的性质的时候这个就非常有用。 参阅SimVision User Guide 第二十章Measuring Signal Values。 Preferences (参数设置) 你可以指定工具栏在SimVision 窗口中的风格, 设置波形窗口(waveform window)的默认值,为源浏览器(source browser)选择文本编辑器,另外也可以设置SimVision 。 参阅SimVision User Guide 第二十一章Setting Preferences Simulation Cycle DebuggerSimulation Cycle Debugger让你可以让你看到(仿真循环调试器) 整个仿真过程, 在任意时间点停止,delta cycle,仿真暂停 ,或者执行预定进程。它对Verilog-XL or AMS 的设计者来说是不可用的。. 参阅SimVision User Guide 第十一章Debugging at the Delta Cycle Level

第五章 设计的调试

波形显示窗口(waveform window)可以帮助你找到设计中的错误。通过定义环境,情况来观察波形数据,从而找到错误发生的地方。当你找到了错误的地点,你就可以对设计的源文件进行编辑,然后再运行simulator来检验你改变后的程序。

搜寻波形中的环境,情况

环境,情况是一个你想要观察的在波形窗口(waveform window)中的信号的值的组合。比如说,你可以定义一个环境发生的条件是dispense信号和nickel_out信号的值是一样的时候:

1. 在波形窗口(waveform window)中选择quarter_in和dispense信号,然后选择Edit –〉Create—〉Condition.

SimVision 将打开Expression Calculator,如图5.1:

图5.1 Expression Calculator 窗口

Expression Calculator创建一个默认的由AND(与)逻辑 组成的等式。这个状况表达式在两个信号有相同值的时候为真。 如果你想观察其它的情况你可以编辑这个表达式。

2. 在名字输入框中键入状况表达式的名字,比如说: quarter_inANDdispense.

3. 点击波形按键,以便把状况的波形加入到波形窗口(waveform window)。 4. 选择File—〉Close Window关闭Expression Calculator窗口。 5. 在波形窗口(waveform window)中选择这个状况,然后运用Next Edge

和Previous Edge

按钮用于定为状况发生的地点

分析波形,找出错误。

分析波形可以帮助你找到设计中的问题,例:

1. 把仿真的时间定位到16,700 ns。

在这个时候,机器的状态是空闲

提示

这里其实有很多办法可以设置仿真时间。 ·在指标时间文本框中输入你想要的时间。 ·拖动第一个指针到你想要的时间去

·选中dispense信号,然后噢点击Next Edge 按钮移植到它到了你想要的时间。

2. 选中current_state信号然后点击Next Edge按键,以便跟上由时钟周期到时钟周期的事件先后顺序。

·用户投入一个nickel, 机器进入下一个状态five。 ·用户再投入一个dime,机器就进入了fifteen状态。 ·用户再投入一个quarter, 机器则进入了状态forty。 ·用户再投入一个dime, 机器进入状态fifty. 在这个时钟周期中,用户还投入了quarter。你当然会希望它会立马变到状态 twenty_five, 但是实际上却不是。机器进入空闲状态,然后给 dispense 赋值为1;quarter被忽略了。当在下一个时钟周期下开始的时候 ,用户投入了一个nickel,机器就装入状态five.

图5.2显示了错误发生的波形 。在这个时间之内,机器出一罐饮料,然后机器进入空闲状态,quarter_in信号变高电平。当用户再投入一个neckel的时候机器就进入了状态five。

图5.2 查找设计中的错误

3. 在Time Range区域,在下拉列表中选择keep this Vie,这样你就可以

很方便的再回来查看这个错误的。 Video

在波形窗口(waveform window)中分析仿真结果。 创建自定义的仿真数据查看

另一个分析仿真结果的方法是运用Register窗口,在那里你可以创建自定义的仿真数据的查看,包括了自由形式的文本输入以及图形化的要素。 一个 Register窗口可以有几页,每页都有自己的显示方式。

在Register窗口中创建页:

1. 在波形窗口(waveform window)中选择你想要分析的信号,比如说,nickel_in,dime_in,

quarter_in,dispense,nickel_out,dime_out,two_dime_out,clk,and current_state.

2. 点击Click the Register 按钮,以便把信号送入到Register 窗

口中去,如图5.3:

图5.3 加入信号到Register窗口

窗口右边的按钮让你可以在窗口中自由地画图形化的目标,文本,还有管理目标布局。当你把鼠标放在这些按键上面的时候就会有快速提示,告诉你按键的作用。

3.把mnemonic map应用到register窗口中来,选择current_state信号 然后选择Format—〉Radix/Mnemonic—〉Current State.

4.把目标按照你的希望来排列。图5.4的布局表现了输入信号 nickel_in, dime_in,和quarter_in,和clk-状态机, current_state,和输出信号 dispense, nickel_out,dime_out,和two_dime_out之间的关系。

图5.4 一个自定义的布局

5.键入仿真时间,比如说16700ns。

Register窗口会更新信号的值然后显示出来。

6. 选择一个信号,比如说current_state,然后点击Next Edge

按钮。

时间轴会自动运行到该选中的信号的下一个电平边沿,然后Register窗口

会更新各个信号的值,并把它们的值显示出来。 7. 点击Previous Edge

按钮,会使得仿真时间轴向选中信号的前一

个电平边沿变化。

8. 在仿真时间的16700ns开始,选择current_state信号,然后点击Next Edge

按钮,就可以在Register窗口中看到和波形窗口(waveform

window)中看到的一样的 事件队列,那是:

·用户增加一个nickel,机器进入下一个状态:five。 ·用户再增加一个dime,机器进入下一个状态:fifteen. ·用户再增加一个quarter,机器进入下一个状态:forty. ·用户再投入一个dime,机器进入下一个状态:fifty. Video

在Register窗口中的仿真分析结果 修改源代码中的错误

你可以利用SimVision按照以下的步骤来查找有源文件有错误的地方: 1. 在波形窗口(waveform window),选择current_state变量然后选择

Explore—〉GoTo--〉Cause.

信号流浏览器(signal flow browser) 将显示你选择的信号和它的驱动的列表。

2. 点击Source Browser

按钮打开源浏览器(source browser)。

3. 在信号流浏览器(signal flow browser)里面,选择第一个驱动: assign

current_state = 0, 如图5.5:

图 5.5 信号流窗口(signal flow browser)中显示的驱动

源浏览器(source browser)正指向把current_state 设置成idel一行,如图5.6:

图5.6 在源浏览器(Source Browser)中显示的源代码

4. 向下滚动信号流浏览器(signal flow browser)的滚动条,你可以看

到驱动列表还有其他的地方current_state被设置成了0。点击这些驱

动观察源代码中那些地方使得事件的发生

注意’fifty把current_state设置成了’idle, 但是它没有检查是否还有硬币投入。

5. 要修正在饮料机中的这个问题,在Source Brower中选择Edit—〉Edit

File然后再状态及中加入必要逻辑。比如说:

’fifty : //4 d10 begin dispense <= 1; if (nickel_in == 1) begin

current_state <= five; end

else if (dime_in == 1) begin

current_state <= ten; end

else if (quarter_in == 1) begin

current_state <= twenty_five; end else begin

current_state <=’idle; end end 重要!

你可以复制上面的代码然后粘贴到源文件中去,但是注意要确保粘贴后核对符号朝向正确的方向,否则仿真将会失败。

6.保存改变。

7.在Source Browser中,选择Simulation—〉Reinvoke Simulator。 注意:如果Reinvoke对话框出现,选择Yes。SimVision会重新编译和描述设计,然后重新启动仿真器。 全部已经打开的SimVision窗口将会重新打开,同时你自己定义的mnemonic map 和condition继续有效。

8. 在控制窗口(console window)中,选择Simulation—〉Run产生新的仿真数据。

9. 在波形窗口中(waveform window),显示你先前存下来的地点,你可以

看到机器状态变化可以正确的显示为twenty_five了。 结束SimVision Session 要退出SimVision:

1. 在任意SimVision窗口中选择File—〉Exit SimVision。 2. 如果Waveform窗口还是开着的,在窗口中选择File—〉Exit SimVision

SimVision会显示一个确认窗口。

3. 点击yes,推出和关闭所有SimVision的窗口。 更多的信息

本章介绍了调试程序的一些基本步骤。你还可以找到其他的一些有用的工具和内容来进行程序调试:

Tool/Feature 描述(Description) 测量窗口 你可以建立一个在一段仿真时间段中选中的变量的测量列(Measurement 表。比如说,你可以看值,斜率,最大最小值,这是在分析window) 波形时很有用的道具。 参阅SimVision User GuideSee第二十章Measuring Signal Values

注:在实际使用的时候28页要求的修改程序段

Source Brower中用使用File—〉Edit File不能修改源文件

这里我是直接进入文件夹打开源文件找到需要修改的地方来修改的源文件。

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

Top