我在系统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;发布于 2017-09-08 13:30:51
由于您在concat中反转数组,所以没有很好的方法来表示它。你有:
bit [7:0] a[8];这相当于
bit [7:0] a[0:7];在您的接口中,您从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],并将索引排序保持不变。但是,它将不会像上面的情况那样,再次反转数组。
发布于 2017-09-10 06:31:36
您可以通过typedef定义新的数据类型。
typedef bit[7:0] octet;
typedef octet upack[7:0];
function bit [64:0] cat8 (upack a);
// your code
endfunction;发布于 2017-09-12 10:45:23
下面的工作应该适合你
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
endmodulehttps://stackoverflow.com/questions/46114075
复制相似问题