Bruce Zhan
个人空间:/?uid/260邮件:zhanbin.
2009-2-26
Version 1-0-0
History:
Version 1-0-0, relead initiailly
(一)
FPGA设计一条原则是尽量使用同步逻辑,即尽量整个设计中使用一个clock,而且该clock 尽量走全局时钟线,也就是不要在clock path上加上逻辑,不要用“受控时钟”。但是在有些情况下,“受控时钟”难以避免,例如在用FPGA进行验证ASIC设计时,因为ASIC为了low power的要求,通常会使用逻辑控制时钟的开关。
如果对“受控时钟”不加以任何变换,其负面作用通常是通常会有hold timing冲突。hold timing 问题不像s
etup timing问题,不能靠依靠降低时钟频率解决;在ASIC设计时解决hold timing 问题通常靠工具自动增加时钟树分支延迟,使时钟到目标寄存器的时间在建立-保持时间窗内。
在FPGA阶段,通常有几种办法:
1. 不理会hold timing问题,这样可能有时编译出来的系统可以正常工作,有时候又不能工作,比较飘逸;
drill是什么意思2. 手工将gate clock等系统“异步”时钟改成同步时钟,办法就是将clock path上的逻辑合并到寄存器的数据输入端。
3. 使用synplify将gate clock转换为non-gate clock
fusion4. altera quartus8.0以上有转换gate clock的功能,可以使用。
字长
(二)
synplify把gate clock转换为non-gate clock的功能早已具有,这里先不讨论,下面主要试试altera的gate clock功能。
(1)先试个简单的电路图,
(2)打开菜单assignments->ttings,在Analysis&Synthesis Settings项,选More ttings,打开如下图对话框,
注意将Auto Gated Clock Conversion选项设置为:On。
还要写一个sdc约束文件,因为要使用Auto Gated Clock Conversion功能,必须使用TimeQuest Timing Analyzer 作时序分析,并且在sdc文件中定义所有的ba clocks。
简单SDC文件如下,
>>>>>>>>>>>>>># ####main#
# Generated by : Bruce Zhanhi tec
# Purpo : To verify gate-clock conversion using quartus8.1
# Project : None
blood is thicker than water# Revision : None
#
# Date :
#
>>>>>>>>>>>>>># ##### **************
# **Time Information
# -------------
t_time_format \
我回来了日语
-unit ns \
-decimal_places 3
# **Create Clock 100MHz
# -------------
t period 10.000
t period1 [expr $period*2]
create_clock [get_ports i_clk] \
-name clk \
-period $period \
大黄蜂 英文>pes4
-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。