🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] > # 基本仿真步骤 **启动ModelSim SE, 首先看到在在ModelSim SE右边的窗口有ModelSim> 这样的提示符。在提示符后,顺序运行以下命令:**</br> **vlib work** :  该命令的作用是在该目录下建立一个work目录,请注意不要用操作系统来新建一个work的文件夹,因为用操作系统建立的work文件夹并没有ModelSim SE自动生成的_info文件。</br> **vmap work work**  :   该命令的作用是将目前的逻辑工作库work和实际工作库work映射对应。</br> **vlog camera.v  camera_tb.v**  : 该命令的作用是编译这些文件,要注意的是文件可以单独分开编译,但是一定要先编译被调用的文件。假如是VHDL文件就可以用vcom file1,file2命令来编译。</br> **vsim camera_tb**  : 仿真命令, 注意后面的参数必须为camera_tb.v文件中的模块名。</br> **add wave/camera_tb/ \*** : 该命令的作用是将testbench文件camera_tb.v中模块camera_tb下所有的信号变量加到波形文件中去,注意在“\*”前要加空格。这时候你也可以看到wave文件被打开。当然也可以单个信号的添加,例如添加时钟:add wave clk 等等。</br> **run 2000**  : 该命令的作用是运行2000个单位时间的仿真。也可以用run –all命令来一直仿真下去。</br> 这时候就可以在wave窗口文件中看到你的仿真结果。     当然也可以观察其它窗口的结果,用view命令显示           view \* 观察包括signals、wave、dataflow等窗口文件。也可以分别打开。例如用view signals来观察信号变量。     quit -f/-force/-sim  该命令分别是退出ModelSim(-f/-force)和退出仿真(-sim)。 > # 使用do文件方式 do文件是上面这些命令保存的文件,可以理解为执行的脚本,我们有`tb.v`文件。其类容如下: ```verilog `timescale 1ns / 1ps module tb ; reg clk,rst; //生成始时钟 parameter NCLK = 4; initial begin clk=0; forever clk=#(NCLK/2) ~clk; end /****************** BEGIN ADD module inst ******************/ //Modulenamme top (rst,clk); /****************** BEGIN END module inst ******************/ initial begin $dumpfile("wave.lxt2"); $dumpvars(0, tb); //dumpvars(深度, 实例化模块1,实例化模块2,.....) end initial begin rst = 1; #(NCLK) rst=0; #(NCLK) rst=1; //复位信号 repeat(10) @(posedge clk)begin end $display("hello running!"); $dumpflush; //$finish; $stop; end endmodule ``` **编写仿真的do文件,run.do** ``` # 退出上次仿真 quit -sim vlib work vmap work work vlog tb.v # 开始仿真 vsim tb # 将需要查看的波形添加到wave窗口 add wave -color Yellow tb/clk add wave -color Red tb/rst view * run -all ``` 使用`do run.do`运行自动化仿真 仿真波形如图所示: ![](https://img.kancloud.cn/7f/3a/7f3a9a87f93593f5c8e800d6b60073c0_1233x427.png)