【问题标题】:Assigning the entirety of a 2D packed array to a 1D packed array with the same number of elements将整个二维压缩数组分配给具有相同元素数量的一维压缩数组
【发布时间】:2022-11-15 18:44:22
【问题描述】:
我有以下信号:
logic [X-1:0][Y-1:0] twoDim;
logic [(X*Y)-1:0] oneDim;
我想将整个 twoDim 分配给 oneDim 即如果我写了这样的东西:
assign oneDim = twoDim;
parameter X = 5 那么我希望行为与以下相同:
assign oneDim = { twoDim[4], twoDim[3], twoDim[2], twoDim[1], twoDim[0] };
对于 X、Y 的所有可能值(int unsigned),这将如何在 Synthesizable SystemVerilog 中简洁地完成?
【问题讨论】:
标签:
arrays
system-verilog
hdl
register-transfer-level
【解决方案1】:
如果你尝试这样的分配,你会得到一个错误,因为合成器不知道你的二维数组的结构以及它如何展平它。在您的情况下,您希望一个接一个地存储行,这称为行优先排列。
您可以使用 generate for 循环生成可合成代码:
localparam X = 10; // N rows
localparam Y = 20; // N cols
// Note I swapped X and Y dimensions
logic [Y-1:0][X-1:0] twoDim;
logic [(X*Y)-1:0] oneDim;
genvar i;
generate
for (i = 0; i < X; i = i + 1) begin
assign oneDim[i*Y +: Y] = twoDim[i];
end
endgenerate;