I/O约束

  I/O约束是必须要用的约束,又包括管脚约束和延迟约束。

管脚约束

  管脚约束就是指管脚分配,我们要指定管脚的PACKAGE_PIN和IOSTANDARD两个属性的值,前者指定了管脚的位置,后者指定了管脚对应的电平标准。

  在vivado中,使用如下方式在xdc中对管脚进行约束。

set_property -dict {PACKAGE_PIN AJ16  IOSTANDARD  LVCMOS18} [get_ports "led[0]"    ]

  在Vivado规定,必须要指定管脚电平,不然在最后一步生成比特流时会出错。

  除了管脚位置和电平,还有一个大家容易忽略但很容易引起错误的就是端接,当我们使用差分电平时比如LVDS,在在V6中我们使用IBUFDS来处理输入的差分信号时,可以指定端接为TRUE。

   IBUFDS #(.DIFF_TERM("TRUE"),       // Differential Termination.IOSTANDARD("DEFAULT")     // Specify the input I/O standard) IBUFDS_inst (.O(O),  // Buffer output.I(I),  // Diff_p buffer input (connect directly to top-level port).IB(IB) // Diff_n buffer input (connect directly to top-level port));

但在Ultrascale中的IBUFDS,却把端接这个选项去掉了

   IBUFDS #(.DQS_BIAS("FALSE")  // (FALSE, TRUE))IBUFDS_inst (.O(O),   // 1-bit output: Buffer output.I(I),   // 1-bit input: Diff_p buffer input (connect directly to top-level port).IB(IB)  // 1-bit input: Diff_n buffer input (connect directly to top-level port));

我们必须要在xdc或I/O Pors界面中,手动指定,否则可能会出错。

笔者之前就采过一个坑,差分端口输入,当连续输入的数据为11101111这种时,中间那个0拉不下来,还是1,同样也会发生在000010000,这样就导致数据传输错误,后来才发现是端接忘记加。因为端接会影响信号的实际电平,导致FPGA判断错误。

  当综合完成后,我们可以点击DRC,进行设计规则检查,这一步可以报出一些关键问题,比如时钟端口未分配在时钟引脚上等。

延迟约束

  延迟约束用的是set_input_delayset_output_delay,分别用于input端和output端,其时钟源可以是时钟输入管脚,也可以是虚拟时钟。但需要注意的是,这个两个约束并不是起延迟的作用,具体原因下面分析。

  • set_input_delay

  这个约束跟ISE中的OFFSET=IN功能相同,但设置方式不同。下图所示即为input delay的约束说明图。

从图中很容易理解,

T\_inputdelay = Tco + TD

当满足图中的时序时,最大延迟为2ns,最小延迟为1ns。

因此,需要加的时序约束为:

create_clock -name sysclk -period 10 [get_ports clkin]
set_input_delay 2 -max -clock sysclk [get_ports Datain]
set_input_delay 1 -min -clock sysclk [get_ports Datain]
  • set_output_delay

  set_output_delay的用法跟set_input_delay十分相似,这里就不再展开讲了。我们上面讲set_input_delay的描述中,大家可以看到,这个约束是告诉vivado我们的输入信号和输入时钟之间的延迟关系,跟下面要讲的时钟周期约束是一个原理,让vivado在这个前提下去Place and Route。并不是调节输入信号的延迟,因为身边有不少的FPGA工程师在没用过这个约束指令之前,都以为这是调节延迟的约束。

  如果要调整输入信号的延迟,只能使用IDELAY,在V6中,IDELAY模块有32个tap值,每个tap可延迟78ps,这样总共差不多是2.5ns。

个人网站:http://www.technomania.cn/

微信公众号:Quant_Times
      Reading_Times

FPGA时序约束教程所有文章:

1 FPGA时序约束理论篇之建立保持时间
2 FPGA时序约束理论篇之时序路径与时序模型
3 FPGA时序约束理论篇之IO约束
4 FPGA时序约束理论篇之时钟周期约束
5 FPGA时序约束理论篇之两种时序例外
6 FPGA时序约束理论篇之xdc约束优先级
7 FPGA时序约束实战篇之梳理时钟树
8 FPGA时序约束实战篇之主时钟约束
9 FPGA时序约束实战篇之衍生时钟约束
10 FPGA时序约束实战篇之延迟约束
11 FPGA时序约束实战篇之伪路径约束
12 FPGA时序约束实战篇之多周期路径约束
13 FPGA时序约束之Vivado辅助工具
14 FPGA时序约束之Tcl命令的对象及属性

