sv--动态数组

动态数组

动态数组可以认为是一个非合并数组,动态数组在声明时没有指定数组的大小,在对数组初始化时(调用new[ ])需要指定数组的大小,从而分配内存空间。

动态数组的语法规则

[data_type] [data_name] = [];
int data = [];

动态数组使用

[代码示例]

module tb;
//dynamic array 

  int array [];
  logic [7:0] data [];
  
  initial begin
    
    array = new[5];
    data = new[3];
    
    array = '{31,22,13,6,99};
    data = '{8'd10,8'd12,8'd19};
    
    $display("array.size() = %0d",array.size());
    $display("data.size() = %0d",data.size());
    
    foreach(data[i])begin
      $display("data[%0d] = %0d",i,data[i]);
    end
    
    foreach(array[i])begin
      $display("array[%0d] = %0d",i,array[i]);
    end
    
    data.delete();
    
    $display("data.size() = %0d",data.size());
    
  end
  

[代码结果]

Contains Synopsys proprietary information.
Compiler version S-2021.09; Runtime version S-2021.09;  Oct 15 22:47 2023
array.size() = 5
data.size() = 3
data[0] = 10
data[1] = 12
data[2] = 19
array[0] = 31
array[1] = 22
array[2] = 13
array[3] = 6
array[4] = 99
data.size() = 0
           V C S   S i m u l a t i o n   R e p o r t 
Time: 0 ns
CPU Time:      0.540 seconds;       Data structure size:   0.0Mb
Sun Oct 15 22:47:09 2023
Done

动态数组的赋值

[代码示例]

module tb;
//dynamic array 

  int id [];
  int sum [];
  string  name [];
  
  initial begin
    
    sum = new[3];
    name = new[2];
    
    sum = '{1,3,4};  
    id = new[2](sum);
    name = '{"zhangsan","lisi"};
    
    foreach(id[i])
      $display("id[%d] = %d",i,id[i]);
  end
  
endmodule

[代码结果]

Contains Synopsys proprietary information.
Compiler version S-2021.09; Runtime version S-2021.09;  Oct 15 23:14 2023
id[          0] =           1
id[          1] =           3
           V C S   S i m u l a t i o n   R e p o r t 
Time: 0 ns
CPU Time:      0.480 seconds;       Data structure size:   0.0Mb
Sun Oct 15 23:14:37 2023

赋值注意事项

动态数组在new[ ]中设置动态数组大小时,并不完全需要匹配所赋数组的大小。当初始化动态数组的大小较大时,赋值的常量数组会被截断以匹配;当它较小时,初始化的数组将使用默认值填充以获得指定的大小。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值