Verilog 变量初始化

本文介绍了在Verilog中如何初始化FPGA内部的寄存器和BLOCK RAM。通过always块结合复位信号rst进行初始化,并提供了一种在无复位信号情况下的默认赋值方法。以计数器生成复位信号为例,阐述了未初始化变量可能导致的X状态问题及其影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初始化主要是针对FPGA内部有记忆的单元,例如寄存器、BLOCK RAM等,而对于无记忆的单元,例如wire,没有必要也无法对它们赋初值。

方法:

  1. always来时钟,用复位信号rst控制(通常用方法1)
  2. 定义时直接赋值,通常为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。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值