大西瓜-modelsim实用教程v1_第1页
大西瓜-modelsim实用教程v1_第2页
大西瓜-modelsim实用教程v1_第3页
大西瓜-modelsim实用教程v1_第4页
大西瓜-modelsim实用教程v1_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、前言是一款专业的仿真,特别是在 Quartus II 11.0 之后的版本,都没有配套自身的仿真一。,所以成了在 FPGA 设计流程中的进行功能仿真的首选仿真之为 HDL 仿真工具可以利用该来实现对所设计的 VHDL 或Verilog 程序进行仿真,其支持 IEEE 常见的各种硬件描述语言标准。可以进行两种语言的混合仿真,但大家只对一种语言仿真。的版本很多,基本的有 PE、LE、SE 版本,PE 为个人版本,功能最少,支持的操作系统为 32 位WINDOWS 98/NT/ME/2000/XP;LE 版本支持的操作系统为 32 位 LINUX; SE 版本为全功能版本,支持 32 位操作系统 A

2、IX,HP-UX, LINUX + SOLARIS,WINDOWS 98/NT/ME/2000/XP,64 位操作系统 WINDOWS ,AIX,LINUX (ITANIUM-2),HP-UX, SOLARIS,以及HP-UX,LINUX 等。常见的版本分为XE 为配套 xilinx 的 ISEXE、-altera、SE 三种,其中,-altera 是配套 altera 的 quartus II的,而SE 是属于专业版本,可以独立使用(在仿真中涉及到 FPGA 厂商的 IP 核时,需要调用 FPGA 厂商的 IP 库文件)和 SystemC 的混合仿真。本章将对版本更新很快,目前的版本都支持

3、VHDL 、Verilog6.2(在高版本上也是行得通的)版本进行介绍,目的是希望读者在看完本文后,可以简单地使用进行仿真,有关更深入地,还是参考附带的文档。在/support/ 上也可以找到深入ht的。所涉及到的是功能仿真,功能仿真也是 FPGA 设计的流程之一,也是最耗费时间的之一,由于要验证设计的 RTL 代码的功能正确性,功能的正确性,包括 RTL 里面的每一行代码,RTL 里面所涉及到的每一种状态机的每一种状态,RTL 里面所涉及到的每一种条件下每一种情况等等,由此可以想像得到这将多么地耗费时间,所以高效地使用是得有多么地重要,假设设计一个 RTL 代码,涉及到 10 个状态机和 2

4、0 个条件判断,每个状态机有 10 状态,每个条件有 10 种情况。假设每个状态机每个状态和每个条件判断的每种情况都要修改一次 RTL 代码,这就需要操作 10*10+20*10=100+200=300 次,假设每次要按 10 次鼠标,那总次数就是 300*10=3000 次。如果采用鼠标窗口操作这得有多繁琐(多设计几个大型工程的话,鼠标也要换了),这得多耗费时间,所以这时就需要采用 (每次修改只需调用一条指令就搞定)进行操作,节省时间、节省人力物力。本文将通过简单的三个例程,详细、细致、图文并茂地介绍的使用流程,这其中涉及到采用鼠标窗口操作一步一步的地进行编译、调用仿真文件、添加仿真信号、开

5、始仿真的简单流程,也包括调用 altera 的 IP 核进行仿真的流程,最后详细介绍采用法进行仿真,有效并大大地提高每次修改编译、仿真的效率,只要通过的方输入,同时也可以设置仿真信号的参数,避免了在每次修改 RTL 代码后进行鼠标窗口操作的繁琐流程。其中,最实用专业的是最后的方法操作,这也是读者所必须掌握的方法!2版本本资料属大西瓜 FPGA 开发团队所有,切勿用于商业!的话,请注明出处,如需合作请联系!该不断升级更新,敬请关注!大西瓜FPGA淘宝店:Jaran3版本版本说明时间版本 V1.0第一版编写整理2016.7.1目录前言2版本3目录4基于-SE 的简单仿真流程5编写 RTL 功能代码

