1、ModelSim概览系统产品设计规范数字集成电路自动设计流程设计输入RTL仿真设计综合门级仿真布局和布线时序分析系统上验证修改设计设计流程3n 设计输入 设计的行为或结构描述n RTL仿真(ModelSim)功能仿真 验证逻辑模型(没有使用时间延迟)可能要求编辑设计n 综合 把设计翻译成原始的目标工艺 最优化 合适的面积要求和性能要求n 布局和布线 映射设计到目标工艺里指定位置 指定的布线资源应被使用设计流程4n 门级仿真(ModelSim)时序仿真 验证设计一旦编程或配置将能在目标工艺里工作 可能要求编辑设计n 时序分析n 验证合乎性能规范 可能要求编辑设计n 版图设计 仿真版图设计 在板编
2、程和测试器件ModelSim简介 ModelSim由Model技术公司开发 工业上最通用的仿真器之一 支持Verilog,VHDL以及它们的混合仿真 可以将整个仿真程序分步执行,使设计者可以直接看到他的程序下一步要执行的语句,在程序执行的任何步骤任何时刻都可以查看任意变量的当前值ModelSim产品1:ModelSim/VHDL或ModelSimVerilog -OEM2:ModelSim/LNL -许可VHDL或Verilog,但不同时许可3:ModelSim/PLUS -设计者能立刻混合仿真VHDL和Verilog4:ModelSim/SE -首要的版本 -PLUS的所有功能连同附加功能
3、ModelSim OEM功能1:提供完全的标准 -87 VHDL -93 VHDL -IEEE 1364-95 Verilog -SDF 1.0-3.0 -VITAL 2.2b -VITAL 952:易用的界面 -通用的平台课程安排 第一课时:1:建立项目 2:建立库 3:编译源代码 4:执行前仿真 建立项目1:打开MODELSIM2:选择File/New/Project,出现右图所示的界面。3:Project Name 项目名称4:Project Location 项目存放路径5:Default Library Name 缺省库名(一般情况为work,系统会在项目存放路径自建work子目录)
4、建立库1:需编译的引入文件 -激励文件 -源文件 -源文件调用的子模块2:库的两种类型 (1)本次新建需编译的库(缺省为WORK)-包含当前被编译的设计单元 -编译前必须先建立WORK库 -每个项目只允许一个WORK库 (2)引用已有的库 -包含能被当前编译引用的设计单元 -在编译期间允许多个建立库的具体操作 选择FileNew Library,出现下面的对话框 选择a new library and a logical mapping to it和输入库名 库的编译:选择CompileCompile,出现如下对话框:库文件存放的库名 库文件存放的路径 映射逻辑新库:选择FileNew Lib
5、rary,出现下面的对话框。选择a map to an exciting library 映射现有的库:选择FileNew Library,出现下面的对话框 选择箭头所示的选项 浏览库的路径使用这条命令映射到已经编译的库 删除库命令:选中库名以后,右击出现快捷菜单,选择其中的Delete选项。编译源代码1:ModelSim中源代码的编译包括两部分:第一部分是对电路进行描述,可以是门级描述,也可以是行为级的描述;第二部分是测试文件的编写。2:以D触发器为例,对源代码的编译过程进行说明。(转下页)(1):按前面介绍的方法,先建一个D触发器的工程,D触发器的工程建完以后,出现如下界面:选择Creat
6、e New File在弹出的对话框中输入描述D触发器电路的文件名:dff该对话框一定要选择Verilog再重复一次上面的步骤,选择Create New File,弹出相同的对话框:此对话框依然选择Verilog文件名为dff_test,表示测试文件。(一般测试文件的文件名都在原文件名后加test)(2):双击Project列表中的文件dff,打开文件编译的界面。在该界面中,可以输入D触发器的门级描述源代码,也可输入D触发器的行为级描述源代码。(如下图):行为级描述门级描述-门级描述:门级描述必须根据D触发器的原理图来进行描述。(原理图如下所示)(3):对描述D触发器的两种代码进行分析:-行为级
7、描述的源代码:module sy_d_ff(q,d,ck,clr);input d,ck,clr;output q;reg q;always(posedge ck or negedge clr)q=(!clr)?0:d;endmoduleq为输出信号,d为输入信号,ck为时钟信号,clr为清零信号。检测时钟上升沿和清零信号下降沿若clr=0,则q=0;若clr=1,则q=d寄存器门级描述的源代码如下所示:module dff_clr(q,data,clock,clear);input data,clock,clear;output q;nand nd1(a,data,nclk,clear);n
8、and nd2(b,ndata,nclk);nand nd4(d,c,b,clear);nand nd5(e,c,nclock);nand nd6(f,d,nclock);nand nd8(qb,q,f,clear);nand nd3(c,a,d);nand nd7(q,e,qb);not iv1(ndata,data);not iv2(nclock,nclk);not iv3(nclk,clock);endmodule输入端data,clock,clear;输出端q。对照触发器的原理图,对图中所有的逻辑门进行了描述。语句的基本格式为:门的类型门的名称(输出端,输出端,输入端,输入端)。注意,
9、必须是输出端在前,输入端在后。但是,输出端之间可以交换位置,输入端之间也可以交换位置。()测试文件的描述:timescale 10ns/1nsmodule dff_clr_test();reg data,clock,clear;wire q;dff_clr dff_clr_test(q,data,clock,clear);initial begin data=0;clock=0;clear=0;#5 clear=1;end always#7 clock=clock;always#20 data=data;endmodule定义时间精度为1ns,时间单位为ns。输入信号输出信号开始时,三个输入量
10、都为0。5个时间单位后,clear变1。每过7个时间单位,clock翻转。每过20个时间单位,data翻转。(5):文件的编译:在左边Project界面的空白处右击弹出快捷菜单,选择CompileCompile All。(如下图)通过编译以后,会在下面显示出编译成功的提示信息。(如下图所示)也可以选择快捷键来进行编译。编译所有文件编译选中的文件执行前仿真 在两个文件都通过编译以后就可以直接进行前仿真了。所谓前仿真,就是功能仿真,主要目的是验证电路的功能是否符合设计的要求,其特点是不考虑电路门延迟与线延迟,主要是验证电路与理想情况是否一致。前仿真的步骤:(1):单击快捷键 (2):弹出右图对话框
11、去掉Enable前的钩双击WORK,展开对话框。(3):将WORK展开后选择测试文件dff_clr_test。(如下图):选择测试文件 选择完测试文件后点击OK(4):打开Objects(端口)窗口:选择ViewObjects(如右图所示)打开的Objects窗口,D触发器的四个端口全在列表中。在debug windows中选择objects(5):加入波形:选择ViewWave,出现对话框wave-default。(如下图)在Objects列表中选中任何一个端口后右击,出现快捷菜单后按右下图方式选择,将所有端口全部移入波形文件中。加入端口后的波形文件点击RUN的快捷键D触发器的波形100ns
12、表示每按一次RUN,就向前推进100ns,读者可根据具体情况进行调节。到此,D触发器的前仿真就结束了。实验一 简单组合逻辑设计 描述一个可综合的数据比较器。功能是比较数据a7:0和数据b7:0的结果,如果两个数据相同,则给出结果为1,否则则结果为0.*如果可以,请写出行为级和门级两种不同的描述方式。第二课时:1:FORCE命令的介绍 2:DO文件的介绍 3:界面介绍 4:设计调试 5:其他相关内容仿真.?!设计组织设计组织虚线表示编译时检测输入文件是否存在及可读并允许生成输出文件。test benchtest bench组织组织简单的简单的test bench向要验证的设计提供向量,人工验证输
13、出。向要验证的设计提供向量,人工验证输出。复杂的复杂的test bench是自检测的,其结果自动验证。是自检测的,其结果自动验证。stimulus要验证的设计简单的test bench复杂的test bench激励验证结果要验证的设计包含文件包含文件包含文件用于读入代码的重复部分或公共数据。包含文件用于读入代码的重复部分或公共数据。module clk_gen(clk);output clk;reg clk;include common.txtinitial begin while($time sim_end)begin clk=initial_clock;#(period/2)clk=!in
14、itial_clock;#(period/2);end$finish;endendmodule在上面的例子中,公共参数在一个独立的文件中定义。此文件在不同在上面的例子中,公共参数在一个独立的文件中定义。此文件在不同的仿真中可被不同的测试文件调用。的仿真中可被不同的测试文件调用。/common.txt/clock and simulator constantsparameter initial_clock=1;parameter period=15;parameter max_cyc=100;parameter sim_end=period*max_cyc施加激励施加激励产生激励并加到设计有很多
15、产生激励并加到设计有很多 种方法。一些常用的方法有:种方法。一些常用的方法有:从一个从一个initial块中施加线激励块中施加线激励从一个循环或从一个循环或always块施加激励块施加激励从一个向量或整数数组施加激励从一个向量或整数数组施加激励记录一个仿真过程,然后在另一个仿真中回放施加激励记录一个仿真过程,然后在另一个仿真中回放施加激励线性激励线性激励线性激励有以下特性:线性激励有以下特性:只有变量的值改变时才列出只有变量的值改变时才列出 易于定义复杂的时序关系易于定义复杂的时序关系 对一个复杂的测试,测试基准对一个复杂的测试,测试基准(test bench)可能非常大可能非常大module
16、 inline_ tb;reg 7:0 data_ bus,addr;wire 7:0 results;DUT u1(results,data_ bus,addr);initial fork data_bus=8h00;addr=8h3f;#10 data_ bus=8h45;#15 addr=8hf0;#40 data_ bus=8h0f;#60$finish;joinendmodule循环激励循环激励从循环产生激励有以下特性:从循环产生激励有以下特性:在每一次循环,修改同一组激励变量在每一次循环,修改同一组激励变量 时序关系规则时序关系规则 代码紧凑代码紧凑 module loop_tb;
17、reg clk;reg 7:0 stimulus;wire 7:0 results;integer i;DUT u1(results,stimulus);always begin/clock generation clk=1;#5 clk=0;#5 end initial begin for(i=0;i 1;i=i-1)/循环循环#50 stimulus=stim_arrayi;#30$finish;endendmodule矢量采样矢量采样在仿真过程中可以对激励和响应矢量进行采样,作为其它仿真的激在仿真过程中可以对激励和响应矢量进行采样,作为其它仿真的激励和期望结果。励和期望结果。module
18、 capture_tb;parameter period=20 reg 7:0 in_vec,out_vec;integer RESULTS,STIMULUS;DUT u1(out_ vec,in_ vec);initial begin STIMULUS=$fopen(stimulus.txt);RESULTS=$fopen(results.txt);fork if(STIMULUS!=0)forever#(period/2)$fstrobeb(STIMULUS,%b,in_vec);if(RESULTS!=0)#(period/2)forever#(period/2)$fstrobeb(RE
19、SULTS,%b,out_vec);join endendmodule矢量回放矢量回放保存在文件中的矢量反过来可以作为激励保存在文件中的矢量反过来可以作为激励module read_file_tb;parameter num_vecs=256;reg 7:0 data_bus;reg 7:0 stim num_vecs-1:0;integer i;DUT u1(results,data_bus)initial begin/Vectors are loaded$readmemb(vec.txt,stim);for(i=0;i num_vecs;i=i+1)#50 data_bus=stimi;e
20、ndendmodule/激励文件激励文件vec.txt001110000011100100111010001111000011000000101000000110000111100010111000.使用矢量文件输入使用矢量文件输入/输出的优点:输出的优点:激励修改简单激励修改简单 设计反复验证时直接使用工具比较矢量文件。设计反复验证时直接使用工具比较矢量文件。错误及警告报告错误及警告报告使用文本或文件输出类的系统任务报告错误及警告使用文本或文件输出类的系统任务报告错误及警告always(posedge par_err)$display(error-bus parity errors dete
21、cted);always(posedge cor_err)$display(warning-correctable error detected);一个更为复杂的一个更为复杂的test bench可以:可以:不但能报告错误,而能进行一些动作,如取消一个激励块并跳转不但能报告错误,而能进行一些动作,如取消一个激励块并跳转到下一个激励。到下一个激励。在内部保持错误跟踪,并在每次测试结束时产生一个错误报告。在内部保持错误跟踪,并在每次测试结束时产生一个错误报告。强制激励强制激励在过程块中,可以用两种持续赋值语句驱动一个值或表达式到一个信号。在过程块中,可以用两种持续赋值语句驱动一个值或表达式到一个信
22、号。过程持续赋值通常不可综合,所以它们通常用于测试基准描述。过程持续赋值通常不可综合,所以它们通常用于测试基准描述。对每一种持续赋值,都有对应的命令停止信号赋值。对每一种持续赋值,都有对应的命令停止信号赋值。不允许在赋值语句内部出现时序控制。不允许在赋值语句内部出现时序控制。对一个寄存器使用对一个寄存器使用assign和和deassign,将覆盖所有其他在该信号上的赋值。,将覆盖所有其他在该信号上的赋值。这个寄存器可以是这个寄存器可以是RTL设计中的一个节点或测试基准中在多个地方赋值的设计中的一个节点或测试基准中在多个地方赋值的信号等。信号等。initial begin#10 assign t
23、op.dut.fsm1.state_reg=init_state;#20 deassign top.dut.fsm1.state_reg;end在在register和和net上(例如一个门级扫描寄存器的输出)使用上(例如一个门级扫描寄存器的输出)使用force和和release,将覆盖该信号上的所有其他驱动。,将覆盖该信号上的所有其他驱动。initial begin#10 force top.dut.counter.scan_ reg.q=0;#20 release top.dut.counter.scan_ reg.q;end强制激励强制激励可以强制可以强制(force)并释放一个信号的指定
24、位、部分位或连接,但位的指定不并释放一个信号的指定位、部分位或连接,但位的指定不能是一个变量(例如能是一个变量(例如out_veci)不能对不能对register的一位或部分位使用的一位或部分位使用assign和和deassign对同一个信号,对同一个信号,force覆盖覆盖assign。后面的后面的assign或或force语句覆盖以前相同类型的语句。语句覆盖以前相同类型的语句。如果对一个信号先如果对一个信号先assign然后然后force,它将保持,它将保持force值。在对其进行值。在对其进行release后,信号为后,信号为assign值。值。如果在一个信号上如果在一个信号上force
25、多个值,然后多个值,然后release该信号,则不出现任何该信号,则不出现任何force值。值。在上面两个例子中,在在上面两个例子中,在 net或或register上所赋的常数值,覆盖所有在时刻上所赋的常数值,覆盖所有在时刻10和时和时刻刻20之间可能发生在该信号上的其他任何赋值或驱动。如果所赋值是一个表达之间可能发生在该信号上的其他任何赋值或驱动。如果所赋值是一个表达式,则该表达式将被持续计算。式,则该表达式将被持续计算。建立时钟建立时钟例例1:虽然有时候在设计中给出时钟,但通常时钟是测试基准中建立。:虽然有时候在设计中给出时钟,但通常时钟是测试基准中建立。下面介绍如何产生不同的时钟波形。同
26、时给出用门级和行为级描述方法下面介绍如何产生不同的时钟波形。同时给出用门级和行为级描述方法下面是一个简单对称时钟的例子:下面是一个简单对称时钟的例子:reg ck;always begin#(period/2)ck=0;#(period/2)ck=1;endreg go;wire ck;nand#(period/2)u1(ck,ck,go);initial begin go=0;#(period/2)go=1;end注意:注意:在一些仿真器中,时钟与设计使用相同的抽象级描述时,仿真性能会好一些。产生的波形(假定产生的波形(假定period为为20)建立时钟建立时钟例例2:有启动延时的对称时钟的
27、例子:有启动延时的对称时钟的例子:reg ck;initial begin ck=0;#(period)forever#(period/2)ck=!ck;endreg go;wire ck;nand#(period/2)u1(ck,ck,go);initialbegin go=0;#(period)go=1;end注意:注意:在行为描述中,在时间0将CK初始化为0;而在结构描述中,直到period/2才影响CK值。当go信号在时间0初始化时,CK值到period/2才变化。可以使用特殊命令force和release立即影响CK值。产生的波形(假定产生的波形(假定period为为20)建立时钟建
28、立时钟例例3:有不规则启动延时的不对称时钟的例子:有不规则启动延时的不对称时钟的例子:注意:注意:在行为描述中,CK值立刻被影响;而在结构描述中,在传播延时后才输出正确波形。产生的波形(假定产生的波形(假定period为为20)reg ck;initial begin#(period+1)ck=1;#(period/2 1)forever begin#(period/4)ck=0;#(3*period/4)ck=1;endendreg go;wire ck;nand#(3*period/4,period/4)u1(ck,ck,go);initial begin#(period/4+1)go=0
29、;#(5*period/4 1)go=1;end使用使用tasktask在在test bench中使用中使用task可以压缩重复操作,提高代码效率。可以压缩重复操作,提高代码效率。module bus_ctrl_tb;reg 7:0 data;reg data_valid,data_rd;cpu u1(data_valid,data,data_rd);initial begin cpu_driver(8b0000_0000);cpu_driver(8b1010_1010);cpu_driver(8b0101_0101);end task cpu_driver;input 7:0 data_in
30、;begin#30 data_valid=1;wait(data_rd=1);#20 data=data_ in;wait(data_rd=0);#20 data=8hzz;#30 data_valid=0;end endtaskendmodule 使用使用tasktask产生的波形产生的波形复习复习问题:问题:什么操作可以容易的在什么操作可以容易的在forkjoin块做到,而不容易在块做到,而不容易在beginend块做到?块做到?通常怎样产生规则激励和不规则激励?通常怎样产生规则激励和不规则激励?从一个文件中读取激励时使用什么数据类型?从一个文件中读取激励时使用什么数据类型?在行为级时钟模
31、型中能做哪些在门级时钟模型中很难或不能作到的事?在行为级时钟模型中能做哪些在门级时钟模型中很难或不能作到的事?解答:解答:forkjoin块中不但能够赋值,还可以并行执行循环、条件语句、任务或函块中不但能够赋值,还可以并行执行循环、条件语句、任务或函数调用。数调用。循环或循环或always块能有效地产生规则激励,不规则激励适合用在块能有效地产生规则激励,不规则激励适合用在initial块产块产生。生。用寄存器组(存储器)并用用寄存器组(存储器)并用$readmem系统任务从一个文件以读取向量。系统任务从一个文件以读取向量。行为级代码可以很容易地产生一个启动时间不规则的时钟波形,并且可以行为级代
32、码可以很容易地产生一个启动时间不规则的时钟波形,并且可以在时刻零初始化时钟。在时刻零初始化时钟。Force命令的介绍1:Force的使用对象:简单的模块仿真。2:Force命令的输入方式:直接从命令控制台输。DO文件(宏文件)。3:force命令的常规语法:force ,例:force fp 1 4000ps,0 8000ps/信号fp在4000ps处置,8000ps处置0。4:force命令的参数:item_name 强迫对象 必须的 可以使用通配符 5:其他参数:value 被强制的项的值 必须适合项的数据类型 必需的 time 指定值的时间单位 相对于当前的仿真时间 用 characte
33、r指定绝对时间 时间单位能被指定 缺省值是仿真分辨率 可选的ValueDescription 1111 character sequence 2#1111 binary radix 10#15 decimal radix 16#F hexadecimal radix6:force命令举例:force clr 0 在当前仿真时间强制 clr 到 0force bus1 01XZ 100 ns 在当前仿真时间后100ns强制 bus1到 01XZforce bus2 16#4F 200 仿真启动后强制 bus2到 4F直到200时间单位,分辨率在仿真启动时选择force clk 0 0,1 20-
34、repeat 50-cancel 1000 在当前仿真后0时间单位强制clk到0和在20时间单位强制到1.每50时间单位重复直到1000.因此,下一个 1 将在70时间单位发生force clk2 1 10 ns,0 20 ns-r 100 ns 和上一个例子相似。-r前面的时间单位表达式必须放在大括号里DO文件 自动完成仿真步骤的宏文件 库设置 编译 仿真 强制仿真激励 能在所有的ModelSim 模式里被调用 能调用其他的DO文件 DO文件举例:cd c:mydirvlib workvcom counter.vhdvsim counterview*do stimulus.domy_sim.
35、doadd wave/clkadd wave/clradd wave/loadadd wave-hex/dataadd wave/qforce/clk 0 0,1 50-repeat 100force/clr 0 0,1 100run 500force/load 1 0,0 100force/data 16#A5 0force/clk 0 0,1 50-repeat 100run 1000stimulus.do界面介绍main主窗口:structure结构窗口process处理窗口:Signal&variable信号和变量窗口dataflow数据流窗口source源窗口Wave&list波形和
36、列表窗口1:ModelSim共有9个窗口:main,structure,source,signals,process,variables,dataflow,wave,和和list 窗口。窗口。2:支持任何窗口的多个副本。3:拖放 在一个窗口选择HDL项后,用鼠标左键,这些项能被从一个窗口拖和放到另一个窗口.HDL项可从 Dataflow,List,Signals,Source,Structure,Variables,和 Wave窗口拖出.可把它们放到 List 或者 Wave 窗口 Main窗口(1):ModelSim 这是设计加载前的提示符能浏览帮助,编辑库,编辑源代码而不用调用一个设计VS
37、IM 设计加载后显示的提示符 告诉我们仿真器的行为动作 命令 信息 声明Main窗口(2)Main窗口()Structure窗口:VHDL(o)-Package,component instantiation,generate and block statementsVerilog()module实例,named fork,named begin,task,和 functionInstantiation label,entity/module,architecture成为当前层 for Source 和 Signals 窗口,updates Process 和Variables 窗口Sourc
38、e窗口:从Structure窗口选择Options 菜单(源代码的控制浏览)Color-coded注释,关键字,字符串,数字,执行行,标识符,系统任务,文本完全的编辑能力保存 编译和重启拖放描述/检查VHDL 信号,变量和常数Source窗口:描述显示所选的HDL项的信息检查显示所选HDL项当前仿真值 Process窗口:显示外部和内部的处理View-ActiveShows all processes scheduled for execution during the current simulation cycleView-In RegionShows names of all proce
39、sses in the region selected in the Structure windowProcess窗口:指示器Process is scheduled to be executed处理正等待 VHDL 信号或Verilog 线网改变 或等待超时Process has executed a VHDL wait statement without a time-out or sensitivity listSignals窗口:紧跟Structure窗口显示Structure窗口的当前层HDL项的名称和值排序 升序,降序或声明顺序层次-(+)可展开的,(-)已展开的VHDL 信号V
40、erilog 线网,寄存器变量和已命名的时间“拖放”Wave和List窗口Force用于激励Filter为浏览选择信号类型 (输入,输出,内部,等)Dataflow窗口:VHDL信号或Verilog线网的图形描绘信号或线网在窗口中央Processes that drive signal or net on the leftProcesses that read the signal or are triggered by the net on the rightDataflow窗口:ProcessesSignals read by or nets that trigger the proces
41、s on the leftSignals or nets driven by the process on the rightSingle-Double clicking update of signals and processesWave窗口:用波形浏览仿真结果图形化的历史记录用波形浏览仿真结果图形化的历史记录 Verilog 线网,寄存器变量,已命名事件对于更多的逻辑信号多个波形窗口用于对于更多的逻辑信号多个波形窗口用于更多的逻辑信号更多的逻辑信号 可以启动仿真,停止仿真,单步运行等可以启动仿真,停止仿真,单步运行等 放大、缩小、增加鼠标等便于波形观察、分析波形放大、缩小、增加鼠标等便于
42、波形观察、分析波形的正确性的正确性List窗口:用表格显示仿真结果用表格显示仿真结果 Verilog 线网和寄存器变量从这个窗口或到这个窗口从这个窗口或到这个窗口“拖放拖放”编辑功能编辑功能 查找查找建立用户定义的总线建立用户定义的总线 EditCombine设置触发和选通设置触发和选通 Write List-Tabular,Event or TSSI Marker-Add,Delete or GotoVariables窗口:列出 HDL 项的名称VHDL 常数,generics 和变量Verilog 寄存器变量到当前过程的路径被显示在左下树层次-(+)可展开的,(-)已展开的分类 升序,降序
43、或声明顺序改变 选择HDL项改变值浏览 在Wave 或 List 窗口 或 log 文件的项选择变量或层中的变量设计调试:调试使用的场合:编译失败不正确或意外的仿真结果:支持两种类型的断点:在源代码窗口设置断点条件断点其他相关内容:modelsim.ini文件 ModelSim使用 ASCII文件,由用户控制 在ModelSim的安装目录一个缺省文件被提供 modelsim.ini被编译器和仿真器使用 存有初始信息 库定位 启动文件的定位 ModelSim其他缺省设定 ModelSim 按下列顺序搜索modelsim.ini:1.环境变量Environment variable called
44、MODELSIM which points directly to the modelsim.ini file to be used2.A file called modelsim.ini located in the current working directory3.缺省的 modelsim.ini文件在ModelSim软件安装树目录里:startup.do文件一个 DO 脚本自动执行通过vsim一个例文件startup.do就像这样:view sourceview structureview wavedo wave.do调用一个启动文件,未注释(移去“;”)下面modelsim.ini文件行给do文件提供路径:;Startup=do/path./startup.do:库的含义:_info:把路径识别为库的标_primary.dat:Verilog module 或 VHDL entity的编码格式_primary.vhd:Verilog 端口的VHDL entity陈述_verilog.asm:执行代码文件