logic [7:0] rega [5:0]
...
rega[5] <= 8'd9; //数组类型使用与赋值,index 标号从0开始
rega[3:0][5] <= 4'd4; // verilog 版本不支持这种模式,sv可以
always(*) begin
for(int i = 0;i<6;i++)begin
rega[i] = i; // 需要用组合逻辑(塞赋值),不需要时间直接赋值成功
end
end
always(posedge clk , negedge rst) begin
if (!rst) begin
for(int i = 0;i<6;i++)begin
rega[i] <= i; // 需要用时序逻辑(非塞赋值),一个时钟后赋值成功
end
end else begin
...
end
end
...
rega = {8'd0,8'd1,8'd2,8'd3,8'd4,8'd5};
for 语句运用,和c语言的for语句有本质的区别,硬件for语言硬件的复制操作,增加硬件面积。
多次生成 generate
genvar gen_i
generate
for(gen_i = 0;gen_i<100;gen_i++)begin
...// 也可以是元器件例化
end
endgenerate
多数据量赋值,移位寄存器。
always(posedge clk , negedge rst) begin
if (!rst) begin
for(int i = 0;i<6;i++)begin
rega[i] <= i; // 需要用时序逻辑(非塞赋值),一个时钟后赋值成功
end
end else begin
for(int gen_i = 0;gen_i<9;gen_i++)begin
reg[i+1] <= reg[i];
end
reg[0] <= i_reg;
end
end