modelsim软件使用.ppt

上传人:wuy****n92 文档编号:70794084 上传时间:2023-01-28 格式:PPT 页数:69 大小:658.50KB
返回 下载 相关 举报
modelsim软件使用.ppt_第1页
第1页 / 共69页
modelsim软件使用.ppt_第2页
第2页 / 共69页
点击查看更多>>
资源描述

《modelsim软件使用.ppt》由会员分享,可在线阅读,更多相关《modelsim软件使用.ppt(69页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、逻辑设计与逻辑设计与FPGA仿真软件仿真软件ModelsimModelsim的基本知识的基本知识福州大学微电子系福州大学微电子系仿真与验证仿真与验证1 1、编写测试验证程序、编写测试验证程序1.11.1、测试验证程序有三个主要目的、测试验证程序有三个主要目的1.21.2、典型的测试验证程序形式、典型的测试验证程序形式2 2、激励波形产生、激励波形产生2.12.1、值序列、值序列2.22.2、重复模式、重复模式3 3、测试验证程序实例、测试验证程序实例3.13.1、解码器、解码器 3.23.2、触发器、触发器VerilogVerilog模块的测试模块的测试目的:目的:如何编写的测试文件,对所做的

2、设计进行完如何编写的测试文件,对所做的设计进行完整的测试和验证。整的测试和验证。掌握组织模块测试的常用方法掌握组织模块测试的常用方法学会编写常用的测试代码。学会编写常用的测试代码。模块的测试模块的测试 被测模块被测模块激激励励和和控控制信号制信号输输出出响响应应和验证和验证1 1、编写测试验证程序编写测试验证程序测试验证程序用于测试和验证设计的正确性。测试验证程序用于测试和验证设计的正确性。Verilog HDLVerilog HDL提供强有力的结构来编写测试验证提供强有力的结构来编写测试验证程序。程序。1 1、编写测试验证程序编写测试验证程序1.11.1、测试验证程序有三个主要目的:、测试验

3、证程序有三个主要目的:1)1)产生模拟激励产生模拟激励(波形波形);2)2)将输入激励加入到测试模块并收集其输出响应;将输入激励加入到测试模块并收集其输出响应;3)3)将响应输出与期望值进行比较。将响应输出与期望值进行比较。1.21.2、典型的测试验证程序形式、典型的测试验证程序形式module Test_Bench;module Test_Bench;(不做端口声明)(不做端口声明)/通常测试验证程序没有输入和输出端口。通常测试验证程序没有输入和输出端口。Local_reg_and_net_declarationsLocal_reg_and_net_declarations(端口声明)(端口

4、声明)Generate_waveforms_using_initial_&_always_statemenGenerate_waveforms_using_initial_&_always_statemen(产生激励波形)(产生激励波形)Instantiate_module_under_testInstantiate_module_under_test(例化被测模块)(例化被测模块)Monitor_output_and_compare_with_expected_valuesMonitor_output_and_compare_with_expected_values(输出监控或直接波形输出)

5、(输出监控或直接波形输出)endmoduleendmodule测试时,通过在测试验证程序中进行实例化,将激励自测试时,通过在测试验证程序中进行实例化,将激励自动加载于测试模块。动加载于测试模块。1.21.2、典型的测试验证程序形式、典型的测试验证程序形式测试模块常见的形式:测试模块常见的形式:module XX_tb;module XX_tb;reg;/reg;/被测模块输入变量类型定义被测模块输入变量类型定义wire;/wire;/被测模块输出变量类型定义被测模块输出变量类型定义initial begin;end /initial begin;end /产生测试信号产生测试信号always

