modelsim仿真教程
使用ModelSim仿真入门

1.点击 ModelSim实验 下载实验文档,保存并解压到D:盘根目录下。
2.启动 ModelSim6.0,执行 File 菜单下的 Change Directory... 命令。
在随后弹出的对话框中,选择 D:\exam 文件夹,点击“OK”按扭。
3.执行 File->New 菜单下的 Library 命令,在随后弹出的对话框上,点击“OK”按钮,建立 work 库。
4.执行 File->New 菜单下的 Project 命令,在随后弹出的对话框的 Project Name 栏,输入 counter,点击“OK”按钮。
5.点击“Use Current Ini”按钮。
6.点击“Add Existing File”图标。
在随后弹出的对话框上,通过点击“Browse...”按钮,选中 D:\exam文件夹下的 tb.v、counter.v 文件,然后点击“OK”按钮。
点击 Add Item to Project 对话框的“Close”按钮。
7.在 Workspace 窗口里,点击右键。
在弹出菜单中点击 Compile 下的 Compile All 命令。
8.在 Simulate 菜单下,点击 Start Simulation... 命令。
9.在随后弹出的对话框中,将 Design Unit 项设为 work 库下 tb 单元,将 Resolution 设为 ns,然后点击“OK”按钮。
10.执行 View->Debug Windows 菜单下的 Wave 命令,打开 Wave 窗口。
11.在 Objects 窗口下,点击右键。
在弹出菜单下,点击 Add to Wave 下的 Signals in Design 命令。
12.在 Transcript 窗口里,输入 run 10 ms 命令。
13.进入 Wave 窗口,观察各个信号的波形,是否与原设计相符。
14.在 Wave 窗口里,双击 cnt 的波形,打开 dataflow 窗口,观察各个信号传递关系。
modelsim仿真流程

1、运行ModelSim,如果上一次使用ModelSim建立过工程,这时候会自动打开上一次所建立的工程;2、点击File->New->Project,在Project Name中我们输入建立的工程名,在Project Location中输入工程保存的路径,注意ModelSim不能为一个工程自动建立一个目录,这里我们最好是自己在Project Location中输入路径来为工程建立目录,在Default Library Name中为我们的设计编译到哪一个库中,这里我们使用默认值,这样,在我们编译设计文件后,在Workspace窗口的Library 中就会出现 work库。
这里我们输入完以后,点击OK;3、如果提示我们给定的工程路径不存在,是否建立该路径,我们的目的就是为工程建立一个新目录,因此,点击确定;4、点击Create New File可以为工程添加新建的文件,点击Add Existing File 为工程添加已经存在的文件,点击Create Simulation为工程添加仿真,点击Create New Folder可以为工程添加新的目录。
这里我们点击Create New File;5、我们在File Name中输入文件名称,Add file as type为输入文件的类型为VHDL、Verilog、TCL或text,这里我们使用默认设置VHDL,Folder为新建的文件所在的路径,Top Level为在我们刚才所设定的工程路径下。
点击OK;并在Add items to the Project窗口点击Close关闭该窗口;6、这时候在Workspace窗口中出现了Project选项卡,在其中有文件名.vhd,其状态栏有一个问号,表示未编译,我们双击该文件,这时候出现编辑窗口,在其中我们输入我们的设计文件7、点击File->Save,并退出该窗口(File->Close);8、在WorkSpace窗口的文件名.vhd上点击右键,选择Compile->Compile All;9、在脚本窗口中将出现一行绿色字体Compile of DivClkHDL.vhd was successful.,说明文件编译成功,在该文件的状态栏后有一绿色的对号,表示编译成功;10、下面我们开始仿真,点击菜单Simulate->Simulate,展开Design选项卡下的work库,并选中其中的behavioral,这是在Simulate中出现了work.实体名(behavioral)表示我们所要仿真的对象,Resolution为仿真的时间精度,这里我们使用默认值,点击OK;11、为了观察波形窗口,我们点击菜单View->Wave;12、这时候出现的Wave窗口为空,里面什么都没有,我们要为该窗口添加我们需要观察的对象,首先在主窗口而不是波形窗口中点击View-> Signals打开信号列表窗口,在改窗口中点击Add->Wave->Signals in Design,这时候在波形窗口中就可以看到这些信号了;13、下面我们就开始仿真了,在主窗口中输入命令对信号进行驱动仿真14、退出仿真,在主窗口中点击Simulate->End Simulation,会出现对话框,提示我们是否确认退出仿真,我们点击是退出仿真;15、仿真结果分析;。
ModelSim后仿真详细流程介绍PPT课件

