当前位置:首页 » 编程软件 » modelsim脚本仿真

modelsim脚本仿真

发布时间: 2022-02-10 17:44:51

1. modelsim编译后仿真不通过

你编写的程序里应该有个子程序吧?? mux??
你调用了mux这个子程序。。。但是工程里没有这个文件。。。。

2. modelsim仿真

我用你的程序仿真出来了,正确的,有波形啊.
我想你是不是应该把testbench也就是testsim.v和sim.v一起编译,然后在Library你的编译后的两个文件一起选中然后右键选择simulate,再在Sim标签里面把testsim右键选择add to wave,最后run all就OK了,如果还不行QQ上联系吧..我演示给你看= =|||(因为我不是二级用户..所以没有办法上传图片)

3. 如何用Modelsim仿真

step1:在qurtus改变编译选项:
assignments->EDA tool setting:选择verilog还是vhdl。

step2:编译。你会在你的工程所在目录 看到一个simulation的目录,这里面有你生成的网表文件和标准延时文件。

step3:在目录:\quartus\eda\sim_lib找到你选用器件对应的库文件,将库文件和网表文件以及延时文件和testbench文件放在同一目录,在modelsim里进行编译库文件、网表文件以及bench文件。

step4:编译成功后,然后进行load,在load design的时候,需要制定延时文件的路径,以及延时文件作用的区域,延时文件的左右区域就是testbench里面调用顶层文件取的名字。

step5:打开signal窗口(view->signal)和wave窗口(view->signal),将你希望仿真的信号添加进去。

Step:仿真。。。

利用ModelSim SE6.0C实现时序仿真!!!
1) 打开一个工程文件。
2) 打开Settings设置栏,选择EDA Tools Settings下的Simulation栏。在右边出现的设置栏中将“Tool name”的下拉菜单选择“ModelSim(Verilog)”(如果工程用VHDL语言实现,则可以选择“ModelSim(VHDL)”;如果ModelSim使用的是for Altera的专用版本,则可以选择“ModelSim-Altera(Verilog)”或“ModelSim-Altera(VHDL)”)。
另外在设置栏中还有其他的核选框。
如果选中“Maintain hierarchy”,则表示在做时序仿真时就能看到像在功能仿真的工程文件层次结构,可以找到定义的内部信号。因为在做后仿时,源文件中的信号名称已经没有了,被映射为软件综合后自己生成的信号名,观察起来很不方便。这个设置与ISE里综合右键属性的Keep Hierarchy选择YES的功能是一样的。
如果选中“Generate netlist for functional simulation only”,则表示只能做功能仿真。
3) 点击 “Start Compilation”按钮编译工程,完成之后在当前的工程目录下可以看到一个名为“Simulation”的新文件夹,下面的“ModelSim”文件夹下包括仿真需要的.vo网表文件和包含延迟信息的.sdo文件。
4) 打开ModelSim软件(或者在Quartus下“Settings->EDA Tools Setting->Simulation”出现的设置栏中选中“Run this tool automatically after compilation”,直接从Quartus下调用ModelSim软件),可以在当前工程目录下新建一个Project。在Project标签栏内点击右键,出现在快捷菜单中选择“Add to Project->Existing File…”。加入当前工程目录的“\Simulation\ModelSim\”路径下的.vo文件、TestBench文件和对应当前工程所选择器件的网表文件。
比如:当前工程选择的器件是Cyclone系列,Quartus安装目录在“C:\altera”路径下。因此需要在“C:\altera\quartus50\eda\sim_lib”路径下找到“cyclone_atom.v”的网表文件导入到ModelSim下的Project。如果是其他器件亦是如此,只要在此目录下找到对应有“_atom”后缀的.v文件。当然整个大前提是ModelSim SE版本已经加入了Alterta的仿真库,不过ModelSim-Altera版本就不会存在这样的问题。

