目录
2.3 OSERDESE2与ISERDESE2
2.2.1 ISERDESE2
2.2.2 OSERDESE2
2.2.3 IO_FIFO
2.4 其他
如下图所示,每组引脚都有两个OSERDESE2和ISERDESE2。可以实现串行与并行之间的转换,每个SERDES都支持串行与8bit并行之间的转换。并可以通过Bitslip实现数据的重新对齐。
ISERDESE2主要是串行输入,可根据对ISERDESE2的模式配置,实现不同模式。如下图是ISERDESE2的例化,可以在vivado的原语里面搜索到该模块。
首先先看下参数的配置,具体解释如下表
第一部分:模块参数
参数部分的设置或是调用原语的设置或是使用相应IP核的配置。
1、DATA_RATE
是用于对串行数据采样时的采样模式设置,有SDR和DDR两种模式设置,SDR(single data rate)是单沿采样,DDR(double data rate)是双沿采样,该模块默认为DDR模式。
2、DATA_WIDTH
是设置串并转换的位宽,每一个“ISERDESE2”可以实现8bit位宽的输出,但通过不同的模式设置就有了多种位宽输出格式,具体如下表所示。其中“NETWORKING”类型的DDR模式可支持最大14bit位宽,这时就需要将两个“ISERDESE2”采用主从模式进行串联实现。具体方式会放在下文阐述。
3、DYN_CLKDIV_INV_EN和DYN_CLK_INV_EN
如下图所示,在“ISERDESE2”接口有“DYNCLKDIVSEL”和“DYNCLKSEL”两个信号分别控制“CLKDIV”和“CLK”是否进行取反操作。而“DYN_CLKDIV_INV_EN”和“DYN_CLK_INV_EN”就是“DYNCLKDIVSEL”和“DYNCLKSEL”这两个选择信号的的使能信号,只有在“DYN_CLKDIV_INV_EN”和“DYN_CLK_INV_EN”为“TURE”的情况下,才能进行选择,默认是“FALSE”。而这种操作只支持“MEMORY_QDR”和“MEMORY_DDR3”模式,一般用不到。
4、INTERFACE_TYPE
这是模式设置,“ISERDESE2”支持内存模式、网络模式以及过采样模式。内存模式即MEMORY模式、MEMORY_DDR3模式和MEMORY_QDR模式。例如我们用“mig_7series_0”核就是MEMORY_DDR3模式,另外还支持 OVERSAMPLE和 NETWORKING模式。NETWORKING模式就是实现串并转换,OVERSAMPLE是同频多相位采样模式,可实现与数据同频的时钟对数据采样。当然,这还需要其它逻辑的配合,这个在《xapp523》中有详细的介绍。
5、NUM_CE
它的值可以是1也可以是2,表示的是接口信号(CE1 and CE2)的使能个数。默认是2,具体CE1和CE2在接口信号相关部分阐述。
6、OFB_USED
这和“OLOGICE2/3”有关。
7、SERDES_MODE
主从模式设置,SERDES_MODE属性定义使用宽度扩展时ISERDESE2模块是主模块还是从模块,用于扩展连接,例如14bit位宽的使用。
8、INIT_Q1~Q4
设置第一个采样寄存器的初始值,在OVERSAMPLE模式时用于初始化采样值。
9、SRVAL_Q1~Q4
设置第二个采样寄存器复位后的值,默认即可。
10、IOBDELAY
D和DDLY引脚是ISERDESE2的专用输入。D输入是与IOB的直接连接。DDLY引脚是与IDELAYE2的直接连接。这使用户可以拥有已注册(Q1-Q8)或组合路径(O)输出的延迟或非延迟版本的输入。IOBDELAY属性确定应用于ISERDESE2的输入。表3-4显示了同时连接D和DDLY时IOBDELAY值的每种设置的结果。最后注释了依据当D和DDLY都接入ISERDESE2时的选择,那么是不是如果只接一个可以自动识别?
第二部分:接口信号
如下图所示,是ISERDESE2模块的接口信号,接下来就对此进行逐个分析。
1、Q1 – Q8
ISERDESE2模块转并后的输出端口,可实现最多8bit的输出,如果使用DDR模式,可扩展为两个ISERDESE2模块,实现10、14bit的输出。输出位宽是根据参数进行配置。
2、O
是D或者DDLY输入的直接输出
3、FTOUT1、SHIFTOUT2和SHIFTIN1、SHIFTIN2
是用于ISERDESE2模块的扩展功能的。
4、D
IOB的输入信号,当然也可以不是来自IOB
5、DDLY
也是串行输入信号,但是从IDELAYE2模块来的。
6、CLK
用于串行数据的时钟输入
7、CLKB
用于QDR模式的。咱们用不到,当使用MIG核时会用到。
8、CLKDIV
并行数据的输入时钟,例如8-1模式,SDR模式,并行时钟100MHz,串行时钟12.5Mhz。
9、CLKDIVP
仅通过MIG工具支持。 由PHASER_IN划分为MEMORY_DDR3模式下的CLK。 所有其他模式都接地
10、OCLK
时钟输入信号,NETWORKING模式是用不到的,在其他模式用于时钟输入,例如OVERSAMPLE模式
11、RST
高有效的复位信号,置位后,复位输入将导致CLK和CLKDIV域中大多数数据触发器的输出被异步驱动为低电平
12、CE1和CE2(待补充)
每个ISERDESE2模块都包含一个输入时钟使能模块
3、BITSLIP
通过对BITSLIP引脚置位可以实现并行端口的字节对齐。只能在NETWORKING模式下使用。一般我们使用K码,例如K28.5实现字节对齐,就是在并行接口寻找到K28.5,寻找方式是位滑入。《ug471》也指出看似如同桶型位移操作其实并非如此,而是如同流水线般,在数据流中找到训练码,并以此来确定串并转换的起始位,如下图所示。
对于SDR模式和DDR模式,滑入还是有区别的,SDR模式每次移入1bit,DDR模式每次移入1bit或3bit,是交替的。
另外,BITSLIP的是在CLKDIV时钟下,每一个时钟周期实现一位的滑入,两次滑入之间需将BITSLIP拉低,并且,在BITSLIP置一的两个周期,对于DDR是三个周期之后才是滑入之后的值。
14、OFB
串行输入数据端口(OFB)是ISERDESE2的串行(高速)数据输入端口。 该端口仅可与7系列FPGA OSERDESE2端口OFB一起使用。当属性OFB_USED = TRUE时,启用此功能
15、DYNCLKDIVSEL和DYNCLKSEL
动态时钟反相引脚DYNCLKSEL和DYNCLKDIVSEL分别与DYN_CLK_SEL_EN和DYN_CLKDIV_SEL_EN结合使用时,可使用户动态切换相应时钟源的极性。此操作将导致进入ISERDESE2的时钟异步切换,并有可能导致ISERDESE2产生错误的数据,直到将ISERDESE2复位为止。 仅在MEMORY_QDR和MEMORY_DDR3模式下支持此操作。
如下图所示,再“device”里面,OLOGICE2和OSERDESE2都是同一个模块,可能是调用里面部分内容实现OLOGICE2功能吧。
OSERDESE2所实现的功能就是并转串,可以实现SDR模式和DDR模式的转换,而且我们也不需要调用原语,xilinx为我们提供了“selectIO”这样一个IP核,略作配置便可实现相关的功能。本问主要还是结合OSERDES2原语做一个说明,“selectIO”也是调用这个原语的,只不过根据模式选择进行了封装。
首先来看接口信号:
1、OFB
这个是用来连接到ISERDES2的OFB,实现类似自环的功能
2、OQ
OQ端口是OSERDESE2模块的数据输出端口。输入端口D1的数据将首先出现在OQ。 此端口将数据并行-串行转换器的输出连接到IOB的数据输入。 该端口无法驱动ODELAYE2; 必须使用OFB引脚。
3、SHIFTOUT1/2和12、SHIFTIN1/2
如下图,用来实现扩展功能,
但并不能完全扩展16bit,具体可扩展位宽如下图
4、TBYTEOUT
说是三态输出,在MIG核中用到了。
5、TFB
如果用户需要,此端口是OSERDESE2模块的3状态控制输出,该输出发送到光纤网。 它指示OSERDESE2为3状态。
6、TQ
是OSERDESE2模块的三态控制输出,这个三台输出模块是给DDR3什么用的,一般用户编程是用不到。
7、CLK
串行数据的时钟
8、CLKDIV
并行数据的时钟,与串行数据时钟成倍数关系,具体是由位宽觉得,CLK与CLKDIV需时同相位的,可以来自同意MMCM,或者都是来自BUFG,不能混用。
9、D1~D8
并行数据的输入端口。
10、OCE
高有效数据路径的时钟
11、RST
复位信号,置位后,复位输入将导致CLK和CLKDIV域中所有数据触发器的输出被异步驱动为低电平。
12、T1到T4
所有并行的三态信号都通过端口T1至T4进入OSERDESE2模块。 端口已连接到FPGA架构。 它们可以配置为1位,2位或4位或旁路。 这些端口的行为由DATA_RATE_TQ和TRISTATE_WIDTH属性控制。
11、TCE
这是三态路径的使能信号
接下来看参数部分:
1、DATA_RATE_OQ
模式配置,双沿采样还是单沿采样。即DDR或SDR
2、DATA_RATE_TQ
可以配置为“BUF”、“SDR”、“DDR”这几种模式。其中SDR和DDR即使用并转串模块,而BUF模式,则是使用三态模块,就是用到了T1~4。
3、DATA_WIDTH
如下图,可以配置这样几种模式。
4、SERDES_MODE
如果扩展,可配置主从模式
5、TRISTATE_WIDTH
当使用三态输入或输出时,用来配置并行端口位宽的。
6、TBYTE_CTL和TBYTE_SRC
给MIG核用的,直接设置为“FALSE”
在7系列FPGA芯片,每个I/Obank都有IN_FIFO和OUT_FIFO,统称为IO_FIFO。尽管这些IO_FIFO是专门为内存应用设计的,但它们可以作为常规资源使用。对于一般用途,所有输入和输出均通过互连进行布线。IO_FIFO的最常见用途是与外部组件进行接口,作为IOLOGIC的扩展(例如ISERDES或IDDR和OSERDES或ODDR)。 由于它们具有通用的互连功能,因此IO_FIFO也可以用作其他结构FIFO资源。
每个I / O bank包含四个IO_FIFO,每个字节组一个IO_FIFO。 字节组被定义为存储体中的12个I / O。IO_FIFO在物理上与I / O字节组对齐。当使用IO_FIFO与IOI组件(例如输入和输出SERDES元素)进行接口时,这种对齐方式可产生最佳性能,这是它们的最常用用法。 但是,无论它们位于何处,IO_FIFO都可以与FPGA架构和其他I / O库中的资源接口(如下图所示,为方便阅读做了旋转)。
关于IO部分还有两个部分,如下图所示,这部分内容是用于DDR3等内存芯片的,我们很少去单独使用,所以不去研究了。
如下图是另外些内容,包括BUFMRCE、BUFIO和BUFR。这些得说明下,主要参考是《UG768》相关部分。
1、BUFMRCE
对应原语如下图所示。这是一个带有使能信号的简单的时钟输入输出缓冲器。EC置一使能时钟输出。
每个BANK中都有两个BUFMRCE,每个BUFMRCE可以由同一BANK中的一个特定MRCC驱动。BUFMRCE通过I / O时钟主干在相同的区域/组中以及上方和下方的区域中驱动BUFIO和/或BUFR。 当使用BUFR分频器(不在旁路中)时,必须通过使CE引脚无效来禁用BUFMRCE,必须将BUFR复位(通过置CLR清除),然后应置CE信号。 此序列可确保所有BUFR输出时钟相位对齐。 如果不使用BUFR中的分频器,则不需要此附加电路。 如果不需要时钟使能电路,则应使用BUFMR组件代替BUFMRCE
2、BUFIO
该设计元素只是一个时钟输入、输出缓冲器。 它在I / O列内驱动一个专用时钟网络,而与全局时钟资源无关。因此,这些元件非常适合于源同步数据捕获(转发/接收器时钟分配)。它们可以由位于相同时钟区域的专用MRCC I/O或能够为多个时钟区域提供时钟的BUFMRCE / BUFMR组件驱动。BUFIO只能驱动I / O组件所在的组中的组件。这些元素不能直接驱动逻辑资源(CLB,Block RAM等),因为I / O时钟网络仅到达I / O列。
3、BUFR
BUFR是7系列器件中可用的区域时钟缓冲器。 BUFR将时钟信号驱动到独立于全局时钟树的时钟区域内的专用时钟网络。 每个BUFR可以驱动其所在区域中的区域时钟网。 与BUFIO不同,BUFR可以驱动现有时钟区域中的I / O逻辑和逻辑资源(CLB,Block RAM等)。 BUFR可以由IBUFG,BUFMRCE,MMCM或本地互连的输出驱动。 此外,BUFR能够产生相对于时钟输入的分频时钟输出。 除法值是1到8之间的整数。 BUFR非常适合需要时钟域交叉或串并转换的源同步应用。 一个典型的时钟区域(两个区域时钟网络)中有两个BUFR。 如果在多个时钟区域中需要本地时钟,则BUFMRCE可以在相邻时钟区域中驱动多个BUFR,以进一步扩展此时钟功能。