标签:
reset asic fpga synthesis
对于这个问题,网上有很多讨论。在这里总结一下,提醒自己。
异步复位:
always @(posedge clk or posedge reset)
begin
if(reset)
// reset逻辑
else
// 同步逻辑
end
同步复位:
always @(posedge clk)
begin
if(reset)
// reset逻辑
else
// 同步逻辑
end
ASIC设计中,同步复位要比异步复位多耗资源,但是在FPGA中两者差不多,因为FPGA中的寄存器同步复位和异步复位都提供资源。异步复位会对复位信号上的毛刺产生错误复位。
在ASIC设计中,通常的做法是使用异步复位,在异步复位信号的根部进行总体同步。
2007年十月份,由于工作安排参加了IBM的芯片后端process的培训,了解了IBM关于后端process的流程、阶段定义和tool chain。当问到IBM的工程师关于异步复位还是同步复位的问题时,他们的回答是都可以,对于IBM的technology来说两者都没有问题,不需要设计者特别考虑。真是高人呀!看来二者的争论是没有多大必要的了。一般的foundry厂商对两者都有很好的支持。2009年3月20号更新 又有新发现。IBM的标准单元中没有同步复位的DFF,使用同步复位综合成如下结果:
所以使用同步reset会增加逻辑(上图中的“与门”)。 如果使用异步复位,综合结果如下:
此时,使用异步复位会得到更好的时序。所以,之前是被IBM工程师忽悠了。一般性原则:如果确定了综合的foundry厂的库,先要研究库中DFF的情况。然后决定reset设计。 如果没有库或还不确定制程,比如要写IP,那就用同步reset。
系统分类:
CPLD/FPGA | 用户分类:
ASIC DESIGN | 来源:
原创 | 【推荐给朋友】 | 【添加到收藏夹】
该用户于2009/3/27 17:44:29编辑过该文章