5) 在出现的Project标签栏的快捷菜单中选择“Add to Project->Simulation Configuration”,会出现如上图所示的名为“Simulation1”的仿真配置。右键点击选择“Properties”,弹出的“Simulation Properties”对话框中有几个标签栏。
在“Design”标签栏内需要选择仿真的文件,也就是TestBench文件。

在“SDF”标签栏内需要选择包含延迟信息的文件,即Quartus下生成的.sdo文件。这里建议将.sdo文件与ModelSim的工程文件(.mpf文件)放在同一个目录下,不然ModelSim会报类似无法读取.sdo文件的错误。当加入.sdo文件时,需要在如下图所示的“Apply to Region”的编辑框内填写延迟信息文件作用的区域。
举个例子来说明:
TestBench文件中定义了测试文件的Mole名称为ConvEncdTestBnch。
TestBench文件中调用待测顶层文件的实例名为top_encode_1。(top_encode top_encode_1(clk, rst, dataIn, serialData, parData);这是TestBench文件中调用顶层的语句)
所以在作用区域内需要填写“/ConvEncdTestBnch/top_encode_1”。

6) 右键点击名为“Simulation1”的仿真配置,快捷菜单中选择“Execute”命令,执行仿真。
7) 指定延时文件sdo 路径时,特别注意“域”的指定,否则用户会在timing 仿真中报load error “can’t find instance file”. 指定的域可以从sim标签页查看sim 的top 层,或要仿真的对象。另外,时序仿真时,一定要记住要把顶层top.v 用 top.vo 替换。同时要确保预编译的库中每个库的名字必需遵循altera的要求,比如:cylcone 的device 库必需命名为cycclone, maxii 的device命名为maxii, flex10Ke 和acex1K 都命名为flex10Ke,详细查看文档附件。Simulation.pdf
8) 提供一个testbench 的模板。

利用ModelSim SE6.0C实现功能仿真
功能仿真流程比较简单,一般不会出现什么问题,这里不再多述。

4. 怎样用modelsim做后仿真

建一个工程 file -> new -> project... 此时会弹出一个Creat Project对话框,输入一个工程名,选择保存路径 (不要包含中文),其他默认就行了;
2.点OK后会弹出一个Add items to the Project,里面有几个可选项,应该很容易明白;
3.添加好文件后,点close把Add items to the Project对话框关闭,这时在左侧的workspace的project窗口里可以看到刚才添加的文件,双击可以打开这些文件进行编辑,编辑好后保存;
4.右击刚才编辑好的文件compile -> compile select(或根据自己需要选其他项),如果没有错误,则在底部的命令窗口可以看到编译成功的消息(呈绿色),否则会出现出错的消息(呈红色),双击它会弹出一个更具体的窗口提示你出错的地方.
5.修改所有错误直到编译成功.这时可以在菜单栏选择Simulation -> Start simulatio... 这时会弹出一个Start simulatio的对话框,在Design的标签下你会看到有很多库,展开work库会看到刚才编译成功的文件(如果有多个文件的话选择一个你想仿真的,比如测试程序,这时底部的OK会由刚才的不可用变成可用的),然后把Opitimization选项下的Enable opitimization前复选取消(这样可以保证过会儿所有的输入输出都可以看到,你可以试试不取消这项有何区别),然后点OK就行了.
6.选择view -> Objects就可以看到你想仿真的各个量,选中它们并右击Add to wave -> Selected signals,这时就会弹出一个波形仿真窗口.如果你的测试文件写得没问题的话就可以看到仿真波形,你也可以观察底部的命令窗口察看相关信息.
7.如果没写测试文件的话,在波形仿真窗口右击相关信号,选择force...设置想仿真的值或clock...把该量设置为时钟,然后点工具栏上的Run或Simulation菜单下的Run.

5. 如何使用bat文件和do文件生成不依赖路径的modelsim仿真

一.DO文件的简介和工作方式

