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

    文章

    1351

    浏览量

    110123
  • 数组
    +关注

    关注

    1

    文章

    417

    浏览量

    25960

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

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

收藏 人收藏

    评论

    相关推荐

    Labivew 实现鼠标在数组中选中元素时,精准的显示所在位置的行、列值方法

    在项目开发,遇到一个布尔的二维数组输入控件,选中数组元素并索引出行列的操作,试过其他大佬的方法,不是特别精准,,尝试一下还可以,分享给需要的朋友 *附件:选中二维
    发表于 12-21 18:07

    数组名之间可以直接赋值

    数组之间的赋值能不能直接使用等于号?比如这样的代码。 int main(){ int a[5] = {1, 2, 3, 4, 5}; int b[5] = {0}; b = a
    的头像 发表于 11-26 11:23 147次阅读

    MATLAB的矩阵索引

    对矩阵进行索引是从矩阵中选择或修改部分元素的一种方式。MATLAB 有几种索引样式,它们不仅功能强大、灵活,而且可读性强、表现力强。矩阵是 MATLAB 用来组织和分析数据的一个核心组件,索引是以可理解的方式有效操作矩阵的关键。
    的头像 发表于 09-05 09:28 471次阅读
    MATLAB<b class='flag-5'>中</b>的矩阵<b class='flag-5'>索引</b>

    labview字符串数组转化为数值数组

    在LabVIEW,将字符串数组转换为数值数组是一项常见的任务,尤其是在处理数据采集、信号处理或用户输入时。 1. 理解LabVIEW的数据类型 在开始之前,了解LabVIEW的数据
    的头像 发表于 09-04 17:47 2398次阅读

    一文了解MySQL索引机制

    的呢?一起静下心来,耐心看完这篇文章吧,干货不啰嗦,相信你一定会有所收获。 一、索引模型 模型也就是数据结构,常见的三种模型分别是哈希表、有序数组和搜索树。 了解MySQL的朋友已经知道,现在MySQL默认使用的是InnoDB存储引擎,使用的是
    的头像 发表于 07-25 14:05 299次阅读
    一文了解MySQL<b class='flag-5'>索引</b>机制

    嵌入式零长度数组基本操作方法

    C语言零长度数组,听起来可能有点奇怪,因为它没有分配内存空间,无法存储数据。但实际上,零长度数组在Linux内核随处可见。 零长度数组的定义 首先,我们要明白什么是零长度
    的头像 发表于 05-11 08:49 955次阅读
    嵌入式<b class='flag-5'>中</b>零长度<b class='flag-5'>数组</b>基本操作方法

    深入探索KUKA KRL数组应用

    如果 CHAR 类型数组的所有数组元素都拥有相同的字符串,则不必单独初始化每个数组元素。忽略右侧的数组下标。(对于一维数组下标,不写下标。)
    的头像 发表于 04-18 10:37 1262次阅读
    深入探索KUKA KRL<b class='flag-5'>中</b>的<b class='flag-5'>数组</b>应用

    为什么指针之间不要随意赋值呢?

    指针之间也不能随意赋值
    的头像 发表于 03-28 17:13 692次阅读
    为什么指针之间不要随意<b class='flag-5'>赋值</b>呢?

    随机抽取SV数组的一个元素方法实现

    如果想从一个关联数组随机选取一个元素,需要逐个访问它之前的元素,原因是没办法能够直接访问到第N个元素。上面的程序示范了如何从一个以整数值作为索引**的关联数组
    的头像 发表于 03-21 10:11 1026次阅读
    随机抽取SV<b class='flag-5'>数组</b><b class='flag-5'>中</b>的一个元素方法实现

    在Vivado Synthesis怎么使用SystemVerilog接口连接逻辑呢?

    SystemVerilog 接口的开发旨在让设计中层级之间的连接变得更加轻松容易。 您可以把这类接口看作是多个模块共有的引脚集合。
    的头像 发表于 03-04 15:25 968次阅读
    在Vivado Synthesis<b class='flag-5'>中</b>怎么使用<b class='flag-5'>SystemVerilog</b>接口连接逻辑呢?

    mapgis如何给区属性赋值

    地进行数据分析和可视化。 在MapGIS给区属性赋值有多种方法,下面将详细介绍其中的几种常用方法。 1.手动赋值 手动赋值是最直接和简单的方法。首先,在MapGIS
    的头像 发表于 02-23 17:49 2315次阅读

    proteus属性赋值工具怎么用

    赋值工具的详细使用方法。 一、打开Proteus软件并建立威廉希尔官方网站 图 首先,打开Proteus软件,并在工具栏上选择“新建”。然后,在弹出的对话框中选择威廉希尔官方网站 图的类型,例如“Schematic Capture”。 二、选择元件添加到威廉希尔官方网站 图中 在Proteus软件,可以从库中选
    的头像 发表于 02-23 17:19 4678次阅读

    verilog同步和异步的区别 verilog阻塞赋值和非阻塞赋值的区别

    Verilog是一种硬件描述语言,用于设计和模拟数字威廉希尔官方网站 。在Verilog,同步和异步是用来描述数据传输和信号处理的两种不同方式,而阻塞赋值和非阻塞赋值是两种不同的赋值方式。本文将详
    的头像 发表于 02-22 15:33 1745次阅读

    数组和链表在内存的区别 数组和链表的优缺点

    数组和链表在内存的区别 数组和链表的优缺点  数组和链表是常见的数据结构,用于组织和存储数据。它们在内存的存储方式以及优缺点方面存在一些
    的头像 发表于 02-21 11:30 1050次阅读

    PHP数组的使用方法!

    PHP数组的使用方法! PHP是一种广泛使用的网络编程语言,它的数组功能非常强大且灵活。数组是一种数据结构,它允许我们在单个变量存储多个
    的头像 发表于 01-12 15:11 558次阅读