事情是这样的,在某个验证环境中,有一个接口信号叫jerry_face_score,jerry很自然的想到通过driver组件给这个信号新的值,于是他通过transaction定义一个同名变量,在sequence中给其约束,在base_test中启动这个sequence,从而改变这个变量。
改成多少呢?他照了一下镜子决定按照《国际颜值协会颜值百分制评分标准》,将jerry_face_score约束为10000.
当他开心的等到跑完的结果,打开波形一看,这个jerry_face_score信号竟然一直保持默认值0 ?!
你敢信?
这是验证平台瞎了眼了吗?
即使Jerry不动手去约束这个信号,但凡一个正直的高尚的有审美能力的验证平台也一定会自己默默的把这个值改成一个高分,但是眼前竟然是0?
于是他为了世间真理,正义与爱,踏上了长达一晚上的debug之路。为了节省各位有志之士的时间,在此选取了平台中部分主要代码如下,未写出的代码,默认是正确的,自行脑补。
大家先不要看后面的解释,好好捋一下什么原因,还jerry一个公道!
如下是tranaction部分代码:
如下是sequence部分代码:
如下是sequencer部分代码:
如下是base_test部分代码:
大家好好看代码,先不要看答案哦~
想出来了吗?再想会儿??
果然!!关注杰瑞IC验证的都是天才!没错!就是这样!我们下次再见~
算了,还是再说两句。这个bug确实就是你想的这个原因!
如下图“default_sequence”这个单词拼错了!!
大家不要嘘不要嘘,请放下手中的鸡蛋听我说~
这个bug为什么值得一提?其最阴险的地方就是:这个拼写错误它是不会在编译或运行的时候报出来的!!!
今天只有几行代码,而在实际中非常复杂的验证平台,这个问题你也许会从约束的源头、driver等组件一路追查,增加更多debug打印信息等待仿真、好长时间才能断定你的sequence其实根本没有成功启动!
接着定位到这句话,而即使定位到了这句话,不仔细看的情况下你往往不一定注意到是拼写问题!
因为你会天真的以为你的平台善良可爱拼写错了它会给你说,你错了!!
这个“default_sequence”字符串是UVM内部的约定:当你所指定的组件运行到你指定的phase时,看到有default_sequence这个约定就会启动这个sequence,对不上暗号当然也就不会启动,但这个暗号其实也不能算是语法错误,所以也就不会报出。
其实这里不光是拼写错了,就是多一个空格都会出现问题,所以这个小小的一个单词千万要心存敬畏,遇到类似的bug也不要忘记多看一眼这里有没有手抖了一下下哦~
标签:这个,sequence,代码,验证,jerry,Jerry,IC,bug From: https://www.cnblogs.com/NoviceVerifer/p/17975394