DO文件是一次执行多条命令的脚本。这个脚本可以像带有相关参数的一系列ModelSim命令一样简单,或者是带有变量,执行条件等等的Tcl程序。可在GUI里或系统命令提示符后执行Do文件。
由于TCL脚本语言内容很多,本人是刚学不久,菜鸟一个。但是针对我们这门课程的话,有些基本常用的语法还是值得提一下的,方便大家一起学习交流,如果以下内容有什么写错了,希望大家提出并批评,互相进步。
首先,我们如何建立DO文件呢?
方法挺多,一种是可以打开Modelsim,执行File/New/Source/Do命令,进入Do文件编辑方式,在编辑窗口输入仿真批处理文件的代码,以.do为扩展名保存文件。当然也可以在windows系统中新建一个记事本,在“另存为”的时候写上.do的后缀名,也是一种方法。 调用方式是在Modelsim的Transcript窗口中使用指令:do filename.do,完成对设计的自动化仿真。

下面简单讲讲仿真的步骤。首先我们要对一个设计进行仿真呢,我们一般需要进行以下几个步骤:
①创建一个工程和工程库;
②加载设计文件(包括你编写好的testbench);
③编译源文件;
④运行仿真,并查看结果;
⑤最后进行工程调试。
而do文件,就是把上述的步骤①---④用tcl脚本语言来编写出来,让Modelsim来运行该do文件宏命令,并自动执行仿真的步骤。这种好处也许在小设计中没怎么表现,但是如果在一个大的工程中,常常需要对一个设计单元进行反复的调试和仿真,但是仿真时的设置是不变的,这时如果使用了do文件,把仿真中使用到的命令都保存下来了,就可以节省大量的人力,提高了工作效率。

下面将对照一个简单的例子counter.do,讲一下我们常用的一些基本指令。
PS: do文件的注释是由#开始的,但不可以在代码行后面添加,只能另起一行。
正确的是:
vlib work
#新建一个work库
错误的是:
vlib work #新建一个work库

编写名为counter.do的文件,其内容为下:
vlib work (对应仿真步骤①:新建work库。该命令的作用是在当前目录下建立一个work目录,请注意不要直接在windows中新建一个work的文件夹,因为用操作系统建立的work文件夹并没有ModelSim SE自动生成的_info文件。)
vmap work work(对应仿真步骤①:该命令的作用是将目前的逻辑工作库work和实际工作库work映射对应。也可以直接用指令“vmap work”表示将work库映射到当前工作目录下。)
vlog counter.v counter_tb.v (对应仿真步骤②③:编译counter.v和counter_tb.v文件,默认编译到work库下。该命令的作用是编译这些文件,要注意的是文件可以单独分开编译,但是一定要先编译被调用的文件。假如是VHDL文件,只需要把指令vlog换成vcom即可。)
vsim work.counter_tb -t 1ns (对应仿真步骤④:仿真work库中名为counter_tb的模块,最小时间单位为1ns。)
add wave/counter_tb/ * (该命令的作用是将testbench文件camera_tb.v中模块camera_tb下所有的信号变量加到波形文件中去,注意在“*”前要加空格。这时候你也可以看到wave文件被打开。当然也可以单个信号的添加,例如添加时钟:add wave clk 等等。)
run 2000 (该命令的作用是运行2000个单位时间的仿真。也可以用run –all命令来一直仿真下去。)
这时候就可以在wave窗口文件中看到你的仿真结果。当然也可以观察其它窗口的结果,用view *命令显示 。view *命令可以观察包括signals、wave、dataflow等窗口文件,也可以分别打开。例如用view signals来观察信号变量。
以上就是do文件的一些基本TCL脚本语言的使用,写得比较简单,但是其实复杂的也就是在添加信号线那里add wave 有比较多的参数设置而已,主要的指导仿真流程的指令还是这几条。
编写好DO文件之后,在Modelsim中,将工作目录切换到counter.v、counter_tb.v和counter.do三个文件所在目录下,然后在Transcript窗口中的命令行输入 do counter.do即可。切换工作目录的方法如下图1,点击Change Directory:

