版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、testbenchtestbench设计设计 主讲人:姜小波本章目录本章目录 vhdlvhdl仿真概述仿真概述vhdlvhdl仿真作用与工具仿真作用与工具vhdlvhdl仿真类型仿真类型仿真延时仿真延时延时模型延时模型仿真流程图仿真流程图仿真模型的基本结构仿真模型的基本结构 仿真测试平台文件(仿真测试平台文件(testbenchtestbench)testbenchtestbench简介简介testbenchtestbench基本结构基本结构激励信号的产生激励信号的产生 时钟信号时钟信号 复位信号复位信号 复杂周期性信号复杂周期性信号 两相关性信号两相关性信号 一般激励信号一般激励信号 典型错
2、误典型错误 testbenchtestbench综合应用实例综合应用实例vhdlvhdl仿真概述仿真概述仿真仿真 . ?!仿真仿真仿真简介仿真简介n仿真是指在软件环境下,验证电路的行为和设计意图是否仿真是指在软件环境下,验证电路的行为和设计意图是否一致。一致。 n简化的仿真验证系统框图如下:简化的仿真验证系统框图如下: testvector测试向量dut测试内容testbench测试模板仿 真 系统软件、硬 件 运行比 较 判 断输 出 、 存储结果 仿真简介仿真简介n仿真与验证主要包括仿真与验证主要包括3个方面的内容:个方面的内容: 第一是仿真系统的组织原则,主要是如何有效的测试目标系第一是
3、仿真系统的组织原则,主要是如何有效的测试目标系统的理论和方法;统的理论和方法; 第二是测试模板与测试向量的设计;第二是测试模板与测试向量的设计; 最后是仿真工具的使用。最后是仿真工具的使用。n一般来说,仿真分为三种类型,即功能仿真、综合后功能仿真一般来说,仿真分为三种类型,即功能仿真、综合后功能仿真和时序仿真,分别对应于设计输入后、综合完成后、布局布线和时序仿真,分别对应于设计输入后、综合完成后、布局布线完成后等步骤,这些步骤也是仿真的切入点。完成后等步骤,这些步骤也是仿真的切入点。仿真简介(续仿真简介(续2)1、功能仿真、功能仿真n功能仿真也称为前仿真,主旨在于验证电路功能是否符合设计要求,
4、功能仿真也称为前仿真,主旨在于验证电路功能是否符合设计要求,其特点是不考虑电路门延时与路径延时,考察重点为电路在理想环境其特点是不考虑电路门延时与路径延时,考察重点为电路在理想环境下的行为和设计构想是否一致。下的行为和设计构想是否一致。n可综合可综合fpga仿真代码是用仿真代码是用rtl级代码语言描述的,功能仿真的输入级代码语言描述的,功能仿真的输入是设计的是设计的rtl代码,也就是代码,也就是hdl源文件与源文件与testbench.。 2、综合后仿真、综合后仿真n综合后仿真的主旨在于验证综合后的电路结构是否与设计意图相符,综合后仿真的主旨在于验证综合后的电路结构是否与设计意图相符,是否存在
5、歧义综合结果。是否存在歧义综合结果。n综合后仿真的输入是从综合得到的一般性逻辑网表抽象出的仿真模型综合后仿真的输入是从综合得到的一般性逻辑网表抽象出的仿真模型和综合产生的延时文件,综合时的延时文件仅仅能估算门延时,而不和综合产生的延时文件,综合时的延时文件仅仅能估算门延时,而不包含布线延时信息,所以延时信息不十分准确。包含布线延时信息,所以延时信息不十分准确。 仿真简介(续仿真简介(续3)3、时序仿真、时序仿真n时序仿真也称为布局布线后仿真或者后仿真,是指电路已经映射到特时序仿真也称为布局布线后仿真或者后仿真,是指电路已经映射到特定的工艺环境后,综合考虑电路的路径延时与门延时的影响,验证电定的
6、工艺环境后,综合考虑电路的路径延时与门延时的影响,验证电路的行为是否能够在一定时序条件下满足设计构想的功能。路的行为是否能够在一定时序条件下满足设计构想的功能。n时序仿真主要目的在于验证电路是否存在时序违规,其输入为从布局时序仿真主要目的在于验证电路是否存在时序违规,其输入为从布局布线抽象出的门级网表、布线抽象出的门级网表、testbench以及扩展名为以及扩展名为sdo的标准延时文的标准延时文件。件。n一般来说,时序仿真是必选步骤,通过时序仿真能检查设计时序与一般来说,时序仿真是必选步骤,通过时序仿真能检查设计时序与fpga的实际运行情况是否一致,确保设计的可靠性和稳定性。的实际运行情况是否
7、一致,确保设计的可靠性和稳定性。仿真测试平台文件仿真测试平台文件(testbench)(testbench)testbenchtestbench简介简介testbenchtestbench基本结构基本结构激励信号的产生激励信号的产生testbenchtestbench实例实例仿真测试平台文件仿真测试平台文件testbenchtestbenchtestbenchtestbench简介简介testbenchtestbench基本结构基本结构激励信号的产生激励信号的产生testbenchtestbench实例实例仿真测试平台文件仿真测试平台文件testbenchtestbenchtest bench
8、 . ?!vhdl test benchtestbenchtestbench简介简介编写编写testbenchtestbench目的目的 对使用硬件描述语言(hdl)设计的电路进行仿真验证,测试设计电路的功能、部分性能是否与预期的目标相符。 编写编写testbenchtestbench进行测试的过程进行测试的过程 1)实例化需要测试的设计(dut,design under test); 2)产生模拟激励(波形);3)将产生的激励加入到被测试模块并观察其输出响应;4)将输出响应与期望进行比较,从而判断设计的正确性。u输出响应可以以波形方式显示或存储测试结果到文件中testbenchtestben
9、ch简介简介testbenchtestbench基本结构基本结构激励信号的产生激励信号的产生testbenchtestbench实例实例仿真测试平台文件仿真测试平台文件testbenchtestbench激励激励信号信号待测试待测试实例实例波形、波形、数据数据输入输入输出输出testbenchgenerate stimulusuutmonitor responsetestbenchtestbench的基本结构的基本结构结结构构体体描描述述库的调用库的调用程序包的调用程序包的调用空实体空实体被测试被测试元件元件的的声明声明testbenchtestbench的基本结构的基本结构library i
10、eee;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_1164.all;entity tb entity tb isisend entity;end entity;architecture architecture behavbehav ofof tb tb isiscomponentcomponent entity_under_testentity_under_test portport()() -端口列表端口列表end componentend componentbeginbegin-局部信号的声明局部信号的声明du
11、t:dut: entity_under_testentity_under_test port mapport map()() gen1gen1:process ():process () end process; end process; gen2gen2:process :process ()() end process end process; ;end end behavbehav; ;局部信号声明局部信号声明例化例化被被测试测试元件元件产生激励信号产生激励信号testbenchtestbench简介简介testbenchtestbench基本结构基本结构激励信号的产生激励信号的产生te
12、stbenchtestbench实例实例仿真测试平台文件仿真测试平台文件testbenchtestbench时钟信号的产生时钟信号的产生复位信号的产生复位信号的产生复杂周期性信号的产生复杂周期性信号的产生使用使用delayeddelayed属性产生两相关性信号属性产生两相关性信号一般激励信号的产生一般激励信号的产生典型错误典型错误激励信号的产生激励信号的产生激励信号的产生激励信号的产生时钟信号的产生时钟信号的产生 时钟信号是同步设计中最重要的信号之一。是属于周期性出现的信号。时钟信号分类:(1)对称时钟信号(占空比为50%)(2)非对称时钟信号(占空比不是50% )testbench中产生时钟
13、信号方式:(1)并行的信号赋值语句(2)单独process进程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 when clk
14、2=0 else 1; clk3 = 0 after clk_period/4 when clk3=1 else 1 after 3*clk_period/4 when clk3=0 else 0;激励信号的产生激励信号的产生时钟信号的产生时钟信号的产生 使用并行的信号赋值语句产生时钟信号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
15、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为非对称时钟信号激励信号的产生激励信号的产生时钟信号的产生时钟信号的产生 使用process进程产生时钟信号signal clk1: std_logic;signal clk2: std_logic; clk1_g
16、en: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; wait for 3*clk_period/4; end process;clk1和clk2有何区别?试画出其波形激励信号的产生激
17、励信号的产生时钟信号的产生时钟信号的产生 使用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 fo
18、r clk_period/4; clk2 = 1; wait for 3*clk_period/4; end process;常量只在该进程中起作用常量只在该进程中起作用激励信号的产生激励信号的产生 数字系统往往需要复位信号对系统进行复位,以便初始化系统。testbench中产生复位信号方式:(1)并行赋值语句(2)在进程中设定复位信号的产生复位信号的产生 激励信号的产生激励信号的产生复位信号的产生复位信号的产生 signal reset1: std_logic;signal reset2: std_logic;reset1 = 0,1 after 20 ns, 0 after 40 ns;r
19、eset2_gen:processbegin reset2 = 0; wait for 20 ns; reset2 = 1; wait for 40 ns; reset2 = 0; wait;end process;reset1和reset2信号波形一样吗?为什么?试画出其波形激励信号的产生激励信号的产生复位信号的产生复位信号的产生 signal reset1: std_logic;signal reset2: std_logic;reset1 = 0,1 after 20 ns, 0 after 40 ns;reset2_gen:processbegin reset2 = 0; wait f
20、or 20 ns; reset2 = 1; wait for 40 ns; reset2 = 0; wait;end process;激励信号的产生激励信号的产生复杂周期性信号的产生复杂周期性信号的产生 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 fo
21、r 35 ns;end process;period1和period2信号的周期是多少?试画出其波形激励信号的产生激励信号的产生复杂周期性信号的产生复杂周期性信号的产生 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 proce
22、ss;激励信号的产生激励信号的产生使用使用delayeddelayed属性产生两相关性信号属性产生两相关性信号 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);激励信号的产生激励信号的产生使用使用delayeddelay
23、ed属性产生两相关性信号属性产生两相关性信号 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);激励信号的产生激励信号的产生一般的激励信号一般的激励信号 一般的激励信号通常在process进程中定义,而在process进程中一般需要使用wait语句signal test_vector1
24、: 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_vector2 = 01; wait for 10 ns; test_vector2 = 10; wait;end process;比较test_vector1和test_vector2的异同,
25、试画出其波形激励信号的产生激励信号的产生一般的激励信号一般的激励信号 一般的激励信号通常在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 t
26、est_vector2 = 01; wait for 10 ns; test_vector2 = 10; wait;end process;激励信号的产生激励信号的产生一般的激励信号一般的激励信号 产生test_vector中所有可能的输入情况signal 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 te
27、st_vector6: std_logic_vector (3 downto 0);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;tb5:processbegin test_vector5 = 0000; wait for 10 ns; test_vector5 = test_vector5 + 1;en
28、d process;tb6:processbegin test_vector6 = 0000; wait for 10 ns; test_vector6 = test_vector6 + 1; wait for 10 ns;end process;比较四个process的异同,试画出各个test_vector波形激励信号的产生激励信号的产生一般的激励信号一般的激励信号 产生test_vector中所有可能的输入情况tb3:processbegin wait for 10 ns; test_vector3 = test_vector3 + 1;end process;tb4:processbeg
29、in wait for 10 ns; test_vector4 = test_vector4 + 1; wait for 10 ns;end process;激励信号的产生激励信号的产生一般的激励信号一般的激励信号 产生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 = te
30、st_vector6 + 1; wait for 10 ns;end process;激励信号的产生激励信号的产生一般的激励信号一般的激励信号 产生两个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 i
31、n 0 to 3 loop wait for 10 ns; test_ab = test_ab + 1; end loop; test_sel = test_sel + 1; end loop; end process; 激励信号的产生激励信号的产生一般的激励信号一般的激励信号 产生两个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;
32、end loop; test_sel = test_sel + 1; end loop; end process; 激励信号的产生激励信号的产生典型错误典型错误 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 for 200 ns; test_vector
33、 = 001; wait for 200 ns; test_vector = 011; end process;该程序是否有错?假如没错,请分析test_vector和reset的时序激励信号的产生激励信号的产生典型错误典型错误 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
34、begin wait for 200 ns; test_vector = 001; wait for 200 ns; test_vector = 011; end process;一个信号不能在两个进程中进行赋值testbenchtestbench简介简介testbenchtestbench基本结构基本结构激励信号的产生激励信号的产生testbenchtestbench实例实例仿真测试平台文件仿真测试平台文件testbenchtestbenchtestbenchtestbench实例实例组合逻辑电路:2位全加器的设计与验证时序逻辑电路:六进制计数器的设计与验证testbenchtestbenc
35、h实例实例2 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_logic_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
36、 downto 0);signal aa,bb:std_logic_vector(2 downto 0);beginaa=0 & a(1 downto 0);bb=0 & b(1 downto 0);sint=aa+bb+cin;s(1 downto 0)=sint(1 downto 0);coutcin_t,a=a_t,b=b_t,s=s_t,cout=cout_t);testbenchtestbench实例实例2 2位全加器的验证(续)位全加器的验证(续)tb:processbegina_t=01;b_t=00;wait for 10 ns;b_t=01;wait for
37、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;wait for 10 ns;b
38、_t=10;wait for 10 ns;b_t=11;wait for 10 ns;对此加法器进行全面的测试验证的方法一当加法器位数增加时,要覆盖所有可能的输入,此方法需要罗列的情况倍数增加,代码书写将会非常麻烦testbenchtestbench实例实例2 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 10 ns;a_t=10;b_t=00;wait for 10 ns;b_t=01;wait for 10 ns;b_
39、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;end process;end tb;对此加法器进行全面的测试验证的方法一testbenchtestbench实例实例2 2位全加器的验证(续)位全加器的验证(续)tb:process begin a_t =00; b_t =00; cin_t =0;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 齐成控股集团工作制度
- 漳州市龙海市2025-2026学年第二学期五年级语文期末考试卷(部编版含答案)
- 通化市柳河县2025-2026学年第二学期五年级语文第八单元测试卷(部编版含答案)
- 太原市阳曲县2025-2026学年第二学期四年级语文期末考试卷(部编版含答案)
- 周口市太康县2025-2026学年第二学期四年级语文第七单元测试卷(部编版含答案)
- 仲钼酸铵制备工班组考核竞赛考核试卷含答案
- 丙烯腈装置操作工岗前安全素养考核试卷含答案
- 变压器线圈制造工达标能力考核试卷含答案
- 家具设计师保密意识评优考核试卷含答案
- 染色小样工岗前技能竞赛考核试卷含答案
- 科技新赋能智护帕全程2026世界帕金森病日科普与义诊指南
- 2026年春川教版(新教材)小学信息技术四年级下册(全册)教学设计(附目录P66)
- 2026年高考作文备考之多则材料类型作文审题立意指导
- 2026散装液态食品灌装设备选型及智能化改造报告
- 三 长方形和正方形 单元教学课件 2026人教版数学三年级下册
- 海绵城市监理实施细则样本
- 白血病药物护理实践指南(2025年版)
- 物业客服部催费培训课件
- 2026年宁波城市职业技术学院高职单招职业适应性考试模拟试题带答案解析
- 5轴加工中心培训课件
- 小说评论课件
评论
0/150
提交评论