延时信息
2021/3/9
8
目录
仿真的基本概念 ➢后仿真前的基本准备工作
后仿真的基本操作步骤
2021/3/9
9
后仿真前的基本准备工作
▪ ModelSim库
库文件,是指已经编译通过的设计文件的总体。
ModelSim中有两种库类型:
工作库
资源库
1.库的内容会随着使用者 更新设计文件和重新编译 而变化; ▪2D.e存sc放ript当ion前of设th计e b文usi件nes编s 译 后产生的设计单元; 3.编译前必须先创建好工 作库; 4.每次编译只允许有一个 工作库; 5.默认的工作库名是work
2021/3/9
14
后仿真前的基本准备工作
▪ Altera仿真库建立步骤
2.启动ModelSim SE。建立两个新库,从主菜单选择File->New-> Library,选中“a new library and a logical mapping to it”,在“Library Name”填写“altera_base_v”,Library Physical Name填写文件夹绝 对路径,如图所示。
2021/3/9
13
后仿真前的基本准备工作
▪ Altera仿真库建立步骤
1.在ModelSim安装目录中建立两个文件夹,一个是用于存放公用的 库给它取名altera_base_v;另一个是用于存放您要用到的特定的器件 库,取名为altera_device。
比如,F:\Modelsim 6.5\altera\altera_base_v F:\Modelsim6.5\altera\altera_device
注意:要把 Enable optimization 前 面的勾去掉,即不进行自动优化。
modelsim仿真教程

