搜档网
当前位置:搜档网 › 如何编写Testbench

如何编写Testbench

如何编写Testbench
如何编写Testbench

2 如何编写Testbench

1) 何时使用initial和always

initial和always 是2个基本的过程结构语句,在仿真的一开始即开始相互并行执行。通常被动的检测响应使用always语句,而主动的产生激励使用initial语句。

initial和always的区别是always 语句不断地重复执行,initial语句则只执行一次。但是,如果希望在initial里的多次运行一个语句块,怎么办?这时可以在initial里嵌入循环语句(while,repeat,for,forever 等),如:

initial

begin

forever /* 无条件连续执行*/

begin

……

end

end

其它循环语句请参考一些教材,这里不作赘述。

另外,如果希望在仿真的某一时刻同时启动多个任务,可以使用fork....join语句。例如,在仿真开始的100 ns 后,希望同时启动发送和接收任务,而不是发送完毕后再进行接收,如下所示:

initial

begin

#100 ;

fork /*并行执行*/

Send_task ;

Receive_task ;

join

End

2) 如何作多种工作模式的遍历测试

如果设计的工作模式很多,免不了做各种模式的遍历测试,而遍历测试是需要非常大的工作量的。我们经常遇到这样的情况:很多时候,各种模式之间仅仅是部分寄存器配置值的不同,而各模式间的测试都是雷同的。有什么方法可以减轻这种遍历测试的工作量?不妨试

试for循环语句,采用循环变量来传递各种模式的配置值,会帮助减少很多测试代码,而且不会漏掉每一种模式.

initial

begin

for ( i = 0 ; i < m ; i = i + 1 ) /*遍历模式1至模式m*/

for ( j = 0 ; j < n ; j = j +1 ) /*遍历子模式1至子模式n */

begin

case ( j ) /* 设置每种模式所需的配置值*/

0 : 配置值=a ;

1 : 配置值=b ;

2 : 配置值=c ;

……

endcase

/*共同的测试向量*/

end

end

3) 如何加速问题定位过程

在这部分里,通过一些实际例子,介绍在出现问题时如何借助testbench 加快问题的定位过程。

1、监测存分配

存分配和回收示意图

在这个例子里,假设总共有2K的存块,希望在测试程序里监测存分配和回收的块号是否正确,监测是否存在同一块号重复分配、重复回收的情况。设置一个2K位的变量对存的使用情况进行记录,每一位对应一个存块,空闲的块号记为1,被占用的块号记为0。该变量的

初始值为全1,当分配一个块号出去时先判断该位是否为空闲,若是空闲则将该位设置为被占用,否则就为重复分配错误。相反,当回收一个块号时,先判断该位是否被占用,若是被占用则将该位设置为空闲,否则就为重复回收错误。程序如下:

always (posedge Clk or negedge Rst )

begin

