1 ModelSim的使用与Testbench的编写

合集下载

第5章_Testbench与Modelsim

第5章_Testbench与Modelsim

Y => TEST_Y);
FPGA系统设计
7
第七页,编辑于星期五:二十一点 四十二分。
TESTING: process
begin
TEST_NEG_A<='0';
TEST_NEG_B<='0';
TEST_NEG_Y<='0';
TEST_AB<="00";
TEST_SEL<="00";
for I in 0 to 3 loop
Clock <= ’1’; wait for (ClockPeriod / 2)
Clock <= ’0’;
end process;
FPGA系统设计
14
第十四页,编辑于星期五:二十一点 四十二分。
Verilog:
// Declare a clock period constant.
Parameter ClockPeriod = 10;
ENTITY mlu IS
PORT(
NEG_A : IN STD_LOGIC;
NEG_B : IN STD_LOGIC;
NEG_Y : IN STD_LOGIC;
A : IN STD_LOGIC;
B : IN STD_LOGIC;
L1 : IN STD_LOGIC;
L0 : IN STD_LOGIC;
Verilog Module声明 信号声明 实例化顶层设计 提供激励
FPGA系统设计
11
第十一页,编辑于星期五:二十一点 四十二分。
VHDL的testbench
library ieee;

关于使用ModelSim中创建testbench方法

关于使用ModelSim中创建testbench方法

关于使用ModelSim中创建testbench方法
ModelSim中自动创建TestBench的方法
1. 创建工程,将需要仿真的模块加入工程,编译
2. File -> Open,使用ModelSim自带的文本编辑器打开被仿真模块
3. Source -> Show Language Templates
4. 在显示的Language Templates栏目中选择“Create Testbench”
5. 软件自动弹出的"Create Testbench Wizzard”窗口中,在"work"下选择待仿真模块,按照提示走完,即
自动生成
对于初学者来说写Testbench测试文件还是比较困难的,但Modelsim和quartus ii都提供了模板,下面就如何使用Modelsim提供的模板进行操作。

Modelsim提供了很多Testbench模板,我们直接拿过来用可以减少工作量。

对源文件编译完后,鼠标光标移到代码编辑窗后才会在菜单栏看到source选项,点Source->Show Language Templates然后会出现一个加载工程,接着你会发现在刚才的文档编辑窗口左边出现了一个Language Templates窗口,展开Verilog项,双击Creat Testbench会出现一个创建向导,展开工作目录添加目标文件,点击next,弹出testbench配置窗口,默认就行了,然后点击finish。

一个Testbench模板就诞生了,我们就可以在此编辑窗中添加激励代码了。

本次操作软件版本为modelsim alter starter edition 6.6d.。

ModelSim环境基于VHDL语言的testbench书写[整理]

ModelSim环境基于VHDL语言的testbench书写[整理]

testbench顾名思义就是一个测试台,它对外没有接口,所以实体部分为空,但它要对要测试的器件提供激励信号,这其实就是最简单的testbench,以下是具体的操作步骤:1.首先基于QuartusII建立的一个新的工程,编译通过,这其实就是我们要测试的源文件DUT(design under test)counter.vhd.library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter isport(clk: in std_logic;reset: in std_logic;en: in std_logic;q: out std_logic_vector(3 downto 0));end counter;architecture behave of counter issignal q_n: std_logic_vector(3 downto 0);beginprocess(clk, reset, en, q_n)beginif (reset = '1') thenq_n <= (others => '0');--Òì²½ÇåÁãelsif rising_edge(clk) thenif en = '1' thenq_n <= q_n + 1;end if;end if;end process;q <= q_n;end behave;2.打开ModelSim,指定路径为Quartus工程所在目录;建立新的仿真工程,添加文件(DUT)。

3.编译DUT文件到仿真库中(右键DUT,选择compile).4.写testbench文件(counter_tb.vhd)。

ModelSim10.1c中testbench写法及注意事项

ModelSim10.1c中testbench写法及注意事项

2、开始写testbench•如右图,单击New File 弹出一个名称为Untitled-1的空文件。

这个文件就是我们要用来写testbench 的文件(现在“保存”快捷方式还是暗色的)。

单击New File灰色丆非激活状态Untitled-1•如图,在第一行输入“module AND_2_test();”后,“保存”快捷方式变亮,呈彩色。

单击保存,命名为“AND_2_test.v”,此时关键字高亮显示,如下图非高亮显示彩色丆激活态高亮显示•输入testbench代码如右图所示:–initial为初始化语句,只执行一遍,$stop()表示模拟停止;–第一个always语句产生周期为20nm的方波,后两个分别为A和B的输入;–inst是AND_2实例化的名;–initial语句和always语句是并行执行的。

注意丆输出端口是wire型6.1之前的版本模块名要写成AND_2_test;不能有()•C6.2之后的版本可有()•C也可不要()。

建议写成AND_2_test(clk,rst,A,B,C);然后在端口声明处加output clk,rst,A,B,C;这样在编译内部优化时会保留所声明的端口信号丆查看覆盖率时就可以添加波形窗口记得先要初始化实例化模块所要实例化的模块实例化的名字•注意:模块名后面要有“;”结束,endmodule后面不能再有“;”(同时注意,这些都是半角符号,否则出错了很难查错1000nm之后仿真停止)。

•这个例子很简单,所以没有写监控和比较输出部分。

•下面看如何添加•如右图,选择Project工作区,右键单击AND_2.v,弹出菜单如图,选择Add toProject\Existing File..添加我们刚刚写好的testbench(也可以从这里直接添加空白文档,然后写testbench代码),如下图:可先把空白文档添加进工程丆然后再编写文档代码。

选择文件添加该文件testbench文档•单击Compile All快捷按钮,如右图所示,下面的交互区显示“# Compile ofAND_2.v wassuccessful.•# Compile ofAND_2_test.v wassuccessful.•# 2 compiles, 0failed with noerrors. ”编译所有文档编译成功添加模拟仿真•单击Simulation快捷按钮,弹出StartSimulation选项卡,如右图。

modelsim的详细使用方法

modelsim的详细使用方法

一、简介ModelSim是一款由美国Mentor Graphics公司推出的集成电路仿真软件,广泛应用于数字电路和系统设计领域。

它提供了强大的仿真和验证功能,能够帮助工程师快速高效地进行电路设计与验证工作。

本文将详细介绍ModelSim的使用方法,以帮助读者更好地掌握这一工具的操作技巧。

二、安装与配置1. 下载ModelSim安装包,并解压到指定目录2. 打开终端,进入ModelSim安装目录,执行安装命令3. 安装完成后,配置环境变量,以便在任何目录下都能够调用ModelSim程序4. 打开ModelSim,进行软件注册和授权,确保软件可以正常运行三、工程创建与管理1. 新建工程:在ModelSim主界面点击“File” -> “New” -> “Project”,输入工程名称和存储路径,选择工程类型和目标设备,点击“OK”完成工程创建2. 添加文件:在工程目录下右键点击“Add Existing”,选择要添加的源文件,点击“OK”完成文件添加3. 管理工程:在ModelSim中可以方便地对工程进行管理,包括文件的增删改查以及工程参数的设置等四、代码编写与编辑1. 在ModelSim中支持Verilog、VHDL等多种硬件描述语言的编写和编辑2. 在ModelSim主界面点击“File” -> “New” -> “File”,选择要新建的文件类型和存储位置,输入文件名称,点击“OK”完成文件创建3. 在编辑器中进行代码编写,支持代码高亮、自动缩进、语法检查等功能4. 保存代码并进行语法检查,确保代码符合规范,没有错误五、仿真与调试1. 编译工程:在ModelSim中进行代码编译,生成仿真所需的可执行文件2. 设置仿真参数:在“Simulation”菜单下选择“S tart Simulation”,设置仿真时钟周期、输入信号等参数3. 运行仿真:点击“Run”按钮,ModelSim将开始对设计进行仿真,同时显示波形图和仿真结果4. 调试设计:在仿真过程中,可以通过波形图和仿真控制面板对设计进行调试,查找并解决可能存在的逻辑错误六、波形查看与分析1. 查看波形:在仿真过程中,ModelSim会生成相应的波形文件,用户可以通过“Wave”菜单查看波形并进行波形分析2. 波形操作:支持波形的放大、缩小、平移、选中等操作,方便用户对波形进行分析和观察3. 波形保存:用户可以将波形结果保存为图片或文本文件,以便日后查阅和分析七、性能优化与验证1. 时序优化:在设计仿真过程中,可以通过观察波形和性能分析结果,对设计进行优化,提高设计的时序性能2. 逻辑验证:通过对仿真的结果进行逻辑验证,确保设计符合预期的逻辑功能3. 时序验证:对设计的时序性能进行验证,确保信号传输和时钟同步的正确性八、项目输出与文档整理1. 输出结果:在仿真和验证完成后,可以将仿真结果、波形图和性能分析结果输出为文本文件或图片,方便后续的文档整理和报告撰写2. 结果分析:对仿真结果和验证结果进行详细的分析,确定设计的性能和功能是否符合设计要求3. 文档整理:根据仿真和验证结果,进行文档整理和报告撰写,为后续的设计和优化工作提供参考九、总结与展望ModelSim作为一款专业的集成电路仿真软件,具有着强大的功能和丰富的特性,可以帮助工程师进行电路设计与验证工作。

Modelsim 仿真步骤总结

Modelsim 仿真步骤总结

Modelsim 仿真步骤总结Modelsim 仿真主要有以下三个方面:各版本的方法大体一致。

(1)建立库并映射库到物理目录;(2)编译源代码(包括testbench);(3)执行仿真;下面具体演示每一步的操作方法及流程,为力求简洁,其中有多种操方法的只介绍一种。

一)建立库的演示:步骤为——启动modelsim>点击file菜单>(Change Directory)>new>(project)>library.注括号内的步骤非必须。