6、begin;end /always begin;end /产生测试信号产生测试信号tsint tsint m(.in1(ina),.in2(inb),.out1(outa),.out2(outb)m(.in1(ina),.in2(inb),.out1(outa),.out2(outb););/被测模块的实例引用被测模块的实例引用initial begin.;.;end /initial begin.;.;end /记录输出和响应记录输出和响应endmoduleendmodule1.21.2、典型的测试验证程序形式、典型的测试验证程序形式测试模块中常用的过程块:测试模块中常用的过程块:initi

7、al initial always always所有的过程块都所有的过程块都在在0 0时刻同时启时刻同时启动;它们是并行动;它们是并行的,在模块中不的,在模块中不分前后。分前后。initialinitial块块 只只执行一次。执行一次。alwaysalways块块 只只要符合触发条件要符合触发条件可以循环执行。可以循环执行。1.21.2、典型的测试验证程序形式、典型的测试验证程序形式如何描述如何描述激励信号:激励信号:module t;module t;reg a,b,sel;/reg a,b,sel;/被测模块的输入信号用寄存器赋值被测模块的输入信号用寄存器赋值wire out;/wire

8、out;/被测模块的输出信号被测模块的输出信号/引用多路器实例引用多路器实例 mux2 m(out,a,b,sel);mux2 m(out,a,b,sel);/加入激励信号加入激励信号 initial initial begin a=0;b=1;sel=0;begin a=0;b=1;sel=0;#10 b=0;#10 b=0;#10 b=1;sel=1;#10 b=1;sel=1;#10 a=1;#10 a=1;#10$stop;#10$stop;end end1.21.2、典型的测试验证程序形式、典型的测试验证程序形式如何观察如何观察被测模块的响应:被测模块的响应:在在initial in

9、itial 块中,用系统任务块中,用系统任务$time$time 和和$monitor$monitor$time$time 返回当前的仿真时刻返回当前的仿真时刻$monitor$monitor 只要在其变量列表中有某一个或某几个变只要在其变量列表中有某一个或某几个变 量值发生变化,便在仿真单位时间结束时显示其变量值发生变化,便在仿真单位时间结束时显示其变 量列表中所有变量的值。量列表中所有变量的值。例:例:initial initial begin begin$monitor$monitor($time,($time,“out=%b,“out=%b a=%b a=%b b=%b b=%b se

10、lsel=%b”,=%b”,out,a,b,selout,a,b,sel););end end2 2、激励波形产生、激励波形产生有两种产生激励值的主要方法:有两种产生激励值的主要方法:1)1)产生值序列,即在确定的离散时间间隔加载激励。产生值序列,即在确定的离散时间间隔加载激励。2)2)产生产生重复模式的波形。重复模式的波形。2.12.1、值序列、值序列A1A1、产生值序列的最佳方法是使用产生值序列的最佳方法是使用initialinitial语句。语句。initialbegin Reset=0;#100 Reset=1;#80 Reset=0;#30 Reset=1;end产生的波形如图所示。

11、产生的波形如图所示。InitialInitial语句中的赋值语句用时延控语句中的赋值语句用时延控制产生波形。此外,制产生波形。此外,语句内时延语句内时延也能够按如下实例所示产生也能够按如下实例所示产生波形波形。因为使用的是阻塞性过因为使用的是阻塞性过程赋值,上面语句中的程赋值,上面语句中的时延是相对时延。时延是相对时延。2.12.1、值序列、值序列B B、若要若要重复产生重复产生一个值序列,可以使用一个值序列,可以使用alwaysalways语句替代语句替代initialinitial语句。语句。Parameter REPEAT_DELAY=35;Integer CoinValue;alway

12、sbeginCoinValue=0;#7 CoinValue=25;#2 CoinValue=5;#8 CoinValue=10;#6 CoinValue=5;#REPEAT_DELAY;end这是因为这是因为initialinitial语句只执行一语句只执行一次而次而alwaysalways语句会重复执行语句会重复执行2.22.2、重复模式、重复模式A A、重复模式的生成通过使用如下的连续赋值形式加重复模式的生成通过使用如下的连续赋值形式加以简化以简化:assign#(PERIOD/2)Clock=Clock;但是这种做法并不完全正确。但是这种做法并不完全正确。问题在于问题在于ClockCl