if ( Rst == 1'b0 )

Mem_status <= 2048 {1'b1} ;

else

begin

if ( 层次路径. rd ) /* 监测存分配,block_rd 是分配的存块号*/

if ( Mem_status [ block_rd ] == 1'b1 )

Mem_status [ block_rd ] <= 1'b0 ;

else

begin

$display ( "Error! 重复分配同一存块!") ;

$stop ;

end

if ( 层次路径. wr ) /* 监测存回收,block_wr 是回收的存块号*/

if ( Mem_status [ block_wr ] == 1'b0 )

Mem_status [ block_wr ] <= 1'b1 ;

else

begin

$display ( "Error! 重复回收同一存块!") ;

$stop ;

end

end

End

2、监测部接口

如果你是位验证工程师,在做芯片级的仿真时,相信你会或曾遇到过这样的问题:在一个端口输入了激励数据,但另一端口却得不到正确的响应,而且这条路径涉及到很多模块和很多个不同设计者,为了定位问题,你可能很盲目地逐个找来设计人员,逐个模块地记录仿真波形,到解决问题时,可能几天已经过去了。

我们都知道,如果问题定位在越小的围,就越便于解决问题。所以,我们可以把模块接口间交换的数据记录到文件里,当出现问题时,就可以查看各接口的记录数据,看问题到底出现在哪个区间,简单地查看记录文件后,你就明确该找那位designer来解决问题。

3、记录有用的DEBUG信息

记录有用的debug信息,输出到标准的I/O设备上(屏幕或文件),会给你的debug 带来很大的便利,由上面的例子也可见一斑,在检测到有错误时也可使用$stop令仿真停下来。

值得注意的是,UNIX系统只有32个I/O,每个输出文件占用1个I/O设备号,其中第1个是屏幕显示,设备号是32'b1,其它I/O设备号由输出文件占用,一个信息可同时输出到屏幕和文件,如:

initial

begin

Ptr_log = $fopen ("log.txt ") ; /* 创建一个文件,获得文件指针*/

Ptr_log = Ptr_log | 32'b1 ; /* 指针同时指向log.txt 文件和屏幕*/

end

always (……)

begin

$fwrite ( Ptr_log, "useul message ",……) ; /*信息除了记录到文件同时,还显示到屏幕*/ ……

end

虽然记录文件会给debug带来很多便利,但文件操作会降低仿真的速度,因此应当适可而止。

另外写文件通常有2种方式,不同的仿真工具有所差异。一种是每写一个字节打开关闭一次文件,如Verilog-XL。另一种是先把字符暂存到存,等累积到一定数量(如8K字节)后再通过DMA方式把字符从存写到文件,如Verilog-NC。因此,后一种方式就大降低了文件的操作次数,有利于提高仿真速度。

3 编写Testbench的一些高级技巧

Verilog HDL提供很多方便和高效的建模语句,这在大多数参考书上都有介绍,在这节,只介绍一些参考教材很少介绍而较有用的建模语句。

1) force 和release

望文生义,force即是可以对变量和信号强制性地赋予确定的值,而release就是解除force的作用,恢复为驱动源的值。例如:

wire a ;

assign a = 1'b0 ;

initial

begin

#10 ;

force a = 1'b1 ;

#10

release a ;

end

在10 ns时,a 的值由0变为1,在20ns时,a 的值又恢复为0 。

force 和release并不常用,有时,可以利用它们和仿真工具做简单的交互操作。例如,Verilog-XL的图形界面可以方便的将一个信号或变量force 为0或1,在Testbench里,可以检测变量是否被force为固定的值,当被force为固定的值时就执行预定的操作,实现了简单交互操作。

2) 事件

事件有些类似于任务。首先需要定义一个事件,而事件可以作为敏感变量激活一个语句块的操作,事件可由“->”符号进行触发,如下例:

event e1 ; /*定义一个事件*/

always ( e1 ) /*事件e1 作为敏感变量*/

begin

.....

end

initial

begin

—> e1 ; /*创建事件e1来触发上面的always语句*/

.....

end

事件(event )与任务(task)的区别是:执行事件触发后可以立即继续往下执行语句,只起一个触发作用,至于被触发的事件何时执行完毕并不影响程序继续执行。而调用一个任务后,必须等待任务完成才能返回控制权。

3) 模块参数

当一个模块引用另外一个模块时,高层模块可以改变低层模块用parameter定义的参数值,改变低层模块的参数值可采用以下两种方式:

1)defparam 重定义参数

语法:defparam path_name = value ;

低层模块的参数可以通过层次路径名重新定义,如下例:

module top ( .....)

input....;

output....;

defparam U1 . Para1 = 10 ; /*修改实例U1 模块中的para1 */

M1 U1 (..........);

endmodule

module M1(....);

parameter para1 = 5 ;

input...;

output...;

......

endmodule

在上例中,模块M1参数para1 的缺省值为5,而模块top实例了M1后将参数的值改为10。

2) 实例化时传递参数

在这种方法中,实例化时把参数传递进去,如下例所示:

module top ( .....)

input....;

output....;

M1 #( 10 ) U1 (..........);

endmodule

在该例中,用#( 10 )修改了上例中的参数para1,当有多个参数时,用逗号隔开,如#( 10 , 5 ,

3 )传递了3个参数值。

模块参数的方法使得模块的重用性更强,当需要在同一个设计中多次实例化同样的模块,只是参数值不同时,就可以采用模块参数的方式,而不必只因为参数不同产生了多个文件。

4) 其他要注意的几个点

4) 注意与wait的区别

都是使用沿触发。

wait语句都是使用电平触发。

5) 注意$sreadmemb(h)与$readmemb(h)的区别

$sreadmemb(Memory, StartAddr, FinishAddr, String , ……) :读字符串到Memory。$readmemb("File", Memory [, StartAddr, [FinishAddr]]) :读取的第一个数字存储在地址StartAddr,直到FinishAddr。

6) 常用系统任务

$time 返回64位整型时间。

$stime 返回32位整型时间。

$realtime 向调用它的模块返回实型模拟时间。

编写高效率的testbench

