0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

vivado管教约束

分享:

好的!在 Vivado 中使用中文描述 FPGA 管脚的约束(通常指 管脚分配与电气属性设置)主要涉及编写 XDC (Xilinx Design Constraints) 约束文件。XDC 文件使用 Tcl 语法,其核心命令是 set_property

以下是关键要素和示例的中文说明:

  1. 核心概念:set_property 命令

    • 这是配置管脚属性最主要的命令。
    • 语法格式: set_property <属性名称> <属性值> [get_ports <端口名称>]
    • 中文解释:
      • <属性名称>:你要设置的约束类型,例如位置 PACKAGE_PIN、电平标准 IOSTANDARD、驱动电流 DRIVE、上拉/下拉 PULLTYPE 等。
      • <属性值>:该属性的具体值,例如物理管脚号、电平标准值(如 LVCMOS33)、电流强度(如 4, 8, 12, 16 mA)。
      • [get_ports <端口名称>]:这是 Tcl 命令,用于获取 FPGA 设计中顶层模块对应的端口信号(管脚)。<端口名称> 必须与你设计的顶层 Verilog/VHDL 代码中的端口名严格一致(包括大小写)。
  2. 最关键的约束属性:

    • 位置约束 (Location/Package Pin):
      • 属性名称: PACKAGE_PIN
      • 属性值: FPGA 芯片封装上的物理管脚编号,例如 AD11, G13, T5 等。这个编号在你的 FPGA 开发板原理图或官方管脚定义文件中查找。
      • 命令示例: set_property PACKAGE_PIN AD11 [get_ports {led[0]}]
        • 中文含义: 将设计顶层端口 led[0] 分配到 FPGA 物理管脚 AD11 上。
    • I/O 电平标准约束 (I/O Standard):
      • 属性名称: IOSTANDARD
      • 属性值: 管脚的电平标准,例如:
        • LVCMOS33(常用): 3.3V CMOS 电平(绝大多数开发板默认 I/O 电压,用于按键、LED、普通外设)。
        • LVCMOS18: 1.8V CMOS 电平。
        • LVDS:低压差分信号电平(用于高速差分信号,如 DDR、以太网 PHY)。
        • TMDS_33: HDMI 使用的差分电平标准(3.3V)。
        • (具体值需根据连接的芯片要求和 FPGA Bank 的供电电压 VCCIO 确定)
      • 命令示例: set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]
        • 中文含义: 设置管脚 led[0] 的电平标准为 LVCMOS33 (3.3V)。
  3. 其他常用约束属性:

    • 驱动电流强度 (Drive Strength):
      • 属性名称: DRIVE
      • 属性值: 2, 4, 6, 8, 12, 16, 24(单位 mA)。数值越大,输出电流能力越强,一般用在驱动 LED 或者需要较大电流负载时(如某些外设片选)。
      • 命令示例: set_property DRIVE 16 [get_ports {led[0]}] (驱动一个较亮的 LED)
    • 上拉/下拉电阻 (Pull-up / Pull-down):
      • 属性名称: PULLTYPE
      • 属性值:
        • PULLUP:启用内部弱上拉电阻(通常默认是 PULLNONE 即无上拉下拉)。
        • PULLDOWN:启用内部弱下拉电阻。
        • PULLNONE:禁用内部上拉下拉。
      • 命令示例: set_property PULLTYPE PULLUP [get_ports {sw[0]}] (按键输入,按下去接地)-- 这样可以保证不按键时为高电平
    • 输出延迟(Slew Rate):
      • 属性名称: SLEW
      • 属性值:
        • SLOW:转换速率慢,电磁干扰小(EMI)。
        • FAST:转换速率快,信号上升下降时间短,速度高,但 EMI 大。
      • 命令示例: set_property SLEW SLOW [get_ports {led[0]}] (用在不需要高速切换的 LED 上以减小干扰)
    • 输入延迟/输出延迟 (Timing):
      • 属性名称: set_input_delay, set_output_delay
      • 用途: 这是更高级的约束,用于告诉时序分析引擎 FPGA 边界上的信号相对于外部时钟的延迟,对于保证系统级时序正确性至关重要(尤其是高速接口如 DDR, MIPI, GigE)。这通常需要结合 create_clock 定义外部时钟约束一起使用。涉及内容较深,这里只提及。
  4. 一个完整的约束文件 (XDC) 示例:

## Vivado FPGA管脚约束示例 (XDC约束文件)

