【问题标题】: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;
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多