xilinx原语:ISERDESE2原语详解(串并转换器)

1. 概述

在高速数据采集和通信系统中,如何将接收到的高速串行数据 转换为FPGA内部可以处理的并行数据 ,是一个关键挑战。Xilinx 7系列FPGA提供的ISERDESE2(Input Serial-to-Parallel Logic Resources - 输入串并转换逻辑资源)正是为解决这一问题而设计的专用硬件资源。

ISERDESE2是一个专用的串并转换器 ,具备特定的时钟和逻辑特性,旨在便于实现高速源同步应用。它避免了在FPGA架构中设计解串器时遇到的额外时序复杂性问题,使得工程师能够轻松实现Gbps级别的数据接收。

2. ISERDESE2的核心特性

ISERDESE2具备丰富的特性,使其成为高速接口设计的理想选择:

2.1 灵活的串并转换能力

  • 支持SDR(单数据速率)和DDR(双数据速率)模式

  • SDR模式:可生成2-8位宽的并行数据

  • DDR模式 :单个ISERDESE2可生成4、6、8位并行数据;两个级联时可生成10或14位并行数据

2.2 Bitslip子模块

这个子模块允许设计人员对进入FPGA架构的并行数据流的顺序进行重新排序,是实现字对齐的关键功能。

2.3 多种接口类型支持

ISERDESE2支持MEMORY(内存接口)NETWORKING(网络接口) 、**OVERSAMPLE(过采样)**等多种工作模式,可灵活应用于不同场景。

3. ISERDESE2原语详解

3.1 原语模板

在Vivado中,可以通过获取原语模板来实例化ISERDESE2:

