0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SystemVerilog中数组的赋值、索引和切片

芯片验证工程师 来源:芯片验证工程师 作者:芯片验证工程师 2022-10-20 10:13 次阅读

首先看下下面的这个示例:

module PU;
 int A[2:0][3:0][4:0], B[2:0][3:0][4:0], C[5:0][4:0];
 initial
 begin
    A[0][2][4] = 1024; //row 0, column 2, element #4
    //display index #4 (i.e., 5th element)
    $display("A[0][2][4]=",A[0][2][4]);
    //display 5 elements of row 0, column 2
    $display("A[0][2]=",A[0][2]);
 
    //display row 0 (4 columns; 5   elements each)
    $display("A[0]=",A[0]);
    //display 3 rows * 4 columns of 5 elements each
    $display("A=",A);
    $display("
");
    B[1][1][1]=512; //row 1; column 1; element #1
    // assign a subarray composed of fve ints
    A[2][3] = B[1][1];
    //display 5 elements of row 2, column 3
    $display("A[2][3]=",A[2][3]);
    B[0][0][0]=128; //Assign only to the last unpacked element
    A[1] = B[0];
    $display("
");
    $display("A[1]=",A[1]); //display row 1 (4 columns; 5 
elements each)
    C[5][4]=64;
    A[0][1] = C[5];
    $display("
");
    $display("C[5]=",C[5]);
    $display("A[0][1]=",A[0][1]);
 end
 endmodule

仿真log:

A[0][2][4]= 1024 //index #4 (i.e., 5th element)
A[0][2]='{1024, 0, 0, 0, 0} //5 elements of row 0, column 2
A[0]='{'{0, 0, 0, 0, 0}, '{1024, 0, 0, 0, 0}, '{0, 0, 0, 0, 0}, '{0, 0, 0, 0, 0}}
//4 columns of row 0 with value assigned to column 2, element #4 (5th position)
A='{'{'{0, 0, 0, 0, 0}, '{0, 0, 0, 0, 0}, '{0, 0, 0, 0, 0}, '{0, 0, 0, 0, 0}}, '{'{0, 0, 0, 0, 
0}, '{0, 0, 0, 0, 0}, '{0, 0, 0, 0, 0}, '{0, 0, 0, 0, 0}}, '{'{0, 0, 0, 0, 0}, '{1024, 0, 0, 
0, 0}, '{0, 0, 0, 0, 0}, '{0, 0, 0, 0, 0}}}
//Entire 3 rows*4 columns (12 entries – 5 elements each with value assigned to 
column 2, element #5)
A[2][3]='{0, 0, 0, 512, 0} // display 5 elements of row 2, column 3
A[1]='{'{0, 0, 0, 0, 0}, '{0, 0, 0, 0, 0}, '{0, 0, 0, 0, 0}, '{0, 0, 0, 0, 128}}
// display row 1 (4 columns; 5 elements each)
C[5]='{64, 0, 0, 0, 0} //Row 5, 5 elements with index 4 assigned

A[0][1]='{64, 0, 0, 0, 0} //Row 0, column 1 of 5 elements
V C S S i m u l a t i o n R e p o r t

Packed和Unpacked数组作为子程序的参数

数组可以作为参数传递给子程序,当数组作为值传递给子程序时,会将这个数组复制一份传递给子程序。

task trial (int a[3:1][3:1]); //’a’ is a two-dimensional array
 //(2-D unpacked)

上面是一个SystemVerilog task声明的示例,该task会将一个2维unpacked数组作为参数值传递。

int b[3:1][3:1]; // OK: same type, dimension, and size
 int b[1:3][0:2]; // OK: same type, dimension, & size
 // (different ranges)
 logic b[3:1][3:1]; // ERROR: incompatible element type
 // (logic vs. int)
 event b[3:1][3:1]; // ERROR: incompatible type (event 
vs. int)
 int b[3:1]; // ERROR: incompatible number of dimensions
 int b[3:1][4:1]; // ERROR: incompatible size (3 vs. 4)

审核编辑 :李倩
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Verilog
    +关注

    关注

    28

    文章

    1326

    浏览量

    109298
  • 数组
    +关注

    关注

    1

    文章

    409

    浏览量

    25595

原文标题:SystemVerilog中数组的赋值、索引和切片

