文档介绍:逻辑验证方法
Michael Yao
Ver
第一部分从一个简单例子开始
CPU接口实例
首先我们看一个CPU接口的testbench实例,并且观察他是如何工作的。
该CPU接口是一个可以正常工作的MPC8240 LocalBus接口
包含3个内部寄存器,其中一个只读的版本寄存器,两个可读可写的寄存器
实例见exercise1
Footnotes should be 12 pt, bold, and left justified with copyright line
3
Testbench的结构
Testbench包含了3个文件
4
Testbench的结构
从这里例子我们可以看到哪怕是一个再简单的设计,其验证平台都应该至少包含3个层次
BFM(Bus Function Model)总线功能模型,和DUT接口的最基本层次,主要功能是将上层提供的文本或者16进制数据转换成DUT能够识别的2进制流。
HARNESS 中间层次,产生时钟和复位并且在这一层封装了BFM和DUT,使整个验证平台更加清晰整洁。
BENCH 最高层次,在这一层构造各种测试用例并且调用BFM提供的各个task对DUT进行访问
5
BFM的注意事项1
一个合理的BFM应该充分考虑到可读性、可扩展性和可重用性
和所有的其它设计一样,可读性永远是优秀设计的必要条件
BFM不是一次性产品,在设计之初就应该考虑到以后在其他设计中的重用和功能扩展
BFM应该仅有信号的初始化部分使用initial语句进行赋值
initial
begin
……
end
6
BFM的注意事项2
将BFM所需要实现的功能归纳分类后通过task实现
可读性
可扩展性,如果要需要增加新的功能只需要增加一个新的task即可实现。例如exercise1的CPU接口还具备burst访问功能,
BFM中的关键参数应该使用parameter进行定义
可重用性,例如当exercise中的BFM用在另一个具备不同的数据、地址位宽的CPU验证当中
7
HARNESS的注意事项
例化DUT和BFM
产生时钟和复位信号
如果有必要复位信号也可以使用一个task实现
除此之外不应该有其它额外的功能
8
BENCH的注意事项
例化HARNESS
构造测试用例并且通过调用BFM中的各种task去执行各种测试用例
9
遗留问题
Exercise1虽然是一个完整的CPU接口验证平台,但是仍然有遗留问题。
测试用例的构造,测试用例非常简单,不仅个数少并且测试数据为手工构造。
测试结果的检查,测试结果是否正确为人工检查。
显然exercise1中的验证平台只能用于简单的模块验证而不能适用于较复杂的逻辑验证
10