在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
12
返回列表 发新帖
楼主: zhuimeng2020

[求助] 数组中的default赋初值不能用吗

[复制链接]
 楼主| 发表于 2023-3-9 15:38:23 | 显示全部楼层


eaglezhang01 发表于 2023-3-9 12:15
我反倒是特别欣赏你这样的学习方式,自己动手敲一敲代码,实验一下,这不就发现书的错误了吗,有的人读了发 ...


不敲都记不住,每次翻书又是新的知识,就是时间不太够用,
 楼主| 发表于 2023-3-9 15:39:15 | 显示全部楼层


saipolo 发表于 2023-3-9 15:21
讲真,没啥意思这样子搞。你就不能老老实实写个循环来赋值?或者$readmem赖赋值?新手不要关注这些东西,没 ...


get,大佬随便一说又是知识盲区 $readmem没用过 5555
发表于 2023-3-9 16:46:21 | 显示全部楼层


zhuimeng2020 发表于 2023-3-9 15:39
get,大佬随便一说又是知识盲区 $readmem没用过 5555


这个default给联合数组(关联数组)赋初值的语法之所以少见是有原因的,因为验证对数据的初始化常用受约束的随机变量来控制,而这个随机化过程大多是放在Transaction里面进行的(使用UVM的话)——而transaction可容纳的数据类型明显比联合数组来得多,且可以通过factory机制和field automation宏注册后快速打印,而存粹的联合数组明显在随机化过程和打印过程都没那么便利。
所以你很少看到验证环境会直接使用联合数组来进行不同数据类型的操作——因为对于复杂的数据类型的组合的操作,验证优先使用的都是transaction来进行,例如初始化、随机化、约束、打印、TLM端口的传递、config_db的传递都可以通过transaction来传递,而通过联合数组则反而没那么方便,假如不用UVM只用sv则是通过class类的OOP来封装进行。
当然,你需要写一个类似于python那样的{key:value}键值对的字典,偏要用字符串寻址的联合数组的话倒是可以用一下该语法。当时同理,在class里面分别rand一个key和一个value变量,通过约束随机化的->语法也可以代替{key:value}键值对的实现,且人家只需要两个变量,而字符串寻址的联合数组需要存储所有的键值对的大数组,且无法随机化。

default赋初值最常见到的也就是在case/casex/casez语句对吧,因为case这类语句的分支选择过程的确存在所选的分支不充分去写的可能,例如3个bit的变量的case语句明明有2^3=8个分支你却只用了5个分支,另外3个分支无效,所以才需要default进行无效分支的赋值。
但数组的使用过程,需要无效分支赋值的只有动态内存空间的数组(其余可以通过数字下标一一对应),所以,无效的分支选择对于无法使用数字下标的unpacked联合数组而言,连联合数组本身都有transaction来代替而很少见了,它的初始化过程来用节约打字的语法自然更冷门。
而查了下SystemVerilog 3.1a Language Reference Manual(就是绿皮书前言提到的那个语言参考手册LRM),这个语法除了联合数组外,也存在于struct里出现多种数据类型(如string、int、bit、real组合而成)的结构体,无聊消遣可以自己去翻,同样可以用default来省略其他数据类型赋初值的过程。但同理——验证对于这类复杂数据结构的数据结构体,更偏向于直接使用一个class类/transaction来进行封装和约束随机化,而不是使用复杂的多种数据类型的typedef出来的结构体然后大量地进行赋初值。

简单来说,它的语法所使用的场景,除了case语句外,都因为使用类的面向对象编程和UVM/VMM方法学的原因而被验证替代了,自然冷门少见——因为验证有更好的选择了。这语法的存在更像是为了兼容老的验证语法(如之前大量使用了C语言/VPI的环境),而保留下来的兼容性语法,深入掌握的意义不大,还不如更多地研究下约束随机化的过程,OOP的一些特性等等。


您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-16 00:24 , Processed in 0.015927 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表