大型设计全局复位—异步复位同源释放
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在一个FPGA项目设计之初,全局网络的建立至关重要,其中包括时钟网络和复位网络。而通常设计者对时钟网络的规划尤为小心,可却忽视了复位网络,这个复位跟时钟一样也是一个覆盖全局、高扇出的信号,如果处理不当也会导致意想不到的错误。很多人会问,到底复位信号选择同步还是异步、高电平还是低电平有效?对于这个问题,下文做了论述:
异步or 同步?
以下是同步、异步复位的Verilog和VHDL代码:
// 同步复位(Verilog)
always@(posedge clk)
if(rst)
begin
a<=1’b0;
end
else
begin
a<=b;
end
--同步复位(VHDL)
process(clk,rst)
begin
if clk’event and clk=’1’ then
if rst=’1’ then
a<=’0’;
else
a<=b;
end if;
end if;
end process;
// 异步(Verilog)
always@(posedge clk or posedge rst)
if(rst)
begin
a<=1’b0;
end
else
begin
a<=b;
end
--异步复位(VHDL)
process(clk,rst)
begin
if rst=’1’ then
a<=’0’;
7系列FPGA设计时推荐使用高电平有效的复位。
图2
选择高还是低,需要根据具体的电平标准、器件结构来选择,并不是一概而论低电平有效的好或者高电平有效的好。
注:另外在设计中复位信号有时可能出现一些问题。
1. 如果在一个设计的顶层定义了一个异步复位信号,而为了减小高扇出的影响,可以将这个复位信号分配到全局布线资源上。
但是有些情况下,使用全局复位信号可能导致recovery和removel时序问题。如图4所示使用级联复位结构,将异步复位信号同步释放,根据模块进行分区,在每个分区内再级联同步释放结构,这样可以降低复位信号的扇出,从根本性上解决了问题。
图4
2. 往往在一个大系统中有多个时钟,是否需要为每个时钟域分配一个复位?如果只有一个全局复位,当然在这种情况下肯定是异步复位,它与系统中所有时钟都没有关系,并且必须满足所有时钟域的时序要求,同时满足所有时钟域的recovery和removel时序在某些情况下就不是那么容易了,因此为每个时钟分
配复位是有必要的,如图5所示,此结构使用了一个全局复位,在不同时钟域分别对其进行同步,这样满足所有时钟域的时序应该是轻松些了。
图5
参考文献:
Clifford E. Cummings, Asynchronous & Synchronous Reset Design Techniques
Xilinx White Paper, WP272 Get Smart About Reset: Think Local, Not Global Xilinx User Guide, 7 Series FPGAs Configurable Logic Block