入FPGA这行时间不短了,经历了这个圈子里的起起伏伏,接触了很多FPGA开发人员,感觉到很多人对timing的那些事讳深莫测,今天借着这个机会和大家一起来分享一下FPGA设计中关于timing的一些基本情况。网上我们可以找到很多关于timing的文档资料,这些资料基本都是把一些概念、公示罗列出来,看的人一愣一愣的,我们今天尝试着从另外一个更加直观的角度来看timing,这样可能更好理解一些。所谓直观,就是把FPGA设计相关的timing模型用我们日常生活中就能接触到供水网络进行一下类比,我们知道,供水网络简单地说就是把水从某地通过闸门、泵站、管道输送到另一地,这和FPGA设计中把数据从某些管脚通过LUT、DFF、互联线输送到另一些管脚的过程非常相似,但为了更好地说明问题,我们考虑一个假想的供水网络,并对它做如下的规定:
1. 这个供水网络是由多个水源、管道、闸门泵站及多个目的地组成的,其中水源相当于FPGA中的输入管脚,管道相当于FPGA中的LUT、MUX及互联线资源,闸门泵站相当于FPGA中的DFF资源,目的地相当于FPGA中的输出管脚;
2. 管道有长有短,有粗有细,不同管道之间还有交叉;
3. 闸门泵站的闸门可以在某些特定时刻开启,维持一段很短的时间让水流过后关闭,这相当于FPGA中的采样时钟;
4. 闸门泵站的泵站在每次闸门动作时,要求闸门外必须有水且能在闸门动作期间保持足够的稳定的压力以在闸门开启的时间里能把泵站灌满,泵站只有灌满水才能通过水泵向与它相连的管道供水,并保证为该管道提供足够的压力(这个是硬性要求);
有了上面这样的一个供水网络,我们就可以来看FPGA设计中的timing分析了,FPGA中主要考虑两类timing:IO timing和内部timing。
所谓IO timing,就是说当这个供水网络作为一个子网络与其他供水网络进行对接时,对上游供水网络送水过来的泵站要求必须满足在本供水网络的第一个闸门动作时,“闸门外必须有水且能在闸门动作期间保持足够的稳定的压力”(即上面的规定4),而对下游供水网络来说,本供水网络的最后一个闸门动作时,“闸门里必须有水且能在闸门动作期间保持足够的稳定的压力”(与上面的规定4有一点不一样哦,想一想为什么)。
所谓内部timing,当然就是这个供水网络除了水源及目的地之外管道和闸门泵站了,每个内部的闸门泵站必须满足上面的规定4(呵呵,这个简单)。
由此可见,规定4是理解FPGA timing的关键,我们就来仔细看一下规定4与FPGA timing的关系,DFF本身若想正常工作会有micro Setup和micro Hold的要求,与组合电路和互联线结合之后形成的时序路径,就象是由两个闸门泵站和它们之间的管道组成的一条水路,当前一级闸门泵站的水蓄满后开始向管道送水,水流过管道,到达第二级闸门,水流在闸门处冲撞闸门,形成反射波,前一级闸门泵站经过一段时间的持续供水后,整个管道充满了水并达到第二级闸门对压力的要求,这部分就是FPGA timing中讲的Delay,包括前一级闸门泵站的水蓄满时间(Tco)、水流过管道时间(逻辑延迟和线路延迟),对第二级闸门而言,闸门外必须有足够的稳定的压力,这就是micro Setup和micro Hold,通过这样的类比,我们可以很自然地理解FPGA设计中的建立时间分析过程就是根据每条水路的不同情况,计算水路的Delay并考虑micro Setup进而估算出该水路能允许的第一、二级闸门正常开启的最小时间差,只要满足这个最小时间差,这条水路就可以正常供水;当把整个供水网络中所有的水路都按这种方式分析一遍之后,如果整个供水系统的所有闸门采用同步控制的话,这个系统的Fmax就出来了,很简单吧?
对于FPGA设计中的保持时间分析,如果我们没有采用门控、非专用时钟输入管脚、非全局时钟网络等不好的设计形式,一般不会发生,我们就不用考虑了。
当然了,这个类比跟实际的情况会有很大的出入,比如管道漏水、管道与管道有互耦、管道太多以至于泵站没有足够的水、泵站可以被人为地随时注满水、闸门动作需要时间等等,这些都会影响到FPGA中timing分析,我们就不做具深入的分析了,感兴趣的童鞋们可以自行参悟。
最后要说的是,当FPGA开发人员在敲击键盘时,头脑中出现的不是语法,而是一幅奔腾不息、充满节奏动感的供水系统时,恭喜你!你已经跨进了FPGA世界的大门,登堂入室了。。。 |