[size=11.818181991577148px]四、上电初始值
[size=11.818181991577148px] 以 Cyclone III 为例 ,signaltap 实测结果
[size=11.818181991577148px](1)程序中有异步 复位 的情况
[size=11.818181991577148px]always@(posedge clk or negedge reset)
if(!reset)
dataout1<=4'd5;
else ......
[size=11.818181991577148px] 异步复位/置位 上电就等于复位初始值;异步置位的寄存器后边接有反相器,实现置位功能,因为只有异步复位端。
[size=11.818181991577148px]output reg [3:0] dataout1=4'd3;
[size=11.818181991577148px]always@(posedge clk or negedge rst_n )
if(!rst_n)
begin
dataout1<=4'd1;
end
[size=11.818181991577148px] 上电等于 4'd1。
(2) 同步
[size=11.818181991577148px] always@(posedge clk )
if(!rst_n)
begin
dataout2<=4'd5;
dataout1<=4'd1;
[size=11.818181991577148px]end
[size=11.818181991577148px]同步复位/置位 上电不等于复位初始值,全是0;
[size=11.818181991577148px]output reg [3:0] dataout1=4'd3;
[size=11.818181991577148px]always@(posedge clk )
if(!rst_n)
begin
dataout1<=4'd1;
end
[size=11.818181991577148px] 上电等于 4'd3 。
[size=11.818181991577148px](3)
[size=11.818181991577148px]output dataout2<=4'd8;
[size=11.818181991577148px]上电等于 4'd8。
[size=11.818181991577148px](4)网上有人说 在 Analysis&Synthesis setting 设置pow up don't care 可以对上电 初值设置,试了试,没有任何效果 !!
[size=11.818181991577148px]从datasheet 了解到 FPGA芯片内有 POR Circuitry ,上电后,对寄存器reset(复位清0),所以实际上上电后,寄存器都是 0 ,异步置位的情况,在寄存器后加了反相器,实现上电置位的功能,而同步置位比较复杂,则实现不了。
[size=11.818181991577148px] 上边的结果是实测的,可能只适用于Cyclone III系列。
[size=11.818181991577148px]五、异步复位同步释放,上电初值
[size=11.818181991577148px] reg reset;
always@(posedge clk or negedge rst_n)
if(!rst_n)
reset<=1'b0;
else reset<=rst_n;
[size=11.818181991577148px]always@(posedge clk )//or negedge reset)
if(!reset)
begin
dataout1<=4'd0;
end
[size=11.818181991577148px] always@(posedge clk1 or negedge reset1)
if(!reset1)
begin dataout2<=4'd0; end
else if(state==state0)
dataout2<=4'd5;
[size=11.818181991577148px] 寄存器 reset ,dataout1,dataout2 不能位于同一个 LAB ,原因:
[size=11.818181991577148px] reset 寄存器本省需要aclr 信号 rst_n,rst_n占用一个异步复位线(LAB-wide),reset又作为dataout1的aclr,所以reset的输出会占用另一个异步复位线(LAB-wide),dataout2需要reset1作为aclr,然而,一个LAB 只有两条 异步复位线,所以资源不够用 !
[size=11.818181991577148px] reset ,dataout1 ,dataout2中任意两个都可以在同一个 LAB中 !
[size=11.818181991577148px]六、
[size=11.818181991577148px]output reg [3:0] dataout1=4'd3;
[size=11.818181991577148px]always@(posedge clk )
if(!reset)
begin
dataout1<=4'd0;
end
[size=11.818181991577148px]即使选中 Fource use synchronous clear signals,对于 dataout1[1:0]这两位,也不会接reset到专用同步清零sclr端,因为上电默认这两位是 1 ,按照异步清零的方式,在后边加了反相器,所以连到sclr 会出现同步复位变成 1 的情况;这两位会使用 LUT资源,实现同步复位,上电置位,不会有任何冲突 !
[size=11.818181991577148px] dataout1[3:2] 的专用 sclr 接reset 没有任何问题。