将解压缩数组的元素连接在一起
Concatenating elements of unpacked array together
我在我的 System 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;
既然你在concat中反转了数组,就没有好的表达方式了。
你有:
bit [7:0] a[8];
相当于
bit [7:0] a[0:7];
在您的 concat 中,无论 7
是数组中的最低有效索引,您从最高有效位开始 a[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 中保持索引排序。但它会不会再次反转数组,如上例所示。
您可以通过typedef
定义新的数据类型。
typedef bit[7:0] octet;
typedef octet upack[7:0];
function bit [64:0] cat8 (upack a);
// your code
endfunction;
以下应该适合您
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
我在我的 System 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;
既然你在concat中反转了数组,就没有好的表达方式了。 你有:
bit [7:0] a[8];
相当于
bit [7:0] a[0:7];
在您的 concat 中,无论 7
是数组中的最低有效索引,您从最高有效位开始 a[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 中保持索引排序。但它会不会再次反转数组,如上例所示。
您可以通过typedef
定义新的数据类型。
typedef bit[7:0] octet;
typedef octet upack[7:0];
function bit [64:0] cat8 (upack a);
// your code
endfunction;
以下应该适合您
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