AMD UltraScale 系列 SelectIO 资源详解

由 judy 提交于

作者:FPGA入门到精通

7 系列的 IDELAYE2 代码不能直接搬到 UltraScale 上,这是因为7 系列的 I/O 逻辑是 ILOGIC / OLOGIC 加 ISERDESE2 / OSERDESE2 拼出来的,UltraScale 把这套整个拆掉,改成以 nibble 为粒度的 BITSLICE 结构。

延迟线从 32 抽头扩到 512 抽头,分辨率从「能算出的确定值」变成「随 PVT 漂移的区间值」,而 ISERDESE3 干脆把 Bitslip 拿掉了。

这篇按 UG571(v1.15)和 UG974 的原语定义,把这几处差异拆开讲,顺带给出迁移时要核对的清单。

一、从 ILOGIC/OLOGIC 到 BITSLICE

每个 nibble 里有一对 RX_BITSLICE 和 TX_BITSLICE,配一个 BITSLICE_CONTROL 统一控制。

串并转换、并串转换、寄存、输入输出延迟,全在 BITSLICE 内部完成,输入路径上还带一个小 FIFO。

直接用 BITSLICE 的用法叫 Native Mode。要走这条路,先用 IP 库里的 High-Speed SelectIO Wizard 验证配置,不建议手搓。

层级是这样叠的:

HP/HR Bank(52 IO pin,48 可配单端 / 24 差分对)

  └── 4 × Byte Group

        └── 2 × Nibble Group

              ├── Upper Nibble:7 个 single-ended IOB(或 3 差分 + 1 单端)

              └── Lower Nibble:6 个 single-ended IOB(或 3 差分)

  每 nibble:1 × BITSLICE_CONTROL + 6~7 × RXTX_BITSLICE

二、Bank 还是三类,但 HD 是坑

Bank 类型

电压上限

定位

高级特性

HP

1.8V

高速接口、存储器

支持 I/O SERDES、IDELAY、ODELAY、DCI;Zynq/Kintex/Virtex UltraScale+ 额外增强 MIPI D-PHY

HR

3.3V

通用宽电压 I/O

支持 I/O SERDES、IDELAY

HD

低速率

低速接口

无 I/O SERDES、无 I/O Delay;仅单端 + LVDS(外部端接)+ SSTL/HSTL,速率上限约 250 Mb/s

Zynq UltraScale+ MPSoC、Kria SOM 上常见 HD 和 HP 混排。

选管脚时如果没先确认 Bank 类型,想用 IDELAYE3 却落在 HD Bank 上,编译直接不过,报错信息还不太指出根因。

三、原语对照:改名的、删功能的

不想走 native mode,可以像 7 系列那样直接例化组件原语:

UltraScale 原语

功能

对应 7 系列

关键差异

IDDRE1

输入 DDR 触发器

IDDR

更名 + 端口简化

ODDRE1

输出 DDR 触发器

ODDR

更名 + 端口简化

ISERDESE3

输入解串

ISERDESE2

取消 Bitslip;DDR 1:8 / 1:4,SDR 1:4 / 1:2

OSERDESE3

输出串化

OSERDESE2

DDR 8:1 / 4:1,SDR 4:1 / 2:1

IDELAYE3

输入精细延迟(512 抽头)

IDELAYE2(32 抽头)

抽头数 ×16,支持 COUNT/TIME 双模式

ODELAYE3

输出精细延迟(512 抽头)

ODELAYE2

同上

IDELAYCTRL

延迟线校准参考

IDELAYCTRL

概念沿用,频率范围放宽

改名的两个还好办,把 ISERDESE2 换成 ISERDESE3 的时候才会卡住:找不到 Bitslip 端口了。

7 系列靠它做字对齐,UltraScale 上要么自己在 fabric 里写移位对齐状态机,要么改用 native mode 的 BITSLICE 方案。DDR 和源同步接口迁移,翻车最多的就是这一处。

四、延迟线:512 抽头与两种模式

1、抽头与分辨率

项目

7 系列 IDELAYE2

UltraScale IDELAYE3

UltraScale+ IDELAYE3

抽头数

32

512

512

单抽头分辨率

固定值(200MHz 参考时钟下约 78ps)

2.5 ~ 15ps(随 PVT 波动)

2.1 ~ 12ps(随 PVT 波动)

TIME 模式最大延迟

—

约 1.25ns(511 tap)

约 1.1ns(511 tap)

固有延迟

需在预算中扣除

约 160ps(实测值)

同左

这里有条容易忽略的分界:

7 系列的抽头分辨率是可算出的确定值,按 IDELAYCTRL 参考时钟频率一算就有;

UltraScale 的 512 个抽头逐个都不校准,分辨率是个范围,随工艺、电压、温度漂。

所以 COUNT 模式下拿抽头数乘分辨率去反推时间,算出来的数只能当参考。

2、COUNT 还是 TIME

维度

COUNT 模式

TIME 模式

是否需要 IDELAYCTRL

不需要(延迟线未校准)

必须使用

DELAY_VALUE 单位

抽头数(0 ~ 511)

皮秒

PVT 补偿

无

有

EN_VTC 电平

必须为 Low

必须为 High

典型用途

扫描数据流找跳变、纯计数场景

需要精确时间对齐的接口(DDR PHY 等)

