当前位置:文档之家› 1 ModelSim的使用与Testbench的编写

1 ModelSim的使用与Testbench的编写

1 ModelSim的使用与Testbench的编写
1 ModelSim的使用与Testbench的编写

ModelSim的使用与Testbench的编写

重温了基本的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)。

仿真工具为ModelSim。这样Quartus就能无缝调用ModelSim了。

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

2.编写Testbench

说到Testbench,你可以叫它Testbench,或者Testbenches,但不是Test Bench。说起来,就连Quartus也没注意这个问题,至于原因嘛参见Common Mistakes In Technical Texts一文。文章中还列举了些别的错误用语,包括Flip-flop不能写成Flipflop,等等。文章链接:

https://www.doczj.com/doc/5c4322370.html,/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)传上:

modelsim完美教程

准备事项 1.ModelSim试用版下载 2.范例程序下载(史丹佛大学一门课的期末专题Implememtation of Viterbi Decoder:constrain length K=3, code rate R=1/2, register-exchange) 整个project共含7个Verilog程序:system.v (top-level) |-- clkgen.v |-- chip_core.v |-- controller.v |-- spu.v |-- acs4.v |-- acs1.v (或是另外一个Verilog的简单例子,可以从C:\ SynaptiCAD\ Examples\ TutorialFiles\ VeriLoggerBasicVerilo gSimulation\ add4.v and add4test.v) (或是另外一个VHDL的简单例子,可以从C:\ Modeltech_5.7e\ examples\ adder.vhd and testadder.vhd) ModelSim PE /LE /SE 差别在哪? 本篇文章内容主要在教导软件使用,以Verilog程序为范例。假设各位读者已经熟悉Verilog,废话不多说,让我们马上来见识一下ModelSim ... 快速上手四部曲:建立Project、引进HDL Files、Compile、模拟(Simulate/Loading and Run) 1.建立一个新的Project 1-1 第一次执行程序时,可以从[开始] \ [程序集] \ ModelSim SE \ ModelSim;或是执行ModelSim在桌面的快捷方式

编写高效率的testbench

Writing Efficient Testbenches 编写高效的测试设计(testbenches) 原文作者:Mujtaba Hamid 注: 一个设计的测试验证是非常重要的。有效的测试可以助我们快速的完成或改善设计。Testbenches建议编写有效的测试代码来通过软件实现可靠的验证。无意中发现,顺手译为中文,以备将来方便。也贴给没有找到更好中文版本的同道人。 Testbenches本意应该是测试平台更合理,但是在中文中阅读起来很不舒服。所以本文中有时译为“测试设计”,“测试代码”,有时干脆是“测试”。 摘要: 应用笔记为HDL验证设计的新手,或者是没有丰富的测试设计经验的逻辑设计者而编写。 测试设计是验证HDL设计的主要手段。本应用笔记为创建或准备和构建有效的测试设计提供准则。它也提供一个为任何设计开发自较验测的测试设计的一个代数方法。 涉及的所有设计文件可以从以下的站点获得: PC: ftp://https://www.doczj.com/doc/5c4322370.html,/pub/applications/xapp/xapp199.zip UNIX: ftp://https://www.doczj.com/doc/5c4322370.html,/pub/applications/xapp/xapp199.tar.gz 简介: 由于设计的规模越来越大也越来越复杂,数字设计的验证已经成为一个日益困难和繁琐的任务。验证工程师们依靠一些验证工具和方法来应付这个挑战。对于几百万门的大型设计,工程师们一般使用一套形式验证(formal verification)工具。然而对于一些小型的设计,设计工程师常常发现用带有testbench的HDL仿真器就可以很好地进行验证。 Testbench已经成为一个验证高级语言(HLL --High-Level Language) 设计的标准方法。通常testbench完成如下的任务: 1.实例化需要测试的设计(DUT); 2.通过对DUT模型加载测试向量来仿真设计; 3.将输出结果到终端或波形窗口中加以视觉检视; 4.另外,将实际结果和预期结果进行比较。 通常testbench用工业标准的VHDL或Verilog硬件描述语言来编写。Testbench调用功能设计,然后进行仿真。复杂的testbench完成一些附加的功能—例如它们包含一些逻辑来选择产生合适的设计激励或比较实际结果和预期结果。 后续的章节描述了一个仔细构建的testbench的结构,并且提供了一个自动比较实际结果与预期结果的进行自我检查的testbench例子。 图1给出了一个如上所描述步骤的标准HDL验证流程。由于testbench使用VHDL或Verilog来描述,testbench的验证过程可以根据不同的平台或不同的软件工具实现。由于VHDL 或Verilog是公开的通用标准,使用VHDL或Verilog编写的testbench以后也可以毫无困难地重用(reuse)。