13、ock是一个线网是一个线网(只有线网能够在连续赋值中被赋值只有线网能够在连续赋值中被赋值),它的初始值是,它的初始值是z z,并,并且,且,z z等于等于x x,x x等于等于x x。因此。因此ClockClock的值永远固定为值的值永远固定为值x x。现在需要一种初始化现在需要一种初始化ClockClock方法。可用方法。可用initialinitial语句实现。语句实现。initial initial Clock Clock=0;=0;但是现在但是现在ClockClock必须是寄存器数据类型必须是寄存器数据类型(因为只有寄存器因为只有寄存器数据类型能够在数据类型能够在initialinit

14、ial语句中被赋值语句中被赋值),因此连续赋值语句,因此连续赋值语句需要被变换为需要被变换为alwaysalways语句。语句。always always#(PERIOD/2)Clock=Clock;2.22.2、重复模式、重复模式B1B1、下面是一个完整的时钟产生器模块。下面是一个完整的时钟产生器模块。Module Gen_Clk_A(Clk_A);output Clk_A;reg Clk_A;parameter tPERIOD=10;initialClk_A=0;always#(tPERIOD/2)Clk_A=Clk_A;endmodule2.22.2、重复模式、重复模式B2B2、下面给出

15、了产生周期性时钟波形的另一种可选方式。下面给出了产生周期性时钟波形的另一种可选方式。Module Gen_Clk_B(Clk_B);output Clk_B;reg Start;initialbeginStart=1;#5 Start=0;endnor#2(Clk_B,Start,Clk_B);endmoduleinitialinitial语句将语句将StartStart置为置为1 1,这促,这促使或非门的输出为使或非门的输出为0(0(从从x x值中获得值中获得)。5 5个时间单位后,在个时间单位后,在StartStart变为变为0 0时,或非门反转产生带有周期为时,或非门反转产生带有周期为4

16、 4个时间单位的时钟波形。个时间单位的时钟波形。2.22.2、重复模式、重复模式B3B3、如果要产生高低电平持续时间不同的时钟波形,可用如果要产生高低电平持续时间不同的时钟波形,可用alwaysalways语句建立模型。语句建立模型。Module Gen_Clk_C(Clk_C);Parameter tON=5,tOFF=10;Output Clk_C;Reg Clk_C;always begin#tON Clk_C=0;#tOFF Clk_C=1;end endmodule3 3、测试验证程序实例、测试验证程序实例outabslselbselansl u2 u3 u4 u1module mu

17、x2_m(out,a,b,module mux2_m(out,a,b,sl);sl);input a,b,sl;input a,b,sl;output out;output out;wire sela,nsl,selb wire sela,nsl,selb not u1 not u1(ns1ns1,slsl););and#1 u2 and#1 u2(selasela,a a,nslnsl););and#1 u3 and#1 u3(selbselb,b b,slsl)or#2 u4 or#2 u4(out out,selasela,selbselb)endmoduleendmodule3 3、测

18、试验证程序实例、测试验证程序实例module t;reg a,b,sel;wire out;mux2_m tt(out,a,b,sel);/引用多路器实例引用多路器实例initial begin a=0;b=1;sel=0;#10 b=0;#10 b=1;sel=1;#10 a=1;#10$stop;end/加入激励信号加入激励信号initial begin$monitor($time,“out=%b a=%b b=%b sel=%b”,out,a,b,sel);endendmodule3 3、测试验证程序实例、测试验证程序实例下例是下例是D D触发器及其测试模块。触发器及其测试模块。modu

19、le MSDFF(D,C,Q,Qbar);input D,C;output Q,Qbar;reg Q;always (posedge C)Q ModelSim 这是设计加载前的提示符这是设计加载前的提示符 能浏览帮助能浏览帮助,编辑库编辑库,编辑源代码而不用调用一个设计编辑源代码而不用调用一个设计 VSIM VSIM 设计加载后显示的提示符设计加载后显示的提示符 告诉我们仿真器的行为动作告诉我们仿真器的行为动作 命令命令 信息信息 声明声明4.3.2 ModelSim4.3.2 ModelSim实现方法实现方法 交互式的命令行交互式的命令行(Cmd)(Cmd)唯一的界面是控制台的命令行唯一的界

