TestBench

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

模拟界面控制
库文 件
逻辑模拟结果一致性的确定

在TestBench中加入预期结果比较

利用波形比较工具检测逻辑模拟波形的 一致性
$display $time $fopen $finish
$fdisplay $write $fclose $stop
$monitor $strobe $dump
利用虚拟原型、估计综合及后设计的结果;
HDL代码调试
逻辑模拟验证

在TestBench中加入$strobe系统任务,记 录、探测所关心的信号波形; 在逻辑模拟验证前,利用模拟器提供的 功能,选择需要观察的信号并加以记录; 在TestBench中增加模拟结果与预期的正 确结果的比较,检测不正确的HDL代码
Verilog HDL提供的支持
Verilog HDL提供了几个系统任务支持从 文件中直接读取输入激励码向量 $readmemb(“File_Name”, Test_Vector); 从文件中读取二进制输入激励码向量
$readmemh(“File_Name”, Test_Vector); 从文件中读取二进制输入激励码向量
Reg Reg …… [7:0] A, B; Start;
二进制表示的 输入激励码及 其输出预期结 果表示
Reg [33:0]
…….
……
Vector, Test_Vector[0:Test_Length];
$readmemb(“Test_Fixed.v”, Test_Vector); For (I=0; I<Test_Length; I = I+1) 按一定时序将Test_Vector[I]送入Vector并送入A、B、 Start;
+gui TestBench -s testfixture.verilog /export/home/HDL/src/mult16.v /export/home/HDL/src/adder16.v ……….. +libext+.v+ 单元库所存的路径 -y library_path 单元库文件的读取 ……. 方式控制
endmodule 产生激励码的方式灵活、 容易产生中、小模块的激励码 不易管理
用HDL代码生成DUT的输入激励码
module TestBench_Name ; 参数说明; 寄存器、线网类型变量的定义、说明;
DUT 实例语句;
时钟信号定义、赋初值; 定义置/复位信号的变化情形; endmodule 将模块不同功能的调测试输入激励码置于 不同的HDL代码段,存于不同的文件中, 使用时再用`include “文件名”形式调入

DUT
(Design Under Test )
输入激励产生
待模拟、验证的 Design
输出结果 比较
模拟结果 正确性判断
预期输出结果构造
输入激励码的产生方式

由其它硬件/软模型产生待验证模块所需 的输入激励码;
用HDL代码生成(On-the-fly);


事先产生所需的输入激励码并存于相应 的文件中,使用时从文件中读取
`include “产生输入激励码的HDL代码段” ;
预设输入激励码向量方式
方法:
将所需的输入激励码用一定形式的
向量表示; 输入激励码向量预存于文件中; 使用时从文件中按一定的时序节拍 读入文件中的输入激励码向量
module multiplier8(A, B, Clk, Start, Mul, Done); input [7:0] A, B; input Start; input Clk; output [15:0] Mul; output Done; 1、从给定的输入激励 reg [15:0] Mul; 码文件中读入输入A、 reg Done; B、Start的激励码及相 Functional Description Stms; 应的预期输出结果Mul、 …… Done; endmodule 2、TestBench预设一类 向量以便读取输入激 励码文件中的数据 3、输入激励码、预期 的输出结果预存于文 件中
reg [7:0] A, B; 描述简单、明了、代码 integer I; 紧凑、易于管理 …… initial begin …… for (I=0;I<1024; I=I+1) begin 在initial语句 A = $random %256; 块中存在 B = $random % 256; #Period; end …… end
TestBench的书写
TestBench的目标 TestBench的基本框架 书写TestBench的几种主要方法 HDL调试的主要方式 提高模拟验证效率的主要方法 综合前后模拟验证结果一致性的确

TestBench的目标
测试、验证HDL代码的正确性; 测试、验证Design的功能、时序正确性; 待测试、验证的模块加载到模拟验证环境; 产生模拟验证所需的输入激励; 对输入激励码,构造出其对应的正确输出 结果; 提供一种机制,自动判断Design的正确性

输入激励码文件Test_Fixed.v
//Start A[7:0] B[7:0] Done Mul[15:0] 00000000001001110 00000000000000000 10000000001001110 10000000000000000 10000001000000010 10000000000000100 …….. TestBench作相应的定义:
用HDL代码生成DUT的输入激励码
module TestBench_Name ; 参数说明; 寄存器、线网类型变量的定义、说明; DUT的输出端口 必须连线网类型 的变量
DUT 实例语句;
时钟信号定义、赋初值; 定义置/复位信号的变化情形;
用一个或多个initial语句块产生DUT的 模拟激励向量; 用Task、function定义DUT外部时序接口;
Reg [33:0]
……
Vector, Test_Vector[0:Test_Length];
$readmemh(“Test_Fixed.v”, Test_Vector); For (I=0; I<Test_Length; I = I+1) 按一定时序将Test_Vector[I]送入Vector并送入A、B、 Start;
逻辑模拟工具及逻辑模拟方法
NC-Verilog :Cadence 业界的“黄金模拟器”, SignOff的 Foundry产家较多; 本征码编译,与用户的交互性能好,模 拟速度快; 适合对大的设计进行模拟验证; 调用方式: • ncxlmode +gui –s –f run.f • 从Cadence的Composer界面启动,适合 于对逻辑图进行模拟验证
用HDL代码生成DUT的输入激励码
assign #(Period/2) clk = ~clk; 在输入激励产生过程 中,可用fork/join 形 式表示绝对时间
parameter Period = 10 ; always #(Period/2) clk = ~clk ; parameter Period = 10 ; always begin #(0.4*Period) clk = ~clk; #(0.6*Period) clk = ~clk; end
软、硬件合作模拟 主要用于系 统模拟验证 硬件 待模拟、验证的 设计模块 软模型 模拟、验证 结果评测
利用硬件的软模型 进行模拟验证
由其它硬件/软模型产生 待验证模块所需的输入激励码