verilog,testbench

Testbench专题所谓testbench,即测试平台,详细的说就是给待验证的设计添加激励,同时观察输出响应是否符合设计要求。 也许我们会把把程序开发出来算作一个工程项目的重大的比例,这在今天的FPGA设计中,并不是如此,往往在仿真验证上的工作量占到一半以上。试想这么一个测试,一个16位的

输入总线,它可以有多少种组合?如果每次随机产生一种输入,用波形的去画一画,眼花! 波形是最直观的测试手段,但不是唯一手段。 一个完整的测试平台如下图所示,

它是分结构组成的,其中对设计测试结果的判断不仅可以通过观察对比波形得到,而且可以灵活使用脚本命令将有用的输出信息打印到终端或者产生文本进行观察,也可以写一段代码让它们自动比较输出结果。 TB的设计是多种多样,可以使用灵活的VERILOG的验证脚本,但是它也是基于硬件语言但是又服务于软件测试的语

言,有时并行有时顺序,只有掌握这些关键点,才能很好服务测试。 技巧1 Tb中的例化应该把INPUT转换成REG,因为待测设计的输入值是由TB 决定的。相应的OUTPUT 就应该转换成WIRE,因为待测设计的输出值不是由tb决定的。这里需要注意Inout端口,在例化中也是一个wire型。

技巧2 时钟产生 第一种:parameter PERIOD=XX; Initial begin Clk=0; Forever #( PERIOD /2) clk =~clk; End 第二种 parameter PERIOD=XX; always begin #( PERIOD /2) clk=0;

# (PERIOD /2) clk=1; End 技巧3 复位信号 Initial begin Reset_task(XX);//注意时间尺度 ……. End Task reset_task; Input [15:0]reset_time; Begin Reset=0; # reset_time;

(完整)项目开发总结报告,推荐文档

项目开发总结报告 1.引言 1.1编写目的 项目开发总结报告的编制是为了简单回顾记录项目的开发过程,总结本项目开发工作的经验,说明实际取得的开发结果以及对整个开发工作各个方面的评价,总结开发过程中的逻辑方法。 本文档预期的读者为软件开发人员。 1.2背景 项目名称:“High Go”智能购物车 系统名称:智能购物车系统 开发单位:西北大学信息科学与技术学院“High Go”团队 开发历时:四周 版权信息:梦想网络资源检索系统是由西北大学信息科学与技术学院“High Go”团队开发,未经作者许可,任何个人或组织不能将其用于商 业用途,系统所搜索的资源版权归原作者所有。 1.3定义 购物车车身:采用当前市场上最普遍的购物车规格,迎合人们一般的手推 购物车购物的习惯方式。 显示屏:在购物车前端,车筐上方安置一块触摸显示屏,人们可以在显示 屏上通过点击屏幕进行一些基本操作,如查询商品信息、查询总价和商品数 量、确认购物单、删除商品等。 无线扫码枪:顾客在购物过程中,可以对自己确认投入购物车的商品进行 扫码。将无线扫码枪与显示屏一同安置在购物车筐上方,方便顾客在拿取商品 扫码同时看到新扫码的商品信息。 警示灯:在自助购物过程中,超市本身无法对每一位客户进行实时监管, 为了防止顾客忘记自主扫码或者故意不扫码给超市带来损失,在购物车的两旁 将设置警示灯,如果没有通过扫码而把商品直接投入车筐内,则警示灯会启动 发光报警,只有重新扫码并通过显示屏进行确认才能够消除报警。 1.4参考资料 [1]刘兵,刘晓朋,曾翔亮.基于条码识别技术的智能购物车设计[J].森林工 程,2012,11.