Writing Efficient Testbenches 编写高效的测试设计(testbenches) 原文作者:Mujtaba Hamid 注: 一个设计的测试验证是非常重要的。有效的测试可以助我们快速的完成或改善设计。Testbenches建议编写有效的测试代码来通过软件实现可靠的验证。无意中发现,顺手译为中文,以备将来方便。也贴给没有找到更好中文版本的同道人。 Testbenches本意应该是测试平台更合理,但是在中文中阅读起来很不舒服。所以本文中有时译为“测试设计”,“测试代码”,有时干脆是“测试”。 摘要: 应用笔记为HDL验证设计的新手,或者是没有丰富的测试设计经验的逻辑设计者而编写。 测试设计是验证HDL设计的主要手段。本应用笔记为创建或准备和构建有效的测试设计提供准则。它也提供一个为任何设计开发自较验测的测试设计的一个代数方法。 涉及的所有设计文件可以从以下的站点获得: PC: ftp://https://www.sodocs.net/doc/7f10249810.html,/pub/applications/xapp/xapp199.zip UNIX: ftp://https://www.sodocs.net/doc/7f10249810.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;

项目开发总结报告

卷号 卷内编号 密级 呈祥企业生产经营管理系统 项目开发总结报告 项目承担部门: 撰写人(签名):李新贺 完成日期: 2016-7-11 本文档使用部门:□主管领导□项目组 □客户(市场)□维护人员□用户 评审负责人(签名): 评审日期: 文档信息

目录 1引言 (2) 1.1编写目的 (2) 1.2背景 (2) 1.3定义 (2) 1.4参考资料 (2) 2实际开发结果 (2) 2.1软件产品描述 (2) 2.2主要功能和性能 (4) 2.3进度 (4) 2.4成本 (5) 3开发工作评价 (6) 3.1对项目开发过程的评价 (6) 3.2对技术方法的评价 (6) 3.3对产品质量的评价 (6) 4试运行工作评价 (6) 5技术积累总结 (7) 6经验与教训 (7)

1 引言 1.1 编写目的 为了保证项目团队按时保质地完成项目目标,便于项目团队成员更好地了解项目情况,使项目工作开展的各个过程合理有序,因此以文件化的形式,把对于在项目生命周期内的工作任务范围、各项工作的任务分解、项目团队组织结构、各团队成员的工作责任、团队内外沟通协作方式、开发进度、经费预算、项目内外环境条件、风险对策等内容做出的安排以书面的方式,作为项目团队成员以及项目干系人之间的共识与约定,项目生命周期内的所有项目活动的行动基础,项目团队开展和检查项目工作的依据。本文档是西北农林科技大学2013级软件工程专业11实习小组根据呈祥企业生产经营管理系统项目的初步需求,并对该项目的各项需求进行全面分析之后,做出的软件开发计划,可供支持项目组内部及信息技术部内部的研发工作。 1.2 背景 说明项目的相关背景,包括: 项目名称:呈祥企业生产经营管理系统 任务提出者:四川华迪公司 用户:业主运行维护人员、施工单位作业人员、视察人员、招标人信息管理人员 开发者:邵添、孙雨柔、乔娇、江旭、李新贺、马金亮 项目提出的背景:呈祥企业需要一个覆盖企业生产经营主要活动的信息管理平台 1.3 定义 CM:Configuration Management 配置管理 SPP:Software Process Plan 软件开发计划 RUP:Rational Unified Process 统一软件开发过程 CCB:变更控制委员会 EPG: Engineering Process Group,即工程过程组。 1.4 参考资料 百度百科 2 实际开发结果 2.1 软件产品描述 说明本次发行、交付的软件产品的版本,包括: 版本1.0 “呈祥企业生产经营管理系统”项目根据功能不同分为6大部分。

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

项目开发总结报告 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.

怎样写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添加源

(完整版)写项目总结报告范文

写项目总结报告范文 项目建设的主要内容,初步设计批复,批准规模和实际建成规模。下面是小编整理的范文,欢迎查阅! 项目总结报告范文【一】 一、项目概况 1. 项目情况简述 概述项目建设地点、项目业主、项目性质、特点,以及项目开工和竣工时间。 2. 项目决策要点 项目建设的理由、依据和目的。 3. 项目主要建设内容 项目建设的主要内容,初步设计批复,批准规模和实际建成规模。 4. 项目实施进度 项目周期各个阶段的起止时间,时间进度表,建设工期。 5. 项目总投资 项目建议书批复投资匡算,初步设计批复概算及项目调整概算,竣工决算和实际完成投资情况,投资变化情况和原因。 6. 项目资金来源及到位情况 资金来源计划和实际情况,变化及原因。 7. 项目运行及效益现状

