首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SystemVerilog中调整动态数组的大小

在SystemVerilog中调整动态数组的大小
EN

Stack Overflow用户
提问于 2018-08-17 00:09:09
回答 2查看 1.9K关注 0票数 0

在SystemVerilog中,我有一个整数的动态数组。我需要修改这个数组,以便跳过前两个元素。为了向后兼容,我不能将数据类型更改为队列。(这将允许我做pop_front)。所以我想出了这段至少复制数组两次的繁琐代码。有没有更好的方法?

代码语言:javascript
复制
tmp_arr = new[dyn_arr.size() -2];         
for(int i = 0; i < tmp_arr.size(); i++) begin
  tmp_arr[i] = dyn_arr[i + 2];           // First Copy
end
dyn_arr = tmp_arr;                       // Second Copy

我的测试也在edaplayground进行。https://www.edaplayground.com/x/2VPm

EN

回答 2

Stack Overflow用户

发布于 2018-08-17 00:58:35

根据你的工具对流运算符的支持程度,你可以这样使用它:

代码语言:javascript
复制
dyn_arr = {>>$size(dyn_arr[0]){dyn_arr with [2:dyn_arr.size()-1]}};

这假设dyn_arr至少有3个元素长(即结果数组至少有1个元素长)。

否则,您可以始终使用循环将整个数组向下移位,而不是创建一个新数组:

代码语言:javascript
复制
for (int i = 2; i < dyn_arr.size(); i++) begin
  dyn_arr[i - 2] = dyn_arr[i];
end
dyn_arr = new[dyn_arr.size()-2] (dyn_arr); // Only include this if you need to use dyn_arr.size with the smaller size after the operation is complete
票数 1
EN

Stack Overflow用户

发布于 2018-08-17 00:59:09

不怎么有意思。流媒体运营商可以做到这一点,但可能更昂贵。

你可以试试

代码语言:javascript
复制
for(int i=2;i < dyn_arr.size(); i++)
   dyn_arr[i-2] = dyn_arr[i];
dyn_arr = new[dyn_arr.size-2] dyn_arr;

并希望编译器足够聪明,可以在不复制的情况下进行优化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51881296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档