## 时钟约束 (假设50MHz输入时钟连到FPGA管脚Y9,电平LVCMOS33)
set_property PACKAGE_PIN Y9      [get_ports clk] ; # 位置约束
set_property IOSTANDARD  LVCMOS33 [get_ports clk] ; # 电平约束
create_clock -period 20.000 -name sys_clk_pin -waveform {0 10} [get_ports clk] ; # 定义输入时钟:周期20ns(50MHz),方波(0ns低,10ns跳高)

## 复位信号 (按键按下低电平复位)
set_property PACKAGE_PIN AB8     [get_ports rst_n] ;   # 位置约束
set_property IOSTANDARD  LVCMOS33 [get_ports rst_n] ; # 电平约束
set_property PULLTYPE    PULLUP  [get_ports rst_n] ;   # 内部上拉,保证不按键时为高电平

## LED输出 (共4个, 高电平点亮)
set_property PACKAGE_PIN AD11    [get_ports {led[0]}] ; # led[0]
set_property IOSTANDARD  LVCMOS33 [get_ports {led[0]}] ;
set_property SLEW        SLOW     [get_ports {led[0]}] ; # 慢速边沿减少干扰
set_property DRIVE       8        [get_ports {led[0]}] ; # 8mA驱动电流

set_property PACKAGE_PIN AC11    [get_ports {led[1]}] ; # led[1]
set_property IOSTANDARD  LVCMOS33 [get_ports {led[1]}] ;
set_property SLEW        SLOW     [get_ports {led[1]}] ;
set_property DRIVE       8        [get_ports {led[1]}] ;

set_property PACKAGE_PIN AB10    [get_ports {led[2]}] ; # led[2]
set_property IOSTANDARD  LVCMOS33 [get_ports {led[2]}] ;
set_property SLEW        SLOW     [get_ports {led[2]}] ;
set_property DRIVE       8        [get_ports {led[2]}] ;

set_property PACKAGE_PIN AA10    [get_ports {led[3]}] ; # led[3]
set_property IOSTANDARD  LVCMOS33 [get_ports {led[3]}] ;
set_property SLEW        SLOW     [get_ports {led[3]}] ;
set_property DRIVE       8        [get_ports {led[3]}] ;

## 按键输入 (共4个, 按下为低电平)
set_property PACKAGE_PIN AE10    [get_ports {key[0]}] ; # key[0]
set_property IOSTANDARD  LVCMOS33 [get_ports {key[0]}] ;
set_property PULLTYPE    PULLUP   [get_ports {key[0]}] ; # 内部上拉

set_property PACKAGE_PIN AD10    [get_ports {key[1]}] ; # key[1]
set_property IOSTANDARD  LVCMOS33 [get_ports {key[1]}] ;
set_property PULLTYPE    PULLUP   [get_ports {key[1]}] ;

set_property PACKAGE_PIN AC10    [get_ports {key[2]}] ; # key[2]
set_property IOSTANDARD  LVCMOS33 [get_ports {key[2]}] ;
set_property PULLTYPE    PULLUP   [get_ports {key[2]}] ;

set_property PACKAGE_PIN AA9     [get_ports {key[3]}] ; # key[3]
set_property IOSTANDARD  LVCMOS33 [get_ports {key[3]}] ;
set_property PULLTYPE    PULLUP   [get_ports {key[3]}] ;

