当前位置:文档之家› 怎样写testbench(内有一个实例分析)

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

怎样写testbench(内有一个实例分析)
怎样写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在进行功能仿真时能正确进行,而在进行布局布线后仿真时就不能运行。有两点要注意的地方:(1)、在做映射后仿真或布局布线后仿真时,都已经经过了综合工具的综合,源程序中的类属命令(Generic)、生成语句(Generate)等都已经进行展开。例如,如果用Generic定义了一个参数width,综合工具进行综合时已经按照一个确定的width值进行了综合。它生成的电路已经具有一个确定的结构,不能再随意调整。所以在映射后仿真和布局布线后仿真的testbench中,往往不能出现Generic语句。(2)映射后仿真和布局布线后仿真都要用到SDF文件,并且要将SDF文件关联到设计中的实例。所以在映射后仿真和布局布线后仿真的testbench中,第一,要将你的设计声明成一个元件。第二,实例化你设计的元件并且实例名要取为UUT(默认的,当然也可以改)。

关于断言语句

在仿真中为了能得到更多信息,经常要用到断言语句(assert)。其语法如下:Assert<条件>

Report<消息>

Severity<出错级别>;

出错级别共有5种:

l Note

l Warning

l Error

l Failure

l Fatal

在VHDL模型的模拟过程中,一旦断言语句的条件为假,则发送消息并将出错级别发送给模拟器。通常可以设置一个中止模拟器运行的出错级别,一般默认的中止运行的出错级别为Failure。

我们来看一个例子:

assert false

report "********* " & IMAGE(DWIDTH) & "BIT DIVIDER SEQUENCE FINISHED

AT " & IMAGE(now) & " !" & " *********"

severity note;

断言的条件不是一个条件表达式,而直接是false。这说明只要程序执行到这里断言就一定会成立,送出消息。出错级别为note,在模拟器的输出窗口将会显示:

and (s_ovi = '0')

and (s_qutnt = conv_std_logic_vector(v_quot,DWIDTH))

and (s_rmndr = conv_std_logic_vector(v_remd,DWIDTH))

report "ERROR in division!"

severity failure;

断言的条件有4个并且是与的关系,只要其中一个条件不成立则整个表达式为假,断言成立。如果断言成立将输出“ERROR in division!“这个消息。并且通知模拟器出错级别为failure,这一般会停止模拟。这个断言实际是在对结果进行验证。

二、实际testbench分析

下面将详细分析一个实际的testbench,它是用来测试8051的ALU单元的除法功能的。8位的除法器,被除数和除数的组合共有256×256=65536种。我们采用的方法是穷举所有的输入组合,这样的代码覆盖率可以达到100%。它的验证必须通过程序自动完成,否则通过人工方法工作量太大。

把要测试的程序当作一个元件,例如想象成一个74系列数字电路。Testbench的作用是在被测试电路的输入端加上激励,然后比较被测试电路的输出和计算出来的期望值是否一致。对我们这个例子来说,在要仿真的ALU输入端产生65536种输入组合,然后将ALU产生的对应输出值和testbench算出的期望值相比较,如果有错误产生则停止模拟并输出信息。ALU的除法单元的输入有4个,分别是被除数、除数、进位、溢出位;输出也有4个,分别是商、余数、新的进位、新的溢出位。

1、testbench的输出s_dvdnd(被除数)、s_dvsor(除数)、s_cyo(进位)、s_ovo(溢

出位)连接到ALU的输入acc_i(被除数)、ram_data_i(除数)、cy_i(进位)、ov_i (溢出位);

2、testbench的输入s_qutnt(商)、s_rmndr(余数)、s_cyi(进位)、s_ovi(溢出位)

连接到ALU的输出result_a_o(商)、 result_b_o(余数)、new_cy_o(进位)、new_ov_o (溢出位)。

3、总之,testbench驱动被测试单元,同时对被测试单元的输出进行验证。

4、assert (s_cyi((DWIDTH-1)/4) = '0')

and (s_ovi = '0')

and (s_qutnt = conv_std_logic_vector(v_quot,DWIDTH))

and (s_rmndr = conv_std_logic_vector(v_remd,DWIDTH))

report "ERROR in division!"

severity failure;

根据51指令系统规定,除法运算的cy位固定为0,如果除数为0则ov置1,否则置0。程序中

s_qutnt = conv_std_logic_vector(v_quot,DWIDTH)

s_rmndr = conv_std_logic_vector(v_remd,DWIDTH)

