|
发表于 2023-3-8 11:24:05
|
显示全部楼层
本帖最后由 qsh123_123 于 2023-3-8 11:35 编辑
1,使用某种不常见的语法之前,请充分理解该语法的含义以及所使用的场合。default赋初值不能用于普通的packed数组。
2,参考《IEEE Std1800-2017 IEEE Standard for SystemVerilog--Unified Hardware Design, Specification, and Verification Language》的7.8.6、7.8.7和7.9.11章节,他们都是描述Associative arrays和Associative array methods的,引用原文如下图,仔细分析理解一下红框内的说明:“If a default value is specified, then reading a nonexistent element shall yield the specified default value...”——这里面说明了,当去读取联合数组的不存在的成员时,default的值才会被返回。
在其中的章节7.8.6里面提到的表格7-1可以很明显地看到,这段语法描述的nonexistent entry限定在了Variable-size unpacked array的类型里面,而这种size容量可变的unpacked数组只有动态数组、队列和联合数组,且IEEE里面的default赋初值的语法举例只出现在associative array联合数组里面。普通的数组是带有数字下标且对应的value是跟数字下表positional对应的,只有联合数组是不一定存在数字下标(例如用string作为下标index搜索),这类数组才会出现nonexistent的index/entry去查找数组内容,所以default语法在这里才有意义。
所以,很明显,你还没理解该语法的用途所限定的场景就随意扩展到普通的数组上了,报错不是很正常么。
3,不要给团队随意增加难以阅读的代码风格,特别是常人不去翻IEEE语法字典都看不懂的代码风格——这是给其他人增加毫无意义的工作量的同时,对验证工作的推进和实际功能验证本身还没啥帮助。难道你会给自己不常用的语法风格写注释解释不成?
说实话,这段语法连我都需要去翻查IEEE字典才看懂其作用。先熟悉常用语法和其使用场景,再去扩展自己的能力边界。。不常用的知识有点像鸡肋,食之无味弃之可惜,学有余力有空的时候,拿来消遣还行,例如《哈利波特》里面的赫敏那样,拿大部头字典来消遣一下,也是不错的,或许会比玩游戏看看剧更香,业余时间去鼓捣吧,嗯。。。
|
|