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计划时手动添加。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |