这篇文章主要目的是将平时工作中,犯过的错误进行总结,避免以后再次进入相同的坑中。
谨记“一个人不可能犯同样的错误两次。第二次还这样做,已经不再是犯错,那是你的选择“
SV实践案例分析
案例1:sv中“||”的运算求解规则
题目: 求两个32bit数据的按位或值。
错误的写法:
错误仿真结果:
原因分析:
从错误的结果中可以看出,只打印了"aaaaaaaa",原因是,对于||运算符,如果左边的表达式为真时,则右边的表达式就不会执行。
再看最终的or_val,发现并未得到我们的按位或的期望值,而是00000001,原因是||运算符的结果,只能是0或1,这两个值。
正确写法:
正确仿真结果: 结果符合预期值
心得体会:||与|,只是少了一个|,很容易发生笔误现象,但是如果写错了,则会发现,逻辑仿真时,它们所表达的含义完全不同,所以写代码时,要时刻小心,不然你debug的时间,会是你coding时间的double,有可能会更多。
案例2:inside混淆之处
由来: 最近项目中,遇到下面这样一个语法问题,起初乍一看以为是它?再仔细一看,发现不是,最后感悟还是自己基本功不扎实,导致初看理解有误,现记录下,鞭策自己继续学习。
实例: 实例截图如下:
仿真结果: 仿真结果截图图如下:
初看此代码时,觉得打印的val值应该是1或者2,实际情况真是啪啪打脸了,由下图可见,打印出的值是0,因为val的默认值是0,不属于1和2,所以inside操作符返回的是0。为什么会理解错了呢?主要还是将约束中的inside与sv 操作符的inside混淆了,所以真是学艺尚浅!!!
语法知识回顾: 实例截图如下:
- inside用在约束块中的情形
- inside做操作符的场景
上图内容分别来源于:
(1)https://blog.csdn.net/bleauchat/article/details/90381532?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161828208216780262512005%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161828208216780262512005&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-1-90381532.pc_search_result_hbase_insert&utm_term=constraint+inside&spm=1018.2226.3001.4187
(2)https://blog.csdn.net/gsjthxy/article/details/107510107?ops_request_misc=&request_id=&biz_id=102&utm_term=sv%20inside%E6%93%8D%E4%BD%9C%E7%AC%A6&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-107510107.pc_search_result_hbase_insert&spm=1018.2226.3001.4187