简介面向FPGA工程师、电子类学生及硬件接口设计人员这份UG471 v1.10《7 Series FPGAs SelectIO Resources》中文全文翻译文档着力降低英文用户指南的阅读门槛可用于7系列FPGA的I/O接口配置、高速数字接口设计与调试。资源包共1个docx文件约1.76MB保留原文章节结构便于按主题检索对照。已有449人学习下载。正文从基本概念、配置方法到设计流程逐步展开系统讲解SelectIO的输入接收器、输出驱动器、电平转换器和可配置I/O缓冲器并覆盖I/O标准选择、I/O Bank组织、数据宽度与速度等级设置、电源时钟管理以及预加重、去加重、动态电压电流管理等信号完整性与低功耗设计要点对高速接口中的信号质量与功耗平衡亦有参考同时涉及Vivado布线约束、仿真验证、最佳实践和免责声明适合作为接口开发与查漏补缺的案头参考。1. 从一份中文 UG471 说起SelectIO 到底解决什么现场问题检索 ug471_7Series_Se 的人多半不是想读一遍英文手册而是手头有一块 7 系列 FPGA 板子SelectIO 的管脚、电平和延迟链对不上想找一份能直接查表的中文资料。这份《UG471 v1.10》全文翻译 docx 的价值不在“翻完”而在把 I/O Bank、IOSTANDARD、DCI、IDELAY/ODELAY、ISERDESE2/OSERDESE2 这些分散在图表里的参数变成能对着约束文件和示波器逐项核对的条目。它适合已经能跑通综合实现、但在源同步接口、DDR 存储接口或差分链路联调时卡住的人新手可以按章节补概念熟手更适合把它当查询表。翻译版有术语音译和机翻痕迹读的时候保留英文原词做锚点别把“位滑”“存根串联终止”当成新名词。2. 先锁 I/O Bank 与 IOSTANDARD电平选错后面全白调SelectIO 不是一组孤立管脚所有约束都落在 Bank 边界上。翻译文档里表 1-1 一类的标准表、VCCO/VREF 说明和管脚规划段落是第一层过滤器。很多接口问题不是代码写错而是 Bank 供电、参考电压和 IOSTANDARD 三者一开始就不匹配后面调延迟、换端接都是白费。这一章按“Bank 硬边界 → 标准选择 → 约束写法 → 检查流程”推一遍把 ug471_7Series_Se 这份翻译里最常翻的几页落到工程动作上。2.1 I/O Bank、VCCO 与 VREF 的硬边界7 系列 FPGA 的 SelectIO 按 Bank 组织每个 Bank 有一组共享的 VCCO 供电管脚。Bank 内可以放多个单端或差分对但同一 Bank 的 VCCO 必须统一不能一边给 1.8 V 一边给 2.5 V。常见做法是先把板上所有外设接口按电压分组再反推 Bank 分配不是先画管脚最后才发现某个 Bank 里混了 3.3 V 和 1.8 V 的器件。翻译文档里 VCCO 相关段落反复更新原因就在这里电压是硬约束不是软件属性。VREF 是另一条容易被忽略的边界。SSTL、HSTL 这类带参考电压的标准需要 Bank 内提供 VREFVREF 管脚不是随便找个普通 I/O 就能替代。一个 Bank 里如果同时放 LVCMOS 和 SSTL除了 VCCO 要匹配还要看 VREF 是否被占用、参考电压是否稳定。我一般会在管脚规划表里单独加两列Bank 电压、VREF 来源。没有这两列后面约束文件写得再漂亮也可能在配置阶段报 Bank 冲突或者上板后电平判决点漂移。HR Bank 和 HP Bank 的差别也要提前看。HR Bank 支持较宽的 VCCO 范围适合 3.3 V、2.5 V 的慢速外设HP Bank 更偏高性能支持 DCI、ODELAY 和更高速的差分标准。选型时如果只按“管脚够不够”分配把需要 ODELAY 的输出放到 HR Bank后面会发现原语根本放不进去。文档里 ODELAY 明确写了在 HR Bank 不可用这种限制不是靠改约束能绕过的。先看 Bank 类型再看标准再看管脚数量顺序不要反。失败时看什么综合实现阶段的 Bank 电压冲突报告、管脚规划里的 VCCO 分组、上电后实测的 Bank 电压。如果配置能过但接口误码优先怀疑 IOSTANDARD 与 VCCO 不匹配而不是先调时序。示波器测到的高电平如果明显低于预期或者边沿台阶明显先回查 Bank 供电不要急着换驱动强度。2.2 单端与差分标准的选择表翻译文档覆盖的标准很多真正落地时先按接口类型分四类普通 GPIO、存储接口、高速差分、时钟输入。普通 GPIO 常用 LVCMOS18、LVCMOS25、LVCMOS33存储接口常见 SSTL15、SSTL135、SSTL18高速差分常见 LVDS、LVDS_25部分网络和存储接口会用 HSTL。标准名后面的电压后缀不是装饰LVCMOS18 和 LVCMOS25 对 VCCO 的要求不同LVDS 与 LVDS_25 的 Bank 供电条件也不同。标准类型典型用途关键约束选型注意LVCMOS18/25/33普通 GPIO、低速控制VCCO 与后缀一致驱动和斜率按负载调不要默认最大SSTL15/135/18DDR 类存储接口VREF、端接、DCI先确认 Bank 是否支持所需 DCIHSTL高速存储/网络接口VREF、差分/单端注意 Bank 类型和端接方案LVDS/LVDS_25高速差分、时钟差分对、VCCO成对约束P/N 不要拆散IN_TERM 相关标准高量程 Bank 内部端接IN_TERM 属性不是所有 Bank 都支持这张表只是入口具体可选值要回查文档表 1-1、表 1-10、表 1-55 一类的表格。比如 DRIVE 属性常见 4、8、12、16、24 mA 几档但并不是每个标准都开放所有档位SLEW 有 FAST/SLOW低速控制线用 SLOW 往往更稳IN_TERM 有 NONE、60、120 等选项但只在支持的 Bank 和标准下有效。翻译版里这些表有些表注被机翻打散读的时候把英文原词和表注编号一起看别只抄单元格。差分接口还有一个常见误用只约束 P 端不约束 N 端。差分对在管脚规划里是一个整体IOSTANDARD 要成对写位置要按差分对规则分配。LVDS 输入如果 P/N 反了某些器件可以通过内部反相或布线调整但这不是默认能力首板最好按原理图一对一对核。时钟差分对还要看是否走专用时钟管脚普通差分管脚能收数据不一定能直接进时钟网络。2.3 从文档表格落到约束文件IOSTANDARD/DRIVE/SLEW 的写法把标准选清楚后约束文件里至少要把 IOSTANDARD、DRIVE、SLEW、IN_TERM 这几项写全。下面是一段常见的单端输出和差分输入约束片段Bank 编号和端口名按工程实际改。代码里的注释不是装饰是后面回读和排查时的索引。# 单端输出先定标准再定驱动和斜率 set_property IOSTANDARD LVCMOS18 [get_ports {tx_data[*]}] set_property DRIVE 8 [get_ports {tx_data[*]}] set_property SLEW SLOW [get_ports {tx_data[*]}] set_property IN_TERM NONE [get_ports {tx_data[*]}] # 差分输入成对约束别只约束 P 端 set_property IOSTANDARD LVDS_25 [get_ports {rx_clk_p}] set_property IOSTANDARD LVDS_25 [get_ports {rx_clk_n}]IOSTANDARD 必须和所在 Bank 的 VCCO 匹配这是第一优先级。DRIVE 影响输出边沿和同时开关噪声不是越大越好普通控制线 4 mA 或 8 mA 往往够用驱动过强会让过冲和振铃更明显。SLEW SLOW 会牺牲一点边沿速度换来更低的过冲在长线或连接器场景更稳。IN_TERM NONE 表示不使用内部端接如果板上已经有外部端接不要重复开内部端接否则等效阻抗会变。差分输入两行都要写不能只给 P 端加属性。约束写完后要做一次回读把关键端口的 IOSTANDARD、DRIVE、SLEW 打出来和管脚规划表逐项对。回读日志建议留在工程目录里后面换版本或换人接手时这份日志比口头交接可靠。翻译文档里 IBUF_LOW_PWR、PULLUP/PULLDOWN/KEEPER 这些属性也常被问到原则一样先用表确认适用条件再写进约束不要凭经验全局加。2.4 一个可复现的管脚约束检查流程首板 bring-up 时我一般按下面这个顺序走每一步都有明确的失败信号。流程不复杂关键是不要跳步。步骤动作通过标准失败先看1按 Bank 列出 VCCO 和外设电压同一 Bank 电压唯一原理图电源分组2给每个接口标 IOSTANDARD标准与 VCCO 匹配文档标准表表注3检查 VREF 和差分对VREF 未被普通 I/O 占用管脚规划文件4写约束并回读回读值与规划表一致约束作用域和端口名5上电测 Bank 电压实测在标准允许范围电源纹波和压降6抓首帧数据无台阶、无明显过冲驱动强度、斜率、端接第 4 步的回读很关键。约束文件里get_ports写错通配符可能只作用到一部分端口综合实现不报错但个别管脚还是默认标准。回读时把端口列表和 Bank 一起打出来发现漏项就补。第 6 步不要只看功能是否通先看波形质量电平不对时功能偶尔能通温度一变就翻车这种血泪经验在源同步接口上尤其明显。3. DCI 与端接落地VRN/VRP、IN_TERM、DCI_CASCADE 的配置边界DCI 是翻译文档里最容易“照抄但不 work”的部分。它用外部精密电阻和内部校准电路复制端接阻抗抵消 PVT 变化听起来很自动实际上对参考电阻、Bank 类型、供电和约束都有硬要求。很多板子第一版把 VRN/VRP 电阻放在远离管脚的位置或者用了 5% 精度电阻功能能通温度一上来眼图就塌。这一章把 DCI 的参考电阻、IN_TERM、级联和首板验证拆开讲。3.1 DCI 的工作原理与参考电阻计算DCI 的核心是一个内部校准环路Bank 内的 VRN 管脚通过精密电阻接 VCCOVRP 管脚通过精密电阻接 GND内部电路以这两个参考为基准校准输出驱动和输入端接的等效阻抗。7 系列常见做法是 240 Ω、1% 精度电阻靠近 Bank 的 VRN/VRP 管脚放置走线短而对称。电阻值不是随便选的它和内部端接目标阻抗相关换值之前先查文档对应表不要用“差不多”的电阻替代。DCI 生效后端接阻抗会随温度和电压自动修正这是它相对外部端接的优势。但 DCI 不是所有 Bank 都支持HP Bank 更常见HR Bank 的能力要看具体器件和标准。约束里还会遇到 DCIUpdateMode、MATCH_CYCLE、DCIRESET 这些配置项DCIUpdateMode 影响校准更新时机MATCH_CYCLE 和更新周期相关DCIRESET 是复位校准环路的原语。首板调试时如果 DCI 校准没有完成就发数据眼图会像开盲盒所以复位和等待顺序要写进上电流程。常见误用是把 DCI 当成“开了就稳”。如果参考电阻虚焊、阻值漂移、VCCO 噪声大DCI 会把错误参考复制到整个 Bank表现比固定端接更隐蔽。我一般会在原理图评审时单独标出 VRN/VRP 的电阻位号、精度、功率和地回流PCB 评审时看它是否靠近管脚、是否被高速线穿过。翻译文档里 VRN/VRP 外部电阻设计迁移 guideline 那一段值得细读尤其是功率额定值和布局说明。3.2 高量程 Bank 的 IN_TERM 与未校准分裂端接IN_TERM 是高量程 I/O Bank 里常见的内部端接属性文档里对应“未校准分裂端接”一类描述。它不依赖 DCI 校准环路适合不需要动态校准、但又想省掉外部端接的场合。IN_TERM 的可选值和支持标准要看具体 Bank 和文档表不是所有标准都能开也不是所有 Bank 都有。常见做法是能在板上放外部端接的接口优先外部端接空间紧张、速率不高、Bank 支持时再用 IN_TERM。IN_TERM 和 DCI 不要在同一组管脚上重复开。内部端接叠加会让等效阻抗偏离设计值表现是眼图张开度变差、反射增强。还有一种情况是约束里写了 IN_TERM但综合实现把它优化掉或报不适用原因可能是标准不匹配或 Bank 类型不对。失败时先看实现报告里的属性生效情况再看文档表 1-55 一类的表注不要直接改驱动强度硬顶。高量程 Bank 的电压范围更宽IN_TERM 的阻值选项和 VCCO 相关。首板如果用 3.3 V 或 2.5 V 接口先确认该 Bank 是否支持目标标准下的 IN_TERM再决定是否省外部电阻。保险做法是预留外部端接焊盘首板用 IN_TERM 验证功能眼图不理想时再贴外部电阻对比。这个“后悔药”比改板便宜。3.3 DCI_CASCADE 与 VCCAUX_IO 约束当一个 Bank 的参考电阻需要服务多个从 Bank 时会用到 DCI_CASCADE。约束里指定主 Bank 编号和从 Bank 列表从 Bank 不再需要自己的 VRN/VRP 电阻。下面是一段示意写法Bank 编号按工程实际改不要照抄数字。# 指定主 Bank 为 34从 Bank 跟随Bank 编号按工程实际改 set_property DCI_CASCADE {34} [get_iobanks 35] set_property DCI_CASCADE {34} [get_iobanks 36] # 高性能 Bank 的 VCCAUX_IO 按手册核对后约束 set_property VCCAUX_IO 1.8 [get_iobanks 34]DCI_CASCADE 的值是被级联的主 Bank 编号从 Bank 的 DCI 参考由主 Bank 提供。级联关系要跟 PCB 上的电阻位置一致主 Bank 的 VRN/VRP 电阻必须贴好从 Bank 不能再放一套互相打架的参考。级联距离和 Bank 相邻关系也有要求跨太远可能校准不到具体看文档的级联 guideline。VCCAUX_IO 约束影响高性能 Bank 的辅助供电行为写之前先看原理图实际供电不要为了“性能更好”随手改成更高电压。约束和供电不一致轻则属性不生效重则上电异常。翻译文档里 VCCAUX_IO 的更新段落和表注要一起看尤其是不同 Bank 类型下的适用条件。注意DCI 参考电阻的精度和布局比约束写法更影响结果。约束只是告诉工具怎么用电阻虚焊或走线太长工具帮不了。3.4 用万用表与约束回读做首板验证DCI 首板验证不需要复杂设备万用表加示波器就能排除大部分问题。流程如下步骤动作判断标准异常处理1断电测 VRN 到 VCCO、VRP 到 GND 电阻240 Ω 附近1% 精度虚焊、错件、阻值漂移2上电测 VCCO 和 VREF在标准允许范围纹波可控查电源分组和去耦3回读 DCI_CASCADE 和 VCCAUX_IO与原理图、Bank 规划一致改约束作用域4复位后等待 DCI 校准完成校准完成再发数据检查 DCIRESET 时序5示波器看眼图和过冲眼图张开无明显振铃调端接、驱动、斜率第 1 步一定要断电测上电测电阻会得到错误值。第 4 步的等待时间不要拍脑袋按文档和实际时钟周期算或者用状态机输出一个校准完成指示。第 5 步如果眼图差先对比开/关 DCI 的波形再决定是端接问题还是驱动问题。这个对比记录留在测试报告里下一版改板直接受益。4. 延迟链与串并转换IDELAY/ODELAY、ISERDESE2/OSERDESE2 怎么调源同步接口的窗口不靠“跑得快”靠采样点落在眼图中间。7 系列 SelectIO 里的 IDELAYE2、ODELAYE2、ISERDESE2、OSERDESE2 就是干这件事的输入侧用延迟链挪采样点再串并转换降速输出侧用 ODELAY 和 OSERDESE2 把数据和时钟对齐。翻译文档第 2、3 章表格多、端口多读的时候先抓住“Bank 类型、参考时钟、延迟模式、位宽”四个锚点别一上来就抄例化。4.1 IDELAYE2 的 taps、参考时钟与 IDELAYCTRLIDELAYE2 是一个 31 抽头的延迟链常见参考时钟 200 MHz对应每个 tap 约 78 ps 量级具体以文档和器件速度等级为准。IDELAY_TYPE 有 FIXED、VARIABLE、VAR_LOAD、VAR_LOAD_PIPE 几种FIXED 适合固定延迟VARIABLE 适合运行时用 CE/INC 增减VAR_LOAD 适合直接加载计数值VAR_LOAD_PIPE 多了流水线寄存器适合需要同步加载的场合。IDELAY_VALUE 是初始抽头值范围 0 到 31。IDELAYCTRL 是容易被漏掉的原语。它用参考时钟校准 Bank 内的延迟链没有它IDELAY 的 taps 会变成玄学今天能对齐明天温度一变就偏。常见做法是每个使用 IDELAY 的 Bank 例化一个 IDELAYCTRL参考时钟 200 MHz、精度按文档要求复位后等待锁定再开始扫 taps。REFCLK_FREQUENCY 参数要和实际参考时钟一致写 200.0 但给 100 MHz延迟值会整体偏一倍。HIGH_PERFORMANCE_MODE 影响延迟链的功耗和性能高速接口通常打开但要看 Bank 供电和文档条件。DELAY_SRC 选择 IDATAIN 或 DATAIN输入管脚来的信号走 IDATAIN。SIGNAL_PATTERN 告诉工具信号是 DATA 还是 CLOCK影响校准行为。失败时先看 IDELAYCTRL 是否锁定再看 REFCLK_FREQUENCY 和实际时钟是否一致最后才怀疑 PCB。提示先让 IDELAYCTRL 锁定再扫 taps。锁定前扫出来的眼图没有参考价值。4.2 ODELAYE2 只在 HP Bank 可用选型先看 Bank 类型ODELAYE2 用于输出延迟但它在 HR Bank 不可用这是硬限制。很多项目在管脚规划时把需要输出延迟的接口放到 HR Bank后面发现 ODELAYE2 放不进去只能改 Bank 分配或换外部延迟器件。选型阶段就要把“是否需要 ODELAY”写进 Bank 分配表和 VCCO、差分对一起检查。ODELAYE2 的模式和 IDELAYE2 类似有 ODELAY_TYPE、ODELAY_VALUE、CNTVALUEIN/CNTVALUEOUT 等。输出延迟通常配合 OSERDESE2 使用把高速串行数据和时钟对齐。ODELAY 的参考时钟同样依赖 IDELAYCTRL别以为只有输入侧才需要校准。输出侧如果用了 ODELAY 但没例化 IDELAYCTRL延迟值同样不可信。常见误用是把 ODELAY 当成“万能移相器”。它的调节范围有限31 个 taps 覆盖的延迟量要按参考时钟算超出范围就老老实实改用 PLL 移相或外部延迟。输出延迟调完后要用示波器看数据和时钟的相对关系不要只看逻辑分析仪的功能通断。功能通但建立保持裕量小批量时最容易翻车。4.3 ISERDESE2 的 Bitslip 与 IO_FIFOISERDESE2 做输入串并转换DATA_WIDTH 常见 4、6、8、10、14INTERFACE_TYPE 有 NETWORKING、MEMORY、OVERSAMPLE 等。NETWORKING 适合一般源同步接口MEMORY 针对存储接口的时序特性OVERSAMPLE 用于过采样。IOBDELAY 选择是否使用输入延迟IFD 表示走 IDELAYIBUF 表示不走。SERDES_MODE 分 MASTER/SLAVE位宽扩展时用 SLAVE 拼接。BITSLIP 是字对齐的关键。它把串并转换的边界滑动一位配合训练 pattern 找到正确字边界。常见问题是 BITSLIP 脉冲太宽滑了不止一位或者复位后没有重新训练字对齐随机。正确做法是先复位 ISERDESE2 和 IO_FIFO再发训练 pattern检测到同步字后发单周期 BITSLIP 脉冲每次滑一位校验通过后锁定。BITSLIP 的脉冲宽度要满足文档时序不能直接用慢时钟分频出来的宽脉冲。IO_FIFO 用于跨时钟域把 ISERDESE2 的高速域数据搬到低速域。复位顺序不对时FIFO 指针会错位表现是数据整体偏移或间歇性错字。常见做法是先复位 FIFO再复位 ISERDESE2最后释放 BITSLIP 训练。IO_FIFO 的复位要同步到对应时钟域异步复位释放要加同步器。翻译文档里 IO_FIFO 概述和复位段落值得单独看别只抄 ISERDESE2 例化。4.4 例化与参数表从文档原语到可综合代码下面是一段 IDELAYE2 加 ISERDESE2 的示意例化端口名和位宽按工程改。代码里保留了关键参数和注释方便和文档表 2-5、表 3-1 对照。// 输入延迟链VAR_LOAD_PIPE 模式200 MHz 参考时钟 IDELAYE2 #( .IDELAY_TYPE(VAR_LOAD_PIPE), .IDELAY_VALUE(0), .DELAY_SRC(IDATAIN), .SIGNAL_PATTERN(DATA), .PIPE_SEL(TRUE), .REFCLK_FREQUENCY(200.0), .HIGH_PERFORMANCE_MODE(TRUE) ) u_idelay ( .IDATAIN(rx_data_in), // 来自 IBUF 的输入 .DATAOUT(rx_data_delayed), // 延迟后送 ISERDESE2 .DATAIN(1b0), .C(clk200m), // IDELAYCTRL 同源参考时钟 .CE(1b0), .INC(1b0), .LD(load_pipe), // 流水线加载 .LDPIPEEN(pipe_en), .CNTVALUEIN(tap_value), // 0~31 .CNTVALUEOUT(tap_mon), .REGRST(reg_rst), .CINVCTRL(1b0) ); // 8 位 DDR 串并转换NETWORKING 模式 ISERDESE2 #( .DATA_RATE(DDR), .DATA_WIDTH(8), .INTERFACE_TYPE(NETWORKING), .IOBDELAY(IFD), .NUM_CE(2), .SERDES_MODE(MASTER) ) u_iserdese2 ( .Q1(rx_parallel[0]), .Q2(rx_parallel[1]), .Q3(rx_parallel[2]), .Q4(rx_parallel[3]), .Q5(rx_parallel[4]), .Q6(rx_parallel[5]), .Q7(rx_parallel[6]), .Q8(rx_parallel[7]), .BITSLIP(bitslip_pulse), // 单周期脉冲每次滑一位 .CE1(1b1), .CE2(1b1), . p a hrefhttps://download.csdn.net/download/weixin_45019879/88437246 stylecolor:#ec7500;font-size:14px; 本文还有配套的精品资源点击获取 /a img altmenu-r.4af5f7ec.gif srchttps://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif stylewidth:16px;margin-left:4px;vertical-align:text-bottom;cursor:text; /p
阅读完成 · 觉得有帮助?