复制代码
ISERDESE2 #(
      .DATA_RATE("DDR"),           // DDR, SDR
      .DATA_WIDTH(4),              // Parallel data width (2-8,10,14)
      .DYN_CLKDIV_INV_EN("FALSE"), // Enable DYNCLKDIVINVSEL inversion (FALSE, TRUE)
      .DYN_CLK_INV_EN("FALSE"),    // Enable DYNCLKINVSEL inversion (FALSE, TRUE)
      // INIT_Q1 - INIT_Q4: Initial value on the Q outputs (0/1)
      .INIT_Q1(1'b0),
      .INIT_Q2(1'b0),
      .INIT_Q3(1'b0),
      .INIT_Q4(1'b0),
      .INTERFACE_TYPE("MEMORY"),   // MEMORY, MEMORY_DDR3, MEMORY_QDR, NETWORKING, OVERSAMPLE
      .IOBDELAY("NONE"),           // NONE, BOTH, IBUF, IFD
      .NUM_CE(2),                  // Number of clock enables (1,2)
      .OFB_USED("FALSE"),          // Select OFB path (FALSE, TRUE)
      .SERDES_MODE("MASTER"),      // MASTER, SLAVE
      // SRVAL_Q1 - SRVAL_Q4: Q output values when SR is used (0/1)
      .SRVAL_Q1(1'b0),
      .SRVAL_Q2(1'b0),
      .SRVAL_Q3(1'b0),
      .SRVAL_Q4(1'b0)
   )
   ISERDESE2_inst (
      .O(O),                       // 1-bit output: Combinatorial output
      // Q1 - Q8: 1-bit (each) output: Registered data outputs
      .Q1(Q1),
      .Q2(Q2),
      .Q3(Q3),
      .Q4(Q4),
      .Q5(Q5),
      .Q6(Q6),
      .Q7(Q7),
      .Q8(Q8),
      // SHIFTOUT1, SHIFTOUT2: 1-bit (each) output: Data width expansion output ports
      .SHIFTOUT1(SHIFTOUT1),
      .SHIFTOUT2(SHIFTOUT2),
      .BITSLIP(BITSLIP),           // 1-bit input: The BITSLIP pin performs a Bitslip operation synchronous to
                                   // CLKDIV when asserted (active High). Subsequently, the data seen on the Q1
                                   // to Q8 output ports will shift, as in a barrel-shifter operation, one
                                   // position every time Bitslip is invoked (DDR operation is different from
                                   // SDR).
// CE1, CE2: 1-bit (each) input: Data register clock enable inputs
      .CE1(CE1),
      .CE2(CE2),
      .CLKDIVP(CLKDIVP),           // 1-bit input: TBD
      // Clocks: 1-bit (each) input: ISERDESE2 clock input ports
      .CLK(CLK),                   // 1-bit input: High-speed clock
      .CLKB(CLKB),                 // 1-bit input: High-speed secondary clock
      .CLKDIV(CLKDIV),             // 1-bit input: Divided clock
      .OCLK(OCLK),                 // 1-bit input: High speed output clock used when INTERFACE_TYPE="MEMORY" 
      // Dynamic Clock Inversions: 1-bit (each) input: Dynamic clock inversion pins to switch clock polarity
      .DYNCLKDIVSEL(DYNCLKDIVSEL), // 1-bit input: Dynamic CLKDIV inversion
      .DYNCLKSEL(DYNCLKSEL),       // 1-bit input: Dynamic CLK/CLKB inversion
      // Input Data: 1-bit (each) input: ISERDESE2 data input ports
      .D(D),                       // 1-bit input: Data input
      .DDLY(DDLY),                 // 1-bit input: Serial data from IDELAYE2
      .OFB(OFB),                   // 1-bit input: Data feedback from OSERDESE2
      .OCLKB(OCLKB),               // 1-bit input: High speed negative edge output clock
      .RST(RST),                   // 1-bit input: Active high asynchronous reset
      // SHIFTIN1, SHIFTIN2: 1-bit (each) input: Data width expansion input ports
      .SHIFTIN1(SHIFTIN1),
      .SHIFTIN2(SHIFTIN2)
   );

3.2 关键参数解析

参数名 说明 注意事项
DATA_RATE 定义数据速率模式 SDR(单数据速率)或DDR(双数据速率),默认DDR
DATA_WIDTH 并行数据宽度 与INTERFACE_TYPE和DATA_RATE相关
INTERFACE_TYPE 接口类型 MEMORY、NETWORKING、OVERSAMPLE等
IOBDELAY 输入路径选择 决定使用D还是DDLY作为输入
SERDES_MODE 主从模式 位宽扩展时使用,MASTER或SLAVE

DATA_RATE:定义了输入数据流是作为单数据速率(SDR)还是双数据速率(DDR)进行处理。此属性允许的值为 SDR 和 DDR。默认值为 DDR。

DATA_WIDTH:定义了串并转换器的并行数据输出宽度。该属性的可能取值取决于 INTERFACE_TYPE 和 DATA_RATE 属性。有关支持的数据宽度,请参阅表 3 - 3。

当 DATA_WIDTH 设置为大于 8 的位宽时,必须将一对 ISERDESE2 配置为主从配置。请参阅 ISERDESE2 位宽扩展在内存模式下不允许进行位宽扩展

INTERFACE_TYPE:决定了 ISERDESE2 是配置为内存模式还是网络模式。该属性允许的值为 MEMORY、MEMORY_DDR3、MEMORY_QDR、OVERSAMPLE 或 NETWORKING。默认模式为 MEMORY。 图 3 - 5 展示了 ISERDESE2 在 MEMORY 模式下的内部连接情况。

NUM_CE:定义了所使用的时钟使能信号(CE1 和 CE2)的数量。可能的值为 1 和 2(默认值 = 2)

SERDES_MODE :定义了在使用宽度扩展时,ISERDESE2 模块是主模块还是从模块。可能的值为 MASTER(主)和 SLAVE(从)。默认值为 MASTER(主)。请参阅 ISERDESE2 宽度扩展

4. 核心功能详解

4.1 数据输入路径选择

ISERDESE2提供两个串行数据输入端口:

  • D端口:直接连接到IOB(输入输出块),来自FPGA引脚的信号

  • DDLY端口 :连接到IDELAYE2的输出,可对输入信号进行精细的延迟调整

通过配置IOBDELAY参数,用户可以灵活选择数据路径,实现对输入时序的精确控制。

4.2 位序规则

输出端口 Q1 至 Q8 是 ISERDESE2 模块的寄存输出,一个 ISERDESE2 模块最多可支持 8 位(即 1:8 解串),位宽大于 8(最高可达 14)时,仅支持 DDR 模式。请参阅 ISERDESE2 位宽扩展

理解ISERDESE2的位序对于正确设计至关重要:

  • 输入端:最先到达的串行数据位是最低位

  • 输出端 :最先接收的位出现在Q8输出端

如图 3 - 3 所示,OSERDESE2 输入端的位序与 ISERDESE2 模块输出端的位序相反。例如,字 FEDCBA 的最低有效位 A 被置于 OSERDESE2 的 D1 输入端,但相同的位 A 从 ISERDESE2 模块的 Q8 输出端输出。换句话说,D1 是 OSERDESE2 的最低有效输入,而 Q8 是 ISERDESE2 模块的最低有效输出。使用位宽扩展时,发送端 OSERDESE2 的 D1 是最低

4.3 Bitslip子模块------字对齐的利器

Bitslip 是ISERDESE2中最关键也最容易让人困惑的功能模块,主要用于字对齐 。由于上电初始化时间不确定,串并转换模块可能从串行数据流的任意位置开始转换,导致输出的并行数据错位。

4.3.1 Bitslip的工作原理

通过拉高BITSLIP引脚(与CLKDIV同步),可以调整并行数据的输出顺序,如图3所示:

  • SDR模式 :每次Bitslip操作使输出模式左移1位

  • DDR模式 :每次Bitslip操作在右移1位左移3位之间交替进行

执行8次Bitslip操作后,输出模式会恢复到初始状态,完成一个循环。

4.3.2 实际应用方法

在实际应用中,通常采用训练序列进行字对齐:

  1. 发送端发送已知的训练序列(如ABCD)

  2. 接收端检查ISERDESE2的输出是否与预期一致

  3. 如果不一致,拉高BITSLIP一个CLKDIV周期

  4. 等待2-3个CLKDIV周期后检查新的输出

  5. 重复步骤2-4直到获得正确的输出

这种方法通过不断调整转换起始位置,最终找到正确的字边界。

如下,DDR模式下

时钟事件 1 :整个第一个字 CDAB 已被采样到 ISERDESE2 的输入侧寄存器中。位滑动(Bitslip)引脚未置位;该字在 ISERDESE2 中传播,无需任何重新对齐。

时钟事件 2:位滑动引脚置位,这会使位滑动控制器将所有位在内部向右移动一位。位滑动信号在一个(仅一个)CLKDIV 周期内保持高电平。

时钟事件 3:在位滑动引脚置位三个 CLKDIV 周期后,位滑动操作完成,新的移位数据以 BCDA 的形式出现在输出端。

4.3.3 使用注意事项
  • BITSLIP只能在NETWORKING模式下使用

  • BITSLIP必须拉高一个CLKDIV周期,不能连续两个周期拉高

  • 两次Bitslip操作之间必须至少间隔一个CLKDIV周期

  • 在SDR模式下,每次Bitslip后需等待至少2个CLKDIV周期 再检查数据;DDR模式下需等待至少3个周期

4.4 时钟方法

ISERDESE2的时钟设计对系统性能至关重要:

4.4.1 时钟要求
  • CLK和CLKDIV必须相位对齐

  • CLK是高速串行时钟,与输入数据速率匹配

  • CLKDIV是分频时钟,与并行数据速率匹配

4.4.2 推荐的时钟配置

对于NETWORKING模式

  • 方案1:CLK由BUFIO驱动,CLKDIV由BUFR驱动

  • 方案2:CLK和CLKDIV由同一个MMCM/PLL 的不同输出驱动,并使用相同类型的缓冲器(同为BUFG或同为BUFIO/BUFR)

对于MEMORY模式

  • CLK和OCLK可以由BUFIO驱动,CLKDIV由BUFR驱动

  • 或者全部由MMCM/PLL驱动

  • OCLK和CLKDIV必须相位对齐,但CLK和OCLK之间不需要相位关系

5. 位宽扩展技术

当需要大于8位的并行数据时,可以使用两个ISERDESE2进行级联

5.1 级联配置方法

  • 将主ISERDESE2的SERDES_MODE设置为"MASTER",从模块设置为"SLAVE"

  • 将主模块的SHIFTOUT1/SHIFTOUT2 连接到从模块的SHIFTIN1/SHIFTIN2

  • 两个模块必须处于NETWORKING模式

5.2 位宽支持

  • 1:10配置:使用从模块的Q3-Q4输出作为高两位

  • 1:14配置:使用从模块的Q3-Q8输出作为高六位

6. 复位与初始化

ISERDESE2的复位设计需要特别注意:

  • RST为高电平异步复位,将CLK和CLKDIV域中大多数触发器异步置低

  • 复位应与CLKDIV同步撤销,由内部逻辑重新同步到CLK

  • 复位信号宽度应至少为两个CLKDIV脉冲

  • 复位撤销后,输出需要经过两个CLKDIV周期才有效

7. 实际应用场景

7.1 LVDS接口接收

在LVDS高速接口应用中,ISERDESE2通常与IDELAYE2配合使用:

  1. LVDS数据通过IBUFDS转换为单端信号

  2. 信号进入IDELAYE2进行精细延迟调整

  3. 调整后的数据送入ISERDESE2的DDLY端口

  4. ISERDESE2完成串并转换

  5. 通过Bitslip训练实现字对齐

7.2 过采样应用

在7系列FPGA中,ISERDESE2还支持过采样模式(OVERSAMPLE):

  • 使用0°和90°相移的时钟对输入数据进行4倍过采样

  • 通过数据恢复单元(DRU)从过采样数据中恢复出原始数据

  • 可实现最高1.25Gbps的异步数据接收

8. 设计注意事项与常见陷阱

8.1 常见设计错误

  • 时钟相位未对齐:CLK和CLKDIV必须相位对齐,这是最常见的问题

  • 复位处理不当:复位撤销时序错误导致数据输出无效

  • Bitslip使用不当:连续拉高Bitslip或未等待足够周期就检查数据

  • 位序理解错误:混淆Q1和Q8的优先级

8.2 性能优化建议

  • 使用IDELAYE2调整输入数据与时钟的相位关系

  • 确保CLK和CLKDIV使用同类型时钟缓冲器

  • 对于差分输入,主ISERDESE2必须位于差分输入对的正(_P)引脚

  • 仔细规划复位时序,确保所有ISERDESE2同步退出复位

结语

ISERDESE2是7系列FPGA中实现高速源同步接口的核心资源,其灵活的配置、强大的Bitslip对齐机制以及可扩展的位宽支持,使其成为各种高速接口设计的理想选择。掌握ISERDESE2的正确使用方法,特别是理解其时钟要求和Bitslip操作机制,对于成功实现Gbps级别的数据接收至关重要。

通过本文的详细解析,相信读者能够对ISERDESE2有一个全面的认识,并在实际设计中灵活运用这一强大的硬件资源。

相关推荐
tiantianuser3 小时前
RDMA设计50: 如何验证网络嗅探功能?
网络·fpga开发·rdma·高速传输·cmac·roce v2
Lzy金壳bing3 小时前
基于Vivado平台对Xilinx-7K325t FPGA芯片进行程序在线更新升级
fpga开发·vivado·xilinx
unicrom_深圳市由你创科技4 小时前
医疗设备专用图像处理板卡定制
图像处理·人工智能·fpga开发
tiantianuser5 小时前
RDMA设计52:构建RoCE v2 高速数据传输系统板级测试平台
fpga开发·rdma·高速传输·cmac·roce v2
luoganttcc17 小时前
Taalas 将人工智能模型蚀刻到晶体管上,以提升推理能力
人工智能·fpga开发
国科安芯18 小时前
医疗成像设备系统电源芯片国产替代可行性研究
网络·单片机·嵌入式硬件·fpga开发·硬件架构
不是AI18 小时前
【电路仿真】【Logisim】二、7408 TTL
单片机·fpga开发
江蘇的蘇19 小时前
基于FPGA开发应用SATA硬盘
fpga开发
LCMICRO-133108477461 天前
长芯微LDM63085完全P2P替代ADM2483,是一款基于数字隔离技术的高可靠性的半双工隔离RS-485收发器
单片机·嵌入式硬件·fpga开发·硬件工程·dsp开发