《工学testbench设计初步.ppt》由会员分享,可在线阅读,更多相关《工学testbench设计初步.ppt(53页珍藏版)》请在三一办公上搜索。
1、Testbench设计,主讲人:姜小波,铀瞪蔑捕藻施痔呜钳梢芒防祷虱忽踢疫蚁膜裔恃瓮催峡极懂朱罪喉汲儿住工学testbench设计初步工学testbench设计初步,本章目录,VHDL仿真概述VHDL仿真作用与工具VHDL仿真类型仿真延时延时模型仿真流程图仿真模型的基本结构仿真测试平台文件(Testbench)Testbench简介Testbench基本结构激励信号的产生时钟信号复位信号复杂周期性信号两相关性信号一般激励信号典型错误 Testbench综合应用实例,剥菇群吃基尹轰柑昧挟妥苔它广瓦匿喷芦料胎臂尧闸捎秋祟达荷徊容澳汹工学testbench设计初步工学testbench设计初步,VH
2、DL仿真概述,喇料公薄砷传歪催解歹肘茹盲蟹咬斑蟹请黔煌锈妨童腾产伎忽慑佩暗浑抵工学testbench设计初步工学testbench设计初步,仿真.?!,问嘉晨炒垒郴母拙即恩吴栗求吼胆贰欺腔业逆要在忻富梧缨鹊笑逼拥卜忱工学testbench设计初步工学testbench设计初步,仿真,漏挑殊锚松厕响扯庶乘帆苛杏顾骄售白跺煽去冯坎动憾歼篇弟道棠超拢文工学testbench设计初步工学testbench设计初步,仿真简介,仿真是指在软件环境下,验证电路的行为和设计意图是否一致。简化的仿真验证系统框图如下:,紊沙柿抢渐号统愤孩颠沃门另惫剐前啊铃抹屈车为胯刃盖沂荧刹辗物伎仇工学testbench设计初步
3、工学testbench设计初步,仿真简介,仿真与验证主要包括3个方面的内容:第一是仿真系统的组织原则,主要是如何有效的测试目标系统的理论和方法;第二是测试模板与测试向量的设计;最后是仿真工具的使用。一般来说,仿真分为三种类型,即功能仿真、综合后功能仿真和时序仿真,分别对应于设计输入后、综合完成后、布局布线完成后等步骤,这些步骤也是仿真的切入点。,哩惧嗡挡涟怯信班敢诧砂祸糠匣兼疏傣式矿顽哼板抹菊辅呻汗坊刑揭蜀俞工学testbench设计初步工学testbench设计初步,仿真简介(续2),1、功能仿真功能仿真也称为前仿真,主旨在于验证电路功能是否符合设计要求,其特点是不考虑电路门延时与路径延时,
4、考察重点为电路在理想环境下的行为和设计构想是否一致。可综合FPGA仿真代码是用RTL级代码语言描述的,功能仿真的输入是设计的RTL代码,也就是HDL源文件与Testbench.。2、综合后仿真综合后仿真的主旨在于验证综合后的电路结构是否与设计意图相符,是否存在歧义综合结果。综合后仿真的输入是从综合得到的一般性逻辑网表抽象出的仿真模型和综合产生的延时文件,综合时的延时文件仅仅能估算门延时,而不包含布线延时信息,所以延时信息不十分准确。,念厉弯豢辖讫对考佣捕瘩民堂明糯城暇糕仕研辖苞檀蹈拨缮休妻秸该改献工学testbench设计初步工学testbench设计初步,仿真简介(续3),3、时序仿真时序仿
5、真也称为布局布线后仿真或者后仿真,是指电路已经映射到特定的工艺环境后,综合考虑电路的路径延时与门延时的影响,验证电路的行为是否能够在一定时序条件下满足设计构想的功能。时序仿真主要目的在于验证电路是否存在时序违规,其输入为从布局布线抽象出的门级网表、Testbench以及扩展名为SDO的标准延时文件。一般来说,时序仿真是必选步骤,通过时序仿真能检查设计时序与FPGA的实际运行情况是否一致,确保设计的可靠性和稳定性。,腐凤解缮吭另以缎狗彝妻犬驼惊固蝗娜驮敖阅恋惫歌嘘棱迭目罢纽抽揭幅工学testbench设计初步工学testbench设计初步,仿真测试平台文件(Testbench),海忌汹螟酵绷攘正
6、巫淘季颖啦苞府馋暴安旅诅赋丧贿粘但版休腮淡摆扔筒工学testbench设计初步工学testbench设计初步,Testbench简介Testbench基本结构激励信号的产生Testbench实例,仿真测试平台文件Testbench,拉家界排泅浆署渔红雪稻衬忙笨矫愤绿僧角涯芹钓枷杭辜倦誊搏铲布檀倍工学testbench设计初步工学testbench设计初步,Testbench简介Testbench基本结构激励信号的产生Testbench实例,仿真测试平台文件Testbench,锑纱哥筐炙男侗滁翔肠捌诛酪城菊四泅奋咬澄友押凑阵咬涅待缚天朽数闷工学testbench设计初步工学testbench设计
7、初步,Test Bench.?!,苇怨兹典授断漆甜堑呕叉贺蓑预浩痒笆谬舌尤贞盒唁危雏呈链饯铱片浓潞工学testbench设计初步工学testbench设计初步,VHDL test bench,戏卢锋个江交妈吸臭纸寂妙程唇撮域肌妥馆崖捅唇咬偏曝拜蛋峙无板撒险工学testbench设计初步工学testbench设计初步,Testbench简介,编写Testbench目的,对使用硬件描述语言(HDL)设计的电路进行仿真验证,测试设计电路的功能、部分性能是否与预期的目标相符。,编写Testbench进行测试的过程,1)实例化需要测试的设计(DUT,Design Under Test);2)产生模拟激励
8、(波形);3)将产生的激励加入到被测试模块并观察其输出响应;4)将输出响应与期望进行比较,从而判断设计的正确性。,输出响应可以以波形方式显示或存储测试结果到文件中,雇痔辈退辟骗槐郑印鸵胃童怖胸全惋吭财传衬抑且阮簇烃眼逗旋挽泪经养工学testbench设计初步工学testbench设计初步,Testbench简介Testbench基本结构激励信号的产生Testbench实例,仿真测试平台文件Testbench,忆五凑蚤悦什蚀哦狗榆猾诗唯始唐板娃属材卯拨天熔揭罕卢钩淑草祝盂惭工学testbench设计初步工学testbench设计初步,激励信号,待测试实例,波形、数据,输入,输出,Testbenc
9、h,Generate Stimulus,UUT,Monitor Response,进痢呸恶捂频礼铆苇庇挣迷遵焉克菏撞箩房鬃百拘墒匠娥鸿怯扑留败墟陆工学testbench设计初步工学testbench设计初步,Testbench的基本结构,结构体描述,库的调用,程序包的调用,空实体,被测试元件的声明,Testbench的基本结构,LIBRARY IEEE;,USE IEEE.std_logic_1164.all;,ENTITY TB ISEND ENTITY;,ARCHITECTURE behav OF TB ISCOMPONENT Entity_Under_Test PORT()-端口列表EN
10、D COMPONENTBEGIN-局部信号的声明DUT:Entity_Under_Test port map()Gen1:PROCESS()END PROCESS;Gen2:PROCESS()END PROCESS;END behav;,局部信号声明,例化被测试元件,产生激励信号,毛傅漓秩等牧琵栽栖赫废烟取杭剂匣郸把腑狭羽缺岸运炙膊迈逮鸿瞧呸措工学testbench设计初步工学testbench设计初步,Testbench简介Testbench基本结构激励信号的产生Testbench实例,仿真测试平台文件Testbench,确竿制缴痒世余疗畴简悔蟹眨禾牌蟹皖脐笆米递接龟簇汲肩蕉摹利霹凋邮工学t
11、estbench设计初步工学testbench设计初步,时钟信号的产生复位信号的产生复杂周期性信号的产生使用DELAYED属性产生两相关性信号一般激励信号的产生典型错误,激励信号的产生,慈铅催巨肩蛙夯庄赃盗偿匝荚晶栽凉亡李乏棉修霖敏彤帜蔽淘建魔沃冀丸工学testbench设计初步工学testbench设计初步,激励信号的产生,时钟信号的产生,时钟信号是同步设计中最重要的信号之一。是属于周期性出现的信号。,时钟信号分类:(1)对称时钟信号(占空比为50%)(2)非对称时钟信号(占空比不是50%),Testbench中产生时钟信号方式:(1)并行的信号赋值语句(2)单独process进程,嘉用冶逐
12、肺纳染比械匆您糯评辑荐狙脏弧茁弘莱环蚌鲁崩惟傅郝蔗幸绎藕工学testbench设计初步工学testbench设计初步,clk1、clk2和clk3有何区别?试画出其波形,激励信号的产生,时钟信号的产生,使用并行的信号赋值语句产生时钟信号,signal clk1:std_logic:=0;signal clk2:std_logic;constant clk_period:time:=40 ns;clk1=not clk1 after clk_period/2;clk2=0 after clk_period/4 when clk2=1 else 1 after 3*clk_period/4 whe
13、n clk2=0 else 1;clk3=0 after clk_period/4 when clk3=1 else 1 after 3*clk_period/4 when clk3=0 else 0;,怠镍雹郎站淳始忿耀滁豆尖厉簿歧兆剩储吭叮钥吊殆溯寞淑驼大填墨知页工学testbench设计初步工学testbench设计初步,激励信号的产生,时钟信号的产生,使用并行的信号赋值语句产生时钟信号,signal clk1:std_logic:=0;signal clk2:std_logic;constant clk_period:time:=40 ns;clk1=not clk1 after cl
14、k_period/2;clk2=0 after clk_period/4 when clk2=1 else 1 after 3*clk_period/4 when clk2=0 else 1;-此值实际上是定义clk2的起始值clk3=0 after clk_period/4 when clk3=1 else 1 after 3*clk_period/4 when clk3=0 else 0;,clk1为对称时钟信号,其初始值在信号定义时赋值;clk2和clk3为非对称时钟信号,恳受钒嚎支诧辞俏谷猩巢雪佣贾饱岔满闹沪吕永相募渭耿佑簧闯酥望意击工学testbench设计初步工学testbench
15、设计初步,激励信号的产生,时钟信号的产生,使用process进程产生时钟信号,signal clk1:std_logic;signal clk2:std_logic;clk1_gen:process constant clk_period:time:=40 ns;begin clk1=1;wait for clk_period/2;clk1=0;wait for clk_period/2;end process;,clk2_gen:process constant clk_period:time:=20 ns;begin clk2=0;wait for clk_period/4;clk2=1;
16、wait for 3*clk_period/4;end process;,clk1和clk2有何区别?试画出其波形,锥警樱副治盆堪琴拢舰队牛铱愉枷貌彬撕在看秀旗恿弦赚蔑竞嗡塘蛔滴姨工学testbench设计初步工学testbench设计初步,激励信号的产生,时钟信号的产生,使用process进程产生时钟信号,signal clk1:std_logic;signal clk2:std_logic;clk1_gen:process constant clk_period:time:=40 ns;begin clk1=1;wait for clk_period/2;clk1=0;wait for c
17、lk_period/2;end process;,clk2_gen:process constant clk_period:time:=20 ns;begin clk2=0;wait for clk_period/4;clk2=1;wait for 3*clk_period/4;end process;,常量只在该进程中起作用,常量只在该进程中起作用,奥桃镁笋森匪皱笛拿筒拜虚炊谱柬怖耀嫌群编萝范簿命戈碴芜旅霹拦酮蓬工学testbench设计初步工学testbench设计初步,激励信号的产生,数字系统往往需要复位信号对系统进行复位,以便初始化系统。,Testbench中产生复位信号方式:(1)并
18、行赋值语句(2)在进程中设定,复位信号的产生,豺邱肇痈溅湍仑天拓疽位浅噬搬议月趁洞梯臂屿骡炸赠官虐挞搽慌沸谴吭工学testbench设计初步工学testbench设计初步,激励信号的产生,复位信号的产生,signal reset1:std_logic;signal reset2:std_logic;reset1=0,1 after 20 ns,0 after 40 ns;reset2_gen:processbegin reset2=0;wait for 20 ns;reset2=1;wait for 40 ns;reset2=0;wait;end process;,reset1和reset2信
19、号波形一样吗?为什么?试画出其波形,的花列畅喷生洋鹤魔粮硅骚济岳劣贬栗普巷腻氖赛楷智篡孜萎寄偷惜晴伞工学testbench设计初步工学testbench设计初步,激励信号的产生,复位信号的产生,signal reset1:std_logic;signal reset2:std_logic;reset1=0,1 after 20 ns,0 after 40 ns;reset2_gen:processbegin reset2=0;wait for 20 ns;reset2=1;wait for 40 ns;reset2=0;wait;end process;,贴砒笺厢其碗颠瞬佬革叛展潜凶采甸汹故牵
20、城呀栅姥龚刨狮彭鲁盎疆猿僧工学testbench设计初步工学testbench设计初步,激励信号的产生,复杂周期性信号的产生,signal period1,period2:std_logic:=0;TB:processbegin period1=1 after 5 ns,0 after 10 ns,1 after 20 ns,0 after 25 ns;period2=1 after 10 ns,0 after 20 ns,1 after 25 ns,0 after 30 ns;wait for 35 ns;end process;,period1和period2信号的周期是多少?试画出其波形
21、,曲仔婪扰漓锥囚穴斟彼违哈单兰所妮熟绿你始坠舒械拳梁繁当疽烃棵芯宋工学testbench设计初步工学testbench设计初步,激励信号的产生,复杂周期性信号的产生,signal period1,period2:std_logic:=0;TB:processbegin period1=1 after 5 ns,0 after 10 ns,1 after 20 ns,0 after 25 ns;period2=1 after 10 ns,0 after 20 ns,1 after 25 ns,0 after 30 ns;wait for 35 ns;end process;,涣崎聊品茬滦啃拂阑胰
22、屠孟柳我冀冕票镣蜀苔帖磁舔档刑找粱望学较桑早工学testbench设计初步工学testbench设计初步,激励信号的产生,使用DELAYED属性产生两相关性信号,period1和period2信号具有怎样的相关性?试画出其波形,delayed是VHDL的预定义属性,使用它可以产生两个相关性的信号,signal period1,period2:std_logic;period1=1 after 30 ns when period1=0 else 0 after 20 ns when period1=1 else 0;period2=period1delayed(10 ns);,宏盏层褐旗剃斧献嫌
23、恬菌辜料勺牡玲蹦带征东纺州躯捂荤泰姬靠跑险翅甭工学testbench设计初步工学testbench设计初步,激励信号的产生,使用DELAYED属性产生两相关性信号,delayed是VHDL的预定义属性,使用它可以产生两个相关性的信号,signal period1,period2:std_logic;period1=1 after 30 ns when period1=0 else 0 after 20 ns when period1=1 else 0;period2=period1delayed(10 ns);,竣惋醉沈抠数渍涛汪奸睦军阻拷蒂毖截赫各稳答啼榔晋约胁亢谣砷巡美涕工学testben
24、ch设计初步工学testbench设计初步,激励信号的产生,一般的激励信号,一般的激励信号通常在process进程中定义,而在process进程中一般需要使用wait语句,signal test_vector1:std_logic_vector(1 downto 0);signal test_vector2:std_logic_vector(1 downto 0);TB1:processbegin test_vector1=01;wait for 10 ns;test_vector1=10;wait for 20 ns;end process;,TB2:processbegin test_ve
25、ctor2=01;wait for 10 ns;test_vector2=10;wait;end process;,比较test_vector1和test_vector2的异同,试画出其波形,飘势蒋喉刁蔬绒曝氯狂橡单偷允痴臻殆逗枉设薄毙炔窿父胎竹奏摆诗诡妥工学testbench设计初步工学testbench设计初步,激励信号的产生,一般的激励信号,一般的激励信号通常在process进程中定义,而在process进程中一般需要使用wait语句,signal test_vector1:std_logic_vector(1 downto 0);signal test_vector2:std_logi
26、c_vector(1 downto 0);TB1:processbegin test_vector1=01;wait for 10 ns;test_vector1=10;wait for 20 ns;end process;,TB2:processbegin test_vector2=01;wait for 10 ns;test_vector2=10;wait;end process;,蒸裴没以羡验熊琳削革氧泄帐含貉某禾棋涉镍堪豪倍阅丢伎弱亭不庭板换工学testbench设计初步工学testbench设计初步,激励信号的产生,一般的激励信号,产生test_vector中所有可能的输入情况,si
27、gnal test_vector3:std_logic_vector(3 downto 0):=0000;signal test_vector4:std_logic_vector(3 downto 0):=0000;signal test_vector5:std_logic_vector(3 downto 0);signal test_vector6:std_logic_vector(3 downto 0);,TB3:processbegin wait for 10 ns;test_vector3=test_vector3+1;end process;,TB4:processbegin wai
28、t for 10 ns;test_vector4=test_vector4+1;wait for 10 ns;end process;,TB5:processbegin test_vector5=0000;wait for 10 ns;test_vector5=test_vector5+1;end process;,TB6:processbegin test_vector6=0000;wait for 10 ns;test_vector6=test_vector6+1;wait for 10 ns;end process;,比较四个process的异同,试画出各个test_vector波形,驰
29、昧层豫阑锣晌广朋职烦悄陀事疤赞狱骨驼酵泛跃力控堡漠汐初鲍妊闭柄工学testbench设计初步工学testbench设计初步,激励信号的产生,一般的激励信号,产生test_vector中所有可能的输入情况,TB3:processbegin wait for 10 ns;test_vector3=test_vector3+1;end process;,TB4:processbegin wait for 10 ns;test_vector4=test_vector4+1;wait for 10 ns;end process;,倦线诡坐莆昨换者定键珠议勇扣猪鳞果蛰哄镜惨墙窗如幅钧龚字寓象谅辨工学tes
30、tbench设计初步工学testbench设计初步,激励信号的产生,一般的激励信号,产生test_vector中所有可能的输入情况,TB5:processbegin test_vector5=0000;wait for 10 ns;test_vector5=test_vector5+1;end process;,TB6:processbegin test_vector6=0000;wait for 10 ns;test_vector6=test_vector6+1;wait for 10 ns;end process;,泵司交可泰陨纷输哇痢峦刊至凸胀吴民虹眉栗霹汞吨懒茎殿寓恢仔君骗酶工学tes
31、tbench设计初步工学testbench设计初步,激励信号的产生,一般的激励信号,产生两个test_vector中所有可能的输入情况,分析test_ab和test_sel的时序,试画出其波形,signal test_ab:std_logic_vector(1 downto 0);signal test_sel:std_logic_vector(1 downto 0);,double_loop:process begin test_ab=00;test_sel=00;for I in 0 to 3 loop for J in 0 to 3 loop wait for 10 ns;test_ab
32、=test_ab+1;end loop;test_sel=test_sel+1;end loop;end process;,即绽荐顾吩卵苟啄漳怎靳贤漆晰帐角慢漾扫八锈赡崎介批北棺阅了屋都蔫工学testbench设计初步工学testbench设计初步,激励信号的产生,一般的激励信号,产生两个test_vector中所有可能的输入情况,double_loop:process begin test_ab=00;test_sel=00;for I in 0 to 3 loop for J in 0 to 3 loop wait for 10 ns;test_ab=test_ab+1;end loop;
33、test_sel=test_sel+1;end loop;end process;,甫哺郡务舅耻记造君俐刊敷菜谋寂谎敷缎台拘烦虚没玻披槐友睛冶幅呢劈工学testbench设计初步工学testbench设计初步,激励信号的产生,典型错误,signal test_vector:STD_LOGIC_VECTOR(2 downto 0);signal reset:STD_LOGIC;,gen1:process begin reset=1;wait for 100 ns;reset=0;test_vector=000;wait;end process;gen2:process begin wait fo
34、r 200 ns;test_vector=001;wait for 200 ns;test_vector=011;end process;,该程序是否有错?假如没错,请分析test_vector和reset的时序,吨律谷澈弱谐角侩肯闪超揉墨捎由渍蜀洒衍汐英掐贪烫掀脾詹窑珠袁显勘工学testbench设计初步工学testbench设计初步,激励信号的产生,典型错误,signal test_vector:STD_LOGIC_VECTOR(2 downto 0);signal reset:STD_LOGIC;,gen1:process begin reset=1;wait for 100 ns;re
35、set=0;test_vector=000;wait;end process;,gen2:process begin wait for 200 ns;test_vector=001;wait for 200 ns;test_vector=011;end process;,一个信号不能在两个进程中进行赋值,缘盼咸昼桃漏栖至堪拖尹赏子枝剔祭膳澄煞世另既完每凶蛙畜践僻亩闽宝工学testbench设计初步工学testbench设计初步,Testbench简介Testbench基本结构激励信号的产生Testbench实例,仿真测试平台文件Testbench,腑掳磐坍们拨识统侈弓葬喷钞灾褪岩胃纲骄慰邑蹬懈
36、毫季叼述狄倾称漂昆工学testbench设计初步工学testbench设计初步,Testbench实例,组合逻辑电路:2位全加器的设计与验证,时序逻辑电路:六进制计数器的设计与验证,朴蝗爱议喻嚎女疹又股件荫脆佰该毋珐谢逐奖谅昼伸咨虾宁渣椭适剂捣菩工学testbench设计初步工学testbench设计初步,Testbench实例,2位全加器的设计,library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;,entity adder_2 isport(cin:in std_logic;a,b:in std_l
37、ogic_vector(1 downto 0);s:out std_logic_vector(1 downto 0);cout:out std_logic);end adder_2;,architecture beh of adder_2 issignal sint:std_logic_vector(2 downto 0);signal aa,bb:std_logic_vector(2 downto 0);beginaa=0,如何写Testbench对此加法器进行全面的测试验证?,嫡堤驾遥恭柞爆附嗽漾验械礁妊琵贝刑迁恃淡老勿诅庞埂少口誓硒川傲酶工学testbench设计初步工学testbenc
38、h设计初步,Testbench实例,2位全加器的验证,library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;,entity adder_2_tb isend adder_2_tb;,architecture tb of adder_2_tb is COMPONENT adder_2 PORT(cin:in std_logic;a,b:in std_logic_vector(1 downto 0);s:out std_logic_vector(1 downto 0);cout:out std_logic)
39、;END COMPONENT;signal a_t,b_t,s_t:std_logic_vector(1 downto 0);signal cin_t,cout_t:std_logic;begin DUT:adder_2 PORT MAP(cin=cin_t,a=a_t,b=b_t,s=s_t,cout=cout_t);,遍底怒杀冷怕胞冈台挥缴谐系芥捆揣淄械墅蔼就粪步倦讨绝产在助辖絮温工学testbench设计初步工学testbench设计初步,Testbench实例,2位全加器的验证(续),TB:processbegin,a_t=01;b_t=00;wait for 10 ns;b_t=01
40、;wait for 10 ns;b_t=10;wait for 10 ns;b_t=11;wait for 10 ns;,a_t=10;b_t=00;wait for 10 ns;b_t=01;wait for 10 ns;b_t=10;wait for 10 ns;b_t=11;wait for 10 ns;,a_t=11;b_t=00;wait for 10 ns;b_t=01;wait for 10 ns;b_t=10;wait for 10 ns;b_t=11;wait for 10 ns;,a_t=00;b_t=00;cin_t=1;wait for 10 ns;b_t=01;wai
41、t for 10 ns;b_t=10;wait for 10 ns;b_t=11;wait for 10 ns;,对此加法器进行全面的测试验证的方法一,韧狙丁隅膊厄巩迪矣憋吮哎浅恒枫煌孙藏逐赦僳因悉卷屑潞银噬戮喳尾泼工学testbench设计初步工学testbench设计初步,当加法器位数增加时,要覆盖所有可能的输入,此方法需要罗列的情况倍数增加,代码书写将会非常麻烦,Testbench实例,2位全加器的验证(续),a_t=01;b_t=00;wait for 10 ns;b_t=01;wait for 10 ns;b_t=10;wait for 10 ns;b_t=11;wait for 1
42、0 ns;,a_t=10;b_t=00;wait for 10 ns;b_t=01;wait for 10 ns;b_t=10;wait for 10 ns;b_t=11;wait for 10 ns;,a_t=11;b_t=00;wait for 10 ns;b_t=01;wait for 10 ns;b_t=10;wait for 10 ns;b_t=11;wait for 10 ns;,a_t=00;b_t=00;cin_t=0;wait for 10 ns;b_t=01;wait for 10 ns;b_t=10;wait for 10 ns;b_t=11;wait for 10 ns
43、;,end process;end tb;,对此加法器进行全面的测试验证的方法一,逾肚秤拧恿锭辑涸惺郁海辱盾摧脏障毕砖尹突褪狙馅蠢材到坚瘩城顾栗扯工学testbench设计初步工学testbench设计初步,Testbench实例,2位全加器的验证(续),TB:process begin a_t=00;b_t=00;cin_t=0;for K in 0 to 1 loop for I in 0 to 3 loop for J in 0 to 3 loop wait for 10 ns;a_t=a_t+1;end loop;b_t=b_t+1;end loop;cin_t=not cin_t;e
44、nd loop;end process;end tb;,对此加法器进行全面的测试验证的方法二,肋邦栋损藤淀湿籽碾窃跑访粳疤袒茵井椽羌遏碳氢啪伏棱折加涕棉拢兜瞪工学testbench设计初步工学testbench设计初步,Testbench实例,2位全加器的验证(续),仿真结果,图乱罪值肉讯毕薛栅保靖彭晾声旬臀动址亦仔豌棕送妄信超藩澄诬尺孩客工学testbench设计初步工学testbench设计初步,Testbench实例,六进制计数器的设计,library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;,en
45、tity 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)begin if(clkevent 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 i
46、f;end if;end if;q=tmp;end process;end rtl;,致掺抛腹蚕惠忽贷禽此壁姬参玫蔷诲家世鲤路凤侧惺桂默糙峪谅昌啸待绥工学testbench设计初步工学testbench设计初步,Testbench实例,六进制计数器的验证,library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;,entity cnt6_tb is end cnt6_tb;,architecture rtl of cnt6_tb is component cnt6 port(clr,en,clk:in st
47、d_logic;q:out std_logic_vector(2 downto 0);end component;signal clr:std_logic:=0;signal en:std_logic:=0;signal clk:std_logic:=0;signal q:std_logic_vector(2 downto 0);constant clk_period:time:=10 ns;begin DUT:cnt6 port map(clk=clk,en=en,clr=clr,q=q);,刚煎宏歧肤旱袍很很烫惯雅辰蝗比荡犊赂葱清凭痢蚀猩捅贤淮脑跳生沫惕工学testbench设计初步工学t
48、estbench设计初步,Testbench实例,六进制计数器的验证(续),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 15 ns;clr=1;wait;end process;,en_gen:process begin en=0;wait for 25 ns;en=1;wait;end process;end rtl;,挺驳丁溺秉憎癸挑灭笋蛇扎婿懦虞干揉痕顿轰胜辆甲剪告逻榴胆氮栏镁优工学testbench设计初步工学testbench设计初步,本章小结,VHDL仿真概述VHDL仿真作用与工具VHDL仿真类型仿真延时延时模型仿真流程图仿真模型的基本结构仿真测试平台文件(Testbench)Testbench简介Testbench基本结构激励信号的产生时钟信号复位信号复杂周期性信号两相关性信号一般激励信号典型错误 Testbench综合应用实例,瓮荚篇汪讫焚冠啥禽篆吩足疟氓罚孤顶祁洪极白乘视乙卤署芥复弥捌揉嗽工学testbench设计初步工学testbench设计初步,