FPGA IO延迟的约束与脚本

FPGA IO延迟的约束与脚本

FPGA的时序分析,关键的部分有两点:1是对时钟的约束方法,时钟对数字电路设计很重要,约束情况多而复杂;2是 I/O约束,IO的约束相对简单,主要包括管脚电气约束与延迟约束。本文主要讲述的是IO约束相关的脚本与用法。IO延时约束用于定义输入信号和输出信号之间的时序关系。延时约束在高速数字电路设计自动化(EDA)中起着至关重要的作用,它可以确保设计满足时序要求,提高系统性能和可靠性。本文对IO延时约束的概念、类型、设置方法进行了深入探讨,以帮助读者更好地理解和应用IO延时约束,从而优化设计。

IO管脚的电气约束

IO管脚电气约束比较简单, 管脚约束就是指管脚分配,需要指定管脚的PACKAGE_PIN和IOSTANDARD两个属性的值,前者指定了管脚的位置,后者指定了管脚对应的电平标准。

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

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

Vivado对整个工程的时序进行分析时,只能分析内部的时序信息,对于外部的时序信息Vivado无法提供,在设计中要精确建模外部时序信息,必须为输入和输出端口提供输入输出延迟信息,而I/O延迟约束就是告知Vivado集成设计环境(IDE)FPGA管脚外部的输入输出延迟信息。IO约束指令只有两条:

set_input_delay:输入延迟约束;

set_output_delay:输出延迟约束

IO输入输出延迟约束

set_input_delay命令设定输入端口上相对于设计接口时钟边沿的输入路径延迟。输入延迟既指数据从外部芯片经过板级传输到FPGA输入管脚间的相位差,也指相对参考板级时钟间的相位差。输入延迟值可以是正的,也可以是负的,由时钟和数据在FPGA接口处的相对相位决定。约束时的相对时钟可以是一个设计时钟,也可以是一个虚拟时钟

输入延迟命令的选项包括:

-min-max:-min设定的值用于最小延迟分析(保持时间、移除时间);-max设定的值用于最大延迟分析(建立时间、恢复时间)。如果约束命令中没有使用这两个选项,输入延迟值会同时应用于min和max。

-clock_fall:用于指定由相对时钟的下降沿启动的时序路径上的输入延迟约束。如果没有这个选项,Vivado只假定使用相对时钟的上升沿。

-add_delay:该选项通常用于约束与多个时钟沿相关的输入端口(比如DDR接口),而且必须已经存在一个最大或最小输入延迟约束,设计者使用该命令为同一端口设置其它相对时钟沿的最大或最小输入延迟约束。

输入延迟约束只能应用于输入端口或双向端口(不包括时钟输入端口),不能用于设计内部的管脚。下面给出几个使用输入延迟约束的典型例子。

create_clock -name sysClk -period 10 [get_ports CLK0]

set_input_delay -clock sysClk 2 [get_ports DIN]

以上命令定义了一个主时钟sysClk作为输入延迟的相对时钟,设定的值同时作为最小值(min)分析和最大值(max)分析。

create_clock -name clk_port_virt -period 10

set_input_delay -clock clk_port_virt 2 [get_ports DIN]

该命令约束目的与上例相同,只是相对时钟换为一个虚拟时钟。使用虚拟时钟的好处是可以在不改变内部设计时钟的情况下,设定任意的抖动和延迟。

create_clock -name sysClk -period 10 [get_ports CLK0]

set_input_delay -clock sysClk -max 4 [get_ports DIN]

set_input_delay -clock sysClk -min 1 [get_ports DIN]

该命令最小值分析和最大值分析采用不同的输入延迟值。

create_clock -name sysClk -period 10 [get_ports CLK0]

set_input_delay -clock sysClk 4 [get_ports DIN]

set_output_delay -clock sysClk 1 [get_ports DOUT]

如果两个I/O端口之间仅有组合逻辑路径,没有任何时序单元,必须相对于虚拟时钟为I/O端口定义输入与输出延迟。该命令中DIN和DOUT之间的组合逻辑路径约束为                    5ns10-1-4。但是就很少会有这种情形,IO端口之间仅有组合逻辑,为避免走线延时过长,需要对IO进行输入输出延迟约束。

create_clock -name clk_ddr -period 6 [get_ports DDR_CLK_IN]

set_input_delay -clock clk_ddr -max 2.1 [get_ports DDR_IN]

set_input_delay -clock clk_ddr -max 1.9 [get_ports DDR_IN] -clock_fall -add_delay

set_input_delay -clock clk_ddr -min 0.9 [get_ports DDR_IN]

set_input_delay -clock clk_ddr -min 1.1 [get_ports DDR_IN] -clock_fall -add_delay

这里相对时钟为DDR的时钟,最小值分析和最大值分析采用不同的输入延迟值。约束的一端是器件外部时钟的上升沿和下降沿启动的数据,另一端是器件内部同时对上升沿和下降沿敏感的触发器的输入数据。

