初始化主要是针对FPGA内部有记忆的单元,例如寄存器、BLOCK RAM等,而对于无记忆的单元,例如wire,没有必要也无法对它们赋初值。
方法:
- always来时钟,用复位信号rst控制(通常用方法1)
- 定义时直接赋值,通常为0(没有复位信号时用方法2)
示例:用计数器生成复位信号,将寄存器变量初始化为零:
//复位:1;工作:0
module test(
refclk,rst
);
input wire refclk;
output reg rst;
reg [2:0] time_cnt =3’d0;
reg [2:0] time_cnt_n =3'd0;
always@ (posedge refclk)
begin
time_cnt <= time_cnt_n;
end
always@ (*)
begin
if(time_cnt[2] == 1'b1)
begin
time_cnt_n = time_cnt;
rst = 1'b0;
end
else
begin
time_cnt_n = time_cnt + 1'b1;
rst = 1'b1;
end
end
endmodule
仿真波形:
若没有初始化为零:
reg [2:0] time_cnt;
reg [2:0] time_cnt_n;
输出为X状态,意味着信号数值的不确定,即在实际电路里,信号可能为 1,也可能为 0。