在SystemVerilog中根据数组中元素的存储方式,将数组细分为了packed数组和unpacked数组,packed数组一般使用拼接({})操作实现初始化赋值,unpacked数组则使用数值列表(‘{})的方式实现初始化赋值。根据大家熟知的绿皮书《SystemVerilog For Verification 2nd》中示例Sample 2.7中使用default等方式进行赋值,但是这个示例的仿真可能与我们期望的并不一样,仿真结果如下。

示例的仿真结果如下:

纳尼?为什么编译都不通过。主要是因为书中关于default的用法出现了错误导致的,此时想起了一句老话“尽信书不如无书”。那么下面我们将通过示例来说明如何对unpacked数组使用数值列表的方式进行各种赋值。示例之前,我们先来了解下SystemVerilog中对unpacked数组使用数值列表(value list)方式进行赋值的常见方式。

索引方式(index mode):通过数组“索引:数值”的方式对数组中具体元素进行赋值

位置方式(positional mode):通过数值列表与数组中元素位置上的对应关系实现对应位置元素的赋值

元素类型方式(type mode):通过制定数组中具体元素类型,实现对特定类型元素的赋值

默认值方式(default mode):通过在值列表中使用关键字“default”的方式对数组中元素设置默认值

重复值方式(replication mode):通过重复值的方式实现对于数组中多个元素赋相同值。

【示例】

【仿真结果】

通过示例的仿真结果可以看出,通过示例中的方法可以实现对于unpacked数组arr的赋值操作,一切都是合法的操作,那么是否可以将上述赋值的方法相互混合使用实现对于数组的赋值操作呢?我们可以通过下面示例一起了解下。

【示例】mode:positional+default

【仿真结果】

编译报错,在对unpacked数组进行初始化赋值时,不能将positional和default两种方式同时混用

【示例】mode:type + default

【仿真结果】

示例中,采用了type和default两种模式对数组进行初始化赋值,并且通过仿真结果我们可以看出,default的设置并没有起作用,这是因为该unpacked数组中所有元素的类型是一致的,所以此时采用类型(type)赋值将会作用于每个元素。

【示例】mode:index + default

【仿真结果】

示例中,通过”1:2’b01”和”2:2’b10”指定数组中索引为1和2的元素值分别是”2’b01”和”2’b10”,数组中其他元素没有通过索引指定的方式赋值,所以其他元素的值为default设置的值。

【示例】mode:replication + default

【仿真结果】

示例中,采用重复值和default混用的方式对数组元素进行赋值,编译不通过。在SystemVerilog中如果采用重复值方式对数组中元素进行赋值操作,不能与其他对数组进行初始化的方式混用

【示例】mode:index + type

【仿真结果】

示例中,除了索引指定的元素被赋值为2’b01外,其他数组元素的值均采用了数组元素类型指定的值2’b11。可见,可以同时采用索引值与类型方式对数组中元素进行赋值,并且索引值赋值方式优先级高于类型赋值方式。

【示例】mode:index + positional

【仿真结果】

示例中,采用索引值和位置混用的方式对数组元素进行赋值,编译不通过。这是因为在SystemVerilog中对unpacked数组进行初始化赋值时不能将位置与索引两种方式混用实现对数组的赋值操作。

通过上述示例,我们知道了《SystemVerilog For Verification 2nd》中Sample2.7错误的原因,并且知道了在对unpacked数组进行初始化赋值时可以采用哪些方式以及哪些方式可以组合使用,并且大家知道了在对数组进行赋值时需要注意以下几点:

Ø 不能采用位置与default模式混用的方式对数组中元素进行赋值;

Ø 采用元素类型与default模式混用的方式对数组中元素进行赋值时,元素类型的赋值具有更高的优先级,并且当数组中元素类型相同时,此时的default模式赋值将不起作用;

Ø 采用元素索引值与default模式对数组中元素进行赋值时,先完成对应索引值指定元素的赋值后,其他元素将采用default模式设置的默认值;

Ø 采用重复值模式对数组中元素进行赋值操作时,不能与任何其他赋值模式混用;

Ø 采用索引值与元素类型混用方式对数组中元素进行赋值,类型赋值优先级低于索引值赋值方式;

Ø 不能采用索引值与数组元素位置混用的方式对数组中元素进行赋值;

更多内容请关注下面公众号!

本文纯属学习之用,欢迎指正文中不足,封面图片若有侵权,请及时沟通!

