FPGA复位问题分析与解决

FPGA复位分为:同步复位和异步复位

1.1同步复位


复位信号在时钟有效沿到来时候有效,复位操作是“瞬间的”。

优点
一、可以滤除高于时钟频率的毛刺,提高复位操作的可操作性。
二、同步复位系统可以被设计为纯粹的同步时序电路,有利于时序分析。

缺点
必须保证复位信号的有效持续时间大于一个时钟周期,否则复位信号有可能被当做毛刺滤除掉,系统将漏掉一次本来应有的复位操作。

1.2异步复位


不管时钟信号的有效沿是否到来,只要复位信号的有效沿到来,就执行一次复位操作,故异步复位操作是“持续的”。

存在的问题
一、异步信号释放的时刻和时钟有效沿比较接近的时候,容易导致寄存器的输出呈现亚稳态,
二、复位信号管理的寄存器比较多时,这些寄存器分布在芯片上的不同地方,故而复位信号到达各个寄存器的路径延迟参差不齐,故如果异步复位信号释放的时刻和时钟信号的有效沿很接近的时候,可能会导致一部分寄存器在该时钟有效沿之前完成复位,而另一部分寄存器在该时钟有效沿之后才完成复位操作,此时会出现时钟周期的偏差,从而可能导致后续的逻辑功能混乱。
三、复位信号容易受到毛刺等干扰的影响。
2 复位的设计方法


同步复位一般比异步复位耗费额外的资源,故资源比较少的时候采用低电平有效的异步复位、同步释放机制。

2.1 同步信号同步复位


所谓同步信号指的是复位信号和时钟信号处于用一个时钟域下。




//verilog example
always @(posedge clk)begin
	if(!rst)begin
		<此处描述复位状态>;
	end
	else begin
		<statements>;
	end
end

2.2 同步信号异步复位


//verilog example
always @(posedge clk or negedge)begin
	if(!rst)begin
		<此处描述复位状态>;
	end
	else begin
		<statements>;
	end
end

2.3 异步信号同步复位


异步信号:复位信号和当前的时钟信号处于不同的时钟域。此时无论采取的是异步复位还是同步复位,都有可能会造成系统的逻辑出现混乱(**跨时钟域问题**)。
一般先将该异步信号同步化,同步化采取采样法。




登录后复制
//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

2.4 异步信号异步复位


//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

2.5 复位信号的扇出问题


由于复位信号的高扇出原因(同时钟信号一样,复位信号几乎作用于设计中的所有寄存器),必须设法使得扇出系数减小。
采取的方法:寄存器复制   正确利用全局时钟树(BUFG)

2.6 全局复位和局部复位

​ 一般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







免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空