FPGA源同步输入时序约束(一)

来源:互联网 发布:丁丁软件 编辑:程序博客网 时间:2024/06/05 04:27

内容来源于altera官网的源同步约束文章“Constraining and Analyzing Source-Synchronous Interfaces”,总共分了一,二,三 3部分来介绍源同步输入接口的输入延迟约束方法。
对于源同步输入时序约束 ,有以下三个方面需要约束:
1、时钟约束,用于去定义源同步接口所用的时钟;
2、输入输出延迟约束;主要是告诉fpga 输入的时钟和数据之间的时间关系;
3、时序例外,确保有效的时序路径进行时序分析,无效的时序路径不进行时序分析。

本节主要是介绍源同步输入约束的输入时钟约束。
FPGA源同步输入约束(二)介绍输入输出延迟约束最大最小值计算及约束方法
FPGA源同步输入约束(三)介绍 时序例外

下图Figure 53是“ALTERA 源同步接口” 文档上给出的一个简化了的源同步模型,source device 即是外部器件,它发出时钟和数据信号输出 到fpga端的输入接口上。
这里写图片描述
在FPGA内部 ,用来捕获输入数据的时钟 可以是外部器件直接输入的时钟,也可以是外部器件输入的时钟经过锁相环产生的时钟。但是一般由锁相环产生的时钟比直接由外部器件输入的时钟去捕获数据有更大的时序裕量。尤其是在高速的DDR接口中,由锁相环产生时钟去捕获数据可以获得更大的时钟裕量。当然,由外部输入的源同步时钟直接驱动寄存器可以避免由于锁相环产生的时钟不确定性。但是锁相环可以进行时钟补偿,所以在高速接口中,用锁相环带来的好处多余其带来的坏处(时钟不确定性)。
当用锁相环产生的时钟作为fpga捕获源同步数据的时钟时,最好把PLL配置成源同步补偿模式。用源同步补偿模式时,在捕获输入数据的寄存器里(即IOE里的输入寄存器),时钟和数据的关系与外部器件输入fpga时的时钟数据关系是保持一致的。这样就不用我们手动地去调整PLL的相位以满足时序关系。如果把PLL配置成其他模式,比如正常模式,那就需要你手动去调试PLL的相位去满足时序关系。

至于实际使用时,可以根据接口类型和时序要求去决定究竟用哪种时钟方式
当是以下三种源同步输入时,用PLL生成时钟:
1、边沿对齐的SDR或DDR(创建时钟相位偏移使得能在数据有效窗口的中间去锁存数据);
2、高速的源同步输入;
3、精确调整时钟与数据间的相位关系。
但是以下源同步输入时,可以直接用源同步输入时钟:
1、中心对齐的SDR或DDR;
2、低速的源同步输入。

源同步接口是寄存器到寄存器间的数据传输模型(figure 53),只是一个寄存器是在外部器件那边,一个是在fpga里。输入fpga的源同步时钟(input clock),是由外部器件产生的。所以你必须创建一个时钟来描述源同步接口输入fpga的时钟特性(比如时钟的周期,相位等)。同时还需要创建一个虚拟时钟来表示外部器件用来发送数据的时钟(Virtual clock)。
在进行输入约束时,也可以不创建虚拟时钟,直接用输入时钟来进行约束。只是用虚拟时钟进行约束有时会比较简单,比如在(二)里讲到的”skew-based fpga-centric”约束方法,你只要知道FPGA的正负skew就可以进行输入最大最小延迟约束了。

下面是几种常用的输入时钟约束方式:
1、输入时钟数据边沿对齐
这里写图片描述
对于输入时钟数据边沿对齐的输入,可以用PLL将输入时钟移相90°,使得时钟数据在fpga里中心对齐。这样每个时钟来时,采样的数据就不容易出错了。
时钟约束指令如下,第一条是创建虚拟时钟,周期是100Mhz,第二条是创建PLL生成的时钟约束,生成的时钟有90°的相位偏移。
这里写图片描述
2、输入时钟数据中心对齐
由于输入时钟数据已经是中心对齐,所以,时钟经过锁相环 不产生相位偏移。
这里写图片描述
约束指令如下,第一条是创建虚拟时钟约束,第二条是对输入FPGA的时钟进行约束,其相对于数据有90°的偏移。所以waveform 是{2.5 7.5}而不是{0,5}。第三条是对经过锁相环产生的时钟进行约束。
这里写图片描述
3、输入时钟数据中心对齐,输入时钟直接作为fpga寄存器捕获数据的时钟
这里写图片描述
约束指令如下,这条与上面的第二条输入时钟数据都是中心对齐的,都可以用,只是这条没经过锁相环而已。上面第二条经过锁相环但没有相位偏移,所以没什么区别。
这里写图片描述