20、面是控制台的命令行,没有用户界面没有用户界面 用户界面用户界面(UI)(UI)能接受菜单输入和命令行输入能接受菜单输入和命令行输入 课程主要讨论课程主要讨论 批处理模式批处理模式 从从DOSDOS或或UNIXUNIX命令行运行批处理文件命令行运行批处理文件 不讨论不讨论4.3.34.3.3基本仿真步骤基本仿真步骤1 1 创建一个工程创建一个工程2 2 编写源代码和测试程序编写源代码和测试程序3 3 编译源代码编译源代码和测试程序和测试程序-所有所有HDLHDL代码必须经过编译才能进行仿真代码必须经过编译才能进行仿真-Verilog-Verilog和和VHDLVHDL的编译命令不同的编译命令不同

21、4 4 启动仿真器启动仿真器5 5 运行仿真器运行仿真器创建一个工程创建一个工程1 1 UI)UI)选择主窗口中的菜单:选择主窗口中的菜单:File-New ProjectFile-New Project 输入项目名称:输入项目名称:MUX24MUX24 项目保存的目录项目保存的目录 默认的库名:默认的库名:workwork 2 2 编写源代码和测试程序编写源代码和测试程序在在ProjectProject下点击右键:下点击右键:选择选择Add to ProjectAdd to Project 选选New FileNew File 输入文件名(注意不要加后缀输入文件名(注意不要加后缀.v).v)

22、在在Add file as typeAdd file as type中务必要选中务必要选VerilogVerilog 同样的方法加入相应的测试文件。同样的方法加入相应的测试文件。3 3 编译源代码编译源代码(Verilog)(Verilog)UI)UI)Compile-Compile allCompile-Compile all在在ProjectProject下点击右键:下点击右键:选择选择compilecompilecompilecompile all allCmdCmd)vlogvlog-work-work .v.v .v.v文件按列出的顺序编译文件按列出的顺序编译编译顺序无关紧要编译顺序

23、无关紧要缺省编译到缺省编译到workwork库中库中例:例:vlogvlog my_design.v my_design.v注意注意:当项目中涉及的设计文件被改变时必须重新编译。当项目中涉及的设计文件被改变时必须重新编译。编译编译出错信息出错信息4 4 启动仿真器启动仿真器UI)UI)Simulate-SimulateSimulate-SimulateCmdCmd)vsimvsim-lib-lib VHDLVHDLvsimvsim top_entity top_architecture top_entity top_architecture仿真仿真Entity/ArchitectureEnti

24、ty/Architecture对对也可以选择一个也可以选择一个ConfigurationConfigurationVerilogVerilogvsimvsim top_level1 top_level2 top_level1 top_level2仿真多个顶层仿真多个顶层ModulesModules启动仿真器启动仿真器(UI)(UI)选择顶层选择顶层module或或entity/architecture选择仿真精度选择仿真精度选择库选择库vsimvsim命令参数命令参数参数参数-t-t 指定仿真时间精度指定仿真时间精度单位可以是单位可以是 fsfs,psps,ns,ms,sec,min,hr,n

25、s,ms,sec,min,hr如果使用了如果使用了 VerilogVerilog中的中的timescaletimescale编译指令,仿真将使用所编译指令,仿真将使用所有设计文件中最小的时间精度有设计文件中最小的时间精度该参数是可选的该参数是可选的 (默认值是默认值是ns)ns)-sdfminsdfmin|-|-sdftypsdftyp|-|-sdfmaxsdfmax =标注标注SDFSDF文件文件该参数是可选的该参数是可选的实例名也是可选的;如果没有指定,实例名也是可选的;如果没有指定,SDFSDF将用于顶层设计将用于顶层设计5 5 运行仿真器运行仿真器UI)UI)RunRunCmdCmd)

