前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >logic [3:0] [7:0] [5:0] jerry_play [15:0] [7:0] [4:0] 这个数组你会玩吗?

logic [3:0] [7:0] [5:0] jerry_play [15:0] [7:0] [4:0] 这个数组你会玩吗?

作者头像
IC验证
发布2020-06-30 14:15:24
5570
发布2020-06-30 14:15:24
举报
文章被收录于专栏:杰瑞IC验证杰瑞IC验证

“数组遍历顺序和中国古代的丞相有什么关系?”

来源| 杰瑞IC验证(ID:Jerry_IC) |原创 作者| Jerry Ren

Jerry问大家,SystemVerilog中的数组会玩吗?

有人说了“ 请把那个“吗”字去掉!哥们虽是初学验证也不至于不会玩数组吧?”

哥们儿,今天先帮我看下这个数组:

logic [3:0][7:0][5:0]jerry_play[15:0][7:0][4:0];

这个数组怎么遍历?这个数组是什么引用顺序? 怎么样?有没有小小的晕晕乎乎?

有人又说了,这个数组现实中谁会这么用?没用过这么多维的!

这个理由不错,但是这个复杂的梳理不清楚,你就敢保证简单的数组能理解的很清晰吗?万一碰到需要维数稍微多点的数组怎么办呢?

01

好了,闲话不多说,我们直接来一段代码,先告诉你想遍历这个数组应该怎么写:

foreach(jerry_play[i,j,k,l,m,n])
begin
       jerry_play[i][j][k][l][m][n] = 1;
end

对于初学者中的初学者,Jerry还是要提醒一句,请注意这个写法的细节:

foreach括号里面jerry_play[i,j,k,l,m,n]中间的循环因子是逗号隔开这样列出来的哦!

注意绝对不能写成这样:

foreach(jerry_play[i][j][k][l][m][n])❌

而里面用的时候是这样写:

jerry_play[i][j][k][l][m][n] = 1;

里面的i、j、k等这些字母就是代表各个维度的循环变量,名字你可以自己起哦。

又有人问了:我有的维度不想遍历怎么办?

告诉你,你可以“不写字母但是把坑留上”,结合代码自己理解,比如:

foreach(jerry_play[ ,j,k,l,m,n])
begin
       jerry_play[0][j][k][l][m][n] = 1;
end

02

说了半天,什么i、j、k、l、m、n,到底和我们的jerry_play这个数组怎么对应的??

我们再把这个数组请出来,告诉大家对应关系如下:

即, i 对应15:0维度

j 对应7:0维度

k 对应4:0维度

l 对应3:0维度

m 对应7:0维度

n 对应5:0维度

相信不清楚这个顺序的看到这里应该很清楚了,但是也许你过两天就忘了!!

不要怕!! 帮你记住它是Jerry的义务:

一种方法呢就是可以尝试理解下为什么是这个顺序,这个原因其实是和SystemVerilog的仿真器存储数组元素的方式有点关系。先走非合并数组的维度、再走合并数组的维度。感兴趣可以自己查更多的资料研究研究。

如果那种想不清楚也没关系,来粗暴点!老规矩,上Jerry的心法口诀:

“先右边再左边,每边保持从左到右的汉字读法”

为什么先右边再左边呢?因为自古右为上嘛,中国古代丞相分为左右丞相,往往也是右丞相更大嘛,哈哈。到了各自的那一边后,像读课文一样从左到右就OK了!又扯远了, 但是只要你记住了我就很欣慰了~

03

不过说真的,说到数组呢,其实还有很多好玩的,比如:

byte [3:0] JERRY_AA [2][ ][ $ ];

这个数组你会玩吗?

再比如:

int JERRY_BB [1][2][ ]=new[4];

这句话Jerry明确告诉你是错的!你真的知道错在哪里吗?

哈哈哈,关注杰瑞IC验证,来日方长!Jerry以后和大家一起慢慢玩!

今天就先聊到这里,祝各位同学天天开心,大吉大利~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杰瑞IC验证 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档