1.1)启动modelsim;(1.2)点击file菜单,此时若需更改路径,可以点击其中的Change Directory.(注modelsim会自动默认路径。

我们也可以在1.1步骤之前建立一个文件夹用于modelsim的工程,再将路径更改到我们新建的文件夹路径。

)(1.3)点击file子菜单中的new,选择project用于新建立一个modelsim工程。

(虽然此步非必须,但是建立一个新工程有益于接下来整个仿真文件的管理。

)1.4)点击file子菜单new,再点击new下的library,用于建立一个库。

(仔细观察1.3步,新建工程的同时亦可建立库)。

至此,modelsim仿真第一大步建立库的工作完毕。

二)编译源代码(包括testbench):大家都已知道在quartus中编译源代码的方法,这里说明一下在modelsim中编译源代码及testbench的方法。

步骤为——建立一个新工程(同时建立库)后,会自动提示你四个选项。

如图:选create new file后提示对话框,(也可以在有源文件的情况下选择add existing file到工程中。

例如我们用quartus写好文件后,可以用此方法将quartus中的文件添加到modelsim工程中来)让你命名你即将创建的新文件,完毕后,会自动出现一个空白的编辑窗口,在那里输入源代码和testbench。

ModelSim使用笔记Testbench

安装ModelSim,建立环境变量。

