将解压缩数组的元素连接在一起

时间:2017-09-08 10:13:26

标签: system-verilog

我在系统Verilog代码中使用以下函数。我想知道是否有一种惯用的方式来实现相同的效果,也许不需要宽度硬连线。我尝试过流媒体运营商,但却无法让它们发挥作用。我需要使用解压缩的数组。非常感谢。

function bit [64:0] cat8 (bit [7:0] a[8]);
   return { a[7], a[6], a[5], a[4], a[3], a[2], a[1], a[0] };
endfunction;

3 个答案:

答案 0 :(得分:1)

因为你在concat中反转数组,所以没有好的方法来表达它。 你有:

bit [7:0] a[8];

相当于

bit [7:0] a[0:7];
在你的concat中,你从最重要的位开始a[7]7是数组中最不重要的索引。

这就是流媒体运营商在您的情况下不起作用的原因。

所以,如果你真的需要反转数组,那么你拥有的就是你所拥有的,否则你会发现这两件事是等价的:

{ a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7] }

{ >> {a}}

当然你可以将你的数组声明为bit [7:0] a[7:0]并保持concat中的索引顺序。但它会再次反转数组,如上例所示。

答案 1 :(得分:0)

您可以通过typedef定义新的数据类型。

typedef bit[7:0] octet;
typedef octet upack[7:0];

function bit [64:0] cat8 (upack a);
  // your code
endfunction;

答案 2 :(得分:0)

下面应该适合你

module top;
  function bit [63:0] cat8 (bit [7:0] a[8]);
   return { <<8{a}};
    endfunction;
    bit [7:0] arr[8];

    initial begin
    arr= '{1,2,3,4,5,6,7,8};
    foreach (arr[i])$display("%h", arr[i]);
        $display("%h", cat8(arr));
    end
endmodule