0

我正在 Verilog 上设计一个基本的 AES 算法,我需要将一个 128 位数组分成 16 个部分,每个部分为 8 位。

例如(基本 8 位示例),如果我收到 10111011 我需要生成 4 个输出 10 11 10 11

4

2 回答 2

4

从数组中检索字节很简单:

module huge_array (
  input [128-1:0] data
);
  wire [7:0] first_byte,
  assign first_byte = data[7:0];

  wire [7:0] second_byte,
  assign second_byte = data[8*2-1:8*1];
endmodule

如果将数据格式化到内存中会容易得多。

module huge_array2 (
  input [7:0] data [0:16]
);
  wire [7:0] first_byte,
  assign first_byte = data[0];

  wire [7:0] second_byte,
  assign second_byte = data[1];
endmodule
于 2012-11-15T17:18:28.030 回答
2

双包装数组有效:

reg [127:0] in;
wire [15:0] [7:0] out_1 = in; // msb in entry 15
wire [0:15] [7:0] out_2 = in; // msb in entry 0

如果一次只需要读取一个字节,则可以使用 Verilog-2001 或 SystemVerilog 如下:

reg [127:0] in;
reg [3:0] idx;
wire [7:0] out = in[8*idx +: 8];
于 2013-01-09T22:49:31.720 回答