6、5编写 testbench 代码6仿真时间.8待测试模块信号.8激励信号产生8创建工程10编译13添加仿真信号15仿真开始18仿真信号查看19调用 altera IP 核的仿真流程22编写 RTL 功能代码22编写 testbench 代码25创建工程26编译29添加仿真信号30仿真开始32仿真信号查看32基于-SE 的专业进阶仿真流程36编写测试操作.36仿真信号查看374基于-SE 的简单仿真流程编写 RTL 功能代码要进行功能仿真,首先得用需要仿真的模块,也就是 RTL 功能代码,简称待测试的模块,该模块也就是在设计到 FPGA 的电路。一个电路模块想要有输出,就得有输出,数字电路也是一

7、样的,时钟和复位信号是必不可少的测试激励信号之一,同时可能还包括控制信号、数据信号。这里总结一下,一般系统中包括的测试激励信号主要为四大类1.2.3.4.系统信号(时钟、时钟使能信号、复位信号等);控制信号(使能信号、片选信号、握手信号,状态机控制信号等);数据信号(并行接口数据信号、串行接口数据信号等);地址信号(模块的地址信号、内部寄存/器地址信号等)。而对于,在放在不同的测试激励信号的条件下分析,不同的测试激励产生相应的,通过分析就可以知道相应的与目标结果是否一致,如果不一致便进行RTL 的修改,如果一致则修改测试激励信号,遍历完不同情况下的测试激励,完成整体 100%的功能测试,才能确

8、保 RTL 功能模块的设计功能完整性。这里需要注意一点,功能仿真正确不一定能确保最后综合、布局布线后到 FPGA 产生的功能结果正确,但是功能仿真不正确,FPGA 产生的功能结果一定不正确!所以功能仿真是很必要的!RTL功能代码模块测试激励本实验需要设计一个 8bit 的计数器,功能很简单,该计数器在每个时钟的上升沿进行加一并将结果输出,当计数到 255 的时候返回到 0 重新计数,以此循环,模块接口如下所示。测试激励信号是时钟和复位信号,时钟信号为 50M,复位信号为低电平有效。8bit 的计数值,范围为 0255,如果从波形上看是一个锯齿波。为时钟Counter8bit计数值复位5编写 t

9、estbench 代码TestBench 基本概念 测试激励-待测 RTL 功能模块-观察比对波形/在终端打印或生产文本/自动对比输出结果。TestBench 编写三步曲1.2.3.对被测试设计的顶层接口进行例化;给被测试设计的输入接口添加激励信号;判断被测试设计的输出想要是否满足设计要求;TestBench 内容主要分为1.2.3.4.时钟的产生;复位的产生;控制信号的产生;其他激励信号的产生(用户自定义 )。相应于被测试模块的输入激励设置为 reg 型,输出相应设置为 wire 类型,双向端口 inout在测试中需要进行处理。双向端口 inout 的设置方法:为双向端口inout 设置中间

10、变量 inout_reg 作为该 inout 的输出寄存,inout 口在 testbench6module counter( clk, reset_n,counter_out);inputclk;inputreset_n; output 7:0counter_out;reg 7:0counter_reg;assign counter_out = counter_reg;always (edge clk or negedge reset_n) beginif(reset_n = 1b0) begincounter_reg = 8d0;end else begincounter_reg begi

11、ninitialbegin/ codet executes only once/ insert code here - begin对激励信号进行初赋值操作/ - end$display(Running testbench); end测试功能模块 例化测试功能模块名(.输入信号(测试激励信号),.输出信号(定义为 wire 型信号进行观察));testbench 代码9timescale 1 ns/ 10 ps module counter_tst();/ constants/ general pure registers/ test vector input registers reg clk

12、;reg reset_n;/ wireswire 7:0counter_out;counter counter_1(.clk(clk),.reset_n(reset_n),.counter_oounter_out);initial begin/ codet executes only once/ insert code here - begin clk=1b0; reset_n end$display(Running testbench); endalways/ optional sensitivity list/ (event1 or event2 oreventn)begin/ code

13、executes for every event on sensitivity list/ insert code here - begin #10clk=clk;reset_n end endendmodule激励信号赋值操作,持续执行/ - end end创建工程运行,方法是点击开始-程序-或双击桌面上的建立过工程,这时候SE-快捷方式,会出现如下图所示的界面,如果上一次使用会自动打开上一次所建立的工程,可以 close击,在出现的栏目中选择 close project。project,具体操作:选中工程的文件,右点击 File-New-Project,会出现如下图所示的界面。10选择 p