26、runrun 可按指定时间步长运行仿真器可按指定时间步长运行仿真器运行仿真器运行仿真器runrun命令参数命令参数可选参数可选参数-指定运行的时间步长指定运行的时间步长单位可以是单位可以是 fsfs,psps,ns,ms,sec,ns,ms,sec-step-step执行到下一个执行到下一个HDLHDL表达式表达式-continue-continue在在 stepstep或断点之后继续执行余下的仿真或断点之后继续执行余下的仿真-all-all运行仿真器,直到不再有事件发生运行仿真器,直到不再有事件发生runrun命令例子命令例子runrun 10001000从当前位置开始,仿真器运行从当前位置

27、开始,仿真器运行10001000个时间单位个时间单位run run 2500 ns2500 ns从当前位置开始,仿真器运行从当前位置开始,仿真器运行2500ns2500nsrunrun 3000 3000仿真器运行到仿真器运行到30003000个时间单位的时刻停止个时间单位的时刻停止4.3.34.3.3仿真器的激励仿真器的激励测试平台测试平台(TestbenchTestbench)可用可用VerilogVerilog或或VHDLVHDL编写编写用于非常复杂的仿真和交互式仿真用于非常复杂的仿真和交互式仿真forceforce命令命令用于简单模块的仿真用于简单模块的仿真直接从命令控制台输入直接从命

