目前随着FPGA芯片的高速发展。芯片内部具有丰富的触发器资源。灵活、低延时的多时钟资源,三态的总线结构资源。这些特点均有同步电路的设计实现。同时,芯片内部信号的运行速度越来越高,信号上升时间也越来越短,因此,异步设计不是总能满足(它们所馈送的触发器的)建立和保持时间的要求。因此,异步输入常常会把错误的数据锁存到触发器,或者使触发器进入亚稳定的状态,在该状态下,触发器的输出不能识别为l或0。如果没有正确地处理,亚稳性会导致严重的系统可靠性问题。另外,在FPGA的内部资源里最重要的一部分就是其时钟资源(全局时钟网络),它一般是经过FPGA的特定全局时钟管脚进入FPGA内部。后经过全局时钟BUF适配到全局时钟网络的.这样的时钟网络可以保证相同的时钟沿到达芯片内部每一个触发器的延迟时间差异是可以忽略不计的。在FPGA中上述的全局时钟网络被称为时钟树。无论是专业的第三方工具还是器件厂商提供的布局布线器在延时参数提取、分析的时候都是依据
全局时钟网络作为计算的基准的。如果一个设计没有使用时钟树提供的时钟。那么这些设计工具有的会拒绝做延时分析有的延时数据将是不可靠的。下面将介绍如何利用FPGA的特征结构去实现同步电路的设计,以及需要注意的问题。同步设计是实现设计目的关键。建立模型,进行功能性分析是前奏;建立起来的模型要想正确在FPGA内布线,所有的逻辑关系必须是同步运行。时钟同步要求所有事件的发生都是以时钟的边沿作为标准,所有进入FPGA内部的信号要尽可能用相应的时钟网络来同步。必要时要在UCF文件中进行时序约束。一般的原则是不加定时约束。EDA工具会自动识别时钟网络,首先保证时钟驱动的信号的延迟对称(SKEW最小),然后保证这个延迟能尽可能小。布局布线后,如果定时分析发现某个时钟网络的速度不能满足要求,再对它加定时约束。
1、接口信号
(1)普通信号,你可以不用花费太多的精力去处理它。
(2)全局复位信号,FPGA通常都有一个全局复位脚,你可以将上电复位信号拉到该引脚上。
(3)时钟信号。在FPGA内部,时钟走线具有优先位置,由FPGA厂家固化在FPGA内部,属于不用白不用的网络,时钟走线到各个寄存器的延迟和抖动是能够满足定时要求的。时钟信号一般情况下从全局时钟引脚输入,因为全局时钟脚距离FPGA内部的BUFG最近,如果从别的引脚输入,通过加约束也可以用FPGA内部的全局时钟网络.只不过从引脚到BUFG的路径长一点。FPGA通常会将扇出比较多的网络用全局时钟网络,这个是由FPGA综合器自动完成的。
2、同步设计
(1)第一级(对输入信号)或最后一级(输出信号)尽量在lOB上进行锁存,对于高速时序设计非常有用。对于关键信号你必须在布线过后的底层布线图上进行确定.因为FPGA在布线时通常会将第一级或最后一级锁存放在IOB上,如果不是高速信号即使不放在IOB上通常时序也能满足要求,但是对于快速信号你必须要眼见为真.有时候它不会放在IOB上,这时你要采取使用位置约束的措施来保证。
(2)同步设计非常繁琐,在FPGA内部可能会有多个时钟网络,如果你要用到别的时钟网络的信号,必须要进行同步。
(3)在FPGA设计时会有很多的寄存器需要实现,如果这些寄存器只需用来存放数据,那好你只需要用时钟加使能信号即可实现。如果这些寄存器需要别的信号进行复位,如果能用同步复位最好;如果用异步复位,那这个信号也必须要用时钟同步然后再去复位。在设计时尽量不用锁存器。