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有一个全面的认识,并在实际设计中灵活运用这一强大的硬件资源。

相关推荐
仲南音2 天前
Xilinx FPGA——时钟IP核MMCM、PLL
fpga开发
I'm a winner3 天前
基于Xilinx FPGA的LVDS高速串行通信系统(三)--数据训练及握手机制【文末源码】
fpga开发
upper20203 天前
coremark移植坑之-nostartfiles -nostdlib参数
学习·fpga开发·coremark移植·riscv设计
Eloudy3 天前
Vivado 纯命令行构建 FPGA 项目教程
fpga开发
Rambo.xia3 天前
AXI跨时钟域与数据一致性——CDC FIFO深度不够、写后读冒险、多Master仲裁、乱序返回,出了Bug根本查不出来
fpga开发·bug
upper20203 天前
FPGA部署卷积神经网络识别MINST图片
fpga开发·卷积神经网络·minst·minst识别·部署神经网络·神经网络识别图片
你是我的解忧王子4 天前
嵌入式 ADC采样 原始数据分析上层(平均值 波动率 正态分布 线性补偿 系统误差)
fpga开发·数据挖掘·数据分析
9527华安4 天前
FPGA纯verilog代码ISP图像处理培训教程,基于IMX214,提供工程源码+视频教程+FPGA开发板
图像处理·fpga开发·isp·imx214·mipi
千寻xun5 天前
二、实战篇-NVME SSD控制之ZYNQ实现(六)-读写NVME SSD硬盘数据
fpga开发·nvme·nvme ssd
千寻xun5 天前
二、实战篇-NVME SSD控制之ZYNQ实现(三)
fpga开发·nvme ssd·nvme协议