【问题标题】:Turning matrix to array in verilog 2005在verilog 2005中将矩阵转换为数组
【发布时间】:2018-09-25 00:32:43
【问题描述】:

我知道在 Verilog 中不能将矩阵传递给端口,所以我想知道如何将矩阵转换为数组。

考虑代码:

input [7:0] matrix1 [0:3][0:3];

该代码在 systemverilog 中有效,但在 Verilog 2005 标准中无效。

有人知道如何做到这一点吗?我需要它是可合成的。

【问题讨论】:

  • 你确定你的综合工具不能处理系统verilog语法吗?我的确实如此,并且我在硅片中使用了 2D 阵列(该阵列有效并且正在出售给客户)。当您将设计读入综合工具时,您可能只需要添加-sv 开关。
  • @nguthrie 你用什么工具?
  • 节奏属。由于 verilog 2005 已经 13 年了,我希望到这个时候许多其他工具能够支持一些 SV 语法,但我不确定,因为我只是使用这个。
  • @nguthrie 我还发现 systemverilog 的支持(验证之外)非常令人惊讶 - 以一种糟糕的方式。为了简单起见,我将使用 systemverilog。尽管如此,我非常有兴趣看到如何在 verilog 中完成它的答案。

标签: verilog


【解决方案1】:

你有选择。

将其分解为更小的端口:

module top();
// ...
example dut(
  .matrix1_0_0(matrix1[0][0]),
  .matrix1_0_1(matrix1[0][1]),
  // ...
  .matrix1_3_2(matrix1[3][2]),
  .matrix1_3_3(matrix1[3][3]),
  // ... other ports ...
);
//  ...
endmodule

module example(
  input [7:0] matrix1_0_0,
  input [7:0] matrix1_0_1,
  // ...
  input [7:0] matrix1_3_2,
  input [7:0] matrix1_3_3,
  // ... other ports ...
  );
wire [7:0] matrix1 [0:3][0:3];
assign matrix1[0][0] = matrix1_0_0;
// ...
assign matrix1[3][3] = matrix1_3_3;
// ... other logic
endmodule

合并到单个总线,然后使用+:-: 将其拆分回矩阵(请参阅part-select addressing):

module top();
// ...
integer i,j;
reg [8*4*4-1:0] matrix1_bus;
always @* begin
  for(i = 0; i<4; i=i+1) begin
    for(j = 0; j<4; j=j+1) begin
      matrix1_bus[ 8*( 4*i + j) +: 8] = matrix1[i][j];
    end
  end
end
example dut(
  .matrix1_bus(matrix1_bus),
  // ... other ports ...
);
//  ...
endmodule

module example(
  input [8*4*4-1:0] matrix1_bus,
  // ... other ports ...
  );
integer i,j;
reg [7:0] matrix1 [0:3][0:3];
always @* begin
  for(i = 0; i<4; i=i+1) begin
    for(j = 0; j<4; j=j+1) begin
      matrix1[i][j] = matrix1_bus[ 8*( 4*i + j) +: 8];
    end
  end
end
// ... other logic
endmodule

或混合/匹配两种方法的组合。

对于小型矩阵,您使用哪种方法并不重要。对于一个非常大的矩阵,特定的合成器工具、版本和合成约束可能开始成为使用哪种策略的因素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多