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

相关文章

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

hdu 1166 敌兵布阵(树状数组 or 线段树)

题意是求一个线段的和,在线段上可以进行加减的修改。 树状数组的模板题。 代码: #include <stdio.h>#include <string.h>const int maxn = 50000 + 1;int c[maxn];int n;int lowbit(int x){return x & -x;}void add(int x, int num){while

v0.dev快速开发

探索v0.dev:次世代开发者之利器 今之技艺日新月异,开发者之工具亦随之进步不辍。v0.dev者,新兴之开发者利器也,迅速引起众多开发者之瞩目。本文将引汝探究v0.dev之基本功能与优势,助汝速速上手,提升开发之效率。 何谓v0.dev? v0.dev者,现代化之开发者工具也,旨在简化并加速软件开发之过程。其集多种功能于一体,助开发者高效编写、测试及部署代码。无论汝为前端开发者、后端开发者

C语言:柔性数组

数组定义 柔性数组 err int arr[0] = {0}; // ERROR 柔性数组 // 常见struct Test{int len;char arr[1024];} // 柔性数组struct Test{int len;char arr[0];}struct Test *t;t = malloc(sizeof(Test) + 11);strcpy(t->arr,

C 语言基础之数组

文章目录 什么是数组数组变量的声明多维数组 什么是数组 数组,顾名思义,就是一组数。 假如班上有 30 个同学,让你编程统计每个人的分数,求最高分、最低分、平均分等。如果不知道数组,你只能这样写代码: int ZhangSan_score = 95;int LiSi_score = 90;......int LiuDong_score = 100;int Zhou

动手学深度学习【数据操作+数据预处理】

import osos.makedirs(os.path.join('.', 'data'), exist_ok=True)data_file = os.path.join('.', 'data', 'house_tiny.csv')with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n') # 列名f.write('NA

线程的四种操作

所属专栏:Java学习        1. 线程的开启 start和run的区别: run:描述了线程要执行的任务,也可以称为线程的入口 start:调用系统函数,真正的在系统内核中创建线程(创建PCB,加入到链表中),此处的start会根据不同的系统,分别调用不同的api,创建好之后的线程,再单独去执行run(所以说,start的本质是调用系统api,系统的api

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

MySQL——表操作

目录 一、创建表 二、查看表 2.1 查看表中某成员的数据 2.2 查看整个表中的表成员 2.3 查看创建表时的句柄 三、修改表 alter 3.1 重命名 rename 3.2 新增一列 add 3.3 更改列属性 modify 3.4 更改列名称 change 3.5 删除某列 上一篇博客介绍了库的操作,接下来来看一下表的相关操作。 一、创建表 create

计算数组的斜率,偏移,R2

模拟Excel中的R2的计算。         public bool fnCheckRear_R2(List<double[]> lRear, int iMinRear, int iMaxRear, ref double dR2)         {             bool bResult = true;             int n = 0;             dou