用来对运算结果进行比较。conv_std_logic_vector()是类型转换函数。

――首先是对库的引用

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.std_logic_arith.all;

library work;

use work.mc8051_p.all;

library STD;

use STD.textio.all;

――定义结构体,testbench程序的结构体是空的。因为testbench是用来仿真的,不存在--对外的接口,所以entity是空的。但是必须要有,这是语法的要求。

entity TBX_mc8051_alu is

end TBX_mc8051_alu;

------------------------------------------------------------------------------- architecture TBX_ARCH_DIV of TBX_mc8051_alu is

――定义元件,映射后仿真和布局布线后仿真要使用SDF文件,必须指定实例名。要实例--化元件首先必须定义元件。

component mc8051_alu

port (

new_ov_o : out STD_LOGIC; ――新的ov位,输出

ov_i : in STD_LOGIC := 'X'; ――ov位,输入

new_cy_o : out STD_LOGIC_VECTOR ( 1 downto 0 ); ――新的cy位,输出

acc_i : in STD_LOGIC_VECTOR ( 7 downto 0 ); ――acc,输入

rom_data_i : in STD_LOGIC_VECTOR ( 7 downto 0 ); ――rom_data,输入

cmd_i : in STD_LOGIC_VECTOR ( 5 downto 0 ); ――命令,输入

ram_data_i : in STD_LOGIC_VECTOR ( 7 downto 0 ); ――ram_data,输入

cy_i : in STD_LOGIC_VECTOR ( 1 downto 0 ); ――cy,输入

result_b_o : out STD_LOGIC_VECTOR ( 7 downto 0 ); ――结果b,输出

result_a_o : out STD_LOGIC_VECTOR ( 7 downto 0 ) -―结果a,输出);

end component;

――定义函数

----------------------------------------------------------------------------- --

-- IMAGE - Convert a special data type to string -- --

This function uses the STD.TEXTIO.WRITE procedure to convert different -- -- VHDL data types to a string to be able to output the information via -- -- a report statement to the simulator. -- -- (VHDL'93 provides a dedicated predefinded attribute 'IMAGE) -- ----------------------------------------------------------------------------- ――定义了一个函数IMAGE,之所以有两个定义,是因为对IMAGE进行了重载,一个是把

――time变量转换成string,另一个是把integer变量转换成string

function IMAGE (constant tme : time) return string is

begin