文章出处:【微信号:芯片验证工程师,微信公众号:芯片验证工程师】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言中数组的用法

    C语言的数组是一种数据结构,它可以存储多个相同类型的数据,例如整数,字符,浮点数等。数组的每个元素都有一个索引,用来表示它在数组中的位置。数组
    的头像 发表于 11-24 17:48 837次阅读
    C语言中<b class='flag-5'>数组</b>的用法

    西门子博途中如何读取其它类型数组的最大值及索引

    此程序可以求其它类型数组的最大值及索引,只要在FC中再添加一些程序即可。
    的头像 发表于 11-10 09:29 711次阅读
    西门子博途中如何读取其它类型<b class='flag-5'>数组</b>的最大值及<b class='flag-5'>索引</b>

    SystemVerilog相比于Verilog的优势

    我们再从对可综合代码的支持角度看看SystemVerilog相比于Verilog的优势。针对硬件设计,SystemVerilog引入了三种进程always_ff,always_comb
    的头像 发表于 10-26 10:05 363次阅读
    <b class='flag-5'>SystemVerilog</b>相比于Verilog的优势

    SystemVerilog:处理信号双驱动问题解析

    SystemVerilog中,类型可以分为线网(net)和变量(variable)。线网的赋值设定与Verilog的要求相同,即线网赋值需要使用连续赋值语句(assign),而不应该
    的头像 发表于 10-13 14:53 833次阅读
    <b class='flag-5'>SystemVerilog</b>:处理信号双驱动问题解析

    数组中如何增加切片的容量

    切片扩容 相对于数组而言,使用切片的一个好处是:可以按需增加切片的容量。 Golang 内置的 append() 函数会处理增加长度时的所有操作细节。要使用 append() 函数,需
    的头像 发表于 10-09 10:01 386次阅读
    <b class='flag-5'>数组</b>中如何增加<b class='flag-5'>切片</b>的容量

    golan共享底层数组切片

    nil 和空切片 有时,程序可能需要声明一个值为 nil 的切片(也称nil切片)。只要在声明时不做任何初始化,就会创建一个 nil 切片。 var num [] int 在 Gola
    的头像 发表于 10-09 09:56 400次阅读
    golan共享底层<b class='flag-5'>数组</b>的<b class='flag-5'>切片</b>

    golang通过切片创建新的切片

    通过切片创建新的切片 切片之所以被称为切片,是因为创建一个新的切片,也就是把底层数组切出一部分。
    的头像 发表于 10-09 09:48 435次阅读
    golang通过<b class='flag-5'>切片</b>创建新的<b class='flag-5'>切片</b>

    Go切片的内部实现

    切片 Go中提供了一种灵活,功能强悍的内置类型Slices切片(“动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使
    的头像 发表于 10-09 09:43 357次阅读
    Go<b class='flag-5'>切片</b>的内部实现

    数组的定义 什么是数组

    数组 数组是内置类型,是一组同类型数据的集合,它是值类型,通过从0开始的下标索引访问元素值。 在初始化后长度是固定的,无法修改其长度。当作为方法的参数传入时将复制一份数组而不是引用同一
    的头像 发表于 10-09 09:39 1336次阅读

    阻塞赋值与非阻塞赋值

    ”=“阻塞赋值与”
    的头像 发表于 09-12 09:06 642次阅读
    阻塞<b class='flag-5'>赋值</b>与非阻塞<b class='flag-5'>赋值</b>

    C语言中数组和结构体的内存表示和布局

    C语言中,数组和结构体都可以代表一块内存,但为什么结构体可以直接赋值,而数组不可以?这个问题涉及到C语言的设计哲学、语法规则以及内存布局的细节。本文将深入探讨这些问题,通过原理介绍和举例说明来解释为什么
    发表于 08-28 10:54 469次阅读

    C++数组名和数组拷贝详解

    C++数组赋值不能直接通过数组名称 randy = sesame进行,因为数组名并不是指针,大部分情况下,编译器会隐式转换为指向数组首元素
    发表于 08-21 15:09 298次阅读
    C++<b class='flag-5'>数组</b>名和<b class='flag-5'>数组</b>拷贝详解

    一文了解阻塞赋值与非阻塞赋值

    今天给大家普及一下阻塞赋值和非阻塞赋值的相关知识
    的头像 发表于 07-07 14:15 1454次阅读
    一文了解阻塞<b class='flag-5'>赋值</b>与非阻塞<b class='flag-5'>赋值</b>

    带你了解SystemVerilog中的关联数组

    SystemVerilog中,我们知道可以使用动态数组实现数组元素个数的动态分配,即随用随分
    的头像 发表于 06-09 09:46 4687次阅读
    带你了解<b class='flag-5'>SystemVerilog</b>中的关联<b class='flag-5'>数组</b>

    一些有趣的数组相关的SystemVerilog约束

    我们在工作中常常会针对数组施加各式的约束,下面列举一下有趣的**Systemverilog数组约束**示例
    的头像 发表于 05-30 11:13 450次阅读