图1

PS: 如果在仿真的时候要修改.do文件,需要现在modelsim里运行quit -sim,退出仿真,然后修改.do文件,再保存,然后再重新执行do filename.do指令即可。
小技巧Tips:
为了区分仿真波形窗口中的各种信号线,需要信号波形作设置,如不同信号线的颜色、显示基数、显示方式等要有区别,这时就需要在仿真波形窗口单独对每一个信号线手动进行设置,这对于不断修改源代码然后再不断地进行仿真来说,非常麻烦。
这里,我说一下有个简单的自动生成这类个性化设置DO文件的方法。首先,我们需要先进行一次仿真,在波形窗口的时候先手动对需要的信号线进行一定的设置,如下图2所示:

图2

然后,点击wave窗口左上角的save图标,会出现一个保存DO文件的窗口,如图3所示:

图3
它的路径Pathname表示Modelsim自动在当前的默认目录下新建了一个wave.do的DO文件,我们可以自己修改保存的路径和DO文件名。
接下来我们来看一下上面保存的wave.do文件,打开如下图4所示:

图4

由wave.do文件中,可以见到我们定义的那些不同颜色、不同显示方式所用的TCL脚本语言,如add wave -color Yellow /freq_meter_tb/i1/freq_data表示让该freq_data信号显示黄色…如add wave -noupdate -radix decimal /freq_meter_tb/i1/div_coef 表示让div_coef信号用十进制decimal来显示…其他的信息可以对照自己的波形设置一一对应上,其他依次类推。
细心的同学会发现这个DO文件根本不完整,基本都是一些add wave,即是对每个信号的各种设置的TCL代码而已。不错,因为它缺少了我们之前所讲的仿真步骤①②③④,那么我们可以利用上面已学过的TCL语言来补完整它。
如在前面加上一下语句,使这个DO文件包括了仿真过程的完整指令,包括新建工作库、编译源文件、仿真testbench文件等:
vlib work
vmap work work
vlog freq_meter.v
vlog freq_meter_direct.v
vlog freq_meter_tb.v
新的DO文件如下所示:

图5
至此,该DO文件才能用来实现较完整的自动化仿真。

二.交互式命令
通过在主窗口的命令窗口输入命令来实现,具有更好的调试和交互功能,提供多种指令,既可以是单步指令,也可以构成批处理文件,用来控制编辑、编译和仿真流程;
常见交互式命令如下:
1.force-repeat指令
指令格式:force 开始时间 开始电平值,结束电平值 忽略时间(即0电平保持时间) -repeat 周期
force clk 0 0,1 30 -repeat 100 表示强制clk从0时间单元开始,起始电平为0,结束电平为1,0电平保持时间为30个默认时间单元,周期为100个默认时间单元,占空比为70%。
指令功能:每隔一段的周期重复一定的force命令,用来产生时钟信号,也可用来产生周期的输入信号,如01010101,00110011等。
2.force指令
指令格式:force item_name value time,value time;item_name为端口信号或内部信号,支持通配符号,但只能匹配一个;value不能默认,time,可选项,支持时间单元;
force din 16#40900000 从当前时刻起给din赋值16进制40900000;
force bus 16#F @100ns 在100ns时刻给bus赋值16进制F;
force clr 1 100 经历100个默认时间单元延迟后为clr赋值1;
force clr 1,0 100 表示clr赋值1后,经历100个默认时间单元延迟后为clr赋值为0;
3.run指令
指令格式:run timesteps time_unit,timesteps时间步长,time_unit时间单元,可以是fs、ps、ns、us、ms、sec;
指令功能:运行(仿真)并指定时间及单元;
run 100, 表示运行100个默认时间单元;
run 2500ns, 表示运行2500ns;
run -all, 表示运行全过程;
run -continue, 表示继续运行
4.force-cancel指令
指令格式:force-cancel period
指令功能:执行period周期时间后取消force命令;
force clk 0 0,1 30 -repeat 60-cancel 1000,表示强制clk从0时间单元开始,直到1000个时间单元结束;
5.view指令
指令格式:view 窗口名
指令功能:打开Modelsim的窗口
view souce,打开源代码窗口;
view wave,打开波形窗口;
view list,打开列表窗口;
view varibles,打开变量窗口;
view signals,打开信号窗口;
view all,打开所有窗口;