3 FPGA时序约束理论篇之IO约束相关推荐

  1. FPGA时序约束理论篇之IO约束

    参考来源–知乎–张大侠 I/O约束 I/O约束是必须要用的约束,又包括管脚约束和延迟约束. 管脚约束 管脚约束就是指管脚分配,我们要指定管脚的PACKAGE_PIN和IOSTANDARD两个属性的值, ...

  2. 4 FPGA时序约束理论篇之时钟周期约束

    时钟周期约束   时钟周期约束,顾名思义,就是我们对时钟的周期进行约束,这个约束是我们用的最多的约束了,也是最重要的约束.   下面我们讲一些Vivado中时钟约束指令. 1. Create_cloc ...

  3. 6 FPGA时序约束理论篇之xdc约束优先级

    xdc约束优先级   在xdc文件中,按约束的先后顺序依次被执行,因此,针对同一个时钟的不同约束,只有最后一条约束生效.   虽然执行顺序是从前到后,但优先级却不同:就像四则运算一样,±x÷都是按照从 ...

  4. 1 FPGA时序约束理论篇之建立保持时间

    读万卷书–时序约束理论篇 周期约束理论   首先来看什么是时序约束,泛泛来说,就是我们告诉软件(Vivado.ISE等)从哪个pin输入信号,输入信号要延迟多长时间,时钟周期是多少,让软件PAR(Pl ...

  5. 2 FPGA时序约束理论篇之时序路径与时序模型

    时序路径   典型的时序路径有4类,如下图所示,这4类路径可分为片间路径(标记①和标记③)和片内路径(标记②和标记④).   对于所有的时序路径,我们都要明确其起点和终点,这4类时序路径的起点和终点分 ...

  6. 5 FPGA时序约束理论篇之两种时序例外

    两种时序例外 多周期路径   上面我们讲的是时钟周期约束,默认按照单周期关系来分析数据路径,即数据的发起沿和捕获沿是最邻近的一对时钟沿.如下图所示.   默认情况下,保持时间的检查是以建立时间的检查为 ...

  7. FPGA时序约束理论之时钟周期约束(5)

    1. 时钟周期约束:对时钟的周期进行约束. 2. vivado中时钟约束指令: create_clock 使用create_clock来创建时钟周期约束,使用方法: create_clock -nam ...

  8. FPGA时序约束理论(基于Vivado)

    引言        FPGA的时序约束是非常重要的,它在FPGA的综合和实现过程中扮演了一个非常重要的角色.最近在公众号中看到了一系列关于FPGA时序约束相关的内容,觉得写的非常好,非常全面,深入浅出 ...

  9. FPGA时序约束理论之伪路径(7)

    1. 什么是伪路径? 伪路径指的是该路径存在,但该路径的电路功能不会发生或者无须时序约束.如果路径上的电路不会发生,那Vivado综合后会自动优化掉,因此我们无需考虑这种情况. 2. 为什么要创建伪路 ...

最新文章

  1. 一些与算法有关的网站
  2. 浅谈Delphi过程与函数02 - 零基础入门学习Delphi21
  3. 关于HOOK API Lib 0.1 For Delphi
  4. 11.3 人工合成数据-机器学习笔记-斯坦福吴恩达教授
  5. Linux之Vim的搜索与替换
  6. 10.11 arping:发送arp请求
  7. Java虚拟机内存分配策略
  8. 【转】4.SharePoint服务器端对象模型 之 使用CAML进行数据查询
  9. 90后女科学家,四年完成清华大学硕博连读,解决多个世界级难题
  10. 使用函数统计指定c语言,浙大版《C语言程序设计(第3版)》题目集 习题5-5 使用函数统计指定数字的个数...
  11. 经典面试题(3):关于this指向的常见面试题
  12. ntlm身份验证_使用隐藏的ntlm身份验证进行内部信息公开
  13. 用.NET开发MSN聊天机器人
  14. linux复制文件多份,Linux下同时复制多个文件
  15. SSH免密登录(笔记)
  16. 逻辑代数几个重要定理
  17. C语言求二维数组鞍点
  18. 1、[python]经典详细入门
  19. 18.4宽屏的笔记本——Acer Aspire 8920G-933G32Bn
  20. 如何在LINUX上编译运行UE4库中的新环境

热门文章

  1. 基于Android studio的WIFI搜索显示与WIFI打开
  2. 富文本ueditor工具应用于JavaWeb项目
  3. Unity3D RectTransform中文图文详细-anchors用法pivot分析
  4. 安卓小游戏:飞机大战
  5. 现在,您可以在YouTube上播放免费的,广告支持的电影
  6. 知识图谱发展的难点 构建行业知识图谱的重要性
  7. scrapy爬取表情包使用flask搭建搜索网站
  8. Linux 操作系统常用以下哪种编译器,Linux 操作系统期末复习资料(Alpha版)
  9. python抽荣耀水晶_如何快速抽到荣耀水晶?梦泪直播教抽奖,这个规律一抽必中!...
  10. 树莓派从入门到放弃之Docker上安装Jellyfin视频服务器