Edit->Preferences里Integrated Tools选择Modelsim.exeProject->Property里面Simulator选择ModelSim建立如下vhd的源文件(VHDL module)和测试文件(VHDL test mixture)源文件(VHDL module):----------------------------------------------------------------------------------------------------------------------------------------------------------------library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;---- Uncomment the following library declaration if instantiating---- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;entity modelsimtest isport(clk: in std_logic;rst: in std_logic;clkfp: out std_logic);end modelsimtest;architecture Behavioral of modelsimtest issignal clkfp_reg: std_logic;beginprocess(clk, rst)beginif(rst = '0') thenclkfp_reg <= '0';elsif(clk'event and clk = '1') thenclkfp_reg <= not clkfp_reg;end if;end process;clkfp <= clkfp_reg;end Behavioral;测试文件(VHDL test mixture)-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.all;USE ieee.numeric_std.ALL;ENTITY tb_vhd ISEND tb_vhd;ARCHITECTURE behavior OF tb_vhd IS-- Component Declaration for the Unit Under Test (UUT)COMPONENT modelsimtestPORT(clk : IN std_logic;rst : IN std_logic;clkfp : OUT std_logic);END COMPONENT;--InputsSIGNAL clk : std_logic := '0';SIGNAL rst : std_logic := '0';--OutputsSIGNAL clkfp : std_logic;BEGIN-- Instantiate the Unit Under Test (UUT)uut: modelsimtest PORT MAP(clk => clk,rst => rst,clkfp => clkfp);tb : PROCESSBEGINrst <= '0';-- Wait 100 ns for global reset to finishwait for 100 ns;rst <= '1';wait for 10 Us;rst <= '1';-- Place stimulus herewait; -- will wait foreverEND PROCESS;clk <= not clk after 20 ns;END;红色字节为添加的内容,测试文件(VHDL test mixture)建立时会自动生成框架。

ModelSim ALTERA 6.3g_p1使用方法

Modelsim ALTERA 6.31、安装1)打开运行81_modelsim_ae_windows.exe,如下图:安装时选择Full product安装。