[2]郑创立.RI-R6C-001A 集成电路的原理与应用[J].国外电子元器件,2004,06. [3]李文江,高锋,丁睿.RI-R6C-OO1A 射频芯片在个人医疗信息系统中的应用[J].电气自动化,2007, 29. [4]刘江沙,雷伟,尹酉.基于 CC2430 的串口无线模块的设计[J].国外电子元器件,2007,04. [5]张喆.基于 STC89C516 的超市智能购物车研发[J].自动化技术与应 用,2009,28. [6]江田.基于 RFID 的商品购物智能终端的设计与实现[D].大连理工大 学,2013,06. [7] 张俊谟.单片机中级教程[M] . 北京: 北京航空航天大学出版社.2006. [8] 张俊.匠人手机[M] .北京:北京航空航天大学出版社.2008. [9] 刘焕成.工程背景下的单片机原理及系统设计[M].北京:清华大学出版 社.2008. [10] 颜继红.超市一线员工高流动率问题的研究[J].科技和产 业,2011,11(4):54-55 [11] 韩立毛,赵跃华,钱宇力.基于物品跟踪定位方案的连锁超市应用系统设计[J].铁路计算机应用,2009(8) [12] 中国工业和信息化部物联网总体框架与技术要求( Y DT/2437-2012 )[S] 北京:人民邮电出版社,2013 [13] 叶少龙,刘建群等.PIC 单片机在模具条码识别系统中的应用[J].广东工业大学学报,2009,26(2):94-97 [14] 程子华,阳胜峰.视频学工控—触摸屏应用技术[M].北京:人民邮电出版 社,2006 [15]刘伟勋. 家乐福价格欺诈的背后[J]. 中国品牌,2011,( 2): 44 -46. [16] 叶少龙,刘建群,吴积荣,等. PIC 单片机在模具条码识别系统中的应用[J]. 广东工业大学学报2009, 26( 2) : 94 - 97. [17]张佩剑. 无动力智能节能型自动灌溉系统研究[J]. 森林工 程,2005,21( 3) : 19 - 20. [18]王忠勇,张建华,宋豫冀. 基于 89C2051 的解码器设计[J]. 微电子学与计算, 2002,( 5) : 57 - 58.

ModelSim软件仿真步骤教程

使用ModelSim模擬驗證HDL code 1.在模擬前先準備好我們要模擬的電路檔案(Verilog HDL,TestBench,…) 2. 打開ModelSim,新建一個Project,鍵入Project name 按OK。此處我們的library name 為default library name “work”不必更改。 3.然後再加入我們所要模擬的電路檔案(若尚未準備,可開啟新檔案再將code 鍵入)選Add Existing File,將我們已編輯好的檔案加入。 將我們所需要的檔案加入,按Browse選擇我們所需檔案count.v,

count_test.vt),按下OK。 再將先前所開啟的增加檔案的視窗關閉,按close。 4.按下compile all。

Compile成功沒有顯示出錯誤訊息, 則開始模擬波形 5.按下Simulation, 選擇檔案所在的Library (work), 點選TestBench的Module Name t_Gap_finder 按OK 6.承接上步驟將會跳出以下視窗,若要將所有訊號加入波型中觀察則選擇在 testbench的module name: count_tst按滑鼠右鍵選擇→ Add → Add to Wave。

7.在波型畫面按下Run All開始模擬 跑完後會跳出下面視窗選擇否則可觀察模擬波形,若按下是則會將ModelSim關閉。

