原创 【原创】FPGA时序分析之Gated Clock 1

2009-2-26 18:44 4830 8 8 分类: FPGA/CPLD

(一)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


FPGA设计一条原则是尽量使用同步逻辑,即尽量整个设计中使用一个clock,而且该clock尽量走全局时钟线,也就是不要在clock path上加上逻辑,不要用受控时钟。但是在有些情况下,受控时钟难以避免,例如在用FPGA进行验证ASIC设计时,因为ASIC为了low power的要求,通常会使用逻辑控制时钟的开关。


 


如果对受控时钟不加以任何变换,其负面作用通常是通常会有hold timing冲突。hold timing问题不像setup timing问题,不能靠依靠降低时钟频率解决;在ASIC设计时解决hold timing问题通常靠工具自动增加时钟树分支延迟,使时钟到目标寄存器的时间在建立-保持时间窗内。


 


FPGA阶段,通常有几种办法:


1. 不理会hold timing问题,这样可能有时编译出来的系统可以正常工作,有时候又不能工作, 比较飘逸;


 


2. 手工将gate clock等系统异步时钟改成同步时钟,办法就是将clock path上的逻辑合并到寄存器的数据输入端。


 


3. 使用synplifygate clock转换为non-gate clock


 


4. altera quartus8.0以上有转换gate clock的功能,可以使用。


 


 


(二)


synplifygate clock转换为non-gate clock的功能早已具有,这里先不讨论,下面主要试试alteragate clock功能。


 


1)先试个简单的电路图,



 


2)打开菜单assignments->settings,在Analysis&Synthesis Settings项,选More settings,打开如下图对话框,



注意将Auto Gated Clock Conversion选项设置为:On


 


还要写一个sdc约束文件,因为要使用Auto Gated Clock Conversion功能,必须使用TimeQuest Timing Analyzer 作时序分析,并且在sdc文件中定义所有的base clocks


 


简单SDC文件如下,


###########################################################################
#
# Generated by : Bruce Zhan
# Purpose      : To verify gate-clock conversion using quartus8.1
# Project      : None
# Revision     : None
#
# Date         :
#
###########################################################################


# **************


# **Time Information
#    -------------
set_time_format \
        -unit ns \
        -decimal_places 3


# **Create Clock 100MHz
#    -------------
set period 10.000
set period1 [expr $period*2]


create_clock [get_ports i_clk] \
             -name clk \
             -period $period \
             -waveform {0.000 5.000}


 


然后在Timing Analysis Settings项下,作如下图设置,



记住要选中Using TimeQuest Timing Analysis during compilation


 


然后开始编译。


 


3)查看结果。


编译报告见下图,



 


上图表明有一个clock被作了auto gated clock conversion


 


打开如下图菜单,查看电路图,



 


Netlist电路图如下,



 


如果不使能auto gated clock conversion,则电路图如下,



 


从上面两附图中可以看出gated clock确实变成了non-gated clock


 


 


(三)


并不是所有的gated clock都能够转换的,Quartus作了如下指导原则,
1
Gating逻辑应该使用两输入门或者两输入门。



2
/“门两个输入中应该只有一个是的时钟(primary input clock)。



3
/“门的非时钟输入信号最好先用一个Register同步,这个用作同步的Register要使用primary input clock



4
)用作同步的Registerclock端口可能用primary input clock的上升沿或者下降沿,取决于Gating逻辑使用门还是门;原则是要防止clock关闭时产生一次虚假的clock沿:
Gating逻辑用门时:


同步”Registerclock端口使用primary input clock的下降沿,


工作”Registerclock端口使用gated clock的上升沿;


当关闭时钟时,假如primary input clock处于“0”,关闭后还是“0”,没有毛刺


当关闭时钟时,假如primary input clock处于“1”,关闭后是“0”,这时有一个“1”>“0”的下降沿,但因为工作”Register上升沿有效,所以不会产生误动作。


 


Gating逻辑使用门时:


同步”Registerclock端口使用primary input clock的上升沿,


工作”Registerclock端口使用gated clock的下降沿;


当关闭时钟时,假如primary input clock处于“0”,关闭后是“1”,这时有一个“0”>“1”的上升沿,但因为工作”Register下降沿有效,所以不会产生误动作;


当关闭时钟时,假如primary input clock处于“1”,关闭后还是“1”,所以也没有毛刺。


 


5)为了减少整个FPGA电路系统中glitch(组合逻辑通常会有glitch)的传播,因此作为Gating logic/“门应该尽量靠近同步”Register


 


6)整个Gating clock做成一个module,其中包括Gating逻辑,同步Register


 


根据上述指导原则,第一幅电路图有1处问题:


gate信号没有用register同步;


 


修改后的电路图见下,



 


 综合后的网表电路,



从上图中可以看出Working Registerclock已经是non-gated的了。


 


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
8
关闭 站长推荐上一条 /3 下一条