multidimensional-array - 如何输出多维数组切片

标签 multidimensional-array system-verilog

假设我有一个多维数组:

logic [7:0] mda [7:0];

我现在要做的是将 mda[7:4] 分配给输出端口,即定义如下:

output [31:0] odata;

当然,我可以使用连接来完成:

assign odata = {mda[7], mda[6], mda[5], mda[4]};

但是应该有(而且可能是)更简单的方法来做到这一点。第一次尝试是:

assign odata = mda[7:4];

这是错误的,因为类型(未打包 <-> 打包数组)不匹配。我所有的转换尝试(例如 32'(mda[7:4]))都失败了。问题是:将该切片分配给输出端口的最佳方法是什么?

最佳答案

您可以使用 for 循环...大多数综合工具都可以在恒定范围内使用 for 循环:

module dut(output [31:0] odata);

  logic [7:0] mda [7:0];  

  reg[31:0] data;
  always @* begin
    data = 0;
    for(int i=7; i >=4; i--) begin
      data <<= 8;
      data |= mda[i];
    end
  end

  assign odata = data;

endmodule

这是一个快速测试:http://www.edaplayground.com/x/GfM

关于multidimensional-array - 如何输出多维数组切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25883974/

相关文章:

arrays - 如果最长的表的长度大于或等于5,如何将每个表的长度更改为等于最长的表的长度?

verilog - 如何正确处理零位宽情况?

java - 玩家在数组中的移动

python-3.x - python : In place transpose of a matrix

system-verilog - 大 SystemVerilog 约束的示例

system-verilog - Array.sum() 返回意外值

system-verilog - SystemVerilog 覆盖范围 : Create a bin for each element of an enum

arrays - 将整个 2D 压缩数组分配给具有相同元素数量的 1D 压缩数组

c++ - 逐个字符地添加字符串到 2dim 数组中

java - 如何将排序的 Map 转换为 JTable 的二维数组