选错的后果不对称:COUNT 模式在实验室能跑,温度一变就偏;TIME 模式如果忘了 EN_VTC,等于白用一套补偿电路。

3、关键属性

属性

取值

说明

DELAY_FORMAT

TIME / COUNT

决定 DELAY_VALUE 单位

DELAY_TYPE

FIXED / VARIABLE / VAR_LOAD

FIXED 固定;VARIABLE 用 CE/INC 手动增减抽头;VAR_LOAD 用 CE/INC 或 CNTVALUEIN/LOAD 加载

UPDATE_MODE

ASYNC / SYNC / MANUAL

ASYNC 与数据无关随时更新,逻辑最简;SYNC 随 DATAIN/IDATAIN 边沿;MANUAL 需两次 LOAD

REFCLK_FREQUENCY

见下表

必须与 IDELAYCTRL / BITSLICE_CONTROL 实际参考时钟一致

CASCADE

NONE / MASTER / SLAVE

单原语 1.1~1.25ns 不够时级联

SIM_DEVICE

ULTRASCALE / ULTRASCALE_PLUS / _ES1 / _ES2

仿真器件版本

参考时钟允许范围:

组件

UltraScale

UltraScale+

IDELAYCTRL

200.0 – 800.0 MHz

300.0 – 800.0 MHz

BITSLICE_CONTROL

200.0 – 2400.0 MHz

300.0 – 2666.7 MHz

REFCLK_FREQUENCY 写错是另一种静默失败:延迟值照算,只是和实际时钟对不上,误差随抽头数线性放大。

4、IDELAYCTRL 与 EN_VTC 的时序

端口三个:

REFCLK 要走全局时钟缓冲,可由 MMCME3 / PLLE3 供给;

RST 高有效,异步置位、同步于 REFCLK 释放;

RDY 表示本区域延迟线校准完成。

配置完成后必须复位一次 IDELAYCTRL,且此时 REFCLK 已经稳定,否则延迟值不可信。RDY 被拉低,就得重新复位。

同一区域内所有 IDELAYE3 / ODELAYE3 共享这一个 IDELAYCTRL。

TIME 模式的参考写法:

IDELAYE3 #(

  .DELAY_FORMAT    ("TIME"),      // ps 为单位

  .DELAY_TYPE      ("VAR_LOAD"),  // 支持动态加载

  .DELAY_VALUE     (0),

  .REFCLK_FREQUENCY(312.5),       // 与 IDELAYCTRL 实际参考时钟一致

  .UPDATE_MODE     ("ASYNC"),

  .SIM_DEVICE      ("ULTRASCALE_PLUS")

) IDELAYE3_inst (

  .CLK        (clk),

  .CNTVALUEIN (cntvaluein),

  .DATAIN     (data_i),

  .IDATAIN    (data_ibuf),

  .LOAD       (load),

  .CE         (ce),

  .INC        (inc),

  .EN_VTC     (en_vtc),          // TIME 模式必须为高

  .CNTVALUEOUT(cntvalueout),

  .DATAOUT    (data_o)

);

五、时钟不能走 IDELAY

IDELAYE3 不能直接布线到全局时钟缓冲。

要挪时钟相位,用 MMCM/PLL 的 fine-phase shift,不能把 IDELAY 串在时钟路径上。

这条是 UG571 写死的硬约束,也是新手最常撞的一堵墙。

六、迁移检查表

#

迁移项

7 系列

UltraScale / UltraScale+

动作

1

I/O 逻辑结构

ILOGIC/OLOGIC + ISERDESE2/OSERDESE2

RXTX_BITSLICE + BITSLICE_CONTROL

走 native mode 需重新配置

2

Bitslip

ISERDESE2 自带

ISERDESE3 无

自实现移位对齐,或改用 BITSLICE

3

延迟线抽头

32

512

时序预算与扫描算法重算

4

延迟分辨率

固定(约 78ps@200MHz)

区间值(US 2.5~15ps / US+ 2.1~12ps)

COUNT 模式不能当定时器

5

延迟模式

仅抽头计数

COUNT / TIME 双模式

需要精确对齐时切 TIME + EN_VTC

6

IDELAYCTRL 参考时钟

200MHz ±10% 严格匹配

放宽至 200–800MHz / 300–800MHz

时钟规划放宽

7

ODELAY

仅 HP Bank 有

ODELAYE3 可用

输出延迟设计空间变大

8

Bank 类型

HP / HR

HP / HR / HD

选脚先确认 Bank 类型

七、六个常见坑

1.把 IDELAYE3 串在时钟路径上 —— 布线不到全局时钟缓冲,直接失败。改用 MMCM/PLL 相移。

2.在 HD Bank 上例化 ISERDESE3 / IDELAYE3 —— 那里没有这些资源,编译报错。

3.TIME 模式忘了 EN_VTC 或 IDELAYCTRL —— 延迟不随 PVT 补偿,实验室能跑,上板温度一变就错。

4.COUNT 模式下按 ps 设 DELAY_VALUE —— 该模式分辨率不确定,换算不出时间。

5.配置后没复位 IDELAYCTRL —— RDY 没拉高,延迟线未校准。

6.迁移时找不到 ISERDESE3 的 Bitslip 端口 —— 字对齐逻辑得自己补。