VIVADO设定寄存器/存储器的初始值
VIVADO设定寄存器/存储器的初始值
目录
前言
一、为什么不利用复位赋初值?
二、寄存器如何赋初值?
三、存储器如何赋初值?
四、vivado中如何查看寄存器/存储器的初值?
总结
前言
在 FPGA 开发过程中,合理设定寄存器或存储器(如 BRAM、ROM)的初始值对于系统功能验证与上电行为控制至关重要。许多设计者习惯使用复位信号对寄存器或存储器进行初始化。然而,依赖复位并非总是最优解。复位逻辑会增加额外的资源开销,拉长时序路径,甚至在复杂设计中影响时钟收敛。我们可以利用 Vivado 提供的“赋初值”方法,在 HDL 代码中直接为寄存器和存储器设置上电初值,该方法能确保电路在上电时进入预期状态,避免因不确定初值导致的逻辑错误或测试失败。
提示:以下是本篇文章正文内容,禁止转载,引用请附上链接!
一、为什么不利用复位赋初值?
什么时候需要复位?到底要不要复位?怎么复位?复位有什么用?这是设计者在编写代码时需要考虑的问题。官方给出的几条建议如下,大家可以参考
二、寄存器如何赋初值?
直接在定义时即可赋初值,如下所示,定义了一个8bit位宽的寄存器并赋初值。
reg [7:0] register = 8'b11110000;
三、存储器如何赋初值?
先定义再用 initial 语句赋初值。很多人的第一印象是verilog不会综合initial语句,但在vivado中,是支持的,存储器赋初值如下所示:
integer i;
reg [7:0] mem[2:0];
initial begin
for(i=0;i<3;i=i+1)
begin
mem[i]<=i;
end
end
四、vivado中如何查看寄存器/存储器的初值?
在 vivado 综合后的 netlist 可以查看任何一个寄存器的初始值,自己找到需要查看的寄存器,右键点击cell properties 即可查看初始值。
查看 register 的初值如下图所示,可见与设置的初始值8'b11110000一致,存储器的也是一样,这里就不贴图了,自己可以试一下。
利用 Vivado 提供的“赋初值”方法,在编写代码的时候没必要复位的寄存器就可以不使用复位,在定义时赋初值即可,这样可以节约布线资源,加快且有利于时序收敛。
总结
以上就是今天记录的内容,本文利用 Vivado 提供的“赋初值”方法,在 HDL 代码中直接为寄存器和存储器设置上电初值,该方法能确保电路在上电时进入预期状态,避免因不确定初值导致的逻辑错误或测试失败。