SystemVerilog打包阵列与解压缩阵列内存占用

时间:2013-07-29 17:50:54

标签: arrays simulation system-verilog packed

使用现代先进的SV RTL仿真器,使用解压缩阵列与打包阵列时,仿真占用空间是否正确?如果是这样,这是一个问题,验证团队是否坚持使用打包数组的规则? TIA。 桑杰

1 个答案:

答案 0 :(得分:3)

  

“使用解压缩时,模拟足迹可能会增加   数组与打包数组?“

这取决于模拟器分配和访问其内存。大多数情况下打包的阵列将具有比解包数组更小的内存占用。通常足迹大小差异不是很充分。当模拟器从内存访问数组时,压缩数组会运行整个数组,而解压缩的数组会访问一部分。当阵列很大并且不需要同时访问整个阵列时,解压缩的阵列比打包阵列具有更好的性能。

  

“这是一个问题,设计团队是否坚持使用设计规则   打包数组?“

如果运行模拟器的机器有足够的内存来运行模拟,那么无关紧要。即使如此,内存占用限制也不应该是设计规则。设计规则应侧重于质量,性能,芯片/ FPGA限制和可读性。如果调整阵列结构有助于满足实际设计规则,那么减少的内存占用是一个附带的好处。

在处理有限的系统内存(或非常长的模拟时间)时,测试台和非可综合模型是不同的故事。校准打包和解包的阵列是需要考虑的众多因素之一。许多商业模拟器都附带了指导文档,以获得最佳模拟结果。

一般数组指南:

  • 打包数组 - 可合成 - 在访问整个数组算法操作时最佳,并支持位选择和部分选择(LRM§7.4.1)
    • 示例:reg [31:0] packed_array;
  • 解压缩数组 - 可合成 - 当数组很大或每个条目必须单独访问时最佳(LRM§7.4.2)
    • 示例reg unpacked_array [31:0]; reg [31:0] unpacked_array_of_packed_arrays [15:0];
  • 关联数组 - 无法合成 - 最好能够访问所有条目,并且不太可能访问模拟中的大多数实体(LRM§7.8)
    • 示例int associative_wildkey [*]; logic [127:0] associative_keytype [int];
  • 队列 - 无法合成 - 当条目数未知且数据访问类似于管道时最佳(LRM§7.10)
    • 示例bit [7:0] queue [$];
  • 动态数组 - 无法合成 - 最好在需要动态创建整个数组时,最好在完成数组时删除数组,并且不进行模拟(LRM§7.5)
    • 示例int dynamic_array[]; initial dynamic_array = new[8];
  • 向量网 - (检查合成器手册) - 最好只访问整个打包条目,不允许进行位选择和部分选择(可能内存较小)足迹因为这个)。仅限于净类型(LRM§6.9.2)
    • 示例wire vectored [7:0] vec;