14、roject 后,会出现如下界面在 Project Name 中输入建立的工程名字为counter,在 Project Location 中点击 browse 按键,选择工程保存的路径,注意不能为一个工程自动建立一个目录,这里最好是选择已经创建好的一个工程文件夹作为目录,在 Default Library Name 中为的设计编译到哪一个库中,这里使用默认值,这样,在编译设计文件后,在 Workspace 窗口的 Library 中就会出现 work 库。这里我们输入完以后,点击 OK。在点击 OK 按键后会出现选择仿真文件的界面,如下图所示,可以点击不同的图标来为工程添加不同的项目,点击 C

15、reate New File 可以为工程添加新建的文件, 点击 Add Existing File 为工程添加已经存在的文件,点击 Create Simulation 为工程添加仿真,点击 Create NewFolder 可以为工程添加新的目录。这里点击 Add Existing File;11这里将前面设计的 counter.v 文件和 counter_tst.v 文件包含进工程里面,点击 browse 按键,将文件包含进来,如下图所示,然后点击 ok 按键。接着会在的工程工作窗口出现如下图所示,即已经将两个文件包含进来,其中在状态那一栏出现两个问号,表明文件包含进来了,还没有进行编译。1

16、2编译在 WorkSpace 窗口的 counter_tst.v 上点击右键,如果选择 Compile selected则编译选中的文件,Compile All 是编译所有文件,这里选择 Compile-Compile All,如下图所示;13在窗口中将出现绿色字体# Compile of counter.v wacsful.c# Compile of counter_tst.v wasful.,说明文件编译成功,在该文件的状态栏后有一绿色的对号,表示编译成功;如果出现红色的字体,说明 RTL 文件里面有语法错误,这时可以双击红色字体就会弹出窗口,显示具体的语法错误信息,错误信息将会表明语法的

17、具体错误原因和错误的位置,这里可以双击错误的说明,将会自动跳到对应的 RTL 文件所在的错误位置,接着就可以在错误的位置上找出语法错误,修改之后重新编译。同时,状态那一栏出现两个问号变成了,表明编译成功,没有语法错误。14添加仿真信号下面开始仿真,点击菜单 Simulate-start Simulation。出现如下图所示的界面,展开 Design 选项卡下的 work 库,并选中其中的 counter_tst,这是在 Simulate 中出现了 work. counter_tst 表示要仿真的对象,在优化那一栏不选择优化,如果选择优化的话,有些信号在仿真的时候会被优化掉,观察不了。点击 OK

18、;15点击 OK 后,选中的仿真模块将会被加载到工程里面进行仿真,这里可能会出现错误,一般的问题是在 testbench 例化的模块名,模块信号有错误或者是信号参数有错误,如果出现错误则需要修改然后重新编译将待测试的模块加载到工程。加载成功后,工程工作窗口会跳到 sim 窗口,会出现如下界面16在 sim 窗口可以看到 testbench 设计的 3 个部分,初始化、always、例化的模块。这里需要观察的信号就是例化模块输出的信号,由此右击 counter_1,选择 add-add to wave,将待测试模块的信号添加到波形观察窗口中进行仿真观察。添加后的wave 窗口如下图所示17仿真开

19、始仿真可以采用窗口上的进行设置,如下图所示同时也可以通过再1ms。窗口输入运行时间后按下回车键进行运行run 1ms,这里运行18仿真信号查看仿真运行后,波形窗口会出现如下所示的信号。这里选中信号整形进行显示。counter_out,右击如下图所示,设置信号显示的数制,这里选择无符号可以看到信号由 0 在每个时钟上升沿进行加一操作,在计数到 255 后重新再从 0 计数。在信号显示中,有时为了观察信号更直接,需要将信号采用模拟的方式进行显示,可以满足这一要求,这里选中 counter_out 信号,右击如下图所示19将信号设置为模拟显示,接着弹出如下窗口,可以设置调整信号显示的幅值,这里默认原

20、始值,点击 ok。最后还要设置下波形窗口中模拟信号显示所占有的宽度,以满足信号采用模拟显示后不会和其他信号显示在一起。选择 counter_out 信号,右击如下图所示。进行设置信号显示的格式,如下图所示,这里设置显示的高度为 300,可以满足信号最大值 255。20最后可以看到将 counter_out 显示为模拟信号会得到如下的结果。21调用 altera IP 核的仿真流程在学习本节内容之后,请详细阅读基于-SE 的简单仿真流程,因为本节是基于基于-SE 的简单仿真流程的基础上进行设计的,关于设计仿真流程的过程所涉及到的重复内容将不再详述,将会一笔带过,如果深入学习了基于单仿真流程这一小

