原创 FPGA教程之频率

2009-1-11 22:02 5695 6 8 分类: FPGA/CPLD

每个CPU都有一个工作频率,FPGA也不例外(当然,只有你的设计应该是时序逻辑),那该频率是根据什么形成的呢?


首先,我们来分析16-bit计数器,通过该用例,掌握QuartusII的时序分析器及了解一个时序逻辑频率的概念。源代码如下(QuautusII7.2SP3EP2C35F484C8):


library ieee;


use
ieee.std_logic_1164.all;


use
ieee.std_logic_unsigned.all;


use
ieee.std_logic_arith.all;


 


entity counter is


port(


          
rst:                               
in 
std_logic;


          
clk:                               
in 
std_logic;


          
carry:                            out
std_logic


          
);


end counter;


 


architecture synlogic of counter
is


signal
r_cnt:                          
std_logic_vector(15 downto 0);


begin



process(rst, clk)


begin


          
if rst = '1' then


                    r_cnt <= (others =>
'0');


          
elsif rising_edge(clk) then


                    r_cnt <= r_cnt +
'1';


           end if;


end
process;



carry
<= '1' when r_cnt = X"FFFF" else '0';


 


end synlogic;


建立工程,将所有的输入输出管脚分配为Virtual Pin,其中时钟管脚Virtual Pin Clock,表示该工程没有实际输入输出管脚,方法如下:

点击开大图

单击菜单Assignments/Assignment Editor,打开窗口Assignment Editor


然后,右键“To”列下的“《new》”,选择“Node Finder…”;


其次,单击“List”,选择“Carry”,“clk”,“rst”到右边的“Selected Nodes”,单击OK返回;


而后,在Assignment Name下面分别选择“Virtual Pin”,“Virtual Pin Clock”,“Virtual Pin”,并且在Value列下都选择“On”,保存;


最后,对其进行全编译;


观察“Compilation Report/Timing Analyzer/Clock
Setup
:‘clk’”, Fmax从小到大排列,取其中最小的Fmax值,得Fmax = 293.86MHz,则表示该十六位计数器最快可以运行在293.86MHz。那该频率主要是受什么因素影响?首先,我们先看Fmax的定义,在QuartusII的帮助中有如下说明:


The
maximum clock frequency that can be achieved without violating internal setup
(tSU) and hold (tH) time requirements. Unrestricted
fMAX is the maximum frequency at which a design can run. Restricted
fMAX is the maximum frequency a design can run considering device
limits, such as maximum toggle rates. The Classic Timing Analyzer analyzes and
reports fMAX following timing analysis.


You
can specify the fMAX required by default for a design in the Classic Timing Analysis Settings page of the Settings dialog
box. You can also specify the required fMAX of individual clock
signals in a design by creating clock settings and assigning them to signals in
the design.


The
Classic Timing Analyzer calculates fMAX with the following
equation:


fMAX
=
1/(<register
to register delay> -
<clock skew delay> +
<micro setup delay> +
<micro clock to output delay>)


Clock
skew delay is calculated with the following equation:


<clock
to destination register delay> -
<clock to source register delay>
,即Tcd2
– Tcd1


从表达式可以知道,Fmax主要受以下四个因素影响:register to
register delay/
寄存器到寄存器延时Tnetclock skew
delay/
寄存器间时钟偏斜,micro setup
delay/LC
中的D触发器建立时间Tsetupmicro clock to
output delay/ LC
中的D触发器时钟输出延时Tcko。如下图:

点击开大图

下面,我们具体计算一下293.86MHz的得出:

点击开大图

选中第一行,点击右键选择“List Paths”,观察QuartusII底部的Messages窗口:


Info: Clock "clk" has Internal fmax of 293.86
MHz between source register "r_cnt[0]" and destination register "r_cnt[15]"
(period= 3.403 ns)


Info: +
Longest register to register delay is 3.139 ns


Info: -
Smallest clock skew is 0.000 ns


Info: +
Micro clock to output delay of source is 0.304 ns


Info: +
Micro setup delay of destination is -0.040 ns


具体路径如下:


1、  
最长寄存器与寄存器之间延迟为3.139ns


2、  
时钟偏斜为0ns


3、  
时钟输出延迟(即时钟到达D触发器到数据Q输出)0.304ns


4、  
D触发器建立时间-0.040ns(参考CycloneIIDatasheet),这里是由器件特性决定的,也就是说数据可以早到达40ps

点击开大图

所以Fmax = 1/[3.139 + 0.304 + (-0.0040) - 0.000]
ns= 293.86MHz


通过以上描述,大致了解了FPGAFmax的参数的定义及计算方式,也了解了QuartusII中的时序分析工具Classic Timing Analyzer。需要注意的是,Fmax只对同步逻辑进行分析,如果对应设计为异步逻辑设计,则该数据没有意义。



PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户1122702 2009-2-2 23:21

一家之言,拿出来大家切磋,呵呵!

ilove314_323192455 2009-2-1 19:10

受教了
相关推荐阅读
用户1122702 2015-12-20 21:29
在Emacs中应用Ctags
适宜人群 具备Emacs使用经验的程序员 什么是Tag? Tag,即标记,记录了程序重要信息(如函数、变量、宏定义等)的位置和相应的文件,方便程序浏览器进行跳转。 ...
用户1122702 2015-12-13 22:23
可综合的SystemVerilog:命名空间
关键名词解释: 编译单元(compilation unit):SystemVerilog 源代码的集合 编译单元域(compilation-unit scope):即编...
用户1122702 2015-12-13 22:15
可综合的SystemVerilog:参数化函数/任务
在Verilog中,参数化模块被广泛应用。参数可重新定义保证模块的可配置性及可复用性。但是,函数及任务并无法像模块一样被参数化,减弱了Verilog的描述化能力。 SystemVer...
用户1122702 2010-10-28 11:34
基于SOPC下RapidIO调试方法
RapidIO的一个难点在于地址转换方法,即将远端的Memory映射到当前Avalon-MM总线,所以地址需要一个转换过程——Local Avalon-MM<->RapidIO Addr&...
用户1122702 2010-08-24 14:22
西行重庆
八月初时离开生活并工作四年的深圳,来到求学四年的重庆。已经过去三周时间,对自己的将来也随之变的不可琢磨。重庆的生活水平并不如想象的低,除了房价不像沿海城市高企,其他诸如公共交通,生活日常用品基本都是一...
用户1122702 2010-07-07 18:05
Tcl用后感
                    Tcl用后感 (by Wind330)    Tcl - Tool Command Language近期做了一个Tcl脚本用于Modelsim仿真,完成如下功能...
EE直播间
更多
我要评论
2
6
关闭 站长推荐上一条 /3 下一条