6. 用MODELSIM进行仿真时,如何调用和自己模块相关的仿真库

把你可能用到的器件库用modelsim编译好了,以后用到的时候就很方便了

7. 如何用Modelsim进行后仿真

step1:在qurtus改变编译选项:
assignments->EDA tool setting:选择verilog还是vhdl。

step2:编译。你会在你的工程所在目录 看到一个simulation的目录,这里面有你生成的网表文件和标准延时文件。

step3:在目录:\quartus\eda\sim_lib找到你选用器件对应的库文件,将库文件和网表文件以及延时文件和testbench文件放在同一目录,在modelsim里进行编译库文件、网表文件以及bench文件。

step4:编译成功后,然后进行load,在load design的时候,需要制定延时文件的路径,以及延时文件作用的区域,延时文件的左右区域就是testbench里面调用顶层文件取的名字。

step5:打开signal窗口(view->signal)和wave窗口(view->signal),将你希望仿真的信号添加进去。

Step:仿真。。。

利用ModelSim SE6.0C实现时序仿真!!!
1) 打开一个工程文件。
2) 打开Settings设置栏,选择EDA Tools Settings下的Simulation栏。在右边出现的设置栏中将“Tool name”的下拉菜单选择“ModelSim(Verilog)”(如果工程用VHDL语言实现,则可以选择“ModelSim(VHDL)”;如果ModelSim使用的是for Altera的专用版本,则可以选择“ModelSim-Altera(Verilog)”或“ModelSim-Altera(VHDL)”)。
另外在设置栏中还有其他的核选框。
如果选中“Maintain hierarchy”,则表示在做时序仿真时就能看到像在功能仿真的工程文件层次结构,可以找到定义的内部信号。因为在做后仿时,源文件中的信号名称已经没有了,被映射为软件综合后自己生成的信号名,观察起来很不方便。这个设置与ISE里综合右键属性的Keep Hierarchy选择YES的功能是一样的。
如果选中“Generate netlist for functional simulation only”,则表示只能做功能仿真。
3) 点击 “Start Compilation”按钮编译工程,完成之后在当前的工程目录下可以看到一个名为“Simulation”的新文件夹,下面的“ModelSim”文件夹下包括仿真需要的.vo网表文件和包含延迟信息的.sdo文件。
4) 打开ModelSim软件(或者在Quartus下“Settings->EDA Tools Setting->Simulation”出现的设置栏中选中“Run this tool automatically after compilation”,直接从Quartus下调用ModelSim软件),可以在当前工程目录下新建一个Project。在Project标签栏内点击右键,出现在快捷菜单中选择“Add to Project->Existing File…”。加入当前工程目录的“\Simulation\ModelSim\”路径下的.vo文件、TestBench文件和对应当前工程所选择器件的网表文件。
比如:当前工程选择的器件是Cyclone系列,Quartus安装目录在“C:\altera”路径下。因此需要在“C:\altera\quartus50\eda\sim_lib”路径下找到“cyclone_atom.v”的网表文件导入到ModelSim下的Project。如果是其他器件亦是如此,只要在此目录下找到对应有“_atom”后缀的.v文件。当然整个大前提是ModelSim SE版本已经加入了Alterta的仿真库,不过ModelSim-Altera版本就不会存在这样的问题。

5) 在出现的Project标签栏的快捷菜单中选择“Add to Project->Simulation Configuration”,会出现如上图所示的名为“Simulation1”的仿真配置。右键点击选择“Properties”,弹出的“Simulation Properties”对话框中有几个标签栏。
在“Design”标签栏内需要选择仿真的文件,也就是TestBench文件。