set_output_delay命令设定输出端口上相对于设计接口时钟边沿的输出路径延迟。输出延迟既指数据从FPGA的输出管脚通过板级传输到另一个器件间的相位差,也指相对参考板级时钟间的相位差。输出延迟值同样也可以是正的或负的,由时钟和数据在FPGA器件外的相对相位决定。输出延迟命令的选项基本与输入延迟约束相同, 下面给出几个使用输出延迟约束的典型命令示例。

create_clock -name sysClk -period 10 [get_ports CLK0]

set_output_delay -clock sysClk 6 [get_ports DOUT]

create_clock -name clk_port_virt -period 10

set_output_delay -clock clk_port_virt 6 [get_ports DOUT]

定义一个主时钟sysClk/虚拟时钟virt作为输出延迟的相对时钟,设定的值同时作为最小值(min)分析和最大值(max)分析。

create_clock -name clk_ddr -period 6 [get_ports DDR_CLK_IN]

set_output_delay -clock clk_ddr -max 2.1 [get_ports DDR_OUT]

set_output_delay -clock clk_ddr -max 1.9 [get_ports DDR_OUT] -clock_fall -add_delay

set_output_delay -clock clk_ddr -min 0.9 [get_ports DDR_OUT]

set_output_delay -clock clk_ddr -min 1.1 [get_ports DDR_OUT] -clock_fall -add_delay

这里相对时钟为DDR的时钟,最小值分析和最大值分析采用不同的输出延迟值。约束的一端是器件外部时钟的上升沿和下降沿启动的数据,另一端是器件内部同时对上升沿和下降沿敏感的触发器的输出数据。

       作者水平有限, 相关IO约束查阅了网络上的部分资源与自己的工程实际经验。

如果想要对静态时序分析与时序更加了解,可以查阅这2篇文章FPGA静态时序分析——IO口时序(Input Delay /output Delay) - 屋檐下的龙卷风 - 博客园 (cnblogs.com);

FPGA时序分析与约束_STATEABC的博客-CSDN博客;

Vivado FPGA开发中的XDC约束入门_vivado xdc-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【综合性渗透利器】- TscanPlus

如果你在寻找一款轻量级、实用且开源的漏洞扫描工具,那么 TscanPlus 绝对值得一试。这款工具由 TideSec 团队打造,以其简洁、高效、易用的特点,广受好评,目前在github上拥有1.5k star。 为什么推荐 TscanPlus? 无论你…

探索Kombo:AI与API的完美结合

文章目录 探索Kombo:AI与API的完美结合背景介绍库的定义安装指南简单函数使用场景应用常见问题及解决方案总结 探索Kombo:AI与API的完美结合 背景介绍 在当今快速发展的人工智能领域,Kombo库以其独特的优势脱颖而出。Kombo是一个专注于AI的…

Python项目Flask框架整合Redis

一、在配置文件中创建Redis连接信息 二、 实现Redis配置类 import redis from config.config import REDIS_HOST, REDIS_PORT, REDIS_PASSWD, REDIS_DB, EXPIRE_TIMEclass RedisDb():def __init__(self, REDIS_HOST, REDIS_PORT, REDIS_DB, EXPIRE_TIME, REDIS_PASSWD):# 建立…

《治愈老奶奶账号,AI涨粉玩法,简单好上手》第178期副业项目拆解

正文 一、项目介绍 今天给大家带来的是最新的一个暴力涨粉玩法,这个副业赛道玩法 15 天涨了 30 万粉。 大家可以看一下这个账号,发了有 58 多个作品,现在是 33 万粉, 这个属于是图文账号,做的是那种温暖治愈系类型的…

数据库管理-第245期 主流国产数据库RAC架构概览(20240929)

数据库管理245期 2024-09-29 数据库管理-第245期 主流国产数据库RAC架构概览(20240929)1 DMDSC2 KingBaseES RAC3 PolarDB4 Cantian5 HaloDB DLB/Data Sharding总结 数据库管理-第245期 主流国产数据库RAC架构概览(20240929) 作者…

uni-app - - - - - 小程序获取宿主语言

const systemInfo uni.getSystemInfoSync(); console.log(systemInfo);uni.showModal({title: 宿主语言,content: systemInfo.hostLanguage })官网地址:【uni-app getSystemInfoSync】

OpenCV C++霍夫圆查找

OpenCV 中的霍夫圆检测基于 霍夫变换 (Hough Transform),它是一种从边缘图像中识别几何形状的算法。霍夫圆检测是专门用于检测图像中的圆形形状的。它通过将图像中的每个像素映射到可能的圆参数空间,来确定哪些像素符合圆形状。 1. 霍夫变换的原理 霍夫…

CRUD 开发工具 NocoBase 与 Refine 对比