当出现Install Hardware Security Key Driver时选择“否”。

当出现Add Modelsim To Path选择“是”。

出现Modelsim License Wizard时选择“Close”。

2)在C盘的根目录下新建文件夹“flexlm”,,打开文件夹,运行里面的,将生成的licensefile.dat文件放入flexlm文件夹中,如果有其他程序破解用到这个文件夹以及其中的licensefile.dat,请将生成的licensefile.dat更名为licensefile1.dat或者其他的名字。

3)修改系统的环境变量。

右键点击桌面我的电脑图标,属性->高级->环境变量->(系统变量)新建。

按下图所示内容填写,变量值内如果已经有别的路径了,请用“;”将其与要填的路径分开。

LM_LICENSE_FILE = c:\flexlm\license.dat;c:\flexlm\licensefile.dat4)安装完成,运行!2、Modelsim ALTERA 6.3的使用方法Modelsim的仿真主要有以下几个步骤:建立库并映射库到物理目录;编译原代码(包括Testbench;执行仿真。

1)建立库运行Modelsim ALTERA 6.3,点击工具栏的“File”—>“Change Directory…”选择你要建立库的位置:仿真库是存储已编译设计单元的目录,modelsim中有两类仿真库,一种是工作库,默认的库名为work,另一种是资源库。

Work库下包含当前工程下所有已经编译过的文件。

所以编译前一定要建一个work库,而且只能建一个work库。

资源库存放work库中已经编译文件所要调用的资源,这样的资源可能有很多,它们被放在不同的资源库内。

仿真工具Modelsim的使用方法简述

仿真工具Modelsim的使用
Mentor公司的ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。

它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段,是FPGA/ASIC设计的首选仿真软件。

使用 modelsim
打开 modelsim,选择菜单 file→new→project
创建工程文件夹和名称
然后点击OK.
然后创建一个新的文件夹.
创建文件名称选择文件类别,我们选择verilog. 然后双击工程窗口的文件或者右键选择“edit”之后编程并保存.
之后,右键点击文件选择compile列表
在状态窗口可以看见运行结果的错误或者报警。

如果结果顺利就可以编写测试程
序。

右键点击工程菜单并添加一个新的工程文件。

命名、编程和纠错。

如果编译所有文件是成功的就可以模拟这一工程。

单击project窗口附近的library。

然后再展开work工程。

右击hfad_test和模拟或者您可以点击模拟按钮
然后会看到一个simulate窗口在project窗口附近。

右击hfad_test,然后add → to wave → all items in region
将看到波行窗。

现在可以确定模拟时间和运行。

十六进制。

完成了一个工程。

Modelsim工具的一般仿真流程

