SystemVerilog结构体

本文首发于微信公众号“芯片学堂”,作者JKZHAN

在上一篇文章《SystemVerilog枚举》中,介绍了枚举类型的本质和使用语法。本文接着介绍SV中同样不可忽略的结构体(structure)和自定义类型(typedef),最后也会给出一小段涵盖绝大部分语法点的例程。个人觉得编程语言的熟练掌握更多在平时练习和思考,语法忘掉了随时可以查阅。

认识结构体

结构体(structure)是一种可以包含不同数据类型元素的集合类型。这一点跟数组、队列等集合类型是不一样的,数组和队列只能包含相同数据类型的元素。结构体在引用的时候,可以对这些元素进行整体引用,也可以通过元素名称来对元素进行单独引用。

基于这个特性,结构体通常可以用来表征一个包含了诸多不同类型属性的对象。比如,当我们想要表征一个人的所有属性的时候,名字元素可以用string类型,年龄元素可以用int类型,存款元素可以用real类型等等,最后可以通过对整体引用来获得一个人的所有属性,也可以通过元素名称来获得单个属性。

另一个栗子,可以使用结构体来定义某个寄存器的结构。在结构体类型定义的时候,我们可以在内部使用logic [n:m]等基本数据类型来定义寄存器的不同域段。这样一来,我们不但可以对寄存器进行整体引用,又可以使用元素名来很方便地读写寄存器的各个域段。

讲完结构体的逻辑结构,下面来看看结构体的物理结构。

在内存存储一个结构体的时候,SV提供了packed关键字用来区分合并(packed)和非合并(unpacked)存储方式。“合并”这个概念在另一篇文章《SystemVerilog数组类型》中也有涉及。合并的结构体,其元素会被无间隙的存放到一块连续的内存空间上。而非合并的结构体,其物理结构一般依赖于C编译器。SV默认是非合并的,这是为了提高内存空间的利用率,如果用户想要用合并的,需要在struct关键字后面加上packed。

合并的结构体是有不少用处的。第一,合并结构体的整体可以被当成一个向量来看待,这样一来,合并结构体的赋值、读取和数值计算上多了灵活性;第二,合并结构体可以通过在packed关键字后面加signed/unsigned来指定为有无符号类型,排在第一个位置的元素最高位为符号位,相比之下,非合并的结构体是不能被指定为有符号类型的。

结构体的使用

SV结构体的特性跟C语言基本一致,但在语法上有差别。比如在C语言中,定义一个结构体类型,是在struct关键字后面加上structure tag名来作为类型名称;而在SV中,统一使用typedef来定义结构体类型名称。

这里穿插介绍一下typedef。typedef是SV中提供用来重定义类型名的关键字,一般也叫做用户自定义类型。其最大的好处就是可以将一些“又臭又长”的类型定义成简短的类型名,特别是在一些复杂的testbench中会经常遇到。使用typedef可以提高编程效率,也可以通过新的类型名来提高代码的可读性。

看看代码吧

下面代码和注释总结了结构体的使用方法,个人觉得掌握例程中的内容对工作来说已经完全足够啦,但例程同样没有经过编译哈。

image

参考文献
[1] IEEE Standard Association. "IEEE Standard for SystemVerilog-Unified Hardware Design, Specification, and Verification Language." (2013).

关注IC_Talking 获取更多文章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355

推荐阅读更多精彩内容