V0 第12节 数组操作

2023-12-10 19:39
文章标签 数组 操作 v0

本文主要是介绍V0 第12节 数组操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 非组合型unpacked

  • 对于Verilog,数组经常会被用来做数据存储,例如reg[15:0] RAM [0:4095]
  • SV 将Verilog这种声明数组的方式称为非组合型声明,即数组中的成员之间存储数据都是互相独立的
  • Verilog也不会指定软件去如何存储数组中的成员wire[7:0] table[3:0]
  • SV保留了非组合型的数组声明方式,并且扩展了允许的类型,包括event,logic,bit,byte,int,longint,shortreal和real类型
  • SV也保留了Verilog索引非组合型数组或者数组片段的能力
  • 声明数组的方式,以下两种皆可
    logic [31:0] data[1024];
    logic[31:0] data[0:1023];

2.组合型packed

  • SV将Verilog的向量作为组合型数组声明方式
    wire[3:0] select;//4比特的组合型数组
    reg[63:0] data;//64比特的组合型数组
  • SV也可以声明多维数组
    logic [3:0[7:0] data;//2维组合数组
  • 组合型packed除了可以运用的数组声明,也可以用来定义结构体的存储方式
typedef struct packed {logic [7:0] crc;logic [63:0] data;
}data_word;
data_workd [7:0] darray;//1位组合型数组,元素也为组合型结构体
  • 组合型数组和其数组片段也可以灵活选择,用来拷贝和赋值

3.初始化

  • 组合型packed 数组初始化时,同向量初始化一致
    logic [3:0[7:0] a = 32’h0;//向量赋值
  • 非组合型unpacked数组初始化时,则需要通过’{} 来对数组的每一个维度进行赋值
    int d [0:1][0:3] = ‘{’ {7,3,0,5}, '{2,0,1,6};

4. 赋值

  • 非组合型数组在初始化时,也可以类似结构体初始化,通过’{}和default关键词可以完成
    int a1 [0:7][0:1023] = ’ {default:8’ h55};
  • 非组合型数组的数据成员或者数组本身均可以为其赋值
    byte a[0:3][0:3];
    a[1][0] = 8’ h5;//为单个元素赋值

5. 拷贝

  • 对于组合型数组,由于数组会被视为向量,因此当赋值左右两侧操作数的大小和维度不相同时,也可以做赋值
  • 如果当尺寸不相同时,则会通过截取或者扩展右侧操作数的方式来对左侧操作数赋值
  • 对于非组合型数组,在发生数组间拷贝时,则要求左右两侧操作数的维度和大小必须严格一致
  • 非组合型数组无法直接赋值给组合型数组,同样地,组合型数组也无法直接赋值给非组合型数组

6. foreach循环结构

  • SV添加了foreach循环来对一维或者多维数组进行循环索引,而不需要指定该数组的维度大小
  • foreach循环结构中的变量无需声明
  • foreach循环结构中的变量是只读的,其作用域只在此循环结构中

7.系统函数

  • $dimensions(array_name) 用来返回数组的维度
  • $left(array_name,dimension)返回指定维度的最左索引值msb
  • l e f t ( ) 类 似 的 , 还 有 left()类似的,还有 left()(right,low,high}(array_name,dimension)
  • $size(array_name,dimension)可以返回指定维度的尺寸大小
  • $increment(array_name,dimension),如果指定维度最左索引值大于或等于最右索引值,那么返回1,否则返回-1
  • $bits(expression)可以用来返回数组存储的比特数目

这篇关于V0 第12节 数组操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/478149

相关文章

Java数组动态扩容的实现示例

《Java数组动态扩容的实现示例》本文主要介绍了Java数组动态扩容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1 问题2 方法3 结语1 问题实现动态的给数组添加元素效果,实现对数组扩容,原始数组使用静态分配

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

MySQL基本表查询操作汇总之单表查询+多表操作大全

《MySQL基本表查询操作汇总之单表查询+多表操作大全》本文全面介绍了MySQL单表查询与多表操作的关键技术,包括基本语法、高级查询、表别名使用、多表连接及子查询等,并提供了丰富的实例,感兴趣的朋友跟... 目录一、单表查询整合(一)通用模版展示(二)举例说明(三)注意事项(四)Mapper简单举例简单查询

Nginx概念、架构、配置与虚拟主机实战操作指南

《Nginx概念、架构、配置与虚拟主机实战操作指南》Nginx是一个高性能的HTTP服务器、反向代理服务器、负载均衡器和IMAP/POP3/SMTP代理服务器,它支持高并发连接,资源占用低,功能全面且... 目录Nginx 深度解析:概念、架构、配置与虚拟主机实战一、Nginx 的概念二、Nginx 的特点

MySQL 数据库进阶之SQL 数据操作与子查询操作大全

《MySQL数据库进阶之SQL数据操作与子查询操作大全》本文详细介绍了SQL中的子查询、数据添加(INSERT)、数据修改(UPDATE)和数据删除(DELETE、TRUNCATE、DROP)操作... 目录一、子查询:嵌套在查询中的查询1.1 子查询的基本语法1.2 子查询的实战示例二、数据添加:INSE

使用Python在PDF中绘制多种图形的操作示例

《使用Python在PDF中绘制多种图形的操作示例》在进行PDF自动化处理时,人们往往首先想到的是文本生成、图片嵌入或表格绘制等常规需求,然而在许多实际业务场景中,能够在PDF中灵活绘制图形同样至关重... 目录1. 环境准备2. 创建 PDF 文档与页面3. 在 PDF 中绘制不同类型的图形python

Java 操作 MinIO详细步骤

《Java操作MinIO详细步骤》本文详细介绍了如何使用Java操作MinIO,涵盖了从环境准备、核心API详解到实战场景的全过程,文章从基础的桶和对象操作开始,到大文件分片上传、预签名URL生成... 目录Java 操作 MinIO 全指南:从 API 详解到实战场景引言:为什么选择 MinIO?一、环境

在DataGrip中操作MySQL完整流程步骤(从登录到数据查询)

《在DataGrip中操作MySQL完整流程步骤(从登录到数据查询)》DataGrip是JetBrains公司出品的一款现代化数据库管理工具,支持多种数据库系统,包括MySQL,:本文主要介绍在D... 目录前言一、登录 mysql 服务器1.1 打开 DataGrip 并添加数据源1.2 配置 MySQL

Go语言中如何进行数据库查询操作

《Go语言中如何进行数据库查询操作》在Go语言中,与数据库交互通常通过使用数据库驱动来实现,Go语言支持多种数据库,如MySQL、PostgreSQL、SQLite等,每种数据库都有其对应的官方或第三... 查询函数QueryRow和Query详细对比特性QueryRowQuery返回值数量1个:*sql

Python操作Excel的实用工具与库openpyxl/pandas的详细指南

《Python操作Excel的实用工具与库openpyxl/pandas的详细指南》在日常数据处理工作中,Excel是最常见的数据文件格式之一,本文将带你了解openpyxl和pandas的核心用法,... 目录一、openpyxl:原生 Excel 文件操作库1. 安装 openpyxl2. 创建 Exc