21、节,则下面的内容将会非常的简单。-SE 的简编写 RTL 功能代码本小节通过调用 altera 的 ROM 宏功能模块,FPGA 的 ROM 模块主要用于数据,可以在上电的时候进行写入(),ROM 模块主要包含三个信号 时钟、地址、数据,在时钟的驱动下,往 ROM 写入地址,则 ROM 的数据端就会输出对应地址所的数据。采用基于-SE 的简单仿真流程所设计的 8bit 计数器产生的 8bit 计数值作为 ROM 模块的地址信号,对 ROM 进行寻址,输出 ROM 中的数据。在 8bit 计数器模块和 ROM 模块的基础上,新建一个 RTL 文件,对这两个模块进行信号并将 ROM 输出的数据信号

22、进行输出。设计的结构如下所示时钟CounterROM8bit计数值8bit数值复位这里如何调用 altera 的ROM 宏功能的过程就不详细说明了,这里简单说明 ROM 模块的参数设置,数据位宽为 8bit,深度为 256,如下图所示。22数据输出不经过寄存器对 ROM 的原始文件进行设置,将 sif 文件作为原始数据,sif 文件256 个正弦波的数据,数据位宽和 ROM 的数据位宽一致。23编写顶层 RTL 文件,将两个模块连接起来,代码如下所示24module rom_top( clk,reset_n, rom_data);inputclk;inputreset_n; output 7:

