我正在创建一个AES verilog代码,我需要在4x4矩阵中收集16个输入[7:0],所以我需要定义它并实现矩阵的初始化。我怎么能这样做?
答案 0 :(得分: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循环在编译时展开,硬件中没有任何动态。