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

  • 内部终端电阻(Internal Termination)

  • Xilinx FPGA(如UltraScale+/7系列)的部分IO标准支持内部可编程终端电阻(如DCI,Digitally Controlled Impedance)。
  • 这里A7和K7系列不支持内部中断电阻匹配命令;
  • 若需在PCB上添加外部串行电阻(如信号线串联电阻),Xilinx工具无法直接“指令化”添加物理电阻,但可通过约束优化信号完整性:

  • 替代方案

  • (1)使用DCI阻抗匹配
    在单端信号(如DDR3的SSTL)中,通过IO标准激活DCI,自动匹配驱动阻抗和终端阻抗:

    set_property IOSTANDARD SSTL15 [get_ports {your_port}]
    • DCI会在IO bank启用时自动调整阻抗(需参考Bank电压和标准)。

  • (2)调整驱动强度(DRIVE)
    间接影响信号完整性(类似串联电阻效果):

    set_property DRIVE 8 [get_ports {your_port}]  ; # 可选值:4, 8, 12, 16 (mA)
  • 这里的关系是:降低驱动强度(如设置DRIVE 8mA)可等效增大驱动阻抗(R_drv↑),从而减少与传输线的阻抗失配。但FPGA的驱动阻抗通常非线性,无法精确替代物理电阻。
  • (3)减缓压摆率(减少高频噪声):

    set_property SLEW SLOW [get_ports {your_port}]
  • 注意:此方法无法替代物理电阻的阻抗匹配功能,仅适用于短走线或低速信号。

  • (4)外部电阻
    若需要精确的串行电阻(如源端匹配),必须在PCB设计时手动添加。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/73933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一区严选!挑战5天一篇脂质体组学 DAY1-5

Day 1! 前期已经成功挑战了很多期NHANES啦&#xff01;打算来试试孟德尔随机化领域&#xff5e; 随着孟德尔随机化研究的普及&#xff0c;现在孟德尔发文的难度越来越高&#xff0c;简单的双样本想被接收更是难上加难&#xff0c;那么如何破除这个困境&#xff0c;这次我打算…

DataGear 5.3.0 制作支持导出表格数据的数据可视化看板

DataGear 内置表格图表底层采用的是DataTable表格组件&#xff0c;默认并未引入导出数据的JS支持库&#xff0c;如果有导出表格数据需求&#xff0c;则可以在看板中引入导出相关JS支持库&#xff0c;制作具有导出CSV、Excel、PDF功能的表格数据看板。 在新发布的5.3.0版本中&a…

【个人笔记】用户注册登录思路及实现 springboot+mybatis+redis

基本思路 获取验证码接口 验证码操作用了com.pig4cloud.plugin的captcha-core这个库。 AccountControl的"/checkCode"接口代码&#xff0c;通过ArithmeticCaptcha生成一张验证码图片&#xff0c;通过text()函数得到验证码的答案保存到变量code&#xff0c;然后把图…

Linux网络编程概述

Linux网络编程是在Linux操作系统环境下进行的网络相关程序开发&#xff0c;主要用于实现不同计算机之间的数据通信和资源共享。以下从基础知识、网络编程模型、常用函数和编程步骤等方面进行详细介绍&#xff1a; 基础知识 1. 网络协议 TCP/IP协议族&#xff1a;是互联网通信…

Linux内核perf性能分析工具案例分析

一、系统级性能分析工具perf原理 1. perf 的基本概念 内核集成&#xff1a;perf 直接集成在 Linux 内核源码中&#xff0c;能够深度访问硬件和操作系统层面的性能数据&#xff0c;具有低开销、高精度的特点。 事件采样原理&#xff1a;通过定期采样系统事件&#xff0…

word-spacing 属性

介绍 CSS word-spacing 属性&#xff0c;用于指定段字之间的空间&#xff0c;例如&#xff1a; p {word-spacing:30px; }word-spacing属性增加或减少字与字之间的空白。 注意&#xff1a; 负值是允许的。 浏览器支持 表格中的数字表示支持该属性的第一个浏览器版本号。 属…

5种特效融合愚人节搞怪病毒

内容供学习使用,不得转卖,代码复制后请1小时内删除,此代码会危害计算机安全,谨慎操作 并在虚拟机里运行此代码!&#xff0c;病毒带来后果自负! #include <windows.h> #include <cmath> #include <thread> using namespace std; // 屏幕特效函数声明 void In…

深入理解 Windows 进程管理:taskkill 命令详解

引言 在 Windows 系统开发和日常使用中&#xff0c;我们经常会遇到程序卡死、文件被占用导致无法编译等问题。这时&#xff0c;taskkill 命令就成了解决问题的利器。本文将详细介绍 taskkill 的使用方法、常见场景以及注意事项&#xff0c;帮助你高效管理系统进程。 1. 什么是…

