当前位置: 首页 > news >正文

FPGA调试笔记

XILINX SSTL属性电平报错

错误如下:

[DRC BIVRU-1] Bank IO standard Vref utilization: Bank 33 contains ports that use a reference voltage. In order to use such standards in a bank that is not configured to use INTERNAL_VREF, the bank's VREF pin must be used to supply the appropriate voltage. Example port: pe_spi_sdi[0] (SSTL18_I). However, the following VREF sites are occupied and can't be used to supply the necessary voltage: site IOB_X1Y87 (occupied by port pe_spi_sdi[1]), site IOB_X1Y61 (occupied by port spi_rx_data). Free up VREF sites or create an appropriate INTERNAL_VREF constraint.

错误核心问题

  • Bank 33 中的某些引脚(如 pe_spi_sdi[0])使用了需要参考电压的 SSTL18_I 标准(一种差分信号标准)。

  • 但该 Bank 未启用内部参考电压(INTERNAL_VREF),因此必须通过 FPGA 的 专用 VREF 引脚 从外部提供参考电压。

  • 而当前设计中,Bank 33 的 两个可用 VREF 引脚 已经被其他信号占用:

    • IOB_X1Y87 被 pe_spi_sdi[1] 占用

    • IOB_X1Y61 被 spi_rx_data 占用

  • 结果:没有空闲的 VREF 引脚 为 pe_spi_sdi[0] 提供参考电压,导致 DRC 报错。

  • 根本原因

  • SSTL18_I 等高速信号标准需要参考电压(如 SSTL18_I 需要 0.9V 的 VREF)。

  • FPGA Bank 的 VREF 配置有两种方式:

    • 内部 VREF(INTERNAL_VREF):通过 FPGA 内部电路生成(需在约束中启用)。

    • 外部 VREF:通过专用引脚从外部电源输入(需硬件连接)。

  • 你的设计选择了 外部 VREF,但所有可用的 VREF 引脚已被其他信号占用,导致冲突。

  • 解决方法

    方案 1:启用内部 VREF(推荐)

    直接在约束文件中(如 XDC)添加以下命令,让 Bank 33 使用内部生成的参考电压:

    tcl

    复制

    set_property INTERNAL_VREF 0.9 [get_iobanks 33]

    优点:无需修改硬件或引脚分配,简单快捷。
    注意:需确认 FPGA 型号支持内部 VREF,且电压值(0.9V)符合 SSTL18_I 标准要求。


    方案 2:释放被占用的 VREF 引脚

    将占用 VREF 引脚的信号(如 pe_spi_sdi[1] 和 spi_rx_data移到非 VREF 引脚

    tcl

    复制

    set_property PACKAGE_PIN "新引脚位置" [get_ports pe_spi_sdi[1]]
    set_property PACKAGE_PIN "新引脚位置" [get_ports spi_rx_data]

    优点:保留外部 VREF 的灵活性。
    缺点:需重新布局引脚,可能影响其他信号完整性。


    方案 3:更换 IO 标准

    如果设计允许,将 pe_spi_sdi[0] 的 IO 标准改为 不需要 VREF 的类型(如 LVCMOS18):

    set_property IOSTANDARD LVCMOS18 [get_ports pe_spi_sdi*]

    注意:需确保新标准与硬件电路兼容(如电平匹配)。


    如何选择?

  • 如果 硬件已设计为外部 VREF → 选 方案 2(修改引脚分配)。

  • 如果 硬件未严格限定 VREF 来源 → 选 方案 1(内部 VREF,最简单)。

  • 如果信号可改为普通电平标准 → 选 方案 3

约束$tco_max和$trce_dly_max说明

        对于系统时钟而言,时钟来自源端,数据来自目的端,这样数据和时钟会有延时。

        约束时需要告诉FPGA数据返回最大延时和最小延时时间;

        原时序如下图所示:

        输入信号 $input_ports 相对于时钟 $input_clock 的 最大延迟 不能超过 $tco_max + $trce_dly_max,否则可能无法正确采样。”

  •  输入延迟约束示例

    (1) 最大输入延迟(Setup 检查)
    set_input_delay -clock clk_100m -max [expr $Tco_max + $Trce_dly_max] [get_ports data_in];
    # 计算:3ns + 2ns = 5ns

    含义
    数据从外部芯片发出后,最晚 5ns 到达 FPGA 引脚。
    由于采样点在 5ns(半周期),工具会确保:
    5ns(输入延迟) + Tsu(FPGA建立时间) < 5ns(采样点)
    → 实际要求 Tsu < 0(显然不合理,需调整约束!)

    (2) 修正约束(考虑采样点在周期中心)

    正确的约束应使 最大输入延迟 < 半周期(即 <5ns),否则数据可能错过建立时间。
    若实际 Tco_max + Trce_dly_max = 5ns,则需 提前时钟采样边沿 或 降低输入延迟

            本人理解:时钟在上升沿采样,理论上100MHz的时钟中间采样,数据有效时间是5ns,如果delay时间大于等于5ns,那么没有建立时间,所以无法采集。特殊情况下我们可以特殊处理延时一个时钟周期或者半个时钟周期之后确定有效数据到FPGA时钟沿5ns以内。再做约束。
  • 最小输入延迟(Hold 检查)

    set_input_delay -clock clk_100m -min [expr $Tco_min + $Trce_dly_min] [get_ports data_in]; # 计算:1ns + 1ns = 2ns

    含义
    数据最早 2ns 到达 FPGA 引脚。工具会确保2ns(输入延迟) > Th(FPGA保持时间)

  • 关键点总结

  • 采样点对齐
    100MHz 中心采样 → 数据应在 5ns 处稳定。

  • 最大延迟
    Tco_max + Trce_dly_max 必须 < 半周期 - Tsu

  • 最小延迟
    Tco_min + Trce_dly_min 必须 > Th

http://www.dtcms.com/a/98193.html

相关文章:

  • 从代码学习深度学习 - 含并行连结的网络(GoogLeNet)PyTorch版
  • 淘宝双十一大促监控系统开发:实时追踪爆品数据与流量波动
  • 谷粒微服务高级篇学习笔记整理---异步线程池
  • SQL Server数据库引擎服务启动失败:端口冲突
  • 电源系统的热设计与热管理--以反激式充电器为例
  • 1688 店铺清单及全商品数据、关键词检索 API 介绍
  • 【蓝桥杯】每日练习 Day15
  • 【自用记录】本地关联GitHub以及遇到的问题
  • 从代码学习深度学习 - 使用块的网络(VGG)PyTorch版
  • 谈谈你对多态的理解
  • coding ability 展开第七幕(前缀和算法——进阶巩固)超详细!!!!
  • 算法基础——二叉树
  • Java 程序员面试题:从基础到高阶的深度解析
  • Elasticsearch 完全指南
  • 【HarmonyOS 5】初学者如何高效的学习鸿蒙?
  • Bitnode和Bitree有什么区别 为什么Bitree前多了*
  • 缴纳过路费--并查集+优先队列
  • Qt进阶开发:Graphics View图形视图框架
  • QT 跨平台发布指南
  • 枚举算法-day2
  • python 列表-元组-集合-字典
  • 软件工程之软件开发模型(瀑布、迭代、敏捷、DevOps)
  • 综述速读|086.04.24.Retrieval-Augmented Generation for AI-Generated Content A Survey
  • 深度学习处理时间序列(6)
  • 自学-python-基础-注释、数据类型、运算符、判断、循环
  • 树莓派超全系列文档--(13)如何使用raspi-config工具其二
  • 中断管理常用API详解(三)
  • flatMap 介绍及作用
  • C#连接sqlite数据库实现增删改查
  • 大模型最新面试题系列:微调篇之微调框架(二)