v_tme(v_line.all'range) := v_line.all;

deallocate(v_line);

return v_tme;

end IMAGE;

function IMAGE (constant nmbr : integer) return string is

variable v_line : line;

variable v_nmbr : string(1 to 11) := (others => ' ');

begin

write(v_line, nmbr);

v_nmbr(v_line.all'range) := v_line.all;

deallocate(v_line);

return v_nmbr;

end IMAGE;

――定义过程,它产生所有的测试输入数据并将产生结果和期望值进行比较,如果有误――产生,模拟将停止并输出一个错误信息。注意到testbench要产生被测试单元的输入――信号,因此testbench的输出接到被测试单元的输入,被测试单元的输出接到

――testbench的输入。

procedure PROC_DIV_ACC_RAM (

constant DWIDTH : in positive;

constant PROP_DELAY : in time;

signal s_cyi : in std_logic_vector;

signal s_ovi : in std_logic;

signal s_qutnt : in std_logic_vector;

signal s_rmndr : in std_logic_vector;

signal s_cyo : out std_logic_vector;

signal s_ovo : out std_logic;

signal s_dvdnd : out std_logic_vector;

signal s_dvsor : out std_logic_vector;

signal s_dvdr_end : out boolean) is

variable v_quot : integer;

variable v_remd : integer;

variable v_flags : std_logic_vector((DWIDTH-1)/4+1 downto 0);

begin

s_dvdr_end <= false;

for j in 0 to 2**DWIDTH-1 loop

s_dvdnd <= conv_std_logic_vector(j,DWIDTH); ――产生被除数

for i in 0 to 2**DWIDTH-1 loop

s_dvsor <= conv_std_logic_vector(i,DWIDTH); ――产生除数

for f in 0 to 2**(((DWIDTH-1)/4)+2)-1 loop ――产生cy和ov

v_flags := conv_std_logic_vector(f,((DWIDTH-1)/4)+2);

s_cyo <= v_flags(((DWIDTH-1)/4) downto 0); ――s_cyo和s_ovo输出到

s_ovo <= v_flags(v_flags'HIGH); ――mc8051_alu的cy_i和ov_i

wait for PROP_DELAY; ――等待100ns

if i /= 0 then

v_quot := j/i; ――产生期待的商

v_remd := j rem i; ――产生期待的余数

assert (s_cyi((DWIDTH-1)/4) = '0') ――对结果进行比较

and (s_ovi = '0')

and (s_qutnt = conv_std_logic_vector(v_quot,DWIDTH))

and (s_rmndr = conv_std_logic_vector(v_remd,DWIDTH))

report "ERROR in division!"

severity failure;

else ――否则除数为0

assert (s_cyi((DWIDTH-1)/4) = '0')

and (s_ovi = '1')

report "ERROR in division by zero - flags not correct!"

severity failure;

end if;

end loop; -- f

end loop; -- i

end loop; -- j

assert false ――程序执行到这里表示没有问题产生report "********* " & IMAGE(DWIDTH) & "BIT DIVIDER SEQUENCE FINISHED AT "

& IMAGE(now) & " !" & " *********"

severity note;

s_dvdr_end <= true;

wait;

end PROC_DIV_ACC_RAM;

----------------------------------------------------------------------------- ――定义常数和信号

constant PROP_DELAY : time := 100 ns;

signal rom_data_DIV_ACC_RAM : std_logic_vector(7 downto 0);

signal ram_data_DIV_ACC_RAM : std_logic_vector(7 downto 0);

signal acc_DIV_ACC_RAM : std_logic_vector(7 downto 0);

signal hlp_DIV_ACC_RAM : std_logic_vector(7 downto 0);

signal cmd_DIV_ACC_RAM : std_logic_vector(5 downto 0);

signal cy_DIV_ACC_RAM : std_logic_vector(1 downto 0);

signal ov_DIV_ACC_RAM : std_logic;

signal new_cy_DIV_ACC_RAM : std_logic_vector(1 downto 0);

signal new_ov_DIV_ACC_RAM : std_logic;

signal result_a_DIV_ACC_RAM : std_logic_vector(7 downto 0);

signal result_b_DIV_ACC_RAM : std_logic_vector(7 downto 0);

signal end_DIV_ACC_RAM : boolean;

-----------------------------------------------------------------------------

begin

----------------------------------------------------------------------------- -- Test the DIV_ACC_RAM command -- ----------------------------------------------------------------------------- rom_data_DIV_ACC_RAM <= conv_std_logic_vector(0,8);

cmd_DIV_ACC_RAM <= conv_std_logic_vector(43,6); ――43表示除法命令

UUT : mc8051_alu

port map (

rom_data_i => rom_data_DIV_ACC_RAM(7 downto 0),

ram_data_i => ram_data_DIV_ACC_RAM(7 downto 0),

acc_i => acc_DIV_ACC_RAM(7 downto 0),

cmd_i => cmd_DIV_ACC_RAM,

cy_i => cy_DIV_ACC_RAM(1 downto 0),

ov_i => ov_DIV_ACC_RAM,

new_cy_o => new_cy_DIV_ACC_RAM(1 downto 0),

new_ov_o => new_ov_DIV_ACC_RAM,

result_a_o => result_a_DIV_ACC_RAM(7 downto 0),

result_b_o => result_b_DIV_ACC_RAM(7 downto 0));

――mc8051_alu的被除数、除数、cyi、ovi由PROC_DIV_ACC_RAM产生

――注意到PROC_DIV_ACC_RAM的商(s_qutnt)、余数(s_rmndr)的Port方向是in,连接mc8051_alu的输出result_a_DIV_ACC_RAM和result_b_DIV_ACC_RAM

PROC_DIV_ACC_RAM (DWIDTH => 8, ――调用过程

PROP_DELAY => PROP_DELAY,

s_cyi => new_cy_DIV_ACC_RAM(1 downto 0),

s_ovi => new_ov_DIV_ACC_RAM,

s_qutnt => result_a_DIV_ACC_RAM(7 downto 0), ――商

s_rmndr => result_b_DIV_ACC_RAM(7 downto 0), ――余数

s_cyo => cy_DIV_ACC_RAM(1 downto 0),

s_ovo => ov_DIV_ACC_RAM,

s_dvdnd => acc_DIV_ACC_RAM(7 downto 0), ――被除数

s_dvsor => ram_data_DIV_ACC_RAM(7 downto 0), ――除数

s_dvdr_end => end_DIV_ACC_RAM);

----------------------------------------------------------------------------- end TBX_ARCH_DIV;

――配置,表示TBX_mc8051_alu这个entity使用TBX_ARCH_DIV这个architecture configuration TBX_CFG_mc8051_alu_TBX_ARCH_DIV of TBX_mc8051_alu is

for TBX_ARCH_DIV

end for;

end TBX_CFG_mc8051_alu_TBX_ARCH_DIV;

编写高效率的testbench

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

怎样写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/1b18877964.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.经验与教训

项目开发总结报告

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

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;

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

XXXX中心项目 复盘会议总结报告 XX年X月X 日公司总经理在会议室组织召开了关于XX中心项目复盘会议,会议就本项目组织实施,过程管理,项目成果展开了深入分析及讨论。现就本次会议内容个人总结如下: 一、目标回顾 二、原 XX中心项目 因 析 1 程 项 目 作 为 建 筑 施 工 企业最基本的生产单元,项目管理的效果直接决定了施工企业的收益,而项目团队建设运行 的好坏往往又是一个项目成败的关键。本项目上,公司依照传统项目管理思维惯性,在没有 审核项目经理能力的情况下,过于倚重于项目经理个人能力,忽视了项目团队建设、项目施 工前期准备的重要性,造成项目从开工开始就发生班组因单价过低停工,部分施工质量严重 不合格,班组在施工过程中不听从指挥并殴打项目部管理人员等一系列恶劣事件。所以探寻 系统、规范、高效的项目团队建设与管理办法才能实现项目的有效管理。 (1)、确定项目经理及项目团队重要成员 首先要确定项目团队的领导人即项目经理。作为项目团队的领导人,公司对项目经理的 选用对于团队来说至关重要。选用的项目经理不仅要有领导者的才能、沟通者的技巧、推动 者的激情,还应当对承接的项目所涉及的专业技术有全面的熟悉与了解;而且应具备一定的

财务知识,熟悉工程造价管理、合同管理、质量管理、进度控制、安全环境管理、商务活动管理、人力资源管理、以及公司针对项目的各项管理规定。 确定项目经理后,由公司分管领导、各部门主管、项目经理参与,共同拟定项目团队重要成员(技术负责人、综合工长、商务、资料)。建议项目团队重要成员采用竞聘答辩的形式来确定。如果答辩通过,项目团队重要成员确定。公司颁发任命书。如果答辩没通过,则要重新组织项目团队重要成员进行答辩,直至通过。具体见流程图: (2)、项目团队的其他成员确定 项目重要成员确定以后,根据项目的规模与特点,按照公司对项目组织架构的要求完成项目组织架构的设计,并按此进行成员组织。 成员选择要尽可能要完善项目团队的三类人员,即具有技术专长的人员、具有问题解决和决策技能的人员、具有善于解决冲突、协调的人际关系的人员。人员选择程序如下: 1.进行项目工作分析。因为公司现阶段项目都是基本相同的,因此公司各部门有必要协助工程部建立各类项目工作结构分解和相应的工作说明。 2.在工作分析的基础上,了解和定义完成项目各项工作都需要何种人员,这些人员都需要具备哪些技能、何时需要这些人员。 3.行政部必须加快建立完善公司人员信息数据库,对现有公司任职人员信息进行登录。协助配合公司其他部门完善部门考核体系,将个人考核评价与个人信息相匹配,方便公司筛选。 项目团队成员组建往往由于公司人力资源问题而难以达到团队的理想组合,这就需要项目团队在组建期间或组建初期进行很好的项目团队培训。项目部成员组建完善后,公司分管领导、各部门主管、项目经理应组织项目成员就项目进行前期策划讨论和相关准备工作。具体工作内容如下: 1. 熟悉、审查施工图纸和有关的设计资料。根据建设单位和设计单位提供的施工图设计、建筑总平面、土方竖向设计和城市规划等资料文件,调查、搜集的原始资料和设计、施工验收规范和有关技术规定来审查图纸。确保能够按照设计图纸顺利地进行施工,能建设出合格的建筑物。通过审查发现设计图纸中存在的问题和错误,使施工开始之前改正,为建筑工程的施工提供一份准确、齐全的设计图纸。 2.做好原始资料的分析:调查当地的自然条件,调查分析的主要内容有地区水准点和绝对标高等情况,地质构造、土壤性质和类别、地基土的承载力、地震级别和裂度等情况,水质、水位等情况。地下水位的高低变化情况,含水层的厚度、流向、流量和水质等情况,气温、雨、台风和雷电等情况,雨季期限等情况。

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

项目总结报告范文

项目总结报告范文(一) 时间过得真快,转眼间,在山大实习生活就结束了 四周的时间能够和山大的同学一起工作、学习、生活我感到非常的荣幸,同时也感觉到很大的压力,作为电子商务专业的学生从事软件开发感觉还是有一定的困难,特别是我们还是和山大大三的学生一起,在初来时自己就有一些不自信,但随着项目的进展,我慢慢的找到了自己的位置,找到自己的目标,虽然自己与好的同学还有差距,这也给了我很大压力,但是我相信没有压力就没有动力,所以整个实训过程中我都在不断地努力。 实训期间让我学到很多东西,不仅在理论上让我对it领域有了全新的认识,在实践能力上也得到了很大的提高,真正的学到了学以致用,更学到很多做人的道理,对我来说受益匪浅。特别是利用周六上午的时间山大为我们安排的讲座让我们了解it领域一些新的发展动态以及一些领先的技术,让我意识到自己知识的缺少,这激励我在以后的学习、工作、生活中要不断了解信息技术发展动态以及信息发展中出现的新的技术。 除此之外,我还学到了如何与人相处,如何和人跟好的交流,我们组成一个团队大家一起开发一个项目,大家的交流沟通显得尤为重要,如何将自己的想法清楚明白的告诉队友,如何提出自己想法的同时又不伤害其他的队友的面子,这些在我的实训生活中都有一些体会。可是说,第一次亲身体会理论与实际相结合,让我大开眼界。也是对以前学习的一个初审吧,相信这次实训多我以后的学习、工作也将会有很很大的影响,在短短的二十几天里这些宝贵的经验将会成为我以后工作的基石。作为大二的学生,经过两年的在校学习,对程序设计有了一些基本的理性的认识和理解。在校期间一直忙于理论的学习,没有机会也没有经验来参与我们项目的开发,所以在实习之前软件按开发对我来说是非常抽象的,一个完整的项目要怎么来分工以及完成该项目所需要的基本步骤也不明确,经过这次实训让我明白一个完整项目的完成必须团队分工合作,并在每个阶段进行必要的总结和检查。在我们项目的开发过程中我们项目的步骤:详细设计、详细设计review、编码、编码review、单体测试。在项目开发过程中我也深刻的体会到详细设计对一个项目开发有明确的指引作用,它可以使开发人员对这个项目所要实现的功能在总体上有具体的认识,并能减少在开发过程中出现不必要的脱节。经过二十多天的obbligato信息安全管理的java开发,是我对java软件开发平台有了更深一步的了解,也对nec公司的obbligato平台有了一定的了解。 这次实训是对我们两年学习的一个检验,虽然项目中很多知识我们在日常的学习中都没有遇到,这同时提醒我:要想成为一个合格的程序员就有具备一种自学能力,在工作中会遇到很多从未接触过的问题,当有了问题时要去解决,在你不断努力,寻找答案的过程中,自己的能力也在潜移默化的提升。有时遇到问题时可能有很多想法但却不知道那个正确,这就让我们不断地去探索,不断地尝试。这次实训也让我深刻的了解到,不管在工作中还是在生活中要和老师、同学保持良好的关系是很重要的。做事首先要先做人,要明白做人的道理,如何与人相处是现代社会的做认得一个最基本的问题,对已自己这样一个即将步入社会的人来说,需要学习的东西很多。从一起做项目的同学身上我看到了谦虚谨慎、细心努力的态度,在以后我的生活中我还会留意身边同学的优点,从他们身上找寻我所缺少的品质,不断学习。从老师那里我看到了企业人的生活面貌,没有事情可以不劳而获,今天老师们能够领导我们是他们之前努力的结果,虽然老师没有和我们讲很多公司里的事情,可是他们的言行中所表现出来的都是比我们要严谨的多的对工作的态度。 在此次的实训中我感觉到我们最大的不足就是动手的能力太差,在项目组中山大的同学也给我提出一些建议,让我有机会自己多动手,不是我们缺乏知识,而是我们没有运用知识的能力,在二十多天的项目开发过程中,我自己也认识到虽然我们的理论知识没有山大同学那么全面,但是如果在学校认真学习了,我们的理论知识并不比他们差,所以以后的日子,如果

相关主题
相关文档 最新文档