硅芯思见:SystemVerilog中unpacked数组的assignment pattern相关推荐

  1. 硅芯思见:SystemVerilog中的类型转换有哪些

    硅芯思见 更多内容↑↑↑↑↑↑↑↑↑↑,其中更新更多内容! 本文纯属学习之用,欢迎指正文中不足,封面图片若有侵权,请及时沟通! 在SystemVerilog中,经常会用到$cast对数据类型进行转换, ...

  2. 硅芯思见:“软约束”到底有多“软”

    更多内容请关注下面公众号! 硅芯思见 本文纯属学习之用,欢迎指正文中不足,封面图片若有侵权,请及时沟通! 在SystemVerilog中,约束一般分为两种:一种称之为"硬约束hard con ...

  3. 硅芯思见:Timing Borrow深入浅出

    硅芯思见 更多内容↑↑↑↑↑↑↑↑↑↑,其中更新更多内容! 本文纯属学习之用,欢迎指正文中不足,封面图片若有侵权,请及时沟通! Timing Borrow技术又称为cycle stealing技术,其 ...

  4. 硅芯思见:SystemVerilog中的packedarray和unpacked array

    [注]因为在很多书籍资料中关于packed array和unpacked array有不同的翻译,有的称之为压缩数组和非压缩数组,有的称之为合并数组和非合并数组,为了避免混淆,本文不采用任何翻译名称, ...

  5. 硅芯思见:IC验证应读书推荐

    本文主要是跟大家分享一些在IC验证学习过程中的一些性价比极高的不错的书籍,通过这些书的学习,你的IC验证学习之路一定会很丰富!当然如果你时间充裕并且口袋比较富裕,觉得自己存数量比较少的话,你也可以买很 ...

  6. 硅芯思见:阻塞赋值与非阻塞赋值

    0 丑话说在前边 RHS:运算符(= or <=)右侧的表达式 LHS:运算符(= or <=)左侧的表达式 竞争(Race Condition):在同一仿真时间槽(time-slot)多 ...

  7. [SV]SystemVerilog中指定打印格式

    SystemVerilog中指定打印格式 前言:本文主要总结一下SystemVerilog中的占位符,通过合理的使用占位符,可以再log中按自己指定的格式打印信息,方便case分析及debug. 一. ...

  8. php在指定html元素中输出,如何从PHP中的数组输出html svg元素?

    我有svg元素的数组.我必须从列出的阵列中打印出来.我试图打印它,但它不工作.请指导我如何获取浏览器上呈现的svg元素. actualy有阵列中的其他项目我没有表现出bcoz的字符限制如何通过SVG标 ...

  9. C++中字符数组和字符串string

    字符数组 C++中字符数组用char str[]能够用来表示一个字符串. (1)   数组的大小和字符串的长度. 数组的大小一定要大于字符串的长度,由于系统会自己主动补上一个'\0'作为字符串的结束标 ...

最新文章

  1. 小米Redmi Note 8 Pro!无套路包邮免费送!
  2. 每日一皮:为这位姑娘的回答鼓掌!
  3. python 服务端渲染_客户端渲染和服务器渲染的区别
  4. vs2010 Qt插件报错Couldn't register all Qt4VSAddin command解决方案
  5. 什么标准规定了aes加密_Python 爬虫进阶必备 | 关于某租房网站数据加密的分析(送两本 Python 书)...
  6. 加载的图片还会有未来吗?
  7. android布局添加背景颜色,android-获取布局的背景色
  8. 一个把时间戳转成日期的javascript函数
  9. Adb命令笔记 --菜鸟的笔记
  10. 模糊图像退化与去模糊的数学模型
  11. 华为将发布定制款“鸿蒙字体”,可以免费商用
  12. 信息学奥赛一本通2061
  13. 子龙山人 opengl系列 - 网址
  14. 域策略(3)——限制用户使用USB移动存储设备
  15. vue.jsv-html,关于vue.jsv-bind的一些理解和思考.pdf
  16. 【备品备件需求】--入库记录查询增加仓库字段
  17. 什么是UserAgent
  18. elk面试题_ELK 原理 使用 面试
  19. jwt单点登录 和防重放攻击
  20. 对抗抑郁状态的良方--冥想

热门文章

  1. idea修改背景颜色|护眼色|项目栏背景修改
  2. Deep Web(深层网络or深度网络)
  3. iPhone手机屏幕三种故障及维修方法
  4. Linux 系统管理命令
  5. 双服务器架构实战飞桨部署-自动上色和老相片修复
  6. 一些学习gis有关的文章
  7. 电脑桌面右下方点击失灵,其他桌面区域正常
  8. 数据通信与计算机网络课后习题
  9. 字符串类(CString)
  10. java栈与堆的区别