关于Vmm验证平台搭建,新手求助
接了个项目,刚开始接触VMM验证,最近为了验证平台的搭建费了很多脑筋,很简单的问题却一直没想明白。
主要问题是,我要验证的这个接口芯片所传输的数据格式是可配置的(数据长度,校验位,停止位长度,波特率等均可以通过控制寄存器配置),老板的意思想在一个测试向量中随机的产生不同配置的数据格式的数据来测试,这样可行吗?如果可行要怎么配置呢?
我现在看到的资料都是在一个测试向量里产生一种配置格式,然后根据这种配置随机化出数据,起码在一个测试向量中数据的长度都是不变的呀,是我接触的资料太少了吗?感觉随机化产生不同配置格式的数据应该也是听常用的一种功能吧。恳请各位大侠指点,小妹不胜感激啊
顶顶~ 哪位帮帮忙啊~
没人来啊。
用random就可以实现啊,把要配置的信息都用random 数据格式来实现啊!
这个验证模块貌似比较简单
直接把所传输的数据(数据长度,校验位,停止位长度,波特率等)在一个类里面
定义成随机变量,然后用constraint命令根据协议要求约束一下子就行了。
一个测试向量可以包括多帧数据,每帧的数据都是可以随机产生的。
你好,谢谢你的回答,但是我还是没弄明白。
“直接把所传输的数据(数据长度,校验位,停止位长度,波特率等)在一个类里面定义成随机变量,然后用constraint命令根据协议要求约束一下子就行了。一个测试向量可以包括多帧数据,每帧的数据都是可以随机产生的。”
1)数据的长度、有无校验位、停止位长度,这些都是可以随机的吗,如果随机的结果不同,相应的channel和事务处理器不需要重新定义吗?
2)数据长度、校验位、停止位长度、波特率等,这些参数的配置如果改变,就需要先写DUT的控制寄存器,在一个测试向量里如何实现多次写DUT的控制寄存器呢?
我的问题可能很白痴,不好意思了,刚接触VMM验证,一头雾水中。
谢谢帮助,能否说的具体一点呢。
数据的长度配置和数据的内容是同时random吗?还是有先后顺序?
如果随机改变配置以后要写DUT的控制寄存器,怎么操作啊?
谢谢您的回答,可我还是不太明白。
“直接把所传输的数据(数据长度,校验位,停止位长度,波特率等)在一个类里面定义成随机变量,然后用constraint命令根据协议要求约束一下子就行了。一个测试向量可以包括多帧数据,每帧的数据都是可以随机产生的。”
数据长度,是否使用校验位,停止位长度这些也可以随机吗,这些配置改变的话,相应的channel和事务处理器是不是也要重新设定?
在一个测试向量里如何能多次的随机配置DUT的控制寄存器呢?
建议直接用sv写更简单。
“数据长度,是否使用校验位,停止位长度这些也可以随机吗,这些配置改变的话,相应的channel和事务处理器是不是也要重新设定?”
这个应该不需要吧,把所有这些扔到一个类里就行了,通过channel把类传过去。
“在一个测试向量里如何能多次的随机配置DUT的控制寄存器呢?”
这个属于driver的功能,写一个对寄存器读写的bfm就行了。
感谢回复。
请问数据长度和数据内容都需要随机怎么办呢?谁先谁后?
随机出来一种格式的数据之后,相应的channel也就跟着变成这种格式的了,是这个意思吗?
原谅我这个小白吧。真的不懂啊。项目时间又紧。真晕啊
如果项目紧的话,不如先用verilog做验证,以后有时间再折腾sv,或许是一个不错的选择:)
人家公司给的要求就是做vmm验证,哎,他们之前没做过想找个人做一遍,我就杯具了,直接从纯的硬件电路方向转到验证编程,我这一时半会真弄不明白呀,周围还没有人能问,都急得不像样。您要是能帮帮忙那我就太感谢了
奉劝小编还是还是放弃这个项目吧,没有一定基础独自一人是很难搭建vmm的验证平台的,vmm封装了一些技术细节,一旦出现异常,你调试都不知道如何下手。
除非你把项目转包出来,否则别人义务帮助你赚钱,你觉得合理吗?
很简单啊。
CRT 即可解决 constraint random test.
您说的很对,确实这个项目对于没有经验也没人指导的我来说太难了,而且时间很紧,但是关系到毕业又不能不做,所以我现在很着急很痛苦,我没有要大家义务帮我的意思,如果哪位能帮忙做我就转包这个项目,没问题的!
自己做吧,还能学点东西,找个例子,死磕一个星期差不多了,呵呵。
呵呵,您觉得简单的东西对于一个没有基础的新手来说还是太难了
就是这样
顶一下!
学习学习
关于数据长度和数据内容。可以有两种方法:
(1):在vmm_data的子类中定义rand dynamic array,限制该数组的size,使用foreach限制数组的内容。
(2):在vmm_data的子类中定义rand data,限制数据内容;在configuration中定义rand data_size,并constraint,然后用data_size去限制generator产生transaction的number。
关于VMM中的channel
(1):channel只能传递特定的vmm_data类或其子类,不能直接传递数据。
(2):所以,要将数据封装在vmm_data的子类中,才能通过channel传递。
建议:
(1)先要进行Systemverilog和VMM的练习,光看书是很难搞定的,最好把VMM的源代码读几遍
(2)对于简单项目,直接用systemverilog就能搞定,无需VMM,则简单多了
老兄说的对,systemverilog和vmm都不是问题,对verilog和C++熟悉的人,一星期绝对够了,
vmm嘛,不就是一堆class库和marco么,源代码一读就基本理解了。
关键是验证思想,尤其是随机验证的思想,以及调试经验,这才是无止境的啊。
买书看吧,
先找些小例子自己开始做,按照VMM定义的结构来建一个tesetbench。慢慢来,刚开始可能做得不好,时间长了就是VMM高手
数据可以继承vmm_data来实现
配置直接写一个cfg文件的class把你需要的所有参量写在里面 用rand来定义
然后用constraint来对配置进行约束
这样在env调用gen_cfg来产生相关的配置就ok了
如果数据还和cfg的信息有关,可以在数据类里引入需要的cfg来进行数据的约束
学习一下!
建议参考Synopsis的VIP,串口的验证方法基本都相似,基于VIP搭验证平台,可重用性较强!
正是想问的……
项目时间又紧