sv中的新数据类型queue/关联数组

本文介绍了SystemVerilog中的关联数组数据结构,它在处理大量但稀疏的数据时能有效节省内存。关联数组只在写入元素时分配内存,适合存储稀疏矩阵。文中展示了关联数组的声明、初始化、遍历和删除元素的方法,并通过示例代码说明其使用。关联数组提供exists()函数来检查元素是否存在,支持first()和next()函数进行索引操作。
摘要由CSDN通过智能技术生成

1. 静态数组/动态数组/关联数组

  • 队列:像动态数组一样,队列可以增长和缩小,但是队列可以很方便地添加和删除元素。b[$] = {3,4};
  • 关联数组:
    • 如果想要处理具有数千兆字节范围的地址,而实际执行中只会涉及到部分地址,此时创建一个大型数组分配和初始化千兆字节会非常浪费。
    • SystemVerilog提供了关联数组数据结构。SystemVerilog仅在写入元素时为其分配内存。如下图,关联数组保存值0:3,42,1000,4521和200,000。 用于存储这些数据的内存远远少于存储200,000个数据的固定或动态数组内存
    • 下面是关联数组的声明,初始化和执行。关联数组使用 [*]声明。
initial begin
logic [63:0] assoc[*], idx = 1;
// Initialize widely scattered values
repeat (64) begin
assoc[idx] = idx;
idx = idx << 1;
end
// Step through all index values with foreach
foreach (assoc[i])
$display("assoc[%h] = %h", i, assoc[i]);
// Step through all index values with functions
if (assoc.first(idx))
begin // Get first index
do
$display("assoc[%h]=%h", idx, assoc[idx]);
while (assoc.next(idx)); // Get next index
end
// Find and delete the first element
assoc.first(idx);
assoc.delete(idx);
end
//关联数组的声明,初始化,使用;关联数组用来保存稀疏矩阵的元素
//声明:在方括号中放置数据类型的形式来声明,也可以用通配符作为下标来进行声明(不建议这样是使用)
//可以使用函数exists()这个函数来检查元素是否存在,如果元素尚未被写入,SV会返回数组类型的缺省值,对双状态是0,对于四状态是X,即未知态
module test;
initial begin 
bit [63:0] assoc[bit[63:0]],idx=1;
//对稀疏矩阵元素进行初始化
repeat(64) begin
	assoc[idx] = idx;
	idx = idx << 1;//每次左移一位
end
//使用foreach遍历数组
$display("this is 1:");
foreach(assoc[i])
	$display("assoc[%h]=%h",i,assoc[i]);//这里使用16进制打印,每4位代替16二进制
	
//使用函数遍历数组,first和next函数会返回1或0;
$display("this is 2:");
if(assoc.first(idx))begin
	do 
		$display("assoc[%d]=%d",idx,assoc[idx]);//这里按10进制打印
		while(assoc.next(idx));//得到下一个索引
	end
	
//找到第一个元素
assoc.first(idx);
//删除第一个元素
assoc.delete(idx);
$display("The array now has %0d elements",assoc.num);
end 
endmodule 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值