IDDR和ODDR原语是针对7系列芯片使用,spand可以使用IDDR2和ODDR2
IDDR三种模式
OPPOSITE_EDGE Mode
传统的输入DDR解决方案或OPPOSITE_EDGE模式是通过ILOGIC模块中的单个输入实现的。 数据在时钟的上升沿通过输出Q1提供给FPGA逻辑,在时钟的下降沿通过输出Q2提供给FPGA逻辑。 该结构类似于Virtex-6 FPGA实现。 图1 显示了使用OPPOSITE_EDGE模式的输入DDR的时序图。
SAME_EDGE Mode
在SAME_EDGE模式下,数据在同一时钟边沿上呈现给FPGA逻辑。 该结构类似于Virtex-6 FPGA实现。
图2显示了使用SAME_EDGE模式的输入DDR的时序图。 在时序图中,输出对Q1和Q2不再是(0)和(1)。 相反,第一对呈现的是Q1(0)和Q2(不关心),然后是下一个时钟周期的对(1)和(2)。
SAME_EDGE_PIPELINED Mode
在SAME_EDGE_PIPELINED模式下,数据在同一时钟边沿上呈现给FPGA逻辑。
与SAME_EDGE模式不同,数据对不会分开一个时钟周期。 但是,需要额外的时钟延迟来消除SAME_EDGE模式的分离效果。 图3显示了使用SAME_EDGE_PIPELINED 模式的输入DDR的时序图。 输出对Q1和Q2同时提供给FPGA逻辑。
ODDR
在介绍ODDR之前,我们先简单了解一下OLOGIC。
OLOGIC块在FPGA内的位置紧挨着IOB,其作用是FPGA通过IOB发送数据到器件外部的专用同步块。OLOGIC 资源的类型有OLOGIC2(位于HP I/O banks)和OLOGIC3(位于HR I/O banks)。
OLOGIC2和OLOGIC3不属于原语,正因为这样,所以它们不能被直接例化。它包含在布局布线后用户可例化的一些元素,例如一个输出触发器(OFD–output flip-flop)或者一个ODDR(output DDR element)。
OLOGIC主要由两个block组成,一个用于配置输出路径。另外一个用于配置三态控制路径。这两个block具有共同的时钟,但是具有不同的使能信号OCE和TCE。两者具有由SRVAL属性精致的异步和同步set和reset(S/R信号)。
输出路径和三态控制路径可以 以 下列模式之一独立配置:
1.边沿触发的D触发器
2.DDR模式(ASAME_EDGE 或 OPPOSITE_EDGE)
3.电平敏感锁存器
4.异步电路/组合逻辑
7系列器件在OLOGIC中有专用寄存器来实现输出DDR寄存器。这个功能在例化ODDR时可见。在使用OLOGIC时,DDR的复用是自动的,不需要手动控制多路复用。这个控制是从时钟产生的。
ODDR原语是由一个时钟输入,下降沿数据由输入时钟的本地反转来计时。反馈到I/O块的所有的时钟被完全复用。例如:在ILOGIC和OLOGIC块之间没有时钟共享。ODDR原语支持OPPOSITE_EDGE 模式、SAME_EDGE模式。
SAME_EDGE模式与Virtex-6架构相同,这个模式允许设计者在ODDR时钟的上升沿向ODDR原语提供数据输入,从而节省CLB和时钟资源,并提高性能。此模式使用DDR_CLK_EDGE属性实现。它也支持三态控制。
通过ODDR把两路单端的数据合并到一路上输出,上下沿同时输出数据,上沿输出a路下沿输出b路;如果两路输入信号一路恒定为1,一路恒定为0,那么输出的信号实际上就是输入的时钟信号。
OPPOSITE_EDGE模式:
在此模式中,时钟边沿被用来以两倍的吞吐量从FPGA逻辑中捕获数据。这种结构与virtex-6的实现比较相似。两个输出都提供给IOB的数据输入或者三态控制输入。
SAME_EDGE模式:
在此模式下,数据可以在相同的时钟边沿从给IOB。相同的时钟沿将数据送给IOB可以避免建立时间违规,并允许用户使用最小的寄存器来执行更高的DDR频率来进行寄存器的延迟,而不是使用CLB寄存器。
注意:
1、set和reset不能同时置位;
2、ODDR原语的复位需要约12个clock,第一次输入的数据可能会有问题(亲测),但亲测是如此。
3、ODDR的输出必须直接连到输出pad上,不可以再引进逻辑内部。因此会出现do_oddr的输出无法连入OLOGIC中
实际使用中,如果需要引入其他逻辑,可以考虑使用ibuf
ODDR原语结构图如下。
表2-10列出了ODDR端口信号。
表2-11描述了各种属性和ODDR原语的默认值。