当前位置: 代码迷 >> 综合 >> Systemverilog 第六课 Array/Queue/Method
  详细解决方案

Systemverilog 第六课 Array/Queue/Method

热度:65   发布时间:2023-12-18 22:41:35.0

第六课

Dynamic array

1.动态数组在定义时不需要确定数组的大小,用空括号[]声明,但是在仿真时需要声明,完成仿真后即可释放。
2.当元素个数以及元素基本类型相同时,固定长度的数组可以被assign给动态数组
3.$size函数可以用于返回固定长度/动态数组的长度。
4.有size和delete等命令。

data_type name_of_dynamic_array[];
name_of_dynamic_array = new[number of elements];

在这里插入图片描述
图中new[20] (dyn)在重新定义动态数组元素宽度的同时,将原来的dyn元素复制四次之后赋给了dyn[20],即重复0,1,2,3,4,0,1,2……序列。
若想要完全重新的定义,则使用下面一条语句dyn = new[100];
思考题:new[100]的初始值是什么?

Queue

语法:

data_type queue_name[$];

建立队列时需要在括号中填入$
1.队列提供了非常方便的排序和查找功能,并且可以很方便地插入新元素。
2.不需要new[]命令
3.可以使用push和pop命令

int j = 1;
b[$] = {3,4};
q[$] = {0,2,5};initial beginq.insert(1,j);	//表示在索引号第1位插入j元素,最低位对应0。q.insert(3,b);q.delete(1);q.push_front(6);j=q.pop_back;q.push_back(8);j=q.pop_front;
end 

在这里插入图片描述

Associative Array

语法:

data_type associative_array_name [*];

用于稀疏记忆体,可以动态调用数组中的元素,存储非邻接的元素。
因此适用于目录范围较大,但是实际存储较少的数组,associative array的空白部分不会消耗内存。(类似于perl的哈希数组)
在这里插入图片描述
用法:
1.associative array常和foreach一起使用。
2.尝试调用未定义的元素时,会返回x(四态)或者0(两态)。
3.可以使用first,next,prev,delete,exists等函数。

Method

method指对数组进行的算法,包括:1.sum,product,and,or以及xor
在这里插入图片描述
图中由于on的数据类型是bit,因此i会循环生成0和1。

2.array locator methods:sort,rsort,reverse,find_first,find_first_with_index
随机化的时候经常用到
在这里插入图片描述
注意返回值都是返回到队列当中。
find_index返回目标值的索引值,例如图中返回的是数字9,8,4的索引值。
更全面的语法需要查询语法手册
在这里插入图片描述
上图中(x>7)的判断式返回1或者0,即真或假,因此第一句实际上是对(1,0,1,0,0,0)进行了sum运算,只有(x>7)*x才是元素本来的值。

  相关解决方案