8.觀察波形圖是否與功能符合,若與設計不符則修改設計並重複執行Step 4到 Step 8 Testbench語法 `timescale 1 ps/ 1 ps 前面的1ps代表程式中最小的時間單位 後面的1ps代表運算的精準度

怎样写testbench(内有一个实例分析)

怎样写testbench 本文的实际编程环境:ISE 6.2i.03 ModelSim 5.8 SE Synplify Pro 7.6 编程语言 VHDL 在ISE中调用ModelSim进行仿真 一、基本概念和基础知识 Testbench不仅要产生激励也就是输入,还要验证响应也就是输出。当然也可以只产生激励,然后通过波形窗口通过人工的方法去验证波形,这种方法只能适用于小规模的设计。 在ISE环境中,当前资源操作窗显示了资源管理窗口中选中的资源文件能进行的相关操作。在资源管理窗口选中了testbench文件后,在当前资源操作窗显示的ModelSim Simulator中显示了4种能进行的模拟操作,分别是:Simulator Behavioral Model(功能仿真)、Simulator Post-translate VHDL Model(翻译后仿真)、Simulator Post-Map VHDL Model(映射后仿真)、Simulator Post-Place & Route VHDL Model(布局布线后仿真)。如图1所示: 图1 l Simulator Behavioral Model 也就是所说的功能仿真、行为仿真、前仿真。验证功能是否正确,这是设计的第一步。功能仿真正确的程序不一定能被正确综合,也 就是硬件实现。有的在综合时报错误,有的虽然能综合但结果并不正确。当然,功 能仿真如果都不能通过,以后的步骤也就无法进行。这是必做的仿真。 l Simulator Post-translate VHDL Model 也就是翻译后仿真。对源程序进行编译后首先排除了语法错误,对一些像类属命令(Generic)、生成语句(Generate)等进 行了展开。不是必做的仿真。 l Simulator Post-Map VHDL Model也就是映射后仿真。不同的器件内部结构也不尽相同,映射的作用就是将综合后产生的网表文件对应到实际的器件上去。由于映射 不包含布线,也就是要用什么类型的逻辑单元虽然已经确定但要用哪个位置的还没 有确定,因此,映射后仿真不包含布线延时。不是必做的仿真。 l Simulator Post-Place & Route VHDL Model也就是所说的布局布线后仿真、时序仿真、后仿真。这是最完整的仿真,既包含逻辑延时又包含布线延时。在做布局布 线后仿真时要用到一个叫SDF的文件。SDF文件包含设计中每个单元(Cell)的延

testbench时钟信号的编写(verilog)

testbench时钟信号的编写 2011-01-13 11:07:38| 分类:FPGA的分享| 标签:clock parameter reg 占空比 time_period |举报|字号大中小订阅 /******************************************************* 时钟信号的编写 *******************************************************/ 'timescale 1ns/1ps //定义时间单位/时间精度 /******************占空比50%(采用initial)**************/ parameter TIME_PERIOD = 10; reg clock; initial begin clock = 0;//初始化clock为0 forever # (TIME_PERIOD/2) clock = ~clock; end /******************占空比50%(采用always)***************/ parameter TIME_PERIOD = 10; reg clock; initial clock = 0;//初始化clock为0 always # (TIME_PERIOD/2) clock = ~clock; /******************非50%占空比(采用always)*************/ parameter HI_TIME = 5, LO_TIME = 10; reg clock; always begin # HI_TIME clock = 0; # LO_TIME clock = 1; end /***********固定数目时钟占空比50%(采用initial)*********/ parameter PULSE_COUNT = 4, TIME_PERIOD = 10; reg clock; initial begin clock = 0;//初始化clock为0 repeat (2*PULSE_COUNT)

项目结项总结报告总结归纳

密级:内部公开 文档编号: 版本号: 结项总结报告 XXXX有限公司 XXXX股份有限公司对本文件资料享受着作权及其它专属权利,未经书面许可,不得将该等文件资料(其全部或任何部分)披露予任何第三方,或进行修改 后使用。 文件更改摘要:

1. 项目背景 {可参考原项目方案建议书中的项目背景描述。} 2. 项目信息 项目实施周期: 项目参与人: 项目实现的主要功能: 3. 主要成果 {工作成果可以是产品、文档或者某方面经验的成功应用,并在描述中对其进行介绍。文档或产品可以描述其版本、主要内容,工作经验则描述主要应用与应用效果。} 4. 计划与实际情况对比 4.1.测量数据项 {以下数据项可根据项目情况做出调整,给出各数据项的计划、实际情况的数据,以及比较 4.2.进度目标

5. 开发工作评价 {以下开发工作的评价,结合项目度量计划中度量指标给予量化评价,实施类项目不必填写。} 5.1. 对生产效率的评价 {给出实际生产效率,并与公司平均水平或计划数据作为对比,分析原因。} 5.2. 对产品质量的评价 {根据产品特性和项目目标,选择部分属性进行评价} 5.3. 对技术方法的评价 {给出对在开发中所使用的技术、方法、工具、手段的评价。} 5.4. 问题的分析 {给出问题列表、统计分析以及原因分析。} 6. 质量目标评价(由质量工程师QA 编写)

7. 经验与教训 {描述项目实施中来自产品实现、项目管理、关系处理等各个方面经验与教训,对后续开 8. 知识产权(可选) {描述产品知识产品的申报情况。} 9. 项目维护建议 {产品开发类项目和合同开发类项目必须填写。 描述项目进入维护期开发工作主要内容,对维护工作量的估算和人力资源计划,建议本项目开发维护人员的人选和工作安排。} 10. 申请结项理由 {说明结项理由:正常结项和异常结项。异常结项必须说明结项原因。}

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。(提示:这样编写完后点保存,便可以直接保存到上面设臵好的work库中。比起另一种方法,不建工程直接建库,再通过菜单栏source添加源

VHDL——如何写简单的testbench

use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; --use ieee.std_logic_unsigned.all; entity cnt6 is port (clr,en,clk :in std_logic; q :out std_logic_vector(2 downto 0) ); end entity; architecture rtl of cnt6 is signal tmp :std_logic_vector(2 downto 0); begin process(clk) -- variable q6:integer; begin if(clk'event and clk='1') then if(clr='0')then tmp<="000"; elsif(en='1') then if(tmp="101")then tmp<="000"; else

tmp<=unsigned(tmp)+'1'; end if; end if; end if; q<=tmp; -- qa<=q(0); -- qb<=q(1); -- qc<=q(2); end process; end rtl; 二、六进制计数器testbench的代码

signal en :std_logic:='0'; signal clk :std_logic:='0'; signal q :std_logic_vector(2 downto 0); constant clk_period :time :=20 ns; begin instant:cnt6 port map ( clk=>clk,en=>en,clr=>clr,q=>q ); clk_gen:process begin wait for clk_period/2; clk<='1'; wait for clk_period/2; clk<='0'; end process; clr_gen:process begin clr<='0'; wait for 30 ns; clr<='1'; wait; end process; en_gen:process begin en<='0'; wait for 50ns; en<='1'; wait; end process; end rtl;

1 ModelSim的使用与Testbench的编写

ModelSim的使用与Testbench的编写 重温了基本的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)。

仿真工具为ModelSim。这样Quartus就能无缝调用ModelSim了。

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

2.编写Testbench 说到Testbench,你可以叫它Testbench,或者Testbenches,但不是Test Bench。说起来,就连Quartus也没注意这个问题,至于原因嘛参见Common Mistakes In Technical Texts一文。文章中还列举了些别的错误用语,包括Flip-flop不能写成Flipflop,等等。文章链接: https://www.doczj.com/doc/5c4322370.html,/papers/Technical_Text_Mistakes.pdf 我们可以通过Quartus自动生成一个Testbench的模板,选择Processing -> Start -> Start Test Bench Template Writer,等待完成后,在导航栏中打开刚才生成的Testbench,默认是保存在simulation\modelsim文件夹下的.vt格 式文件。

软件项目开发总结报告模版

十、项目开发总结报告 1.引言 (2) 1.1编写目的 (2) 1.2项目背景 (2) 1.3定义 (2) 1.4参考资料 (2) 2.开发结果 (3) 2.1产品 (3) 2.2主要功能及性能 (3) 2.3所用工时 (3) 2.4所用机时 (3) 2.5进度 (3) 2.6费用 (4) 3.评价 (4) 3.1生产率评价 (4) 3.2技术方案评价 (4) 3.3产品质量评价 (4) 4.经验与教训 (4)

1.引言 1.1编写目的 【阐明编写总结报告的目的,指明读者对象。】 1.2项目背景 【说明项目来源、委托单位、开发单位及主管部门。】 1.3定义 【列出报告用到的专门术语的定义和缩写词的原文。】 1.4参考资料 【列出有关资料的作者、标题、编号、发表日期、出版单位或资料来源,可包括: a.项目经核准的计划任务书、合同或上级机关的批文; b.项目开发计划; c.需求规格说明书; d.概要设计说明书; e.详细设计说明书; f.用户操作手册; g.测试计划; h.测试分析报告;

i.本报告引用的其他资料、采用的开发标准或开发规范。】 2.开发结果 2.1产品 【可包括: a.列出各部分的程序名称、源程序行数(包括注释行)或目标程序字节数及程序总计数量、 存储形式; b.产品文档名称等。】 2.2主要功能及性能 2.3所用工时 【按人员的不同层次分别计时。】 2.4所用机时 【按所用计算机机型分别计时。】 2.5进度 【给出计划进度与实际进度的对比。】

2.6费用 3.评价 3.1生产率评价 【如平均每人每月生产的源程序行数、文档的字数等。】3.2技术方案评价 3.3产品质量评价 4.经验与教训

modelsim新手入门仿真教程

Modelsim新手入门仿真教程 1.打开modelsim软件,新建一个library。 2.library命名 3.新建一个工程。

3.出现下面界面,点击close。 4.新建一个verilog文件 键入主程序。下面以二分之一分频器为例。

文件代码: module half_clk(reset,clk_in,clk_out); input clk_in,reset; output clk_out; reg clk_out; always@(negedge clk_in) begin if(!reset) clk_out=0; else clk_out=~clk_out; end endmodule 编辑完成后,点击保存。

文件名要与module后面的名称相同。 5.再新建一个测试文件,步骤同上面新建的主程序文件,文件名后缀改为.vt 程序代码如下: `timescale 1ns/100ps `define clk_cycle 50 module top; reg clk,reset; wire clk_out; always #`clk_cycle clk=~clk; initial

