仿真验证与TESTBENCH编写
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 5.2.1 Testbench及其结构
在仿真的时候 Testbench 用来产生测试激励给待验证设计( Design Under Verification,DUV),或者称为待测设计(Design Under Test,DUT)。
测试平台 (Testbench)
控制 反馈
激励输入
被验证设计 (DUV)
响应输出
Testbench平台结构
module仿真模块名://无端口列表 各种输入、输出变量定义 数据类型说明 //其中激励信号定义为reg型 //显示信号定义为wire型 integer parameter
测试程序的一般结构 由于Testbench是一个测 试平台,信号集成在模 块内部,没有输入输出。
T触发器的仿真波形和部分文本输出结果 :
部分文本输出结果: 0T= x, clk= 0, rst_n= x, data_out= x 3T= x, clk= 0, rst_n= 0, data_out= 0 5T= x, clk= 1, rst_n= 0, data_out= 0 8T= 1, clk= 1, rst_n= 1, data_out= 1 10T= 1, clk= 0, rst_n= 1, data_out= 1
例5.2-1 T触发器测试程序示例 module Tflipflop_tb; //数据类型声明 reg clk, rst_n,T; wire data_out; TFF U1 (.data_out(data_out),.T(T),.clk(clk),.rst_n(rst_n)); / /对被测模块实例化 always //产生测试激励 #5 clk=~clk; Initial begin clk=0; #3 rst_n=0; #5 rst_n=1; T=1; #30 T=0; #20 T=1; end Initial //对输出响应进行收集 begin $monitor($time, "T= %b, clk= %b, rst_n= %b, data_out= %b", T, clk, rst_n, data_out); end endmodule
• 5.2.2测试平台举例
输入激励信号 reg类型
激励向量 测试模块 输出显示 待测试模块
测试平台需要产生时钟信号、 复位信号和一系列的仿真向量, 观察DUT的响应,确认仿真结 果。
输出显示信号 wire类型
DUT的仿真平台
(1)组合逻辑电路仿真环境的搭建
module adder1(a,b,ci,so,co); input a,b,ci; output so,co; assign{co,so}=a+b+ci; endmodule 根据全加器的真值表(表5.2-1)编写的全加 器测试程序如下: module adder1_tb; wire so,co; reg a,b,ci; adder1 U1(a,b,ci,so,co); //模块例化 initial // 测试信号产生 begin a=0;b=0;ci=0; #20 a=0;b=0;ci=1; #20 a=0;b=1;ci=0; #20 a=0;b=1;ci=1; #20 a=1;b=0;ci=0; #20 a=1;b=0;ci=1; #20 a=1;b=1;ci=0; #20 a=1;b=1;ci=1; #200 $finish; end endmodule
在编写Testbench时需要注意的问题 :
(1)testbench代码不需要可综合 Testbench代码只是硬件行为描述不是硬件设计 。 (2)行为级描述效率高 Verilog HDL语言具备5个描述层次,分别为开关级、门级、RTL级、算法级 和系统级。 (3)掌握结构化、程式化的描述方式 结构化的描述有利于设计维护,可通过initial、always以及assign语句将不同 的测试激励划分开来。 一般不要将所有的测试都放在一个语句块中。
第五章 仿真验证与 Testbench编写
2/26/2019
Microelectronics School Xidian University
1
5.1 Verilog HDL电路仿真和验证概述
仿真,也叫模拟,是通过使用EDA仿真工具,通过输入测试信号,比对 输出信号(波形、文本或者VCD文件)和期望值,来确认是否得到与期望所 一致的正确的设计结果,验证设计的正确性。 验证是一个证明设计思路如何实现,保证设计在功能上正确的一个过程 (always、initial过程块; function,tast结构等; If-else,for,case,while,repeat,disable等控制 语句) 显示格式定义 ($monitor,$time,$display等) endmodule
在Testbench模块内, 例化待测设计的顶层模 块,并把测试行为的代 码封装在内,直接对待 测系统提供测试激励。
验证在Verilog HDL设计的整个流程中分为4个阶段: 阶段1: 功能验证; 阶段2: 综合后验证; 阶段3: 时序验证; 阶段4: 板级验证。
2/26/2019
Microelectronics School Xidian University
2
5.2 Verilog HDL测试程序设计基础
在终端上显示仿 真的值,或者存 成文件
激励 (Stimulus)
实例化DUT (Design Under Test)
使用仿真工具比 较仿真结果
自动比较测试结 果的正确性
从图中可以清晰地看出Testbench的 主要功能: (1)为DUT提供激励信号。 (2)正确实例化DUT。 (3)将仿真数据显示在终端或者存 为文件,也可以显示在波形窗口中以 供分析检查。 (4)复杂设计可以使用EDA工具, 或者通过用户接口自动比较仿真结果 与理想值,实现结果的自动检查。
全加器的输入a、b和ci定义为reg型变量;把输出so和co定义为wire型变量 用模块例化语句“adder1 U1(a,b,ci,so,co);”把全加器设计电路例化到测试仿 真环境中; 用initial块语句改变输入的变化并生成测试条件,输入的变化语句完全根据全 加器的真值表编写 仿真结果 :
在仿真的时候 Testbench 用来产生测试激励给待验证设计( Design Under Verification,DUV),或者称为待测设计(Design Under Test,DUT)。
测试平台 (Testbench)
控制 反馈
激励输入
被验证设计 (DUV)
响应输出
Testbench平台结构
module仿真模块名://无端口列表 各种输入、输出变量定义 数据类型说明 //其中激励信号定义为reg型 //显示信号定义为wire型 integer parameter
测试程序的一般结构 由于Testbench是一个测 试平台,信号集成在模 块内部,没有输入输出。
T触发器的仿真波形和部分文本输出结果 :
部分文本输出结果: 0T= x, clk= 0, rst_n= x, data_out= x 3T= x, clk= 0, rst_n= 0, data_out= 0 5T= x, clk= 1, rst_n= 0, data_out= 0 8T= 1, clk= 1, rst_n= 1, data_out= 1 10T= 1, clk= 0, rst_n= 1, data_out= 1
例5.2-1 T触发器测试程序示例 module Tflipflop_tb; //数据类型声明 reg clk, rst_n,T; wire data_out; TFF U1 (.data_out(data_out),.T(T),.clk(clk),.rst_n(rst_n)); / /对被测模块实例化 always //产生测试激励 #5 clk=~clk; Initial begin clk=0; #3 rst_n=0; #5 rst_n=1; T=1; #30 T=0; #20 T=1; end Initial //对输出响应进行收集 begin $monitor($time, "T= %b, clk= %b, rst_n= %b, data_out= %b", T, clk, rst_n, data_out); end endmodule
• 5.2.2测试平台举例
输入激励信号 reg类型
激励向量 测试模块 输出显示 待测试模块
测试平台需要产生时钟信号、 复位信号和一系列的仿真向量, 观察DUT的响应,确认仿真结 果。
输出显示信号 wire类型
DUT的仿真平台
(1)组合逻辑电路仿真环境的搭建
module adder1(a,b,ci,so,co); input a,b,ci; output so,co; assign{co,so}=a+b+ci; endmodule 根据全加器的真值表(表5.2-1)编写的全加 器测试程序如下: module adder1_tb; wire so,co; reg a,b,ci; adder1 U1(a,b,ci,so,co); //模块例化 initial // 测试信号产生 begin a=0;b=0;ci=0; #20 a=0;b=0;ci=1; #20 a=0;b=1;ci=0; #20 a=0;b=1;ci=1; #20 a=1;b=0;ci=0; #20 a=1;b=0;ci=1; #20 a=1;b=1;ci=0; #20 a=1;b=1;ci=1; #200 $finish; end endmodule
在编写Testbench时需要注意的问题 :
(1)testbench代码不需要可综合 Testbench代码只是硬件行为描述不是硬件设计 。 (2)行为级描述效率高 Verilog HDL语言具备5个描述层次,分别为开关级、门级、RTL级、算法级 和系统级。 (3)掌握结构化、程式化的描述方式 结构化的描述有利于设计维护,可通过initial、always以及assign语句将不同 的测试激励划分开来。 一般不要将所有的测试都放在一个语句块中。
第五章 仿真验证与 Testbench编写
2/26/2019
Microelectronics School Xidian University
1
5.1 Verilog HDL电路仿真和验证概述
仿真,也叫模拟,是通过使用EDA仿真工具,通过输入测试信号,比对 输出信号(波形、文本或者VCD文件)和期望值,来确认是否得到与期望所 一致的正确的设计结果,验证设计的正确性。 验证是一个证明设计思路如何实现,保证设计在功能上正确的一个过程 (always、initial过程块; function,tast结构等; If-else,for,case,while,repeat,disable等控制 语句) 显示格式定义 ($monitor,$time,$display等) endmodule
在Testbench模块内, 例化待测设计的顶层模 块,并把测试行为的代 码封装在内,直接对待 测系统提供测试激励。
验证在Verilog HDL设计的整个流程中分为4个阶段: 阶段1: 功能验证; 阶段2: 综合后验证; 阶段3: 时序验证; 阶段4: 板级验证。
2/26/2019
Microelectronics School Xidian University
2
5.2 Verilog HDL测试程序设计基础
在终端上显示仿 真的值,或者存 成文件
激励 (Stimulus)
实例化DUT (Design Under Test)
使用仿真工具比 较仿真结果
自动比较测试结 果的正确性
从图中可以清晰地看出Testbench的 主要功能: (1)为DUT提供激励信号。 (2)正确实例化DUT。 (3)将仿真数据显示在终端或者存 为文件,也可以显示在波形窗口中以 供分析检查。 (4)复杂设计可以使用EDA工具, 或者通过用户接口自动比较仿真结果 与理想值,实现结果的自动检查。
全加器的输入a、b和ci定义为reg型变量;把输出so和co定义为wire型变量 用模块例化语句“adder1 U1(a,b,ci,so,co);”把全加器设计电路例化到测试仿 真环境中; 用initial块语句改变输入的变化并生成测试条件,输入的变化语句完全根据全 加器的真值表编写 仿真结果 :