项目运行现状,能力实现状况,项目财务经济效益情况等。 二、项目实施过程概述 8.项目前期决策 项目立项的依据,项目决策过程和目标,项目评估和可行性研究报告批复的主要意见。 9.项目实施准备 项目勘察、设计、开工准备、招标采购、征地拆迁和资金筹 措等情况。 10.项目建设实施 项目合同执行与管理情况,工程建设与进度情况,项目设计变更情况,项目投资控制情况,工程质量控制情况,工程监理和竣工 验收情况。 11.项目运营情况 项目实施管理和运营管理,项目设计能力实现情况,项目技术改造情况,项目运营成本和财务状况以及产品方案与市场情况。 三、项目效果和效益 1.项目技术水平 项目技术水平,新技术应用等。 2.项目财务及经济效益 项目资产及债务状况,项目财务效益情况,项目财务效益指标分析和项目经济效益变化的主要原因。 3.项目经营管理

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

我的项目总结报告范文1

项目总结报告范文 项目总结报告范文 1.1编写目的 1.2背景 1.3参考资料 2开发工作评价 2.1对生产效率的评价 2.2对产品功能的评价 2.3对技术方法的总结 3项目经验总结 3.1签定合同 一个项目的开发成败或者说项目开发带来效益的大小,在很大程度上是受项目合同签定的影响的。往往,很多一部分公司与客户签定的项目合同都是很模糊的,也很难签定的比较清楚,这样以来就会导致在项目的开发后期,工作两会越来越大,影响项目的竣工周期;而且,项目的开发费用一般是不会变的。这样以来,我们就大大的降低了我们的开发效益。虽然需求范围很难签定的明确,但是我们在签定合同时,要尽量的去把合同功能边界和添加新功能的条件签定。 3.2开发团队 在项目确立后,要尽快的建立起项目开发团队。 项目团队成员的团结合作、相互沟通是非常重要的,团队成员之间要相互学习彼此的优点和技术,使团队的能力不断的提高。这样,在项目的开发过程中,团队

才不会被难题困住不动。另外,团队中要有一个项目负责人,这个人无论是在与客户的沟通上,还是在技术上都要是很出众的人,此项目负责人要能很好的沟通客户与开发成员之间,以此来更好的理解客户的功能需求。人的记忆力总是有限的,所以就要求开发团队成员要尽量的书写一些开发文档,这些文档往往是我们在项目开发后期要用到的可寻资料。项目团队士气是项目成功的一个因素,我们需要不断的来培养我们的团队气势,使我们的团队不断的壮大。 3.3需求的调研 在项目确立后,就到了需求调研分析阶段。 1.项目组对客户的整体组织结构、公司有关人员的关系、职责等如果没有一个很好、足够的了解掌握,这样项目组就无法很好的完整的整理到客户的需求、或者说客户真实的功能需求,如此以来我们就为自己埋下了地雷,影响项目的开发周期,这就要求我们要与客户搞好无论是工作上的还是生活上的朋友关系,要深入的去了解客户需求。 2.我们要尽量的让客户也参与到项目的开发团队中来,也就是说我们要使客户把自己也纳入到项目的开发团队中来,如此一来,我们掌握客户需求的真实性、可靠性就会大大的提高,也就不会为项目的后期功能开发埋下陷阱3.在需求调研过程中,如果缺乏足够用户参与,这样的需求调研也是失败的。很多程序员不愿参与到客户的需求调研中去,为什么呢?很简单,与客户沟通不如与代码沟通容易有意思。尽管这样,我们还是必须用足够多的时间去和客户进行沟通,了解他们真实的需求。很多用户也是如此,他们自己也不愿意参与到项

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

十、项目开发总结报告 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.经验与教训

项目总结报告范文(共10篇)

项目总结报告范文(共10篇) 项目总结报告范文(一):工程竣工总结报告结尾怎么写? 工程总结报告也没有特定的格式,主要根据项目内容及特点来写,结尾也没有特别的要求. 项目总结报告范文(二):以个人角度写一份工程项目完工总结给直属领导看怎么写,请各位大侠指教 不是领导安排的,自己主动写.这样的行为总觉得是投机分子所为,弄不好会弄巧成拙的,年轻人尤其要注意. 项目总结报告范文(三):写一篇个人总结注意事项 写年终总结时要注意的几个误区: 误区一:“总结一定要低调” 我们从小接受的教育就是:做人一定要谦虚,不要过于表现自己.托尔斯泰曾经说过一句话:与其说得过分,不如说得不全,切忌浮夸铺张.尤其对于需要配合的部门之间,经理人往往更愿意充当一个教练、智囊的角色.因此,“低调为人”是这类经理们普遍的职业心态. 于是,“低调”的总结中总是贯穿着“在上级的关怀和同仁的共同努力下”、“在领导的英明决策下”这类的套话,难免让人觉得言之无物.因此,总结中要增加实质内容,而非