begin clk=0; reset=1; #10 reset=0; #110 reset=1; #100000 $stop; end half_clk m0( .reset(reset), .clk_in(clk), .clk_out(clk_out)); Endmodule 6.添加文件,编译文件 先右键点击左边空白处,选择add to project→existing File 选择刚刚新建的两个文件。按ctrl键可以同时选择两个,选择打开,下一步点击ok

项目开发总结报告

1引言 (2) 1.1编写目的 (2) 1.2背景 (2) 1.3定义 (2) 1.4参考资料 (3) 2实际开发结果 (3) 2.1产品 (3) 2.2主要功能和性能 (3) 2.3基本流程 (3) 2.4进度 (4) 2.5费用 (4) 3开发工作评价 (4) 3.1对生产效率的评价 (4) 3.2对产品质量的评价 (4) 3.3对技术方法的评价 (4) 3.4出错原因的分析 (5) 4经验与教训 (5)

1引言 1.1编写目的 项目开发总结报告的编制是为了总结本项目开发工作的经验,说明实际取得的开发结果以及对整个开发工作的各个方面的评价。 本文档预期的读者为软件开发人员。 1.2背景 项目名称:通讯管理系统 系统名称:通讯管理系统 英文名称:Management System of Communication 委托单位:无委托单位,适用于个人、小型企业等 开发单位:13计算机1班小组成员(宋振泽、韩逸文) 开发日期:2016年6月27日——2016年7月5日 1.3定义 生产率: ①用来表示产出与投入比率的术语(总产出除以劳动投入是劳动生产率)。如果相同数量的投入生产了更多的产出,则生产率就增长了。劳动生产率的增长是由于技术进步、劳动技能的改善和资本深化。 ②概括在生物的生产过程中有关物质循环或能量转换速度的各个方面的术语。也有译为生产力的。过去这个词,具有生产速度(生产量)或潜在生产能力的含意,进而也含有土地的生产力、肥沃度(ferti-lity)或循环率等各种意义,非常混乱,国际上给予了上述的定义,而且提出了有关不使用这个词的附文。可是直到现在,这个词仍是混乱地被较广泛地使用,因此,附文中所使用的生产率一词的意义是什么,只能从附文的前后内容加以判断。G.L.Clarke(1946)认为这个词多半用来表示关于现存量、生产速度(生产量)和收获量的任何一个大小范围的。

