首先写这个博客是为了在spartan6的使用中,发现PLL生成的时钟不能直接连接到通用I/O管脚,在两者之间通常添加ODDR2缓冲器来实现连接。
ODDR2模块可以通过查看spartan6 selectio来了解ODDR2原语的使用规则。 输入输出端口如下。
管脚的定义如下。
D0、D1 :输入数据;
C0、C1 :输入时钟,C1相对于C0反转180;
CE:时钟使能,高电平有效;
复位 R :一般置1’B0;
S :一般设置1’B0,但R S不能同时设置高度;
Q :数据输出;
模块调用原语的调用方法可从ISE language templates获得。
ODDR2 # (
. DDR_alignment(「none " )、//Sets output alignment to “NONE "、" c0 " or " C1 "
. init (1’B0 ),//setsinitialstateoftheqoutputto 1’b0or 1’B1 )。
. Srtype(「sync " )//specifies " sync " or " async " set/reset
) ODDR2_inst (
. q(q ),//1-bit DDR输出数据
. C0(C0 ),//1-bit时钟输入
. C1(C1 ),//1-bit时钟输入
. ce(ce ),//1-bit时钟启用输入
. D0(D0 ),//1 -比特数据输入(associatedwithC0) )。
. D1(D1 ),//1 -比特数据输入(associatedwithC1) ) ) )。
. r,//1 -位重置输入
. s(s )//1-位集输入
);
上述参数设定有三个项目。
1、DDR_ALIGNMENT,设置对齐方式。 ODDR2包括三种工作模式,这主要由对齐方式划分。
、NONE:双向数据D0、D1输入分别以C0、C1时钟为基准时钟捕获数据。
)、C0 )双向数据D0、D1的输入分别以C0时钟为基准时钟读取数据,即双向数据与C0时钟一致。
)、C1 )双向数据D0、D1的输入分别以C1时钟为基准时钟读取数据,即双向数据与C1时钟一致。
2、INIT :设定输出信号的初始状态
3、SRTYPE :设定输出信号是否同步
test时钟通过ODDR输出到外部IO,ODDR2调用如下
测试输入输出关系如下图所示。
数据更换相当于clk循环的一半的延迟
测试输入输出关系如下图所示。