在“SDF”标签栏内需要选择包含延迟信息的文件,即Quartus下生成的.sdo文件。这里建议将.sdo文件与ModelSim的工程文件(.mpf文件)放在同一个目录下,不然ModelSim会报类似无法读取.sdo文件的错误。当加入.sdo文件时,需要在如下图所示的“Apply to Region”的编辑框内填写延迟信息文件作用的区域。
举个例子来说明:
TestBench文件中定义了测试文件的Mole名称为ConvEncdTestBnch。
TestBench文件中调用待测顶层文件的实例名为top_encode_1。(top_encode top_encode_1(clk, rst, dataIn, serialData, parData);这是TestBench文件中调用顶层的语句)
所以在作用区域内需要填写“/ConvEncdTestBnch/top_encode_1”。

6) 右键点击名为“Simulation1”的仿真配置,快捷菜单中选择“Execute”命令,执行仿真。
7) 指定延时文件sdo 路径时,特别注意“域”的指定,否则用户会在timing 仿真中报load error “can’t find instance file”. 指定的域可以从sim标签页查看sim 的top 层,或要仿真的对象。另外,时序仿真时,一定要记住要把顶层top.v 用 top.vo 替换。同时要确保预编译的库中每个库的名字必需遵循altera的要求,比如:cylcone 的device 库必需命名为cycclone, maxii 的device命名为maxii, flex10Ke 和acex1K 都命名为flex10Ke,详细查看文档附件。Simulation.pdf
8) 提供一个testbench 的模板。

利用ModelSim SE6.0C实现功能仿真
功能仿真流程比较简单,一般不会出现什么问题,这里不再多述。

8. modelsim仿真代码问题

这段代码是我的一个教程上的,不会有错的,可能是加载的时候出错了,或者是你的版本和我教程中的版本不一致吧。或者你再检查一下被测模块。

9. modelsim 仿真时,怎么修改程序语句,不加入延迟信息(如图所示)

仿真一般有3个步骤:
1.RTL前仿真,也就是常说的功能仿真,测试对象是你的RTL源代码;
2.综合后网表的功能仿真,就是综合工具把代码映射为网表之后对网表进行测试,要对网表进行功能测试,你的第一个处理是对了的,就是把$sdf_annotate这个函数注释掉,第二步处理是在仿真时不要指定延时文件,modelsim的图形界面是怎么操作的我还真不大清楚,我都是跑脚本,举个例子,我可以敲如下命令:vsim -L [对应具体FPGA器件的仿真库] [testbench的名字];
3.时序仿真,这个好理解了,就是网表加上延时文件进行仿真,这个和第2种仿真在命令上的区别是:vsim -L [对应具体FPGA器件的仿真库] [testbench的名字] /UUT=[所指定的延时文件],其中“/UUT=[所指定的延时文件]”意思就是将指定的延时文件应用到UUT(也就是你的待测试的模块)这一层级,等同于于在图形界面中指定延时文件这一操作。

10. 请教modelsim 脚本仿真 不优化的

$readmemb
可以直接读取二进制文件

热点内容
手柄怎么调节安卓模式 发布:2025-01-11 21:44:36 浏览:947
国产服务器搭建ftp 发布:2025-01-11 21:27:33 浏览:917
电脑系统哪个好用配置 发布:2025-01-11 21:26:04 浏览:139
交换机配置中web配置是什么意思 发布:2025-01-11 21:12:07 浏览:409
物资数据库 发布:2025-01-11 21:00:24 浏览:854
javastop 发布:2025-01-11 21:00:20 浏览:31
机械手臂用什么编程 发布:2025-01-11 20:55:32 浏览:592
买钓箱要哪些配置就够了 发布:2025-01-11 20:24:23 浏览:510
防脚本取色 发布:2025-01-11 20:15:17 浏览:638
为什么庄周活动安卓没开始 发布:2025-01-11 20:14:23 浏览:462