【C++】右值引用与完美转发

目录 一、右值引用&#xff1a; 1、左值与右值&#xff1a; 2、左值引用和右值引用&#xff1a; 二、右值引用的使用场景&#xff1a; 1、左值引用的使用场景&#xff1a; 2、右值引用的使用场景&#xff1a; 移动构造 移动赋值 三、完美转发&#xff1a; 1、万能引用…

wx201基于ssm+vue+uniapp的购物系统设计与实现小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

Mac 常用命令

一、文件操作(必知必会)​ ​1. 快速导航 cd ~/Documents # 进入文档目录 cd .. # 返回上级目录 pwd # 显示当前路径 2. ​文件管理 touch new_file.txt # 创建空文件 mkdir -p project/{src,docs} # 递归创建目录 cp …

Nginx RTMP 处理模块 (ngx_rtmp_handler.c) 详细分析

ngx_rtmp_handler 是 Nginx RTMP 模块中的核心处理部分&#xff0c;主要负责处理 RTMP 流会话中的数据接收、发送、ping 操作以及分块大小的设置等。 1. 全局变量 ngx_rtmp_naccepted: 记录接受的 RTMP 连接数。 ngx_rtmp_bw_out 和 ngx_rtmp_bw_in: 分别表示输出带宽和输入带…

(二)万字长文解析:deepResearch如何用更长的思考时间换取更高质量的回复?各家产品对比深度详解

DeepResearch的研究背景 业务背景&#xff1a;用更长的等待时间&#xff0c;换取更高质量、更具实用性的结果 当前AI技术发展正经历从“即时响应”到“深度思考”的范式转变。用户对延迟的容忍度显著提升&#xff0c;从传统200ms的交互响应放宽至数秒甚至数分钟&#xff0c;以…

综述速读|086.04.24.Retrieval-Augmented Generation for AI-Generated Content A Survey

论文题目&#xff1a;Retrieval-Augmented Generation for AI-Generated Content: A Survey 论文地址&#xff1a;https://arxiv.org/abs/2402.19473 bib引用&#xff1a; misc{zhao2024retrievalaugmentedgenerationaigeneratedcontent,title{Retrieval-Augmented Generation…

Spring Cache:简化缓存管理的抽象框架

Spring Cache Spring Cache是Spring框架提供的缓存抽象层&#xff0c;通过注解和自动化配置&#xff0c;简化应用中对缓存的操作&#xff0c;支持多种缓存实现&#xff08;如Redis、Ehcache、Caffeine&#xff09;。 1. 核心特性 声明式缓存&#xff1a;通过注解&#xff08;…

求矩阵某列的和

设计函数sum_column( int A[E1(n)][E2(n)], int j )&#xff0c;E1(n)和E2(n)分别为用宏定义的行数和列数&#xff0c;j为列号。在该函数中&#xff0c;设计指针ptr&A[0][j]&#xff0c;通过*ptr及ptrptrE2(n)访问第j列元素&#xff0c;从而求得第j列元素的和。在主函数中定…

IM腾讯Trtc与vod云点播:实现合流录制并上传,根据参数返回视频地址

全文目录,一步到位 1.前言简介1.1 专栏传送门1.1.1 文档传送门 2. java基础使用2.1 准备工作2.1.1 云控制台获取(密钥和密钥secret)2.1.2 找到trtc控制台2.1.3 vod云点播控制台 2.2 使用准备的数据进行操作2.2.0 引入依赖2.2.1 创建TrtcUtils工具类2.2.2 TrtcReqDTO 录制请求dt…

蓝桥杯 数三角

问题描述 小明在二维坐标系中放置了 n 个点&#xff0c;他想从中选出一个包含三个点的子集&#xff0c;使得这三个点能够组成一个三角形。 由于这样的方案太多了&#xff0c;他决定只选择那些可以组成等腰三角形的方案。 请帮他计算出一共有多少种选法可以组成等腰三角形。 …

【Kafka】从理论到实践的深度解析

在当今数字化转型的时代&#xff0c;企业面临着数据量呈指数级增长、业务系统愈发复杂的挑战。在这样的背景下&#xff0c;高效的数据传输与处理技术成为了关键。Kafka&#xff0c;作为一款分布式消息队列系统&#xff0c;凭借其卓越的性能和丰富的特性&#xff0c;在众多企业的…

Linux课程学习一

一.fopen与fclose函数 linux中fopen函数直接用man fopen 去查看 函数原型 FILE * fopen(constchar *path , cost char *mode) /* * description : 打开一个文件 * param ‐ path : 指定文件路径,如&#xff1a;"./test.txt"&#xff0c;也可以直接由文件名 * param …