ModelSim新手使用手册

ModelSim最基本的操作,初次使用ModelSim的同学,可以看看,相互学习。 无论学哪种语言,我都希望有个IDE来帮助我创建一个工程,管理工程里的文件,能够检查我编写代码的语法错误,能够编译运行出现结果,看看和预期的结果有没有出入,对于Verilog语言,我用过Altera的Quartus II,Xilinx的ISE,还有ModelSim(我用的是Altera 官网的ModelSim_Altera),甚至MAXPlus II,不过感觉这软件太老了,建议还是前三者吧。 学Verilog,找一本好书很重要,参考网友的建议,我也买了一本夏宇闻老师的《Verilog 数字系统设计教程》,用Quartus II来编写代码,个人觉得它的界面比ISE和ModelSim友好,我一般用它编写代码综合后自动生成testbench,然后可以直接调用ModelSim仿真,真的很方便,但学着学着,发现夏老师书里的例子很多都是不可综合的,比如那些系统命令,导致很多现象都发现不了,偶然间我直接打开了ModelSim,打开了软件自带的英文文档,步骤是:Help ->PDF Documentation->Tutorial如下所示: 打开文档的一部分目录: 往下读发现其实ModelSim可以直接创建工程,并仿真的。下面以奇偶校验为例叙述其使用过程(当然前提是你在Altera官网下载了ModelSim并正确安装了)。 1.打开软件,新建一个工程,并保存到自定义的目录中(最好别含中文路径) 2.点击Project,弹出窗口问是否关闭当前工程,点击Yes,接着又弹出如下窗口