本教程使用软件的下载链接如下:/download/quartus_modelsim_setup.zipMolelsim仿真使用教程——利用quartus生成网表文件Mentor公司的ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。
它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段,是FPGA/ASIC设计的首选仿真软件,接下来以一个简单的例子介绍modelsim的基本使用方法。
第一步:建立工程,该过程与quartus使用的教程大部分是一样的,区别如下:在simluation选项中选择MoselSim-Altera作为仿真工具,fomat中的选项根据编程语言进行选择,本教程以VHDL为例。
第三方的仿真工具所以在此选择第二步:新建文件:新建一个源文件,保存为led.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity led isport(led_out : out std_logic_vector(7 downto 0);clk : in std_logic;rst_n : in std_logic);end led;architecture behavior of led issignal light : std_logic_vector (7 downto 0);beginprocess(clk,rst_n)beginif(rst_n = '0')thenlight <= "00000010";elsif(clk'event and clk ='1' )thenif(light = "10000000") thenlight <= "00000001";elselight <= light(6 downto 0)& '0';end if;end if;end process;led_out <= light;end behavior;新建一个testbench 文件,保存为testbench.vhd(testbench是电路的激励文件,在后面章节会详细介绍,这里仅仅作为软件的演示不具体介绍testbench的设计过程):library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.numeric_std.all;entity testbench isend testbench;architecture behavior of testbench iscomponent ledport ( clk : in std_logic;rst_n : in std_logic;led_out : out std_logic_vector(7 downto 0));end component;--input signalsignal clk : std_logic := '0' ;signal rst_n : std_logic :='0';--output signalsignal led_out : std_logic_vector (7 downto 0);--contstantconstant clk_period : time := 20ns;begincp1 : led port map (clk =>clk,rst_n => rst_n,led_out => led_out );clk_gen : processbeginclk <= '1';wait for clk_period/2;clk <= '0';wait for clk_period/2;end process;rst : processbeginrst_n <= '0';wait for 20ns;rst_n <= '1';wait for 200ns;wait;end process;end;然后对顶层模块led.vhd进行检查语法和编译,在编译的窗口出现EDA Netlist Writer 是表示第三方仿真工具所需要用到的网表文件(Netlist)成功生成。
Modelsim的仿真教程

ModelSim的仿真1.仿真的分类仿真过程是正确实现设计的关键环节,用来验证设计者的设计思想是否正确,及在设计实现过程中各种分布参数引入后,其设计的功能是否依然正确无误。
仿真主要分为功能仿真和时序仿真。
功能仿真是在设计输入后进行;时序仿真是在逻辑综合后或布局布线后进行。
1). 功能仿真( 前仿真)功能仿真是指在一个设计中,在设计实现前对所创建的逻辑进行的验证其功能是否正确的过程。
布局布线以前的仿真都称作功能仿真,它包括综合前仿真(Pre-Synthesis Simulation )和综合后仿真(Post-Synthesis Simulation )。
综合前仿真主要针对基于原理框图的设计; 综合后仿真既适合原理图设计, 也适合基于HDL 语言的设计。
2). 时序仿真(后仿真)时序仿真使用布局布线后器件给出的模块和连线的延时信息,在最坏的情况下对电路的行为作出实际地估价。
时序仿真使用的仿真器和功能仿真使用的仿真器是相同的,所需的流程和激励也是相同的;惟一的差别是为时序仿真加载到仿真器的设计包括基于实际布局布线设计的最坏情况的布局布线延时,并且在仿真结果波形图中,时序仿真后的信号加载了时延,而功能仿真没有。
后仿真也称为时序仿真或者布局布线后仿真,是指电路已经映射到特定的工艺环境以后,综合考虑电路的路径延迟与门延迟的影响,验证电路能否在一定时序条件下满足设计构想的过程,是否存在时序违规。
其输入文件为从布局布线结果中抽象出来的门级网表、Testbench 和扩展名为SDO 或SDF 的标准时延文件。
SDO 或SDF 的标准时延文件不仅包含门延迟,还包括实际布线延迟,能较好地反映芯片的实际工作情况。
一般来说后仿真是必选的,检查设计时序与实际的FPGA运行情况是否一致,确保设计的可靠性和稳定性。
2.仿真的作用1).设计出能工作的电路:因此功能仿真不是一个孤立的过程,其和综合、时序分析等形成一个反馈工作过程,只有这个过程收敛,各个环节才有意义。
Modelsim 自动化仿真平台搭建

Modelsim do文件的自动化仿真 创建虚拟信号
虚拟信号可以把实际信号转化为更人性化的信号,比如将信号的数值转化为字符显示,例如状 态机的跳转可以用虚拟信号标注这样更清晰。
virtual type { {1 IDLE} {2 READ} {4 WRITE} {8 STOP} } state_struc 以上简历一个虚拟的结构体,结构体的名字叫state_struc
Modelsim do文件的自动化仿真 Tcl语言的语法
vlib:创建库。格式vlib <library name>,默认库的名字为work 示例: vlib work vmap:映射逻辑库名,将逻辑库名映射库路径。语法格式vmap work <library name> 示例:vlib work work vdir:显示指定库的内容 。语法格式vdir –lib <library name> 示例:vdir –lib work vlog:编译Verilog 源代码,库名缺省编译到work本地库,文件按顺序编译。语法格式 vlog
modelsim将加载两次,这种结果不是我们想要的。 .SDO文件并不是标准的延时文件,如果想转到标准的延迟文件可以用以下命令,sdf文件比
sdo文件小加载速度快。sdf文件采用了gzip压缩。 sdfcom netlist/my_design.sdo netlist/my_design.sdf
Modelsim 自动化仿真平台源自Modelsim GUI仿真流程
1. 打开Modelsim 软件,建一个工程文件夹,简历Modelsim 仿真工程。 2. 在用户窗口界面加入需要仿真的所有代码和库文件。 3. 编译有文件 4. 选择testbench顶层文件启动仿真。 5. 选择所要观察的目标信号,并将其加入到波形观察窗口,如需更改bus显示
【翻译】modelsim指南之基本仿真(digital logic)

