FPGA复位分为:同步复位和异步复位
复位信号在时钟有效沿到来时候有效,复位操作是“瞬间的”。
优点:
一、可以滤除高于时钟频率的毛刺,提高复位操作的可操作性。
二、同步复位系统可以被设计为纯粹的同步时序电路,有利于时序分析。
缺点
必须保证复位信号的有效持续时间大于一个时钟周期,否则复位信号有可能被当做毛刺滤除掉,系统将漏掉一次本来应有的复位操作。
不管时钟信号的有效沿是否到来,只要复位信号的有效沿到来,就执行一次复位操作,故异步复位操作是“持续的”。
存在的问题:
一、异步信号释放的时刻和时钟有效沿比较接近的时候,容易导致寄存器的输出呈现亚稳态,
二、复位信号管理的寄存器比较多时,这些寄存器分布在芯片上的不同地方,故而复位信号到达各个寄存器的路径延迟参差不齐,故如果异步复位信号释放的时刻和时钟信号的有效沿很接近的时候,可能会导致一部分寄存器在该时钟有效沿之前完成复位,而另一部分寄存器在该时钟有效沿之后才完成复位操作,此时会出现时钟周期的偏差,从而可能导致后续的逻辑功能混乱。
三、复位信号容易受到毛刺等干扰的影响。
2 复位的设计方法
同步复位一般比异步复位耗费额外的资源,故资源比较少的时候采用低电平有效的异步复位、同步释放机制。
所谓同步信号指的是复位信号和时钟信号处于用一个时钟域下。
//verilog example
always @(posedge clk)begin
if(!rst)begin
<此处描述复位状态>;
end
else begin
<statements>;
end
end
//verilog example
always @(posedge clk or negedge)begin
if(!rst)begin
<此处描述复位状态>;
end
else begin
<statements>;
end
end
异步信号:复位信号和当前的时钟信号处于不同的时钟域。此时无论采取的是异步复位还是同步复位,都有可能会造成系统的逻辑出现混乱(**跨时钟域问题**)。
一般先将该异步信号同步化,同步化采取采样法。
登录后复制
//verilog example
//先将异步复位信号采样
always @(posedge clk)
begin
tmp <= arst;
rst <= tmp;
end
always @(posedge clk)begin
if(!rst)
begin
<statements>;
end
else begin
<statements>;
end
end
//verilog example
//先将异步复位信号采样
always @(posedge clk)
begin
tmp <= arst;
rst <= tmp;
end
always @(posedge clk or negedge rst)begin
if(!rst)
begin
<statements>;
end
else begin
<statements>;
end
end
由于复位信号的高扇出原因(同时钟信号一样,复位信号几乎作用于设计中的所有寄存器),必须设法使得扇出系数减小。
采取的方法:寄存器复制 正确利用全局时钟树(BUFG)
一般fpga芯片在上电的时候都会被先重置为一个预先设定好的状态,相应的使得FPGA芯片的局部复位到某个指定的状态时候,采用局部复位的方式。
两级复位体系:FPGA芯片必须设计一个全局复位信号,当设计中不止包含一个时钟域的时候,此全局复位信号经过不同的时钟域同步化之后,转化为每个时钟域的全局复位信号,与此同时,每个时钟域划分为若干局部子时钟域,这样为每个子域提供一个复位信号。全局复位采用异步复位的方式,局部信号采用同步复位的方式。
//verilog example
always @(posedge clk or negedge globalRst)begin //area1
if(!globalRst)begin
<statements>;
end
else begin
if(!localRst1)begin
<statements>;
end
else begin
<statements>;
end
end
end
always @(posedge clk or negedge globalRst)begin //area2
if(!globalRst)begin
<statements>;
end
else begin
if(!localRst2)begin
<statements>;
end
else begin
<statements>;
end
end
end
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删