Modelsim工具的使用仿真流程1.建立work库通常modelsim在使用的时候,和大多数开发软件一样,第一步先建立一个工程。

而modelsim在建立工程之前,一般都要建立一个工作库(library),命名为work,仿真的时候工程就运行在这个库里面。

通常modelsim在第一次运行的时候,并没有work这个库文件,所以没有work库的话,先建立一个work的library,再建立新的工程。

一般的工程路径设置如下:project 放置FPGA的工程文件,source 放置源代码(ipcore, 建议放在工程的根目录下,有同事发现ipcore改变其路径,仿真的时候会出错,并且工程里面要手动添加IP核的文件),simulation 放置modelsim的仿真工程。

新建一个work库。

File New- Library^Hamc Type|旳thlibrary □fate 冋叶 djibs/dltera 兰沖忡阿」iflibraryGsfrfr^r^/vM 」ih 叩袖暮 A 』I F土扛就am_nF 』Pt Library冷忡怕.VFTl ihr^iy U Mr 耳丫日皿 ^clgrsiLibrary U fJter 耳什 d.libqkydbMii r 車 cyclorigii^ver 匸• fbalfi 讨 bIpm Library C :fafcsr^/Y«riag 」ts|cy!cbn“i 』er Library 押 aOEL.TECHT 简 adfbdb Library C; I'dtere/Yf-dJib 訓 pm r 血 IfTTl fCF Library Cii'dterc/Ycrioq itsl|prn vei (K nr 匚E 」b (emipo) Library JHODEL lEO-i/.JirEiJb —机 rrtlA/m 上rrtCWm Library Library SwaEiBL_TEOf.,^IIi J1MCiCiELJEOif,.jbm-2J 2 4-jt^ nrtPA 上虫nrtU^F Library 4MaOELJBOf..#ia_lb Library ^OCEL_lKHf../upfJlb 七 >[■ nrtlJ /in Library 4HariELjEa-v.,Aj^-i.]d 二九 Oiv^fn Libr^^y jH0CEL_lEair..1iO5V'7TTT jrtL 驹肚哼 Ubhfiiy C ; |前岀i ■訝计M 」ibs/sMEef 4t 珂aS_Vd Llbifliy C^i'dlsre/Yri 1匚电_11&4护1口_样「 + A L #_血 ULr^ryinciriELjrciir.js^sd 二 4^ vtaLocu Library iNUDEL.IECHf ../Vt^OCO 二 jL IPlibrary钿 tWEL-TECHLQ*_ 血 iTcddsinni 」ti library 榔口DEL JEO#. /rrcrtslcm 」H函山,ddlibrary $WCiLELJEO*../£td 上 JtL ctdjdsssIc-ptrMt Library iMQLEL_7EO+skps* 抄it丄血 a^ncpsyi Library 4b<GDEL_7EQf ii/syncpsyi 工忙 vsrilog Library!|NCi[jEL_IE'CHf../voracgHl Ubraiy — ■pgM 丄::灯血刃向dl H K , ±O -I Mirai-dtei e_rf dtei 0jrf_W5T J L 业 dteia_^-r +札i y 叭戸■ 1血ryderal ■湘于 土丸1幻畝惟」血 ± -fl.晌 1 JL 布肝■榆 血 (mptr) t-血 + 脚.fil":皿1 七 J^lntFAffltllTmtUMnO5>*TTi占艸 列4_¥・■5i,i_^fd MtdiZDEO■see _____ tn 处加i 」t> 1,直泅4- 血 ^itd rfevd-^rrTS^I : t_ 刊「即裤 £ 血 Wl IJIJtrtrra v UbTs y Lltrof!/li 啊母章 Llbrsr/ Libi Lib ary Libitr^ Llbrcrj^ Ubi-arji Libi BTy Libror^ Lihi aru LltfWy Li 輛屮 Hfeiar^ Ubtar^ Uts a 3LlbiSTy Liti it JLibi CT 'JLltieryUbiery 心灯t 冋vMIJte/dm U.Ttinqghdl Ib5]l 或er 士 nf U idtei ■5,lm1kgJt5jdiiT!r3_Tf_ver ■"LMlteldJ^lkg 」二吋*阳 d.-'if!C\ i^tti 时』hdl 」b5」cytkKiH* G :jairHi^iv**lkgJr^ci<l0rFl!_wi 『Ibsjdbgrs^nfC ; t^tri ■5,lwUcgJb^!dii ,?r3_Tf_ver口 i^tei 讯 \rhdl 」b5」cytki 『前口円忙叭 FijIVfldlrgJr^cyclDnFlI.^『刚建立的work 库是空的,因为里面什么东西都没有,但是当添加了相应的文件后,编译一 次,work 就会有容了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

重温了基本的Quartus操作和语法后,需要对手头的工作进行仿真验证,Quartus 9.x自带的Vector Waveform已经淘汰掉了,必须用 ModelSim进行仿真。

现在就开始一步步入手ModelSim,并通过与Quartus无缝衔接实现仿真。

本文使用了ModelSim10.0c + QuartusII 10.0,其他版本基本雷同,请自行研究。

源程序如下:
module add(
mclk,
rst_n,
a_in,
b_in,
c_out
);
input mclk, rst_n;
input[7:0] a_in, b_in;
output[8:0] c_out;
reg[8:0] c_out;
always@(posedge mclk, negedge rst_n)
begin
if(!rst_n)
c_out <= 9'h0;
else
c_out <= a_in + b_in;
end
endmodule
请建立工程,将源程序编译通过.
1.设置第三方EDA工具
在Tools -> Options中设置ModelSim的安装路径,注意要设置到win32文件夹(64位软件对应的就是win64)。

建立一个工程(依然以加法器为例)。

在Assignments -> Settings中设置仿真工具为ModelSim。

这样Quartus就能无缝调用ModelSim了。

当然也可以在建立工程的时候就设置仿真工具。

2.编写Testbench
说到Testbench,你可以叫它Testbench,或者Testbenches,但不是Test Bench。

说起来,就连Quartus也没注意这个问题,至于原因嘛参见Common Mistakes In Technical Texts一文。

文章中还列举了些别的错误用语,包括Flip-flop不能写成Flipflop,等等。

文章链接:
/papers/Technical_Text_Mistakes.pdf
我们可以通过Quartus自动生成一个Testbench的模板,选择Processing -> Start -> Start Test Bench Template Writer,等待完成后,在导航栏中打开刚才生成的Testbench,默认是保存在simulation\modelsim文件夹下的.vt格式文件。

打开vt文件后可以看到Quartus已经为我们完成了一些基本工作,包括端口部分的代码和接口变量的声明,我们要做的就是在这个做好的模具里添加我们需要的测试代码。

一个最基本的Testbench包含三个部分,信号定义、模块接口和功能代码。

表示仿真的单位时间为1ns,精度为
1ps。

想要进行仿真首先要规定时间单位,而且最好在Testbench里面统一规定时间单位,而不要在工程代码里定义,因为不同的模块如果时间单位不同可能会为仿真带来一些问题,而timescale本身对综合也就是实际电路没有影响。

其实Testbench本身可以看做一个模块或者设备(本例中的模块名为
add_vlg_tst),和你自己编写的模块进行通信。

通过Testbench模块向待测模块输出信号作为激励,同时接收从待测模块输出的信号来查看结果。

因此,在待测模块中的reg型信号在Testbench中就变成了wire,待测模块中的wire型信号在Testbench中则对应为reg型。

那么inout怎么办呢,inout型信号也要设
成wire,同时要用一个reg型信号作为输出寄存器,同时设置一个三态门,由一个使能信号控制,如:assign inout_sig = out_en ? out_reg : 1’bz;
处理完接口和声明之后,需要自己设置一些激励信号,激励信号的内容就是肯能会输入到待测模块中的波形。

下面我们就来写一个简单的测试程序。

首先需要一个复位信号:
initial
begin
rst_n = 0;
#100 rst_n = 1;
end
initial开头的这个过程在Testbench中只执行一次,#100表示延时了100个时间单位,我们之前已经通过timescale进行了设置,这里延时了100ns。

这就有点类似于C语言了,代码通过延时被顺序执行,rst_n在0时刻为低电平(也就是逻辑0),100ns后变成高电平,从而形成了一个上电复位。

其次是时钟,使用always模块来完成:
initial
begin
mclk = 0;
end
always
begin
#10 mclk = ~mclk;
end
always模块中的代码会不断重复执行,利用这个特点,每10ns翻转一次mclk,只是这样还不行,还要给mclk一个初值,就是上面的initial语句。

如此便可以生成一个周期为20ns,频率50MHz的方波信号,作为本例的系统时钟。

当然,这个时钟也可以通过initial模块实现。

只需添加一个while(1),即死循环。

initial
begin
mclk = 0;
while(1)
#10 mclk = ~mclk;
end
Testbench中的很多操作都是不可综合的,同时它的风格也可以比较随意。

设置完时钟和复位,就需要设置输入信号:
initial
begin
a_in = 1;
b_in = 3;
#200 a_in = 2;
b_in = 0;
#200 a_in = 3;
b_in = 3;
end
注意这里a_in = 1和b_in = 3是同时发生的,也就是并行的,之后延时200ns,a_in = 2同时b_in = 0,如前面所说,想要实现顺序操作,就需要使用延时,如果两个语句间没有延时,就表示同时执行。

还有一点,这个initial语句块和负责复位的initial语句块也是并行的,并且都是从0时刻开始。

也就是说,0时刻后经过100ns rst_n复位,再经过100ns(从0时刻起),a_in = 2被执行。

至此,测试程序也完成了,让我们开始仿真吧
3.设置Quartus并调用仿真工具
运行仿真之前,还要设置一下。

在Simulation选项卡中配置仿真选项,可以配置仿真语言、仿真时间的格式以及输出目录。

选中compile test bench,点击Test Benches打开Test Benches对话框。

点击New新建一个Test BenchSetting,填入Testbench模块的名称(模块名请看仿真文件,这里是add_vlg_tst)
酌情设置仿真运行的时间(这里设为800ns,只是进入ModelSim后仿真自动执行的时间,不设或随意设置也行),并将刚才编写的Testbench添加进来。

一路OK后,选择Tools -> Run EDA Simulation Tools,有两个选项,RTL Simulation是RTL行为级仿真,只验证功能是否正确,与在哪个芯片上运行无关,仿真前至少需要执行一次Analysis&Synthesis;Gate Level Simulation
是门级仿真,涉及到具体的芯片,并且仿真前需要编译工程,在门级仿真中ModelSim会将布局布线后的门级延时体现在波形中,在测试一个具体的工程模块时,应当先进行RTL仿真,之后还要进行门级仿真。

4.ModelSim工具的基本操作
运行RTL Simulation进入ModelSim界面。

在这里介绍几个比较重要的部分。

在view菜单中,可以显示和隐藏各种工具窗口。

其中Structure窗口显示了测试模块和待测模块的结构:
点击不同的模块,在Objects窗口中可以查看选中模块中的信号,因为除了端口(port)以外,还有很多内部信号默认是不显示波形的,通过将需要的信号拖到Wave窗口中,就能够显示。

工具栏中的部分是用来控制仿真运行的,左侧红框中的是复位,在文本框里设置要执行的时间,点击右侧红框中的按钮就可以执行了。

其他的请自行摸索或参看Help文件。

如果面对一大堆0101感觉很晕,可以在信号列表里选中信号,右键选择要显示的数据格式。

而Wave窗口的左下角有几个小按钮,是用来设置游标的,通过添加游标,可以测量相应的时间,也可以在这里配置时间刻度的格式。

在Wave波形图中,使用滚轮和鼠标右键可以很方便的缩放或选择波形区域,下图就是这个全加器工程的波形图,在复位之后,c_out的值等于a_in与b_in 的和,并在时钟上升沿输出。

完整的工程文件(含Testbench)传上:。

相关文档
最新文档