-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
);

他のタイプほど一般的ではない、パックされた配列:

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 に答える