28、令控制台输入可以使用可以使用.DO.DO文件文件(宏文件宏文件)DODO文件文件DODO文件是自动运行仿真步骤的宏文文件是自动运行仿真步骤的宏文件件建库建库编译编译仿真仿真强制仿真器激励强制仿真器激励可以运用于所有可以运用于所有ModelSimModelSim模式模式UI)UI)Tools-Execute MarcoTools-Execute MarcoCmdCmd)dodo.do.do可以调用其他可以调用其他DODO文件文件cd c:mydirvlib workvlog counter.vvsim counterview*add wave/*add list/*do run.doDODO文件

29、例子文件例子cd c:mydirvlib workvcom counter.vhdvsim counterview*do stimulus.domy_sim.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用用ModelSimMode

30、lSim进行仿真进行仿真演演 示示4.44.4从例子开始学习从例子开始学习ModelSimModelSim例子是一个例子是一个分频电路分频电路的设计。的设计。分频电路分频电路:是将较高频率的时钟分频,得到较低频率的时钟,是将较高频率的时钟分频,得到较低频率的时钟,分频电路的使用较为广泛。例如,我们要编写一个显示时间分频电路的使用较为广泛。例如,我们要编写一个显示时间的电路就需要一个分频器,将晶振的频率分频得到的电路就需要一个分频器,将晶振的频率分频得到1Hz1Hz的时钟的时钟信号。信号。分频有几种方法,对于较为规则的分频,如分频有几种方法,对于较为规则的分频,如2 2分频、分频、4 4分频、分

31、频、8 8分频等可以调用分频等可以调用ISEISE本身的库函数来实现;本身的库函数来实现;对于较不规则的分频,我们也有两种方法,一种是利用计数对于较不规则的分频,我们也有两种方法,一种是利用计数器的某一位来作为分频输出,一种是计数器计数到某一数值器的某一位来作为分频输出,一种是计数器计数到某一数值时,分频时钟信号翻转来实现分频。时,分频时钟信号翻转来实现分频。两种方法都可以从其仿真结果得到。两种方法都可以从其仿真结果得到。图形界面对设计进行仿真图形界面对设计进行仿真 ModelsimModelsim快速上手四部曲分别是:创建工程、添加快速上手四部曲分别是:创建工程、添加VerilogVeril

32、og代码文件、编译、仿真。下面简单给出这四步:代码文件、编译、仿真。下面简单给出这四步:初学者可以按照如下步骤开始:初学者可以按照如下步骤开始:1 1、运行运行ModelSimModelSim,方法是点击开始,方法是点击开始-程序程序-ModelSim SE-ModelSim SE 6.2b-ModelSim6.2b-ModelSim或双击桌面上的快捷方式,会出现界面,如或双击桌面上的快捷方式,会出现界面,如果上一次使用果上一次使用ModelSimModelSim建立过工程,这时候会自动打开上一建立过工程,这时候会自动打开上一次所建立的工程;次所建立的工程;图形界面对设计进行仿真图形界面对设计

33、进行仿真图形界面对设计进行仿真图形界面对设计进行仿真 2 2、点击、点击File-New-ProjectFile-New-Project,会出现如图,会出现如图4-3-24-3-2所示的所示的界面,在界面,在Project NameProject Name中我们输入建立的工程名字为中我们输入建立的工程名字为DivClkSimuDivClkSimu,在,在Project LocationProject Location中输入工程保存的路径中输入工程保存的路径为为D:/yuProj/modelsim/DivClkD:/yuProj/modelsim/DivClk,注意注意ModelSimModel

34、Sim不能为一不能为一个工程自动建立一个目录,这里我们最好是自己在个工程自动建立一个目录,这里我们最好是自己在Project LocationProject Location中输入路径来为工程建立目录,中输入路径来为工程建立目录,在在Default Library NameDefault Library Name中为我们的设计编译到哪一个库中,中为我们的设计编译到哪一个库中,这里我们使用默认值,这样,在我们编译设计文件后,在这里我们使用默认值,这样,在我们编译设计文件后,在WorkspaceWorkspace窗口的窗口的LibraryLibrary中就会出现中就会出现workwork库。这里我

35、们输库。这里我们输入完以后,点击入完以后,点击OKOK;图形界面对设计进行仿真图形界面对设计进行仿真新建工程窗口新建工程窗口 图形界面对设计进行仿真图形界面对设计进行仿真3 3、这时有对话框图所示,提示我们给定的工程路径不存在,这时有对话框图所示,提示我们给定的工程路径不存在,是否建立该路径,我们的目的就是为工程建立一个新目录,是否建立该路径,我们的目的就是为工程建立一个新目录,因此,点击确定;因此,点击确定;确认建立新的工程目录确认建立新的工程目录 图形界面对设计进行仿真图形界面对设计进行仿真 4 4、这时候出现如图所示的界面,这时候出现如图所示的界面,可以点击不同的图标来为工程添可以点击不

36、同的图标来为工程添加不同的项目,点击加不同的项目,点击Create New Create New FileFile可以为工程添加新建的文件,可以为工程添加新建的文件,点击点击Add Existing FileAdd Existing File为工程添为工程添加已经存在的文件,点击加已经存在的文件,点击Create Create SimulationSimulation为工程添加仿真,点为工程添加仿真,点击击Create New FolderCreate New Folder可以为工程可以为工程添加新的目录。这里我们点击添加新的目录。这里我们点击Create New FileCreate New

37、 File;5 5、出现界面如图,我们在出现界面如图,我们在File File NameName中输入中输入DivClkDivClk作为文件的作为文件的名称,名称,Add file as typeAdd file as type为输为输入文件的类型为入文件的类型为VHDLVHDL、VerilogVerilog、TCLTCL或或texttext,这里我们设置这里我们设置VerilogVerilog,FolderFolder为新建的文件为新建的文件所在的路径,所在的路径,Top LevelTop Level为在我为在我们刚才所设定的工程路径下。们刚才所设定的工程路径下。点击点击OKOK;并在;并在

38、Add items to Add items to the Projectthe Project窗口点击窗口点击CloseClose关关闭该窗口;闭该窗口;图形界面对设计进行仿真图形界面对设计进行仿真图形界面对设计进行仿真图形界面对设计进行仿真6 6、这时候在这时候在WorkspaceWorkspace窗口中出现了窗口中出现了ProjectProject选项卡,在其选项卡,在其中有中有DivClk.vDivClk.v,其状态栏有一个问号,表示未编译,其状态栏有一个问号,表示未编译,我们双击该文件,这时候出现窗口我们双击该文件,这时候出现窗口edit-DivClk.vedit-DivClk.v的

39、编的编辑窗口,在其中输入我们的设计文件如下:辑窗口,在其中输入我们的设计文件如下:图形界面对设计进行仿真图形界面对设计进行仿真module div(clk_i,clk_o,reset);module div(clk_i,clk_o,reset);parameter DIV_N=4;parameter DIV_N=4;input clk_iinput clk_i,reset;reset;output clk_o;output clk_o;reg clk_o;reg clk_o;integer count;integer count;always (negedge reset or posedge

40、 clk_i)always (negedge reset or posedge clk_i)begin begin if(!reset)count=0;if(!reset)count=0;else if(count=3)count=0;else if(count=3)count=0;else count=count+1;else count=count+1;endendalways (negedge reset or posedge clk_i)always (negedge reset or posedge clk_i)begin begin if(!reset)clk_o=0;if(!re

41、set)clk_o=0;elseelse begin begin if(count=(DIV_N/2-1)clk_o=0;if(count=(DIV_N/2-1)clk_o=0;else clk_o=1;else clk_o SaveSave,并退出,并退出该窗口(该窗口(File-File-CloseClose););8 8、在在WorkSpaceWorkSpace窗口的窗口的DivClk.vDivClk.v上点击右键,选上点击右键,选择择Compile-Compile-Compile AllCompile All,如图所示;如图所示;图形界面对设计进行仿真图形界面对设计进行仿真9、在脚本窗

42、口中将出现一行绿色字体、在脚本窗口中将出现一行绿色字体Compile of Compile of DivClk.v was successful.DivClk.v was successful.,说明文件编译成功,在该,说明文件编译成功,在该文件的状态栏后有一绿色的对号,表示编译成功;文件的状态栏后有一绿色的对号,表示编译成功;1010、下面我们开始仿真,点击菜单、下面我们开始仿真,点击菜单Simulate-SimulateSimulate-Simulate,会,会出现如下图所示的界面,我们展开出现如下图所示的界面,我们展开DesignDesign选项卡下的选项卡下的workwork库,并选中

43、其中的库,并选中其中的divdiv,这时候在,这时候在SimulateSimulate中出现中出现了了work.divwork.div表示我们所要仿真的对象,表示我们所要仿真的对象,ResolutionResolution为仿真的为仿真的时间精度,这里我们使用默认值,点击时间精度,这里我们使用默认值,点击OKOK;图形界面对设计进行仿真图形界面对设计进行仿真选择仿真对象选择仿真对象 图形界面对设计进行仿真图形界面对设计进行仿真1111、为了观察波形窗口,我们点击菜单为了观察波形窗口,我们点击菜单View-debug windows View-debug windows-Wave-Wave;12

44、12、这时候出现的这时候出现的WaveWave窗口为空,里面什么都没有,我们窗口为空,里面什么都没有,我们 要要为该窗口添加我们需要观察的对象,首先在为该窗口添加我们需要观察的对象,首先在workspaceworkspace窗口窗口中右击中右击instanceinstance的中例化模块的中例化模块divdiv,选择,选择add-add to add-add to wavewave可得如下图所示,这时候在波形窗口中就可以看到所有可得如下图所示,这时候在波形窗口中就可以看到所有的信号了。的信号了。图形界面对设计进行仿真图形界面对设计进行仿真信号窗口信号窗口 图形界面对设计进行仿真图形界面对设计进

45、行仿真1313、下面我们就开始仿真了,在主窗口中输入命令对信号进下面我们就开始仿真了,在主窗口中输入命令对信号进行驱动,行驱动,对时钟信号输入驱动对时钟信号输入驱动:force clk_i 0 0,1 10-r 20force clk_i 0 0,1 10-r 20对对resetreset信号输入驱动信号输入驱动:force reset 0 0,1 3force reset 0 0,1 3 其中其中forceforce为命令,为命令,clkclk表示为表示为clkclk信号驱动,信号驱动,0 00 0表示在零表示在零时刻该值为时刻该值为0 0,1 101 10表示在表示在10ns10ns处值为

46、处值为1 1,-r 20-r 20表示从表示从20ns20ns处开始重复(处开始重复(repeatrepeat),可以看出我们这里的输入时钟为),可以看出我们这里的输入时钟为50MHz50MHz,即周期为,即周期为20ns20ns;采用testbench实现仿真include“DivCLK.v”module testdiv;reg clk_i;reg reset;wire clk_o;always#10 clk_i=clk_i;initialbegin#0 reset=0;clk_i=0;#5 reset=1;#2000$stop;enddiv div1(.clk_i(clk_i),.clk_

47、o(clk_o),.reset(reset);endmodule 图形界面对设计进行仿真图形界面对设计进行仿真图形界面对设计进行仿真图形界面对设计进行仿真1414、以十进制查看以十进制查看countercounter信号波形,在波形窗口中,右键信号波形,在波形窗口中,右键点击点击countercounter信号,点击信号,点击Radix-DecimalRadix-Decimal,该信号的值就以,该信号的值就以十进制显示了;十进制显示了;1515、开始仿真,在主窗口中输入开始仿真,在主窗口中输入run 3usrun 3us,表示运行仿真,表示运行仿真3 3微微秒,这时候如果你的机器配置较低那就要

48、等几分钟时间了,秒,这时候如果你的机器配置较低那就要等几分钟时间了,这时候你可以看看这时候你可以看看CPUCPU的利用率一直为的利用率一直为100100,仿真是比较,仿真是比较占资源,并且以后对波形的操作机器反应也很慢,如果仿真占资源,并且以后对波形的操作机器反应也很慢,如果仿真很慢你可以看看状态栏的当前仿真时间是多少;很慢你可以看看状态栏的当前仿真时间是多少;图形界面对设计进行仿真图形界面对设计进行仿真1616、这时候点击按钮这时候点击按钮 (在当前波形窗口中显示所有波(在当前波形窗口中显示所有波形),点击形),点击 可以在波形窗口添加竖线,点击可以可以在波形窗口添加竖线,点击可以 调调整选

49、定竖线在选定信号的变化处,调整完毕,我们可以在波整选定竖线在选定信号的变化处,调整完毕,我们可以在波形窗口看到如图所示的窗口,可以看到分频得到的时钟占空形窗口看到如图所示的窗口,可以看到分频得到的时钟占空比为比为1 1(即一个周期内容为(即一个周期内容为1 1时间等于波形为时间等于波形为0 0的时间),分的时间),分频后周期为频后周期为80ns80ns;点击中间键拉出需要显示的区域点击中间键拉出需要显示的区域图形界面对设计进行仿真图形界面对设计进行仿真仿真波形窗口仿真波形窗口 图形界面对设计进行仿真图形界面对设计进行仿真1717、退出仿真,在主窗口中点击退出仿真,在主窗口中点击Simulate

50、-End Simulate-End SimulationSimulation,会出现对话框,提示我们是否确认退出仿真,会出现对话框,提示我们是否确认退出仿真,我们点击是退出仿真;我们点击是退出仿真;1818、仿真结果分析,这里我们的输入时钟为仿真结果分析,这里我们的输入时钟为50MHz50MHz,周期,周期 为为20ns20ns,通过分频语句得到频率为,通过分频语句得到频率为12.5MHz12.5MHz,周期为,周期为80ns80ns的时钟,使用时可以调整分频语句的时钟,使用时可以调整分频语句if(if(count=3count=3)then)then中的值及位宽来调整分频后的时钟频率。设我们

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