Introduction本文将一步步实现以下基本仿真流程:1.创建设计工作库2.编译设计单元3.加载设计4.运行仿真本文用到的设计文件本文的范例是一个8位的二进制加法计数器和相关的测试文件。
保存路径:Verilog-<install_dir>/examples/tutorials/verilog/basicSimulation/counter.v and tcounter.v相关阅读用户手册的章节:设计库、Verilog和SystemVerilog仿真。
参考命令:vlib,vmap,vlog,vcom,view,run.创建设计工作库在你仿真前,必须先创建一个库并编译源码到这个库。
1.创建一个新目录并复制本文的设计文件。
Copy counter.v 和tcounter.v2. 启动modelsim。
a. windows下双击快捷方式启动,你将看到modelsim的欢迎对话框,单击Close.b. 选择File > Change Directory 指定到第一步创建的目录。
3. 创建工作库。
a. 选择File > New > Library.弹出一个对话框,可以指定库名等选项。
如图1。
图1 创建一个新库b. 在Library Name项输入work(如果它没有自动输入)。
c. 单击OK.modelsim创建了一个目录work并写了一个名为_info的文件到这个目录。
这个_info文件必须保持在work文件夹以区分他是modelsim的库。
不要从你的操作系统里修改这个文件夹里的内容;所有操作应该在modelsim里进行。
modelsim也把work库添加到库窗口(图2)并记录库映射作为未来参考(modelsim.ini)。
图2当你在第3步单击确定后,Transcript窗口显示以下内容:vlib workvmap work work这两行命令等于你的菜单操作。
编译设计单元创建工作库后,接着就准备编译你的源文件。
ModelSim-Altera_6.5仿真入门教程