过多的官话、套话.还有一种情况是,把自己的失误总结得过于细致.这种“放大缺点”的做法,更会让领导怀疑你的能力. 而装模作样地所谓“自我检视”,就使得年终总结难免带有更多的压抑与灰色. 其实,我们不妨走出窠臼,重新审视一下现实. 随着企业规模的不断提升,许多领导人越来越放权,客观地说即便是直线领导也并不能充分了解每一名下属的工作情况.因此,下属不要再幻想自己的所作所为“领导都会看在眼里、记在心上”,他没有那么多时间,也没有那么细腻的心思.我们需要通过总结来沟通、来展现自己取得的成绩,往往会赢得更多的理解和支持!事实上,总结也是一个加强上下级沟通、加深了解的过程. 因此,一份智慧与自信的总结,一定会让你的上司对你刮目相看.同时,作为部门经理,你的总结不仅关系到自己在上司心中的印象,甚至还关系到本部门在上司心中的印象.因此,适度“当仁不让”地表现自己的“作为”,越来越具有现实意义. 误区二:“总结就是要格式化” 其实,总结也是一个人思维模式的体现.比如,A君是理工科出身的项目经理,他习惯于用数字说话,他的总结通常都是数字和图表.A君认为:这样的总结清晰而明朗,可以客观、量化的反映工作情况,同时由于他原来的老板很喜欢这种图表方式.然而新任的老板似乎并不以为然,把他的总结比喻为“冰冷的项目报告”.

项目开发总结报告

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)认为这个词多半用来表示关于现存量、生产速度(生产量)和收获量的任何一个大小范围的。

如何写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

软件开发项目总结报告

2003年软件开发项目总结报告 随着市场经济的进一步完善及全球经济一体化进程加快,企业面临着激烈的市场竞争,企业内部、外部信息交流已成为企业发展、参与市场经济竞争的迫切需要。企业引入先进的信息处理技术,增加信息共享程度,不仅提高了工作效率、降低成本,而且也提高企业管理的科学性和自动化程度。信息已成为企业生存与发展的基础,在原有系统的基础上,计算机中心于2003年开始加大信息管理系统的开发,已到年底,开发项目也基本上完成了; 为了总结03年所有开发项目的整个开发及管理过程,我们选取2个比较大的软件项目来分析,项目为:出口技术支持网站管理系统、模具管理系统;在这两个具有代表性的项目中,我们清晰的看到了我们在项目开发过程中的成果及所存在的不足和应该改进的地方,总的说来,设计开发的功能基本上达到了用户需求的75%,用户也能够开始使用我们开发的系统来达到其管理目的。如出口技术网站为国外的客户提供了方便快捷的了解到我们公司的空调产品及技术信息、空调配件信息等等。模具管理系统最大程度的实现了模具信息的共享,各使用部门可以方便的查询模具的位置、进度、状态、申请单、试模、验收、合格、模具的调拨、报废等等信息;查询模具的相关信息信息由原来的1-2天缩短为10分钟之内。产品型号、零件图号统一维护,规范管理,出错比例大大下降。而且在更改零件图号的情况下,基础数据更改,其它相关文件的同一数据会随之更改,减少系统维护量提高了生产部编制模具生产任务单的工作效率,缩短了模具制造任务传递时间,查询新的开模单更方便快速,由原来的至少半天缩短为10分钟之内汇总改模单情况由原来的多人每日手工填写改进为阶段一次汇总,时间仅须20分种左右,大大提高了效率,模具台账能显示所有的模具汇总及分配情况; 虽然相关项目基本上达到了预期的目的,但是,反思在整个项目的需求提出、项目评估、需求分析、项目计划、总体设计、详细设计、测试计划、实施的各个环节,我们都有工作不足之处,特别是某些关键控制点上面,我们有一些失误,当然,原因是多方面的,有果必有其因。下面我们从关键控制点上面来分析我们在项目开发过程中存在的问题、原因分析及改进措施:

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;

相关主题