• • •
优点:
能较全面模拟、验证Design在各种情形下的正确性; 自动产生待验证模块的输入激励码 易于管理、验证速度快
输入激励码文件Test_Fixed.v
//Start A[7:0] B[7:0] Done Mul[15:0] 0004E0000 409D00000 204050004 …….. TestBench作相应的定义:
Reg Reg …… ……. [7:0] A, B; Start;
十六进制表示 的输入激励码 及其输出预期 结果表示

用HDL代码生成DUT的输入激励码
输入激励码产生方式:





用单独的always语句或assign赋值语句产生时 钟信号; 用简单的initial语句块产生置/复位信号的激励; 在initial语句块中用循环语句块产生按一定规 律变化的信号的激励码; 用Task过程产生特殊信号的输入激励; 用三态buffer产生或监控Bidirectional信号的激 励; 必要时预估DUT的输出变化情形并加以比较
HDL代码调试
HDL代码
TestBench
逻辑模拟
修改HDL代码
综合
HDL代码调试
HDL代码调试手段 逻辑模拟过程中,查看模拟波形,判断 HDL描述的正确性; 逻辑模拟验证过程中加入相关的监控措施;
•充分利用HDL语言提供的监控、显示等系统任务,测试 HDL描述的正确性 •Verilog HDL语言中提供了下列系统任务可供使用:

逻辑模拟中的延时考虑



延时方式: 零延时 路径延时 单元延时 最大/最小延时 动态延时
Run.f 的组织
Run.f文件中所包含的内容: 逻辑模拟方式 延时计算的控制方式 待模拟验证的模块的Verilog描述文件 子模块的Verilog描述文件 单元库文件的读取方式 单元库文件所在的目录


逻辑模拟工具及逻辑模拟方法
Verilog-XL :Cadence 业界的“黄金模拟器”, SignOff的 Foundry产家最多; 解释执行,与用户的交互性能好,但模 拟速度较慢; 适合对小模块的HDL描述进行模拟验证; 调用方式: • verilog +gui –s –f run.f • 从Cadence的Composer界面启动,适合 于对逻辑图进行模拟验证
时钟信号必须用initial语句赋 初值
parameter Period = 10 ; always fork #(0.4*Period) clk = ~clk; #Period clk = ~clk; join
用HDL代码生成DUT的输入激励码
用initial语句块中的顺序过程语句描述一般信号 的输入变化情形

• • •
缺点:
必须有相应模块的硬件/软件模型支持; 必须有专门的验证环境支持; 代价昂贵
பைடு நூலகம்
使用领域: 模型(Protocol)验证、系统模拟、设计投片前的 确认。

用HDL代码生成DUT的输入激励码
注意事项:
将时钟信号、置/复位信号与其它信号分 开并分别加以处理; 注意各种(各组)输入信号的时序关系; 注意所采用的延时表示方式(绝对延时/ 相对延时); 注意各种输入激励与时钟信号的关系
相对而言,高效的VHDL模拟工 具较少
提高模拟验证效率的手段
在具体的模块HDL编码前,应有一整套 模块的模拟、验证、测试的计划; 在HDL代码中,减少不必要的进程或将 一些进程合并; 进程的敏感信号表中不能存在冗余的信 号; 在系统模拟验证中,采用比较模拟验证 法代替波形观察法,以提高效率; 在模块/系统功能模拟时,采用零延时或 路径延时的模拟验证方式。
可采用绝对延时或相对延时表示方式; 优点: •直接、简洁,易于理解; •只需要列出输入信号的变化情形; •可用于各种输入信号(不包括时钟信号)激励的描述; •应用面广,适合于DUT的初始功能验证。 缺点: •难以管理; •难于过程化处理。
用HDL代码生成DUT的输入激励码
在initial语句块中用循环结构描述具有一 定变化规则的输入激励信号
逻辑模拟工具及逻辑模拟方法
VCS :Synopsys 本征码编译,与用户的交互性能好,模 拟速度快; 适合对大的设计进行模拟验证; 提供了一整套Verilog HDL代码调试手段 调用方式:

vcs +gui –s –f run.f
逻辑模拟工具及逻辑模拟方法
VSS :Synopsys 的VHDL模拟器 速度慢; 适合对小的VHDL代码进行模拟验证; 调用方式复杂 目前Synopsys公司已停在该工具的研发
相关文档
最新文档