登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Design IC

慢即是快,快即是慢

 
 
 

日志

 
 

SystemVerilog——容器类型(1):动态数组  

2010-11-02 19:41:06|  分类: SystemVerilog |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

来源:http://systemverilog.co/wiki/Container_Types

 

Verilog仅仅提供了数组作为数据集合,并且此标准数据类型有诸多限制:

  • 数组的长度是一个常数,尽管固定长度数组对硬件建模很好,但是对行为级建模验证来说灵活性不够。
  • 由于数组的长度是固定的,插入操作非常困难
  • 很难对比较大的稀疏矩阵建模

为了克服这些限制,SystemVerilog引入了一些全新的数组类型,包括:

  • 动态数组
  • 列表
  • 队列
  • 关联矩阵
动态数组

动态数组类似C++中的new[]操作。可以在运行时指定数组大小。也可以删除以及重新分配动态数组。一旦动态数组被创建,将具有未打包的数组功能。动态数组必须在初始化之前先声明。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// declaration
data_type array_name [];
 
// allocation
array_name = new[size_expression];
 
// allocation along with declaration
data_type array_name = new[size_expression];
 
// declaration and initialization
array_name = new[size_expression](initialization_array);
 
// assignment
array_name = another_array;

支持如下操作:

new[]()

new[]函数将会为数组分配内存。此函数需要一个整数参数作为数组的大小,以及一个可选参数表示数组的类型。此可选参数可以是一个固定长度的数组,或者是另外一个动态数组,抑或是其他的容器类型(队列/列表),甚至是文字数组。如果此设置了参数,此参数用来对动态数组的元素进行初始化。

1
2
3
4
int size = 4;
logic [7:0] data[]; // array declaration
data = new[size]({32, `bx, 0, `hBD});
data = new[2*size];

注意:用来指定数组大小参数的表达式不需要在编译时间是常数。可以对某个动态数组多次分配内存,之前分配的内存将会被垃圾回收器回收。

delete()

SystemVerilog为动态数组定义了delete()方法,此方法显式的收回动态数组的内存,类似C++中的delete[].

 

size()

size()方法返回值为数组长度的整数。对还没有被分配内存的动态数组以及被删除的数组,此函数返回'0'.

1
2
3
4
5
6
7
8
9
10
11
12
13
module top;
  initial begin
    bit [3:0] foo [], bar[];
    int count = 16;
    $display(foo.size());   // displays 0;
    foo = new[count];
    $display(foo.size());   // displays 16;
    bar = new[20](foo);
    $display(bar.size());   // displays 20;
    foo.delete();
    $display(foo.size());   // displays 0;
   end
endmodule: top
  评论这张
 
阅读(3192)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018