我个人的习惯是把Project Name和Default Library Name写成一样,自己定义Project Location。又弹出如下窗口: 3.点击Close(我的版本不能Create New File,其实新建好了工程一样可以新建.v文件),然后点击屏幕下方的Project标签: 如果一开始不是如上图所示的界面,那么可以点击如下图所示红色标记的按键变成上图界面:

如何写testbench

如何编写testbench 今天,我来带领大家写一个简单的testbench,顺便讲解如何写好一个testbench以及写testbench时应该注意的地方。 在讲解testbench之前,我们先看一下前面的那个AND_2程序的仿真图,如下: 如上图中所标,在1处,B已经为低电平了,但是输出C仍然为高电平,这样求与运算就会出错。在2处,A和B都是低电平了,C仍然为高电平,直到下次出现时钟的上升沿为止,为什么会这样呢?编译的时候并没有报错,呵呵,出了怪事了啊!其实编译器只能检查处语法错误,无法检测到逻辑错误,这个图给出的结果和我们程序所表达的结果一样,但是这并不是我们所要的求与运算,我们想要的是A和B同时为高电平时,C才输出高电平。我们把程序的敏感列表改为: always@(posedge clk or negedge rst or A or B) 就可以了,把A的电平改变和B的电平改变都加进敏感列表,激励不变,所得到的仿真图: 这才是我们所要的求与运算! 好了,现在开始讲如何写testbench。Testbench不像RTL级代码,可以用高级行为语句,不用考虑其可综合性,这样就能写出高效的检测代码。在语法上,testbench和可综合代码一样,都是类C结构。好了,我们开始吧! 1,建立工程等,与之前的一样,但是在创建文件的时候,我们一次创建两个。取名分别为ParallelSerial_Mult和ParallelSerial_Mult_test。创建完成后,如下图:

这两个代码分别如下: module ParallelSerial_Mult(Clk,Rst,MultiplicandIn,MultiplierIn,Load,Product,Out_en); parameter N=8; parameter CYCLES=3; input Clk,Rst,Load; input[N-1:0]MultiplicandIn,MultiplierIn; output[2*N-1:0]Product; output Out_en; reg[2*N-1:0]Product; wire Out_en; reg[N-1:0]Multiplicand; reg[2*N-1:0]NextProduct; reg[CYCLES:0]Count; reg Busy; wire[N-1:0]Sum; wire Carry; assign{Carry,Sum}=Multiplicand+Product[2*N-1:N]; assign Out_en=Count[CYCLES]; always@(posedge Clk or negedge Rst) if(!Rst) begin Multiplicand<=0; Count<=0; Product<=0; Busy<=0; end else begin Product<=NextProduct; if(Load) begin Multiplicand<=MultiplicandIn; Count<=0; Busy<=1'b1; end else begin if(Busy) Count<=Count+1'b1; if(Count[CYCLES]) begin

modelsim详细使用教程(一看就会)

