FPGA寄存器的上电初值

2020-02-27 21:16发布

PGA内部寄存器的上电初值是什么? 有说是低的,有说是高的, 也有说和器件相关的,还有些人说是不确定. 对于一个系统来讲, 用户并不在意初值是高电平,或者是低电平, 用户真正关心的是寄存器的初值是不是确定可预测的,也就是说每次编译,每次上电的初值是不是一致的。
来举个例子,有个客户在调试FPGA设计,在头一个月编译的几百次结果中,一个寄存器的初值一直都是低电平。某一天改了一部分看似不相关的代码之后,这个寄存器的初值从此之后就变成高电平了。这种情况通常会让用户不知所措,非常痛苦。后来在我们的一起努力下,采用了一些措施,最终可以控制寄存器的初值.
那么到底是什么?简单说,寄存器的初值是由综合工具(synthesis tool)决定下来的,综合synthesis过后,电路网表就确定了,初值也就决定了。换句话说,初值不会随后端的布局布线过程影响。但是如果没有针对性的规则来约束综合synthesis,那么一次编译后的初值和上一次编译的初值是有可能不一样的,当然更多的时候是一样的。本文后面会对这个现象作进一步分析的.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
14条回答
星星之火红
2020-02-28 09:26
2.2 没有异步复位,也没有异步置位的寄存器代码
这种情况比较复杂,让我们来看两个例子。
2.2.1 较简单的场景
module top(
input wire clk,
input wire d,
input wire cke,
output reg q
);
always @(posedge clk)
begin
if(cke==1'b1)
q <= d;
end
endmodule


在寄存器的输入比较简单的情况下,其对应的网表如图Figure 2.3. 综合工具不使用RST/SET功能。FPGA后端工具默认使用RST,并把RST连接到地GND. 那么显然上电初值为0.

一周热门 更多>