23、0rom_data;wire7:0counter_out; counter counter_1(.clk(clk),.reset_n(reset_n),.counter_oounter_out);rom rom_1(.address(counter_out),.clock(clk),.q(rom_data);endmodule编写 testbench 代码Testbench 文件采用 1 ns/ 10 ps 的时间和时间精度,该文件的激励输入信号只需要对时钟信号和复位信号进行赋值,同时输出信号是 rom 中的正弦信号。如下所示。ClkCounterROM8bit计数值rom_datareset

24、_nTestbench 代码25timescale 1 ns/ 10 ps module rom_tst();/ constants/ general pure registers/ test vector input registers reg clk;reg reset_n;/ wireswire 7:0rom_data;rom_top rom_top_1(.clk(clk),.reset_n(reset_n),.rom_data(rom_data);initial begin/ codet executes only once/ insert code here - begin clk=

25、1b0; reset_n end$display(Running testbench); endalways/ optional sensitivity list创建工程运行,方法是点击开始-程序-或双击桌面上的建立过工程,这时候SE-快捷方式,会出现如下图所示的界面,如果上一次使用会自动打开上一次所建立的工程;点击 File-New-Project,会出现如下图所示的界面。26/ (event1 or event2 oreventn)begin/ code executes for every event on sensitivity list/ insert code here - beg

26、in #10clk=clk;reset_n end endendmodule选择 project 后,会出现如下界面在 Project Name 中输入建立的工程名字为rom,在 Project Location 中点击 browse 按键,选择工程保存的路径,注意不能为一个工程自动建立一个目录,这里最好是选择已经创建好的一个工程文件夹作为目录,在 Default Library Name 中为的设计编译到哪一个库中,这里使用默认值,这样,在编译设计文件后,在 Workspace 窗口的 Library 中就会出现 work 库。这里输入完以后,点击 OK。在点击 OK 按键后会出现选择仿真文

27、件的界面,如下图所示,可以点击不同的图标来为工程添加不同的项目,点击 Create New File 可以为工程添加新建的文件, 点击 Add Existing File 为工程添加已经存在的文件,点击 Create Simulation 为工程添加仿真,点击 Create NewFolder 可以为工程添加新的目录。这里点击 Add Existing File;27这里将前面设计的 counter.v 文件、rom.v、rom_top.v、rom_tst.v 文件包含进工程里面,同时由于调用了 Altera 的 IP 核所以需要将 IP 核库文件包含进行来,该文件为 altera_mf.v

28、也包含到工程中(可以在 quartus 的安装目录下的 eda/sim_lib 文件夹下面找到这个文件)。点击 browse 按键,将文件包含进来,如下图所示,然后点击 ok 按键。接着会在的工程工作窗口出现如下图所示,即已经将两个文件包含进来,其中在状态那一栏出现问号,表明文件包含进来了,还没有进行编译。28编译在 WorkSpace 窗口的 counter_tst.v 上点击右键,如果选择 Compile selected则编译选中的文件,Compile All 是编译所有文件,这里选择示;Compile-Compile All,如下图所在窗口中将出现一行绿色字体# Compile of

29、altera_mf.v wa# Compile of counter.v wacsful.sful.c# Compile of rom.v wacsful.csful.# Compile of rom_top.v wa# Compile of rom_tst.v wa对号,表示编译成功;csful.,说明文件编译成功,在该文件的状态栏后有一绿色的同时,状态那一栏出现两个问号变成了,表明编译成功,没有语法错误。29添加仿真信号下面开始仿真,点击菜单 Simulate-start Simulate。出现如下图所示的界面,展开 Design 选项卡下的 work 库,并选中其中的 rom_tst,这

30、是在 Simulate 中出现了 work. rom_tst 表示要仿真的对象,在优化那一栏不选择优化,如果选择优化的话,有些信号在仿真的时候会被优化掉,观察不了。点击OK;点击 OK 后,选中的仿真模块将会被加载到工程里面进行仿真,这里可能会出现错误,30一般的问题是在 testbench 例化的模块名,模块信号有错误或者是信号参数有错误,如果出现错误则需要修改然后重新编译将待测试的模块加载到工程。加载成功后,工程工作窗口会跳到 sim 窗口,会出现如下界面在 sim 窗口可以看到 testbench 设计的 3 个部分,初始化、always、例化的模块。这里需要观察的信号就是例化模块输出的

31、信号,由此右击rom_top_1,选择 add-add to wave,将待测试模块的信号添加到波形观察窗口中进行仿真观察。添加后的wave 窗口如下图所示31仿真开始仿真可以采用窗口上的进行设置,如下图所示同时也可以通过再1ms。窗口输入运行时间后按下回车键进行运行run 1ms,这里运行仿真信号查看仿真运行后,波形窗口会出现如下所示的信号。32这里选中信号 counter_out、rom_data,右击如下图所示,设置信号显示的数制,这里选择无符号整形进行显示。可以看到 counter_out 信号由 0 在每个时钟上升沿进行加一操作,在计数到 255 后重新再从 0 计数。rom_dat

32、a 则在每个时钟信号上升沿下将 sin 信号输出。在信号显示中,有时为了观察信号更直接,需要将信号采用模拟的方式进行显示,可以满足这一要求,这里选中 rom_data 信号,右击如下图所示33将信号设置为模拟显示,接着弹出如下窗口,可以设置调整信号显示的幅值,这里默认原始值,点击 ok。最后还要设置下波形窗口中模拟信号显示所占有的宽度,以满足信号采用模拟显示后不会和其他信号显示在一起。选择 rom_data 信号,右击如下图所示。34进行设置信号显示的格式,如下图所示,这里设置显示的高度为 300,可以满足信号最大值 255。最后可以看到将 rom_data 显示为模拟信号会得到如下的结果。3

33、5基于-SE 的专业进阶仿真流程通过基于-SE 的简单仿真流程和调用 altera IP 核的仿真流程是否感受到仿真流程中的繁琐步骤,特别是在创建工程之后的步骤 编译、添加仿真信号、开始仿真。这三个步骤涉及到一大堆的鼠标操作,涉及到一大堆的窗口操作,由于 RTL 仿真过程是一个反复迭代的过程,同时要求覆盖到 100%的功能测试,由此也要覆盖到所有状态机和条件判断的所有情况,由此,RTL 的功能仿真功能需要不断的修改 RTL 代码,每次修改 RTL 代码都需要进行编译、添加仿真信号、开始仿真,这要是用鼠标操作这得多累人。由此,需要采用的方式编写*do 文件,将编译、添加仿真信号、开始仿真这三个步骤采用题。的方式进行,只需在执行窗口输入*.do 文件,并执行就可以解决以上的问编写测试操作编写测试操作,需要对的有所了解本实验在调用 altera IP 核的仿真流程的实验上进行修改,使用的 RTL 代码、创建工程的过程和调用 altera IP 核的仿真流程一致。将步骤编译、添加仿真信号、开始仿真采用的方式进行操作,编写

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论