FPGA中复位可以分为两种异步复位和同步复位。
1,关于异步复位
下面给出一段异步复位的代码:
always @ (posedge clk or negedge rst_n)
if(!rst_n) b<=0;
else b<=a;
这就是异步复位。
硬件图:

2,关于同步复位
下面给出一段同步复位的代码:
always @ (posedge clk )
if(!rst_n) b<=0;
else b<=a;
这就是同步复位。
3,两者的区别优缺点
FPGA的寄存器有支持异步复位的专用端口,因此采用异步复位不需要增加额外的硬件资源,但异步复位存在的亚稳态问题。而对于同步复位,这需要额外的硬件资源,同样同步复位也存在亚稳态问题,只不过因为额外硬件的加入降低了亚稳态出现的概率。
(但是我个人通过综合得到的RTL图是一样。。。不知道在哪里有错——可能是综合软件设置的问题)
4,异步复位同步释放
input clk ;
input rst_n;
output rst_n2;
reg rst_n2,rst_n1;
always @ (posedge clk or negedge rst_n)
if(!rst_n) rst_n1<=1'b0;
else rst_n1<=1'b1;
always @ (posedge clk or negedge rst_n)
if(!rst_n) rst_n2<=1'b0;
else rst_n2<=rst_n1;
然后,rst_n2作为复位信号,这样就解决了亚稳态问题。
|