引言 今天我们来聚焦两款非常优秀的开源 CRUD 开发工具:NocoBase 和 Refine,它们分别是无代码/低代码开发平台和低代码前端开发框架的典型代表。 特别值得一提的是,NocoBase 截止目前已经在GitHub 上获得了 12k 的 Star。Refine 作为 Retool…

AntFlow-Vue3 :一个仿钉钉流程审批,且满足99.8%以上审批流程需求的企业级工作流平台,开源且免费!

在现代企业管理中,流程审批的高效性直接影响到工作的流畅度与生产力。最近,我发现了一个非常有趣的项目—— AntFlow-Vue3 。这个项目不仅提供了一个灵活且可定制的工作流平台,还能让用户以可视化的方式创建和管理审批流程。 如果你是一名前…

828华为云征文|部署个人知识管理系统 SiyuanNote

828华为云征文|部署个人知识管理系统 SiyuanNote 一、Flexus云服务器X实例介绍二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置2.4 Docker 环境搭建 三、Flexus云服务器X实例部署 SiyuanNote3.1 SiyuanNote 介绍3.2 SiyuanNote 部署3.3 Siyua…

【JavaScript】JQuery基础知识及应用

一、JQuery的导入方法 https://editor.csdn.net/md/?articleId132214798 二、JQuery介绍 JQuery(JQ):JS的一个类库(方法库:包含了大量的、有助于项目开发的属性和方法) 第一代版本1.xx.xx: 1.11.3 兼容所有浏览器的&#xff0…

C语言 | Leetcode C语言题解之第443题压缩字符串

题目&#xff1a; 题解&#xff1a; void swap(char *a, char *b) {char t *a;*a *b, *b t; }void reverse(char *a, char *b) {while (a < b) {swap(a, --b);} }int compress(char *chars, int charsSize) {int write 0, left 0;for (int read 0; read < charsSi…

如何在NetCore8.0 Swagger 里配置多版本

话不多说 &#xff0c;先看效果 要做成以上效果也不难。请跟好脚步&#xff0c;下面带你们一步一步来做 首先要新建一个类 ApiVersionInfo public class ApiVersionInfo{/// <summary>/// 获取或者设置 V1 版本。/// </summary>public static string 软件版本 &qu…

低代码BPA(业务流程自动化)技术探讨

一、BPA流程设计平台的特点 可视化设计工具 大多数BPA流程设计平台提供直观的拖拽式界面&#xff0c;用户可以通过图形化方式设计、修改及优化业务流程。这种可视化的方式不仅降低了门槛&#xff0c;还便于非技术人员理解和参与流程设计。集成能力 现代BPA平台通常具备与其他系…

如何挑选适合的LED芯片

在LED显示屏的应用中&#xff0c;LED芯片作为核心部件&#xff0c;其质量和性能直接影响到整个显示系统的表现。然而&#xff0c;面对市场上琳琅满目的LED芯片产品&#xff0c;消费者常常会感到迷茫&#xff0c;不知道该如何选择。本文将为您介绍一些挑选适合LED芯片的关键要点…

Go基础学习08-并发安全型类型-通道(chan)深入研究

文章目录 chan基础使用和理解通道模型&#xff1a;单通道、双通道双向通道单向通道单向通道的作用 缓冲通道和非缓冲通道数据发送和接收过程缓冲通道非缓冲通道 通道基本特性通道何时触发panicChannel和Select结合使用Select语句和通道的关系Select语句的分支选择规则有那些Sel…

基于Hive和Hadoop的招聘分析系统

本项目是一个基于大数据技术的招聘分析系统&#xff0c;旨在为用户提供全面的招聘信息和深入的职位市场分析。系统采用 Hadoop 平台进行大规模数据存储和处理&#xff0c;利用 MapReduce 进行数据分析和处理&#xff0c;通过 Sqoop 实现数据的导入导出&#xff0c;以 Spark 为核…

旺店通ERP集成金蝶K3(旺店通主供应链)

源系统成集云目标系统 金蝶K3介绍 金蝶K3是一款ERP软件&#xff0c;它集成了供应链管理、财务管理、人力资源管理、客户关系管理、办公自动化、商业分析、移动商务、集成接口及行业插件等业务管理组件。以成本管理为目标&#xff0c;计划与流程控制为主线&#xff0c;通过对成…

Vue开发前端图片上传给java后端

前端效果图 图片上传演示 1 前端代码 <template><div><!-- 页面标题 --><h1 class"page-title">图片上传演示</h1><div class"upload-container"><!-- 使用 van-uploader 组件进行文件上传&#xff0c;v-model 绑…

Golang | Leetcode Golang题解之第443题压缩字符串

题目&#xff1a; 题解&#xff1a; func compress(chars []byte) int {write, left : 0, 0for read, ch : range chars {if read len(chars)-1 || ch ! chars[read1] {chars[write] chwritenum : read - left 1if num > 1 {anchor : writefor ; num > 0; num / 10 {…