重要提示:

  1. 查找管脚编号: 上面例子中的管脚号 (AD11, Y9, AB8 等) 是示例你必须查看你的 FPGA 开发板的原理图 (Schematic) 或用户手册提供的管脚定义表,找到实际连接的 FPGA 物理管脚号。
  2. 匹配端口名: [get_ports {led[0]}] 中的 led[0] 必须与你的顶层代码(如 Verilog: module top(input clk, input rst_n, output [3:0] led, ...)中的端口名精确匹配(包括大小写和总线表示 [3:0])。
  3. IOSTANDARD: 设置的电平标准 LVCMOS33 等必须与 FPGA Bank 的供电电压(VCCIO)和连接的外设要求一致
  4. 添加约束文件: 在 Vivado 项目中创建或添加一个 .xdc 文件(File > Add Sources > Add or create constraints),然后在综合(Synthesis)或实现(Implementation)的任意一步之前将约束写入此文件。
  5. 图形化工具: Vivado 也提供了 "I/O Ports" 视图(通常在 "Window > I/O Ports" 打开或 "Layout > Default Layout"打开后的右侧区域),可以在此处图形化地设置端口位置、电平标准等,设置后约束会自动添加到相应的 .xdc 文件中。但理解底层 XDC 语法对于排除问题和进阶非常必要。
  6. 保存约束: 修改 .xdc 文件后记得保存。
  7. 约束生效: 添加或修改约束文件后,通常需要重新运行综合(Synthesis)和实现(Implementation),有时关闭项目再重新打开以确保生效。

通过编写正确的 .xdc 约束文件(使用 set_property 命令指定 PACKAGE_PINIOSTANDARD 等属性),你就告诉了 Vivado 如何将你的逻辑设计端口映射到 FPGA 芯片上真实的物理管脚,并设置这些管脚的电气行为(电平、驱动能力等)。

如何在Vivado中添加时序约束呢?

今天介绍一下,如何在Vivado中添加时序约束Vivado添加约束的方法有3种:xdc文件、时序约束向导(Constraints Wizard)、时序约束编辑器(Edit Timing Constraints )

2023-06-26 15:21:11

Vivado设计约束功能概述

XDC约束可以用一个或多个XDC文件,也可以用Tcl脚本实现;XDC文件或Tcl脚本都要加入到工程的某个约束集(set)中;虽然一个约束集可以同时添加两种类型约束,但是Tcl脚本不受Vivado工具管理,因此无法修改其中的约束

2022-06-30 11:27:23

VIVADO时序约束及STA基础

时序约束的目的就是告诉工具当前的时序状态,以让工具尽量优化时序并给出详细的分析报告。一般在行为仿真后、综合前即创建基本的时序约束Vivado使用SDC基础上的XDC脚本以文本形式约束。以下讨论如何进行最基本时序约束相关脚本。

2022-03-11 14:39:10

Vivado综合阶段什么约束生效?

Vivado综合默认是timing driven模式,除了IO管脚等物理约束,建议添加必要的时序约束,有利于综合逻辑的优化,同时综合后的design里面可以评估时序。

2023-07-03 09:03:19

Vivado中XDC文件的约束顺序

很对人在使用Vivado时喜欢使用多个约束文件对整个工程进行约束,同时Vivado允许设计者使用一个或多个约束文件。虽然使用一个约束文件对于一个完整的编译流程来说看似更方便,但是在一些情况下,这会

2021-10-13 16:56:54

一文详解Vivado时序约束

Vivado的时序约束是保存在xdc文件中,添加或创建设计的工程源文件后,需要创建xdc文件设置时序约束。时序约束文件可以直接创建或添加已存在的约束文件,创建约束文件有两种方式:Constraints Wizard和Edit Timing Constraints,在综合后或实现后都可以进行创建。

2025-03-24 09:44:17

vivado中常用时序约束指令介绍

vivado中,我们常用的时序约束指令主要包括如下几个方面。

2026-01-20 16:15:33

Vivado IDE全面了解XDC文件的约束顺序

Vivado IDE约束管理器将任何已编辑的约束保存回XDC文件中的原始位置,但不会保存在Tcl脚本中。 任何新约束都保存在标记为目标的XDC文件的末尾。

2020-11-13 10:53:38

Vivado时序约束中invert参数的作用和应用场景

Vivado的时序约束中,-invert是用于控制信号极性的特殊参数,应用于时钟约束(Clock Constraints)和延迟约束(Delay Constraints)中,用于指定信号的有效边沿或逻辑极性。

2026-02-09 13:49:22

Vivado的Implementation阶段约束报警告?

帮到不经常看群消息的小伙伴,另一方面也算是我们的技术积累。 Q:Vivado的Implementation阶段约束报警告?   [Vivado 12-627] No clocks matched

2023-08-08 14:10:48

Vivado进行时序约束的两种方式

上面我们讲的都是xdc文件的方式进行时序约束Vivado中还提供了两种图形界面的方式,帮我们进行时序约束:时序约束编辑器(Edit Timing Constraints )和时序约束向导(Constraints Wizard)。两者都可以在综合或实现后的Design中打开。

2020-03-08 17:17:00

Vivado里如何使用模糊性的位置约束

提到位置约束,我们会想到手工布局的方式,即画Pblock,将指定模块放入相应Pblock内,这既是面积约束又是位置约束,但显然这种约束是较为具体的位置约束。这种方式需要工程师有一定的经验,有时还需要

2022-11-17 11:47:46

Vivado使用小技巧

有时我们对时序约束进行了一些调整,希望能够快速看到对应的时序报告,而又不希望重新布局布线。这时,我们可以打开布线后的dcp,直接在Vivado Tcl Console里输入更新后的时序约束。如果调整

2024-10-24 15:08:40

Vivado使用进阶:读懂用好Timing Report

《XDC 约束技巧》系列中讨论了XDC 约束的设置方法、约束思路和一些容易混淆的地方。我们提到过约束是为了设计服务,写入 Vivado中 的 XDC 实际上就是用户设定的目标,Vivado

2023-05-04 11:20:31

正则表达式在Vivado约束文件中的应用

  使用xdc文件进行管脚、位置、时序和属性等约束的时候,经常会使用各种get命令。Vivado提供了很丰富的匹配表达式,比如等于==、不等于!=、匹配=~、不匹配!~、《、》、《=、》=等等,这些

zcy615 2021-01-26 07:03:16

如何在Vivado中添加时序约束

前面几篇文章已经详细介绍了FPGA时序约束基础知识以及常用的时序约束命令,相信大家已经基本掌握了时序约束的方法。

2023-06-23 17:44:00

Xilinx工具vivado使用约束命令时出现警告的解决办法?

Xilinx工具:vivado在该图中,TX_CLK_i连接到pll_x1模块的输入时钟。然后,pll_x1的输出时钟连接到ODDR。接下来,ODDR的输出引脚将连接到I / O引脚

yanshu34 2020-05-04 08:04:41

Vivado IP核心约束错误的解决办法?

。 [ “d:/ VIVADO_PRJ /.../ constrs_1 /新/ timing.xdc”:6][约束18-472] set_input_delay:list不包含约束支持的任何类型的对象(输入

Eleven________ 2020-04-27 09:11:58

FPGA设计中两种IO约束:管脚约束,延迟约束

,后者指定了管脚对应的电平标准。 在vivado中,使用如下方式在xdc中对管脚进行约束。 set_property -dict {PACKAGE_PIN AJ16 IOSTANDARD

2020-10-30 16:08:13

Xilinx Vivado I/O延迟约束介绍

1 I/O延迟约束介绍 要在设计中精确建模外部时序,必须为输入和输出端口提供时序信息。Xilinx Vivado集成设计环境(IDE)仅在FPGA边界内识别时序,因此必须使用以下命令指定超出这些边界

2020-11-29 10:01:16

FPGA主时钟约束详解 Vivado添加时序约束方法

在FPGA设计中,时序约束的设置对于电路性能和可靠性都至关重要。在上一篇的文章中,已经详细介绍了FPGA时序约束的基础知识。

2023-06-06 18:27:13

如何更改ZYNQ的时钟频率使用vivado约束

秒(100 Mhz)关闭和打开一个LED,我这样做是为了验证如何更改ZYNQ的时钟频率使用vivado约束。这是我放在.xdc文件中生成不同的时钟频率set_property PACKAGE_PIN

IC大当家ac 2020-04-01 08:46:16

PCB上走线的延迟约束

作者:猫叔 延迟约束 对于延迟约束,相信很多同学是不怎么用的,主要可能就是不熟悉这个约束,也有的是嫌麻烦,因为有时还要计算PCB上的走线延迟导致的时间差。而且不加延迟约束Vivado也只是在

2020-11-14 10:34:35

缩短Vivado编译时间之审视时序约束描述

在描述时序约束时,一个重要的原则是确保约束简洁高效。简洁高效意味着约束只针对指定的对象,即约束对应的对象的个数

2023-02-23 09:03:38

EF-VIVADO-DEBUG-FL

VIVADO DEBUG FLOATING LICENSE

2023-03-30 12:04:13

DO-VIVADO-DEBUG-USB-II-G-FL

VIVADO DEBUG FLOATING LICENSE

2023-03-30 12:04:13

Xilinx FPGA案例学习之Vivado设计综合约束

在 Flow Navigator 中点击设置, 然后选择Synthesis,或者 selectFlow Settings Synthesis Settings。 如图1所示: 1、综合约束 在设置

2020-11-23 14:16:36

如何给每个RM添加约束?对RM添加约束的步骤有哪些呢?

在常规非DFX(Dynamic Function eXchange)的Vivado设计中,我们可能会碰到给某一个指定的模块添加特定的约束

2023-08-17 09:22:56

关于时序约束的问题解答

【问题8.1】 VIVADO的时钟约束向导,常无法找到时钟,如下图所示,位置1中应该要识别出时钟。

2022-06-10 06:28:34

VIVADO从此开始高亚军编著

/ 1555.4 IP的属性与状态 / 1565.5 IP的约束 / 1595.6 封装IP / 1645.6.1 通过Vivado工程封装用户代码 / 1645.6.2 通过指定目录封装用户代码

卿小小_9e6 2020-10-21 18:24:48

加载更多
相关标签