对于复杂逻辑电路,如何书写高效率的testbench?
比如说电路的测试向量非常多,为了能够快速而全面的对设计进行验证,写testbench的时候应该掌握什么样的原则呢?
同问 高手指点一下
复杂设计的验证,如果使用传统的initialbegin...end之间顺序的编写测试向量的话,效率很低,而且这种定向测试覆盖率可能也不会很高。解决这种低效测试平台设计的做法有以下几个:
(1)使用任务或者函数增加代码的重用性,例如:在某个协议转换模块的验证中,可以将发送数据作为一个任务封装,这样在不同的地方需要发送数据给该协议转换模块时就只只需要写一条任务调用语句即可,省去大量重复的代码编写。
(2)使用事务器或者总线功能模型。在验证系统某个功能模块设计时,一般需要完整的构建该模块实际工作的环境,此时不可能也没必要将系统其他模块也用RTL描述设计,只需要使用行为级描述与被验证模块交互的其余功能模块,而且一般只需要实现这些“虚拟”模块的总线功能即可。事务器或者BFM就是这种“虚拟”的仅用于验证的功能模块。在不同的设计中只要总线接口一致(例如:基于ARM的SoC设计一般使用的是AMBA总线)可以重用事务器或者BFM。
(3)受约束的随机测试。随机测试能够产生大量性质相同的激励,而且能快速达到很高的故障覆盖率,因此目前在早期验证中使用的越来越多。当使用随机测试覆盖率趋于稳定时,就可以考虑使用某些特殊的激励定向去覆盖随机测试无法覆盖的功能。
VerilogHDL语言历史算比较早,诞生之初一般用于数字电路的建模仿真,语言本身对设计的重用性、面向对象特性支持不是很好,而SystemVerilog考虑到目前复杂验证出现的问题,所以建议可以使用SV做复杂功能验证。
写的相当不错,晚上回去找你讨教下,目前我正看这个,看郁闷了!
建议
tsetbench 是模拟激励信号,因此并不要求太规范
想用verilog写tenchbench,基本上就像写C语言一样。
激励可以在程序中产生,但大型的仿真通常是由C语言写的仿真器输出激励信号,然后tnechbench将文本中的激励信号读入,
然后再输入到被仿真unit的接口。
我写过大量仿真tenchbench,需要参考的可以将email告诉我,发给你参考
楼上那位,你的email地址呢?
可以写成层次化的testbench 推荐你看一本英文书 如何写testbench
老兄 你好 我现在正在做基于ahb总线的存储模块的测试 我的邮箱是szg1902@163.com 希望能得到你的指点和帮助 不尽感激
老兄,我现在是做的i2cslave的testbench,先没有写master,希望帮我一下,邮箱是bandit2009@126.com
帖子别沉了
aliaoshaer 老兄
是否可以给我一份,想学习下复杂情况下测试的书写
我的email : junjun421@163.com
顶个 也特别想 看看高手们关于此话题的讨论
好像有本书专门讲testbench的
aliaoshaer ,你好 我现在也正在学习testbench 我的邮箱是icfans221@126.com 可以的话,希望能得到你的帮助,不胜感激
tsetbench 是模拟激励信号,因此并不要求太规范
想用verilog写tenchbench,基本上就像写C语言一样。
激励可以在程序中产生,但大型的仿真通常是由C语言写的仿真器输出激励信号,然后tnechbench将文本中的激励信号读入,
然后再输入到被仿真unit的接口。
我见过最好的NIOSII教程
我给顶上去
谢谢分享!
书名是啥?
13# taosheng042
eaglelsb@126.com
也发给我参考一下,
表扬很好的同学。
我现在还是在用Verilog写,可能没有遇到特别复杂的情况。以后有机会的话讨教
5# aliaoshaer
你好,能发给例子吗?
一直头疼验证的不充分性。
kiol2001@gmail.com
用 System verilog 试试
顶!
仿真可没有固定的格式吧,一般先构造一个功能总线模型同设计连接(硬件语言之间的连接),写很多激励向量,然后利用功能总线模型和激励创造很多测试case,对设计的各个功能基本都要覆盖,所以要写覆盖各个功能的测试case,每个case包括激励和响应,从激励和响应中得出要验证的功能是否合乎功能设计的要求,这个过程逐步的逼近,直到验证覆盖了所有设计规范所要求功能,这样还不完美,但我粗略就知道这些了
《writting testbench》是本好书,可以看看
学习了。顶之~
学习了,顶
建议采用 专门的验证语言 + 某种方法学 + 随机验证思想 + 可重用性验证平台搭建方法 + 断言 + 简化流程的脚本 + 一台好的服务器。对于上万行的设计也能轻松搞定。
那本?
