参考手册:
UG625:https://china.xilinx.com/support/documentation/sw_manuals/xilinx14_7/cgd.pdf
UG903:https://www.xilinx.com/support/documentation/sw_manuals/xilinx2017_4/ug903-vivado-using-constraints.pdf
作为FPGA开发者来说我们需要编写规范的代码,能做多好就做多好,这样可以尽可能降低编译器的工作难度,如果再适时地给编译器一些恰当的指导和建议(通过约束),就可以使FPGA设计更加高效。
一、时钟约束
1.外部输入时钟clk_in周期为10ns,占空比为25%,相移为90°约束形式为:

create_clock -name clk_in -period 10 -waveform{2.5 5} [get_ports clk_in]
# {2.5 5} 表示一个周期的波形中2.5ns - 5ns 为高。如果没有指定waveform默认为{0,period/2}为高

2.时钟clk_2由时钟clk_in衍生,clk_2频率为clk_in的频率除以2,clk_2表示modu_2模块的clk_out。

create_generated_clock -name clk_2 -source [get_port clk_in] -divide_by 2 [get_pins modu_2/clk_out]
# clk_in 0011001100110011001100
# clk_2  0011110000111100001111

3.时钟clk_3由时钟clk_in衍生,clk_3表示modu_3模块的clk_out。

create_generated_clock -name clk_3 -source [get_ports clk_in] -edges {1 3 5}[get_pins top/modu_3/clk_out]
# edges{1 3 5}表示从上升沿开始算起,在clk_in的第1、3、5时钟沿clk_3时钟沿变化。
# clk_in 001110011100111001110011100
# clk_3  001111100000111110000011111

4.设置clock group来确认各个时钟之间的关系。两个主时钟 clkin_1 和 clkin_2 进入 FPGA由不同的时钟网络传递,这两个时钟及他们的衍生时钟是一组异步时钟。

set_clock_groups -name async_clk -asynchronous \-group [get_clocks -include_generated_clocks clkin_1] \-group [get_clocks -include_generated_clocks clkin_2]# -asynchronous 表示异步# -include_generated_clocks  表示包括衍生时钟

5.有时同一模块在不同模式需要不同时钟来驱动。例如bufgctrl_i/O可由bufgctrl_i/I0和bufgctrl_i/I1衍生。

create_generated_clock -name clk125_bufgctrl \-divide_by 1 [get_pins bufgctrl_i/O] \ -source [get_ports bufgctrl_i/I0]
create_generated_clock -name clk250_bufgctrl \ -divide_by 1 [get_pins bufgctrl_i/O] \ -source [get_ports bufgctrl_i/I1] \ -add -master_clock clk125_bufgctrl
# -add -master_clock表示添加时钟,否则是直接覆盖。
set_clock_groups –physically_exclusive \–group clk125_bufgctrl \–group clk250_bufgctrl
# -physically_exclusive 表示时钟物理意义上不会同时存在,如果为-logically_exclusive则是逻辑上独立。

二、引脚约束
1.将led1信号放在芯片的W13引脚

set_property PACKAGE_PIN W13       [get_port led1]

2.将led1所在引脚的电气标准设置为LVCMOS33:

set_property IOSTANDARD LVCMOS33      [get_ports led1]

3.将led1引脚上拉电阻约束为有效:

set_property  PULLUP  true   [get_ports led1]

4.将led1引脚下拉电阻约束为有效:

set_property PULLDOWN true   [get_ports led1]

5.IO的驱动能力不够导致线上的电平不能马上到达期望的波形,从而产生抖动。提高电源及时供给能力可以采用在芯片电源引脚周围加入较大电容储能。默认驱动能力为12mA。驱动能力有< 2 4 6 8 12 16 24 >mA。将led1所在管脚驱动能力设置为16mA:

set_property DRIVE 16 [get_ports led1]

6.输出(双向)引脚转换速率slew rate可以设置为快fast和慢slow。默认为slow。
将led1所在输出引脚转换速率设置为快:

set_property SLEW FAST [get_ports  led1]

7.高速收发器通道位置约束

set_property LOC GTXE2_CHANNEL_X0Y8 [get_cells  例化路径/gtx_support_i/gtx_init_i/inst/gtx_i/gt0_gtx_i/gtxe2_i]

8.输入输出模块IOB的约束。(如果在FF输出Q除了到OBUF连线输出外还有其他连接,就无法实现IOB寄存器的布局,只能用CLB中的寄存器。需要将该信号再按时钟打一拍再单独输出。)

set_property IOB TRUE [get_ports  led1]
# led1 输出使用IOB
set_property IOB TRUE [all_inputs]
# 所有输入使用IOB

三、注意事项
1.Vivado按照行序从上往下在约束文件中读取XDC的tcl指令,越后面的指令优先级越高,但描述越精确的指令优先级越高(与指令顺序无关)。相同目标属性的约束会向前覆盖。 因为synthesis and implementation algorithms are timing-driven一般把时钟约束放在前面物理位置约束放在后面。物理约束只在implementation时布局器与布线器会使用。
参考顺序:
Timing Assertions Section
Primary clocks
Virtual clocks
Generated clocks
Clock Groups
Input and output delay constraints
Timing Exceptions Section
False Paths
Max Delay / Min Delay
Multicycle Paths
Case Analysis
Disable Timing
Physical Constraints Section

