配景
《ug471_7Series_SelectIO.pdf》先容了Xilinx 7 系列 SelectIO 的输入/输出特性及逻辑资源的相干内容。
第 1 章《SelectIO Resources》先容了输出驱动器和输入吸取器的电气特性,并通过大量实例分析了各类尺度接口的实现。
第 2 章《SelectIO Logic Resources》先容了输入输出数据寄存器及其双倍数据速率(DDR)利用,以及可编程输入延(IDELAY)和可编程输出耽误(ODELAY)。
第 3 章《Advanced SelectIO Logic Resources》先容了ISERDESE2 、OSERDESE2与IO_FIFO。
相识了这个手册充实先容的SelectIO架构和资源,以及所支持的电平尺度。就可以利用相应的架构和资源实现与不同电平尺度、通信速率间的外设创建起联系。
系列目录与传送门
- 基于Xilinx的7系列,
- 笔者学习、研究FPGA的过程、条记,记载为:《凡人修FPGA传》。
阐明1:本系列基于文档文档《ug471_7Series_SelectIO.pdf》而写,翻译和感悟,会出现中英文肴杂的环境。
阐明2:虽然文中会出现一些原文的部门截图,非常支持并保举各人去看原汁原味的官方文档
阐明3:在查阅相干资料过程中,发现一些关于相干知识点的先容零零星散,本系列会对其举行整合,力图细致。
阐明4:本博客是笔者用来记载学习过程的一个情势,并非专业论文。因此,在本博客中不会太注意图文格式的规范。
阐明5:如果文章有误,接待诸位道友指出、讨论,笔者也会积极改正,希望各人一起进步!
媒介
输入串并转换器 (Input serial-to-parallel converters,ISERDESE2) ,
输出并串转换器(output parallel-to-serial converters ,OSERDESE2),
支持极高的 I/O 数据速率,使内部逻辑的运行速率可以到 I/O 速率的1/8。
1、OSERDESE2 总述
- OSERDESE2是7系列FPGA中专用的并串转换器,集成特定的时钟与逻辑资源,专为高速源同步接口计划。
- 每个 OSERDESE2 模块都包罗:
一个专用的数据串行器(a dedicated serializer for data)
和 一个三态控制串行器(3-state control),
可以被设置成SDR和DDR模式。
如图 3-3 所示,OSERDESE2 的输入比特次序与 ISERDESE2 的输出次序互为镜像。比方:
OSERDESE2的输入:字 FEDCBA 的最低有效位(LSB) A 输入至 D1 端口。
ISERDESE2 的输出:同一比特 A 从 Q8 端口输出。
如果,CLK频率为200 MHz:
SDR模式(8-bit):并串转换速率为 200 MHz × 8 = 1.6 Gbps。
DDR模式(8-bit):并串转换速率为 200 MHz × 8 × 2 = 3.2 Gbps
- 数据串行器:串行化比最高8:1(若利用OSERDESE2位宽扩展,则可达10:1和14:1)。
- 三态控制串行器:支持最高14:1串行化比。
- OSERDESE2 模块有一个DDR3专用模式,针对高速存储器应用。
1.1、数据并串转换器(Data Parallel-to-Serial Converter)
OSERDESE2模块内的数据并串转换器吸取来自FPGA逻辑的2至8位并行数据(若启用OSERDESE2位宽扩展,可支持14位),将数据串行化后通过OQ引脚输出至IOB。并行数据从最低位输入引脚(D1)开始串行传输(即D1引脚数据开始从OQ引脚输出)。该转换器支持两种工作模式:single-data rate (SDR) and double-data rate (DDR)。
OSERDESE2 利用 CLK 和 CLKDIV 这两个时钟信号来举行数据速率转换。CLK 是高速串行时钟,CLKDIV 是分频后的并行时钟。CLK 和 CLKDIV 必须相位对齐。
利用前,必须对OSERDESE2施加复位信号。 OSERDESE2 包罗一个控制数据流的内部计数器。 如果未将复位信号的释放与 CLKDIV 同步,大概会产买卖外输出。
别的OSERDESE2内部另有一个计数器,用来计数当前dout输出的是输入信号的第几位数据了,以是在利用OSERDESE2前,必须对OSERDESE2举行复位,复位信号可以是同步复位,也可以是异步复位,但是复位信号无效边沿必须与CLKDIV同步(纵然用异步复位时,要思量同步释放复位)。(《xilinx原语详解及仿真之OSERDESE2》)
1.2、三态并串转换器(3-State Parallel-to-Serial Conversion)
OSERDESE2模块除了具有数据并串转换功能外,还包罗三态控制并串转换器,用于IOB的三态信号控制。最大支持4位并行三态信号串行化,不可级联。
2 ··· OSERDESE2 原语
3 ··· OSERDESE2 端口
OQ 是 OSERDESE2 模块的数据输出端口。输入端口 D1 的数据将起首出现在 OQ。此端口将数据并串转换器的输出连接至 IOB 的数据输入端口。OQ 不能直接驱动 ODELAYE2,必须通过 OFB 引脚实现耽误控制。
- 2、Output Feedback from OSERDESE2 - OFB
OFB 是 OSERDESE2 的串行(高速)数据反馈端口,用途包罗:连接至 ODELAYE2 原语实现输出耽误,大概将串行数据回传至 ISERDESE2。
- 3、3-state Control Output - TQ
TQ 是 OSERDESE2 的三态控制输出端口,用于将三态并串转换器的输出连接至 IOB 的三态控制输入。
- 4、3-state Control Output - TFB
TFB 是 OSERDESE2 的三态状态反馈端口,可向 FPGA 逻辑端反馈当前三态状态(当 IOB 处于高阻态时有效)。
- 5、High-Speed Clock Input - CLK
CLK 是驱动并串转换器串行端的高速时钟信号。
- 6、Divided Clock Input - CLKDIV
CLKDIV 是驱动并串转换器并行端的分频时钟信号,为 CLK 的分频信号且与CLK相位对齐。
- 7、Parallel Data Inputs - D1 to D8
全部并行数据通过 D1-D8 端口输入 OSERDESE2,支持设置为 2 至 8 位(即 8:1 串行化)。通过从模式 OSERDESE2 级联可扩展至 10 或 14 位。
复位生效(高电平):使 CLK/CLKDIV 域全部数据触发器异步输出低电平。
复位释放(同步要求):需与 CLKDIV 同步释放,内部逻辑在 CLK 第一次上升沿重新同步。
在多比特输出结构中的每个 OSERDESE2 应由雷同的复位信号驱动,该信号异步断言,并与 CLKDIV 同步去断言,以确保全部 OSERDESE2 元素同步退出复位。
复位释放时,需确保 CLK/CLKDIV 已稳固。
- 9、Output Data Clock Enable - OCE
OCE 为数据路径的高电平有效时钟使能信号。
- 10、3-state Signal Clock Enable - TCE
TCE 为三态控制路径的高电平有效时钟使能信号。
- 11、Parallel 3-state Inputs - T1 to T4
全部并行三态信号通过 T1 至 T4 端口进入 OSERDESE2 模块。这些端口连接到 FPGA 内部结构。它们可设置为一位、两位或四位,大概直通。DATA_RATE_TQ 和 TRISTATE_WIDTH 属性控制这些端口的举动。
- 在博客《xilinx原语详解及仿真之OSERDESE2》中,看到如下一段话。
4 ··· OSERDESE2 属性
此属性界说数据以单数据速率(SDR)或双数据速率(DDR)处置处罚。答应值为 SDR 或 DDR,默认值为 DDR。
此属性界说三态控制以单数据速率(SDR)、双数据速率(DDR)或直通模式(BUF)处置处罚。答应值为 SDR、DDR 或 BUF,默认值为 DDR。
SDR/DDR 模式下:利用全部四个三态输入(T1-T4),其举动由 TRISTATE_WIDTH 属性设置。
BUF 模式下:
旁路 SDR/DDR 模式寄存器,因此应利用 T1 输入。T1 输入信号与全部其他信号异步,由于它仅通过 OSERDESE2 传递。
DATA_WIDTH 属性界说并行转串行转换器的并行数据输入位宽。
当 DATA_RATE_OQ 设置为 SDR 时,DATA_WIDTH 属性的大概取值为 2、3、4、5、6、7 和 8。当 DATA_RATE_OQ 设置为 DDR 时,DATA_WIDTH 属性的大概取值为 4、6、8、10 和 14。
当 DATA_WIDTH 设置为大于 8 的位宽时,必须将一对 OSERDESE2 设置为主从模式。
此属性界说位宽扩展时 OSERDESE2 的主从模式,答应值为 MASTER(主)或 SLAVE(从),默认值为 MASTER。
此属性界说三态并串转换器的并行输入位宽,其取值范围取决于 DATA_RATE_TQ:
DATA_RATE_TQ=SDR 或 BUF,TRISTATE_WIDTH=1;
DATA_RATE_TQ=DDR,TRISTATE_WIDTH=1或4;
5、OSERDESE2 时钟设置方法
抱负环境下,CLK与CLKDIV需保持相位对齐(答应肯定容差)。
OSERDESE2模块的有效时钟设置方案仅包罗以下两种:
1、由 BUFIO 驱动 CLK , 由 BUFR 驱动 CLKDIV 。
2、CLK和CLKDIV由同一MMCM或PLL的CLKOUT[0:6]驱动。
若利用MMCM驱动OSERDESE2的CLK和CLKDIV,则供给OSERDESE2的缓冲范例不能混用。比方,若CLK由BUFG驱动,则CLKDIV也必须由BUFG驱动。
6、OSERDESE2 位宽扩展
每个I/O单位(I/O tile)有两个OSERDESE2模块:一个主模块和一个从模块。
将主OSERDESE2的SHIFTIN端口连接到从OSERDESE2的SHIFTOUT端口,可以把并串转换器扩展到10:1和14:1(仅限DDR模式)。
对于差分输出,主OSERDESE2必须位于差分输出对的正端(_P引脚)。
非差分输出时,与从OSERDESE2相干的输出缓冲区不可用,位宽扩展也无法利用。
利用互补单端尺度(比方DIFF_HSTL和DIFF_SSTL)时,大概无法利用位宽扩展。这是由于互补单端尺度会利用 I/O单位 内中的两个OLOGICE2/3模块(OLOGICE2/3 blocks)来传输两个互补信号,从而没有可用的OLOGICE2/3模块用于位宽扩展。
- 位宽扩展指南:
- 1、两个 OSERDESE2 模块必须是相邻的主从对。
- 2、将主 OSERDESE2 的 SERDES_MODE 属性设置为 MASTER,
从 OSERDESE2 的 SERDES_MODE 属性设置为 SLAVE。
- 3、用户必须将从模块的 SHIFTIN 引脚连接到主模块的 SHIFTOUT 引脚。
- 6、属性INTERFACE_TYPE设置为DEFAULT。
7、输出反馈(Output Feedback)
OSERDESE2引脚OFB具有以下两种功能:
• 作为反馈路径至ISERDESE2的OFB引脚。。
• 与ODELAYE2连接。OSERDESE2的输出可以通过OFB引脚路由至ODELAYE2模块,然后通过ODELAYE2举行耽误。
8、OSERDESE2 耽误
- DEFAULT Interface Type Latencies(默认接口范例耽误)
OSERDESE2模块的输入到输出耽误取决于DATA_RATE和DATA_WIDTH属性。
耽误被界说为以下两个事故之间的时间隔断:
事故(a):CLKDIV的上升沿将数据从输入端D1-D8时钟输入到OSERDESE2。
事故(b):串行流的第一位出现在OQ。
表3-11总结了各种OSERDESE2耽误值。
当CLK和CLKDIV的相位对齐时,耽误大概相差一个CLK周期,如果CLK和CLKDIV的相位没有对齐时,耽误的值取决于DATA_RATE和DATA_WIDTH的值。
9、Timing Characteristics
- 2:1 SDR Serialization
- 8:1 DDR Serialization
- 4:1 DDR 3-State Controller Serialization
时钟事故1:
T1、T2和T4被置0以解除三态条件。
T1-T4和D1-D4在OSERDESE2中的串行化路径雷同(包罗耽误),因此在时钟事故1期间,EFGH位始终与T1-T4引脚上出现的0010对齐。
时钟事故2:
在EFGH被采入OSERDESE2后的一个时钟周期,数据位E出现在OQ。
此耽误与表3-11中列出的4:1 DDR模式OSERDESE2耽误一个时钟周期同等。
在时钟事故1期间,T1上的三态位0在0010被采入OSERDESE2三态块后的一个时钟周期出现在TQ。此耽误与表3-11中列出的 4:1 DDR模式OSERDESE2耽误一个时钟周期同等。
10、OSERDESE2 原语例化
- // OSERDESE2: Output SERial/DESerializer with bitslip
- // 7 Series
- // Xilinx HDL Libraries Guide, version 13.4
- OSERDESE2 #(
- .DATA_RATE_OQ("DDR"), // DDR, SDR
- .DATA_RATE_TQ("DDR"), // DDR, BUF, SDR
- .DATA_WIDTH(4), // Parallel data width (2-8,10,14)
- .INIT_OQ(1'b0), // Initial value of OQ output (1'b0,1'b1)
- .INIT_TQ(1'b0), // Initial value of TQ output (1'b0,1'b1)
- .SERDES_MODE("MASTER"), // MASTER, SLAVE
- .SRVAL_OQ(1'b0), // OQ output value when SR is used (1'b0,1'b1)
- .SRVAL_TQ(1'b0), // TQ output value when SR is used (1'b0,1'b1)
- .TBYTE_CTL("FALSE"), // Enable tristate byte operation (FALSE, TRUE)
- .TBYTE_SRC("FALSE"), // Tristate byte source (FALSE, TRUE)
- .TRISTATE_WIDTH(4) // 3-state converter width (1,4)
- )OSERDESE2_inst (
- .OFB(OFB), // 1-bit output: Feedback path for data
- .OQ(OQ), // 1-bit output: Data path output
- // SHIFTOUT1 / SHIFTOUT2: 1-bit (each) output: Data output expansion (1-bit each)
- .SHIFTOUT1(SHIFTOUT1),
- .SHIFTOUT2(SHIFTOUT2),
- .TBYTEOUT(TBYTEOUT), // 1-bit output: Byte group tristate
- .TFB(TFB), // 1-bit output: 3-state control
- .TQ(TQ), // 1-bit output: 3-state control
- .CLK(CLK), // 1-bit input: High speed clock
- .CLKDIV(CLKDIV), // 1-bit input: Divided clock
- // D1 - D8: 1-bit (each) input: Parallel data inputs (1-bit each)
- .D1(D1),
- .D2(D2),
- .D3(D3),
- .D4(D4),
- .D5(D5),
- .D6(D6),
- .D7(D7),
- .D8(D8),
- .OCE(OCE), // 1-bit input: Output data clock enable
- .RST(RST), // 1-bit input: Reset
- // SHIFTIN1 / SHIFTIN2: 1-bit (each) input: Data input expansion (1-bit each)
- .SHIFTIN1(SHIFTIN1),
- .SHIFTIN2(SHIFTIN2),
- // T1 - T4: 1-bit (each) input: Parallel 3-state inputs
- .T1(T1),
- .T2(T2),
- .T3(T3),
- .T4(T4),
- .TBYTEIN(TBYTEIN), // 1-bit input: Byte group tristate
- .TCE(TCE) // 1-bit input: 3-state clock enable
- );
- // End of OSERDESE2_inst instantiation
复制代码 11、参考文献
1、《ug471_7Series_SelectIO.pdf》
2、《xilinx原语详解及仿真之OSERDESE2》
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |