-1

我正在创建一个 AES verilog 代码,我需要在一个 4x4 矩阵中收集 16 个输入 [7:0] 每个输入,所以我需要定义它并实现矩阵的初始化。我怎样才能做到这一点?

4

1 回答 1

4

如果您询问如何创建 Verilog 输入以获取该数组,您可能有多个输入、打包数组或在某些情况下未打包数组。

多个输入:

module aes (
  input [7:0] data_1,
  input [7:0] data_2,
  //...
  input [7:0] data_16
);

解包数组

module aes #(
  parameter DATA_W = 8,
  parameter BYTE_COUNT = 16,
) (
  input [DATA_W*BYTE_COUNT -1:0] data
);

Packed Array,不像其他类型那样常见:

module aes #(
  parameter DATA_W = 8,
  parameter BYTE_COUNT = 16,
) (
  input [DATA_W-1:0] data [0:BYTE_COUNT-1]
);

我不确定多维数组作为端口的支持情况如何,但在 SystemVerilog 2001 中支持多维数组类型。

要将数据保存为 4x4 数组:

reg [7:0] data [0:3][0:3];

如果这不是输入矩阵,而是移位并存储在触发器中,则初始化将由复位信号或另一个清除信号完成,用于异步复位:

integer x, y;
always @(posedge clk or negede rst_n) begin
  if (~rst_n) begin
    for (x=0,x<4,x=x+1) begin
      for (y=0,y<4,y=y+1) begin
        data[x][y] <= 8'h00 ;
      end
    end
  end
  else begin
    //Control on rising edge of clk
  end
end

注意: for 循环在编译时展开,硬件中没有任何动态。

于 2012-11-15T08:43:29.757 回答