2.一个Vivado工程中可以添加多个XDC文件,XDC文件也是有先后顺序的,可以在界面用鼠标拖拽来调整XDC文件的顺序。工程较大时一般把时钟约束和物理约束放到不同的文件当中,不同IP不同组放到不同文件。VIVADO也可以支持多组XDC文件集合,但是只有1个集合起作用(active)。如果我们一次create多个synthesis或者implementation,我们还可以为它们每一个分别制定一个约束文件。

3.每个XDC约束指令最好单独地完整地写一行(单个命令编写换行时行末加上"\" . "\"后不能有空格)。 注释以“#”开头且与指令不写在同一行。否则指令可能会解析错误。

四、更多编写方式可查看Vivado的XDC编写模板

老闻:“你聊个微信笑得这么开心是不是耍朋友了?”
小杨:“我TM刚分手!开心什么哦,哎~”
老吴:“肯定是无缝衔接,换了个新的。”
东子:“肯定是嘛,你们搞FPGA的讲究的就是个时序。”
阿科:“逻辑组的这些批个个都是时间管理大师。”

FPGA Vivado XDC 约束文件编写方式语法笔记相关推荐

  1. 2,xilinx vivado xdc约束语句的命令结构

    注:学习.交流就在博主的个人weixin公众号 "FPGA动力联盟" 留言或直接+博主weixin "fpga_start" 私信~  关于xilinx viv ...

  2. vivado:解读xdc约束文件

    代码: // 约束引脚号 set_property PACKAGE_PIN F5 [get_ports {led_tri_o[0]}] set_property PACKAGE_PIN E5 [get ...

  3. 关于XDC约束文件,你需要知道的几点

    原文地址:http://xilinx.eetrend.com/d6-xilinx/blog/2016-06/10241.html 在ISE时代,使用的是UCF约束文件.从Vivado开始,XDC成了唯 ...

  4. VIVADO XDC约束注意事项

    原文地址:http://xilinx.eetrend.com/d6-xilinx/blog/2016-06/10241.html 在ISE时代,使用的是UCF约束文件.从Vivado开始,XDC成了唯 ...

  5. 1,Xilinx Vivado XDC约束简介

    关于xilinx vivado FPGA XDC约束的所有讲解文档汇总:关于xilinxvivadoFPGAXDC约束的所有讲解文档汇总_vivado约束-嵌入式文档类资源-CSDN下载 在了解xil ...

  6. react的单文件编写方式

    single-react-loader 通过该插件,你可以使用单文件形式编写react组件(将jsx与style组合在一起) 特性 将jsx和css组合在一个文件内 支持less,sass 支持sty ...

  7. md文件编写常用语法类型

    一:建立一个.md文件,例如readme.md 开始编写,整理后常用语法如下 ***评价规则确认0911----确定版!***1. 根据后台配置,控制买家是否可以主动评价,以及关闭窗口时是否需要弹窗强 ...

  8. python做FPGA EG01约束文件文本格式批量更改

    python做FPGA EG01约束文件文本格式批量更改 一切机械的重复的工作都应该自动化 1.读取原文件 2.标记重要信息 3.提取重要信息 4.重新塑造格式 5.导出保存 一切机械的重复的工作都应 ...

  9. XDC约束技巧——CDC篇

    上一篇<XDC约束技巧之时钟篇>介绍了XDC的优势以及基本语法,详细说明了如何根据时钟结构和设计要求来创建合适的时钟约束.我们知道XDC与UCF的根本区别之一就是对跨时钟域路径(CDC)的 ...

最新文章

  1. 应聘苹果数据科学家,你需要知道些什么?
  2. 深入浅出任务队列机制,非常浅
  3. 并行口设计数字键盘实验
  4. 先写ppt,再写报告,在做实验是一个不错的方法!
  5. 快速解码base64和utf-8的ASCII编码和URL解码
  6. Error与RuntimeException
  7. java如何获取一个double的小数位数
  8. Vue 计算属性 computed
  9. python mock_python mock基本使用
  10. 浏览器的资源并发亲试
  11. MAC代码下统计代码行数工具
  12. Java学习之JavaWeb篇
  13. 磁性能测量-软磁材料的退磁方法
  14. 新域名后缀的主要优点是什么?
  15. python中0x是什么意思_在python中,为什么0xbin()返回False?
  16. Kettle连接mysql 驱动报 Driver class ‘org.gjt.mm.mysql.Driver‘ could not be found, make sure the ‘MySQL‘..
  17. 地图上的两点,计算出两点之间的角度
  18. 处理打拼音时触发input事件bug
  19. 舆情监测技术TOOM,web技术实现
  20. org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: connec

热门文章

  1. 赛码行测题库_行测题库:行测数字推理模拟题2.22
  2. Putty配色方案更改
  3. 淘宝店铺订单自动发货解决方案
  4. linux 3gpp格式转换器,3GPP 文件扩展名: 它是什么以及如何打开它?
  5. 故城县职教中心校企合作的计算机专业如何,校企合作下中职计算机应用专业课程体系的研究--以涉县职教中心为例...
  6. vue-router.esm-bundler.js6c0271 [Vue Router warn] No match found for location with path
  7. html 中加载字体太慢,浅谈CSS字体的加载加速问题
  8. AndroidO Treble架构下Hal进程启动及HIDL服务注册过程
  9. 菜鸟理财——货币基金
  10. 我家的门牌号(信息学奥赛一本通-T1404)