Algorithm 在Verilog中拆分位数组

Algorithm 在Verilog中拆分位数组,algorithm,verilog,Algorithm,Verilog,我正在verilog上设计一个基本的AES算法,我需要将一个128位的数组分成16个部分,每个部分8位 例如(基本8位示例),如果我接收到10111011,我需要生成4个输出10 11 10 11从数组检索字节是直接的: 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

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


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

从数组检索字节是直接的:

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

从数组中检索字节非常简单:

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

双压缩阵列可以工作:

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

双压缩阵列可以工作:

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