Modelsim详细使用方法 很多的modelsim教程中都讲得很丰富,但忽视了对整个仿真过程的清晰解读,而且都是拿counter范例举例子,有些小白就不会迁移了。这里我们着眼于能顺利的跑通一个自己写的程序,一步一步的讲解,如果你是一个初学者,这再适合你不过了,虽然貌似字写得比较多,那是因为写得相当的详细,一看就会啦O(∩_∩)O~ 一、建立工程 1、在建立工程(project)前,先建立一个工作库(library),一般将这个library命名为 work。尤其是第一次运行modelsim时,是没有这个“work”的。但我们的project 一般都是在这个work下面工作的,所以有必要先建立这个work。 File→new→library 点击library后会弹出一个对话框,问是否要创建work,点击OK。就能看见work.

2、如果在library中有work,就不必执行上一步骤了,直接新建工程。 File→new→project 会弹出 在Project Name中写入工程的名字,这里我们写一个二分频器,所以命名half_clk,然后点击OK。 会出现

由于我们是要仿一个自己写的程序,所以这里我们选择Create New File。 在File Name中写入文件名(这里的file name和刚刚建立的project name可以一致也可以不一致)。注意Add file as type 要选择成Verilog(默认的是VHDL),然后OK。 发现屏幕中间的那个对话框没有自己消失,我们需要手动关闭它,点close。 并且在project中出现了一个half_clk.V的文件,这个就是我们刚刚新建的那个file。 这样工程就建立完毕了。 二、写代码: 1、写主程序:双击half_clk.v文件会出现程序编辑区,在这个区间里写好自己 的程序,这里我们写一个简单的二分频的代码: module half_clk_dai( clk_in, rst, clk_out ); input clk_in; input rst;

Verilog仿真文件testbench编写样例

Verilog 仿真文件testbench编写样例 `timescale 1ns/100ps module testbench; localparam DATA_WIDTH = 32; localparam CLK_100_PERIOD = 5; localparam CLK_200_PERIOD = 2.5; localparam SIM_TIME = 150000; localparam ; localparam ; reg clk_100, clk_200; wire clk; assign clk = clk_100; always begin clk_100 = 0; forever #CLK_100_PERIOD clk_100 = ~clk_100; end always begin clk_200 = 0; forever #CLK_200_PERIOD clk_200 = ~clk_200;

end reg rstn; integer fp_testin; integer fp_matlab_out; integer fp_sim_out; integer fp_outdiff; reg signed [DATA_WIDTH/2-1:0] matlab_in_re, matlab_in_im; reg signed [DATA_WIDTH/2-1:0] matlab_out_re, matlab_out_im; reg signed [DATA_WIDTH/2-1:0] matlab_diff_re, matlab_diff_im; reg signed [DATA_WIDTH/2-1:0] matlab_diff_re2, matlab_diff_im2; reg signed [DATA_WIDTH/2-1:0] max_diff_re, max_diff_im; initial begin max_diff_re = 0; max_diff_im = 0; rstn = 0; #500 rstn = 1;

1_VHDL修改Quartus自己产生的testbench

VHDL编写testbench(.vht文件) 对modelsim自己产生的.vht文件修改进行仿真时,需要更改两处,分别是如下: 1.对于Signal信号需要赋初值。 例如: 原文件中: SIGNAL CLK_IN : STD_LOGIC; SIGNAL Q : STD_LOGIC_VECTOR(3 DOWNTO 0); 更改后为: SIGNAL CLK_IN : STD_LOGIC := '1'; SIGNAL Q : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0000"; 最简单的记法,格式都是如下: SIG<=’1’;WAIT FOR 10 NS; SIG<=’0’;WAIT FOR 10 NS; 时钟信号: process_clk : PROCESS BEGIN CLK_IN <= '0'; WAIT FOR 10NS; CLK_IN <= '1'; WAIT FOR 10NS; END PROCESS process_clk; 复位信号: process_rst : PROCESS BEGIN RST_N <= '1'; WAIT FOR 20NS; RST_N <=’0’; WAIT FOR 20NS; WAIT; END PROCESS process_rst; 一般激励信号: process_sig : PROCESS BEGIN SIG<=’1’;WAIT FOR 10 NS; SIG<=’0’;WAIT FOR 20 NS;

SIG<=’1’;WAIT FOR 20 NS; SIG<=’0’;WAIT FOR 10 NS; END PROCESS process_ sig;

相关主题
文本预览
相关文档 最新文档