我正在创建一个 AES verilog 代码,我需要在一个 4x4 矩阵中收集 16 个输入 [7:0] 每个输入,所以我需要定义它并实现矩阵的初始化。我怎样才能做到这一点?
问问题
16825 次
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
);
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 循环在编译时展开,硬件中没有任何动态。
于 2012-11-15T08:43:29.757 回答