我在verilog上设计一个基本的AES算法,我需要将128位数组分成16个部分,每个部分为8位。
例如(基本的8位示例),如果我收到10111011,我需要生成4个输出10 11 10 11
答案 0 :(得分: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
答案 1 :(得分: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];