平台软件:ModelSim-Altera 6.5e (Quartus II 10.0) Starter Edition内容1 设计流程使用ModelSim仿真的基本流程为:图1.1 使用ModelSim仿真的基本流程2 开始2.1 新建工程打开ModelSim后,其画面如图2.1所示。
图2.1 ModelSim画面1. 选择File>New>Preject创建一个新工程。
打开的Create Project对话框窗口,可以指定工程的名称、路径和缺省库名称。
一般情况下,设定Default Library Name为work。
指定的名称用于创建一个位于工程文件夹内的工作库子文件夹。
该对话框如图2.2所示,此外还允许通过选择.ini文件来映射库设置,或者将其直接拷贝至工程中。
图2.2 创建工程的对话框2. 按照图2.3所示,设置Project Name为LED_FLOW,Project Location为D:/led_flow。
图2.3 输入工程信息当单击OK按钮后,在主体窗口的下方将出现Project标签,如图2.4所示。
图2.4 Project标签3. 之后,将出现Add Items to the Project的对话框,如图2.5所示。
图2.5 在工程中,添加新项目2.2 在工程中,添加新项目在Add Items to the Project对话框中,包括以下选项:•Create New File——使用源文件编辑器创建一个新的Verilog、VHDL、TCL或文本文件•Add Existing File——添加一个已存在的文件•Create Simulation——创建指定源文件和仿真选项的仿真配置•Create New Folder——创建一个新的组织文件夹1. 单击Create New File。
打开图2.6所示窗口。
图2.6 创建工程文件夹2. 输入文件名称:LED_FLOW,然后选择文件类型为Verilog。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Modelsim版本介绍
针对不同的应用,modelsim分modelsim XE、modelsim PE、 modelsim SE、modelsim_altera等版本; a,modelsim XE针对xilinx的FPGA器件的仿真应用,用户 使用时无须库编译; b,modelsim_altera 针对altear的FPGA器件的仿真应用, 仿真库已经编译好,用户可直接使用; c,modelsim PE主要是做设计验证用,altera/Xilinx/lattice 器件,都需要进行库编译与指定;modelsim PE不支持 verilog与vhdl的混合仿真;相比SE版本,仿真速度也不快; d,modelsim SE 也是做设计验证用,使用时,需要对不同 厂家的器件库进行编译,并且要指定相应库路径; modelsim SE 支持混合设计及仿真;并且仿真速度很快;另 外带许多其它附加功能,比如代码覆盖率等;
时钟激励 在TB中,时钟激励源的生成有好几种方式; 比如生成50M时钟,周期为20ns,则可以用如下 方式: `timescale 1ns/100ps parameter CLK_PERIOD = 20; always #(CLK_PERIOD / 2) clk_50m = ~clk50m; 或者: forever #(CLK_PERIOD / 2) clk_50m = ~clk50m;
双向端口的激励 inout端口在TB中定义为wire型变量;在TB中双向 端口设置中间变量inout_reg ,作为inout 的输出寄 存,然后用输出使能控制传输方向; ……… wire inout_port; reg inout_reg; reg oe; assign inout_port = oe ? inout_reg : 1’bz; …….
基于modelsim的仿真
内容概要
FPGA设计哪些过程需要仿真? 前仿真与后仿真 Modelsim的不同版本 Modelsim的仿真过程 测试向量的编写
FPGA设计中哪些过程需要仿真
设计规范 设计输入 设计输入 RTL仿真 设计综合 布局布线 门级仿真 时序分析 系统验证
系统产品
synopsys translate_off / synopsys translate_on 在模块中,可以通过translate_off/translate_on与 宏定义相配合来设置各种仿真条件(包括监视打 印)。此方式可以让用户知道逻辑的运行情况; //synopsys translate_off `ifdef TBASE_100M if(rising_edge_syn) $display(“have check the valid IP !!”); `endif // synopsys translate_on 介于两者之间的语句只在仿真时起作用,不会综 合成门电路;
$monitor/$display modelsim 可以通过一些系统函数来打印输出相关 的信号;为仿真提供监测与比较; ……… $timeformat(-9,1,"ns",12); $display(" Time clk rst_n ld en d q"); $monitor(“%t %b %b %b %b %b %b“,$time,clk,rst_n,ld,en,d,q); …… 上面的语句是监视DFF各端口信号变化并打印;
module test_bidir_ver; reg read_writet; reg [1:0] data_in; wire [1:0] datat, data_out; bidir_infer uut (datat, read_writet); assign datat = (read_writet == 1) ? data_in : 2’bz; assign data_out = (read_writet == 0) ? datat : 2’bz; initial begin read_writet = 1; data_in = 11; #50 read_writet = 0; end endmodule
测试双向端口实例 module bidir_infer (DATA, READ_WRITE); input READ_WRITE ; inout [1:0] DATA ; reg [1:0] LATCH_OUT ; always @ (READ_WRITE or DATA) begin if (READ_WRITE == 1) LATCH_OUT <= DATA; end assign DATA = (READ_WRITE == 1) ? 2’bZ : LATCH_OUT; endmodule
编译成功
编译成功
启动仿真 源文件全编译成功后,就可加载仿真
simulate
加载库文件 altera常用的库有:220_models/altear_mf/sgate 不同的器件有不同的库
加载OK的库
加载工作库(work)
<1>在work库下加载TB文件;
<2>加载成功后
加载的源文件
run 500us
当运行完后,可看到仿真波形
仿真波形
查看波形 <1>放大波形局部 可通过I/O,F5/F6/F7来放大缩小波形;
<2>放大后的波形
波形测量 <1>新增光标
<2>定位光标
<3>测量信号波形
测量结果
波形颜色设置 <1>属性
<2>设置颜色
<3>设置后的波形显示
<4>多种颜色设置效果
信号生成 <1>:单个控制信号可以采用延时语句来生成; 比如: initial begin rst_n = 1’b0; ld = 1’b0; ld en = 1’b0; #20; d rst_n = 1’b1; ld = 1’b1; clk DFF #20; en ld = 1’b0; en = 1’b1; end rst_n
小结 1,基于modelsim的仿真,可以最大程度的验证逻辑 代码的时序情况; 2,仿真文件(TB)的编写,有各种不同的风格与方 式,可以参考各种范例代码,比如大的IP core都 提供相关的自测代码;Altera/Xilinx的MAC/DDR2等 大型的IP都提供相关的自测代码,并且风格各一 ,仔细阅读可学到不少东西; 3,推荐阅读《hdl chip design》《writing testbench 》
其它仿真方式 <1>Triple Speed Ethernet MAC的仿真 [方法一] 1,modelsim中新建工程,把*.vo、tb.v、及MAC 的测试模块的所能*.v文件加入工程; 2,编译加入的所有文件; 3,启动仿真,指定库路径:220model、 altera_mf、sgate; 仿真库在$90\modelsim_ae\altera\verilog下; 4,打开wave窗口,加入需要观察的信号即可;
FPGA设计中哪些过程需要仿真
FPGA设计过程中,主要用到的仿真是RTL仿真、门级仿真; RTL仿真就是通常所说的前仿真或者功能仿真,它只考虑在 理想情况下,用户代码的时序的正确性;用户可通过功能仿 真,来检验逻辑功能的时序是否是期待的时序; 门级仿真又叫后仿真,它是通过综合、布局布线生成网表后, 把各种延时信息进行综合考虑的一种仿真;通过后仿真,用 户可知道实际电路运行的情况,及相关的时序信息;
[方式二] 1,打开modelsim,关闭其它工程; 2,指定路径到已生成的MAC工程TB文件下; 3,在TB文件下找到*.tcl文件,然后在modelsim TCL窗口敲入:source *.tcl; 4, 等待软件自动编译源文件,加载库,并输出波形;
<2>DDR2的仿真 1,根据选择的DDR2芯片,到其网站下载该DDR2芯片的仿真 模型(有verilog,vhdl两个版本); 2,将下载后的DDR2芯片仿真模型解压后,复制到TB文件下; 3,用DDR2芯片仿真模型替换TB.v文件中的DDR2例化文件, 注意修改各参数; 4,打开modelsim,指定路径到DDR2工程/TB文件/modelsim; 5,在modelsim TCL窗口输入: set memory_model ddr2 source *.tcl //*.tcl文件在modelsim目录下 6, 等待软件自动编译源文件,加载相应的库,并生成信号波形 ,如果需要观察其它信号,用户可手动加入,并保存;
时间精度
格式:`timescale reference_time/precision reference_time:单位时间,根据用户模块的输入输出时钟 周期来决定; precision:单位时间精确度,即参考时钟可达的最大精度; 示例:`timescale 1ns/100ps 单位时间为1ns,可精确到0.xx位;比如1.23/3.75;
宏定义 在TB 文件中,可以以宏定义语句来设置各种不同 的仿真任务; `define TBASE_100M `ifdef TBASE_100M ……..//仿真任务1,执行100M的仿真任务 `else ........//仿真任务2,默认10M的仿真任务 `endif 上面语句中,通过TBASE_100M宏来仿真 100M/10M时两种情况;
延时单位 格式:#times [ns/us/ms/min] 示例:#2ns; #40; 说明:延时2ns; 延时40个单位时间; 在TB文件中,通过延时#,可以设置各个信号的赋 值情况; initial begin reset = 0; #100; reset = 1; end t0 t100