FPGA时序分析与约束(13)——I/O接口约束

一、概述

        在应用了时钟约束后,所有寄存器到寄存器的路径都能定时。为了获得更加精准的FPGA外部时序信息,设计者需要为FPGA的I/O接口指定时序信息,一般时序工具只能获取FPGA器件内部的时序信息,对于FPGA器件引脚之外的时序信息,必须由设计者约束定义。如果没有指定的输入输出的,时序分析工具会假设在接口上使用最优时序要求并假设电路单元的组合逻辑本身具有整个周期,电路单元外部没有信号。

二、输入有效

2.0 输入有效    

        我们需要为每个输入端口指定输入有效时间,考虑如下的一个电路图:

        对于电路单元B1,我们需要知道信号到达I1的时间。

        这个到达时间可以告诉实现工具在组合逻辑云C1(输入端口和第一个寄存器元器件之间)中花费的时间,反过来,到达时间也决定了要求优化的等级。如果信号没有按时达到F1(通过组合逻辑后的第一个寄存器)并被及时锁定,那么它将允许STA工具发送报告。思考如下图电路的情况:

        对于电路单元B2,需要指定输入I1的输入到达时间。当触发器由一个时钟触发时,信号从F1(前一个电路单元B1的F1)开始。这个时钟触发就充当了参考事件,参考事件产生后,信号通过线路经过触发器(Clk_to_Q延迟)、组合逻辑C1(在前一个电路单元B1中)、组合逻辑C2(在顶层中)和互连延迟。但是,如果考虑了I1的信号到达时间,那么延迟在C1、C2、Clk_to_Q、互连线等之间如何分配就不那么重要了。我们只需要知道参考事件在发生后经过多久到达现在的输入端口。

2.1 最小和最大有效时间

        这个话题在之前的文章中已经多次提到过了,这里再简单说明一下,在输入端口,设计者需要指定信号可以改变的最早时间、这也就是最小时间,在这个时间之前,输入信号不能到达输入输入端口。由此可以确定,输入端口的上一个值要保持到这个时间。最小时间可以保证输入信号不违反后级电路的保持时间要求。

        设计者还需要指定最大时间,在这个时间内,要确保输入端口上的输入信号有效。这个时间也是最迟时间,在这个时间内,输入端口上信号的所有变化都是有效的。最大时间用于确保满足后级电路的建立要求。

2.2 多时钟

        有的时候,一个输入信号可能由多个时钟触发,如下图所示:

        到达I1的信号可能从Clk1(电路单元B)处产生,也可能从Clk2(电路单元B2)处产生。两个触发事件可能相互独立。在这种情况下,到达事件会根据两个参考事件来指定。实现工具和STA工具会考虑每个到达时间,并同时满足在两个条件。

三、输出要求

3.0 输出要求

        对于每个输出端口,都需要指定信号被采样前,在电路单元外部经过的时间。电路如下图所示:

        对于电路单元B1来说,我们需要知道产生输出O1后,在采样前信号需要的传输时间。

        实现工具可以通过这个时间计算出应该在逻辑云C1(最后一个寄存器元件F1和输出端口O1之间)放置多少逻辑。STA工具也可以通过这个时间报告在某个时间O1上信号是否有效,这样在产生输出O1后,就有足够的时间经过电路单元的外部,如下图所示:

        对于电路单元B1,需要为输出O1指定输出要求时间(output required time)。O1输出后,信后由电路单元B2中的触发器F2采样。触发器F2的时钟起到了参考事件的作用。在参考事件到达F2之前,信号经过组合逻辑C2(在顶层中)、组合逻辑C3(在下一个电路单元中)存在延迟和互连延迟。信号需要在参考事件之前到达F2,这样触发器才能满足建立要求。但是,只要考虑了在O1处的信号输出要求时间,那么延迟在C2、C3、F2的建立时间和互连线之间是如何分配的就不重要了。我们只需要知道参考时间之前在输出端口处信号有效需要多长时间。在O1外的时间越多意味着逻辑云C1(寄存器与输出端口之间)的延迟越小。

        输出要求时间是根据信号采样之前,在电路单元外需要的时间来确定的,而不是根据输出端信号有效时间来确定的。输出要求时间可以通过计算得出。例如,如果输出延迟为6ns,这意味着信号输出后需要6ns。如果一个时钟触发器在10ns时对信号进行采样,那么意味着信号需要在4ns时有效。在SDC中,用户指定6,即输出后需要的时间时6ns。信号应该什么时间有效可以通过计算获得。这就是输入延迟和输出延迟在概念上的不同。在输入端,指定的输入延迟直接给定了输入有效时间。在输出端,指定的输出延迟是信号进一步传输需要的时间。输出延迟不同于输出信号的有效时间。

3.1 最小和最大要求时间

        有时候,在输出端不太能指定信号在输出后需要传输的精确时间,例如,从输出端到相同参考事件可能有多条路径时。但是,我们还是要求设计者尽可能给出信号输出后需要传输的最小时间和输出信号从输出出来后需要传输的最大时间。

3.2 多个参考事件

        有时候,输出信号可以被多个参考事件捕获,电路图如下所示:

        从O1出来的信号可以被Clk1捕获,也可以被Clk2捕获。这两个捕获事件可以是独立的。在这种情况下,要求时间根据两个参考事件来指定。这是实现工具和STA工具的功能,它们独立计算每个要求时间并满足每个要求。

四、set_input_delay 

        在输入端口指定延迟的SDC命令是set_input_delay。命令的BNF如下:

set_input_dalay    [-clock clock_name]
                   [-clock_fall]
                   [-level_sensitive]
                   [-rise]
                   [-fall]
                   [-max]
                   [-min]
                   [-add_delay]
                   [-network_latency_included]
                   [-source_latency_included]
                   delay_value port_pin_list

 4.1 时钟规格

        -clock 选项用于指定参考时钟,根据参考时钟指定延迟时间,这个选项通常指的是触发器输入端信号的时钟名称。

        假设电路单元B1的输入I1由触发器F1驱动,它也可以在其他电路单元中,还可以是顶层逻辑的一部分。假设触发F1的时钟还可以进入电路单元B1,B1的时钟名称是Clk1。在这种情况下,clock_name的规格应该指定为Clk1。这个时钟触发输入的到达时间,同时这个时钟也是参考事件。当驱动F1时,时钟信号的名称相同也没有关系。例如,可以把包含F1的时钟信号命名为CLK_1,但是,对于B1的输入延迟,时钟的名称还需指定以便对B1可见。

         有时候,触发F1的时钟信号可能不会进入电路单元B1,在这种情况下,需要为B1声明虚拟时钟。这种虚拟时钟的特性必须与触发F1的时钟相同,这时,虚拟时钟能够使用带-clock选项的clock_name来指定。

        默认情况下,输入延迟是基于时钟上升沿来指定的,但是,如果触发器F1由时钟下降沿触发,那么需要添加选项-clock_fall,这个选项可以使得参考事件是clock_name的下降沿而不是上升沿。

        如果时钟周期是10ns,具有{0 5}波形,触发器F1是由时钟下降沿触发的,那么可以指定时钟下降沿的延迟是2,或者指定时钟上升沿的延迟是7。关于时序分析,下面命令具有相同的作用。

set_input_delay -clock CLK1 -clock_fall 2.0 [get_ports I1]
set_input_delay -clock CLK1 7.0 [get_ports I1]

        但是,如果启动触发器F1是由时钟下降沿触发的,那么我们应该使用第一个命令,因为它可以很好地反映电路的设计。

        如果输入引脚是组合电路唯一路径的一部分,那么就没有时钟触发到达输入引脚上的信号。这种情况下,就不需要指定-clock。对于set_input_delay命令,参考事件是时间0。如果没有指定-clock,那么-clock_fall也就没有意义。因为现在许多设计都是同步的,通常会用set_input_dalay指定时钟,组合路径(即使存在)也可以使用其他约束方式来约束。

4.2 -level_sensitive

        如果启动元器件不是一个触发器而是一个锁存器,那么就应该指定这个开关。从概念上讲,使用这个开关后启动锁存器可以借用这个周期里的时间。这意味着建立裕度(setup slack)会减少——这考虑了当锁存器为透明信号从锁存器开始的情况。

        但是,这个选项应该谨慎使用。不同工具对这个选项的处理方式不同,一些工具和转换器会简单地忽略这个选项。如果设计者想使用这个选项,那么应该保证在整个过程中使用所有工具处理这个选项时都使用同一种方法。

4.3 rise/fall 限定符

        -rise 用于限定输入延迟与输入端口信号的上升沿对应。-fall用于限定输入延迟与输入端口的下降沿对应。如果在输入端口信号上升或下降时的输入到达时间不同,那么这个命令需要提供rise或者fall限定符。

        当不指定限定符 rise 或者 fall 时,给定值适用于这两种过渡。在CMOS电路中,上升和下降过渡时的路径延迟非常相似,所以不会经常使用 -rise/fall 规格。

4.4 min/max限定符

        -min 用于限定指定的延迟值与输入端口信号的最早到达时间到达对应。这个值用在当前设计内部以保持检查。-max 用于限定指定的延迟值与输入端口信号的最迟到达时间对应。这个值用于在当前设计内部以实现建立检查。

        当不使用-min/max限定符时,两个限定符使用相同的设定值。通常不使用-min/-max 限定符,其值与指定的最大延迟相同。

        目前随着纳米技术的发展,单个触发器的保持值大幅下降,在某种程度上可以说降低了很多。很显然,因为在数据路径上的延迟有限,所以会出现输入到达时间为正,保持时间为负的情况,即使保持值不是负值,也会与“零”非常接近,因此,在大部分情况下,通过启动元器件的延迟(启动触发器的Clk_to_q延迟)和互连延迟将比保持时间长,因此,大部分情况下外部到达信号都能满足保持要求。通常,使用最大值可以可靠完成建立检查。这个值也用于保持检查,无论如何必须满足保持检查。如果信号将输入到一个保持要求很大元器件中,那么保持检查就很重要,如内存。这种情况下,也应该正确指定-min值。

4.5 -add_delay

        许多时序分析工具都为用户提供了交互shell,用户使用这些shell可以修改上述指定值。当指定端口的输入延迟时,在这个端口上最新的规格就会覆盖前面的规格。如果用户必须在同一个端口指定多个参考事件的输入延迟,那么所有后续规格就需要指定-add_delay。

4.6 时钟延迟

        我们知道,在触发触发器之前,时钟在路径上会有延迟(时钟源延迟和网络延迟),我们可以通过开关-source_latency_included 和 -network_latency_included 来进行约束。

4.7 完成输入延迟约束

        要完成输入约束,现在就剩下唯一的工作就是需要指定输入延迟的实际端口或引脚,并且指定延迟值,这是set_input_delay 命令必须指定的两个选项。

五、set_output_delay

        用于指定输出端口延迟的SDC命令是set_output_delay。命令的BNF是如下:

set_output_dalay   [-clock clock_name]
                   [-clock_fall]
                   [-level_sensitive]
                   [-rise]
                   [-fall]
                   [-max]
                   [-min]
                   [-add_delay]
                   [-network_latency_included]
                   [-source_latency_included]
                   delay_value port_pin_list

        从概念上讲,set_output_delay和set_input_delay两个命令非常相似,所以这里不会像之前那样一一展开,仅对两个命令不同的部分详细说明。

        set_input_delay 和 set_output_delay 的根本区别在于:输入延迟是指到达输入端的时间,即在输入端信号有效的时间。另一方面,输出延迟是信号输出后还要传输的时间,这个时间与在输出端信号需要有效的时间不同。但是,从语义上讲,两个命令非常相似,它们都指定了在感兴趣的电路单元外的延迟要求。就像外部延迟需要满足要求一样,电路单元内部也有自己的时序要求。

六、小结

        set_input_delay 和 set_output_delay 需要正确设定,这样,电路单元的信号就可以保证时序正确了。如果设定不正确,那么单个电路单元可能就能够满足自己的时序,而当集成整个设计时,最终的设计可能不会满足时序。

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

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

相关文章

Feature Pyramid Networks for Object Detection(2017.4)

文章目录 Abstract1. Introduction3. Feature Pyramid NetworksBottom-up pathwayTop-down pathway and lateral connections 7. Conclusion FPN Abstract 特征金字塔是识别系统中检测不同尺度物体的基本组成部分。但最近的深度学习对象检测器避免了金字塔表示,部分…

Swift的Copy on Write 简称CoW

了解Copy on Write在Swift开发时非常重要,因为这是Swift Standard Library的一个基础特性。 值类型:struct,enum,和tuple,比如在调用函数时传递参数,就会发送副本拷贝 引用类型:class&#xff…

用户的生命周期

用户生命周期是指用户在产品使用过程中的状态变化,一般分为5个阶段,分别为引入期、成长期、成熟期、沉默期和流失期。用户生命周期能够反映不同阶段用户的状态,可根据用户的不同状态进行针对性运营。运营中常说的拉新、促活、留存就是基于用户…

SLAM中提到的相机位姿到底指什么?

不小心又绕进去了,所以掰一下。 以我个人最直观的理解,假设无旋转,相机在世界坐标系的(5,0,0)^T的位置上,所谓“位姿”,应该反映相机的位置,所以相机位姿应该如下: Eigen::Matrix4d T Eigen::M…

上位机模块之halcon绘制ROI与获取ROI,在hsmartwindow实现

在上位机中通常需要使用到绘制ROI模块或者获取已经绘制好的ROI区域的参数&#xff0c;在这里通过使用hsmartwindow窗体控件进行对ROI的绘制和获取。 先上代码&#xff1a; /// <summary>/// 创建ROI/// </summary>/// <param name"Win">传入HSmar…

Centos7安装frps作内网穿透--实现外部访问家里群晖

实现在外可访问家用群晖 需要在外界访问家里的局域网设备&#xff0c;正常情况是需要有公网IP&#xff0c;而IPV4作为家用&#xff0c;运营商基本不给&#xff0c;除非钞能力&#xff0c;IPV6可以用&#xff0c;但是有缺陷&#xff0c;需要互访的两端都是IPV6才能访问。选择fr…

Mysql删除占用事务的线程

参考&#xff1a;https://www.jianshu.com/p/dd0291391188 产生原因&#xff1a;这个问题的原因是在mysql中产生了事务A&#xff0c;执行了修改的语句&#xff0c;比如&#xff1a; update t1 set aget18 where id1;此时事务并未进行提交&#xff0c;事务B开始运行&#xff0c…

kubernetes集群编排(10)

目录 prometheus监控 部署prometheus 部署nginx监控实例 部署prometheus-adapter prometheus监控 部署prometheus 创建项目仓库并上传镜像 [rootk8s2 helm]# vim prometheus-values.yaml alertmanager:alertmanagerSpec:image:repository: prometheus/alertmanagertag: v0.24.0…

知识解读:香港轻量云/云服务器/VPS性能差距解读

​  提起香港轻量云/云服务器/VPS 这三类&#xff0c;往往汇聚了中小企业和开发者等群体的讨论声音。当然&#xff0c;这跟它们本身产品定位有关&#xff0c;加上在初级配置这块价格上相差不大&#xff0c;也因此经常被拿来对比。 首先来简单了解一下最基础的区别&#xff1a…

Copliot:让你一秒变身网页达人的神奇助手

Copliot&#xff1a;一款能够帮助你快速理解网页内容的智能助手 你是否有过这样的经历&#xff0c;当你浏览网页时&#xff0c;遇到了一些你不太了解的内容&#xff0c;比如一些专业术语&#xff0c;一些复杂的概念&#xff0c;或者一些有趣的话题&#xff1f;你是否想要快速地…

Postman批量运行用例

近期在复习Postman的基础知识&#xff0c;在小破站上跟着百里老师系统复习了一遍&#xff0c;也做了一些笔记&#xff0c;希望可以给大家一点点启发。 一&#xff09;注意点 有上传文件的接口&#xff0c;需要做如下设置&#xff1a; 1、打开能读取外部文件的开关 2、把需要…

【IEEE】IF:10+, CCF|中科院1区TOP, 对国人友好,无需版面费

论文写作堪比西天取经&#xff0c;当我们经历“九九八十一难&#xff0c;取得真经“&#xff0c;还有最关键的一步&#xff0c;就是选刊发表。是“投石问路”&#xff0c;还是“投其所好”&#xff1f; 选刊有多重要&#xff0c;相信只要有过发表SCI经验的人都十分清楚。如果不…

登上CMMLU性能评测榜单第一 四大维度解码夸克自研大模型

11月14日&#xff0c;拥有千亿参数的夸克自研大模型正式发布&#xff0c;立刻占据CMMLU榜单第一名。夸克大模型将应用于通用搜索、医疗健康、教育学习、职场办公等多个场景。性能方面&#xff0c;其整体水平已经超过GPT-3.5&#xff0c;其中在写作、考试等部分场景中可以超过GP…

Android问题笔记四十五:解决SeekBar操作thumb周围产生的圆形阴影/灰色阴影/白色圆圈的解决办法

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列点击跳转>ChatGPT和AIGC &#x1f449;关于作者 专…

线性回归模型用于波士顿房价预测的(普通VSsklearn库方法)比较

努力是为了不平庸~ 学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰 线性回归是一种统计学习方法&#xff0c;用于建立一个线性模型来预测因变量与自变量之间的关系。它假设因变量与自变量之间存在线性关系&#xff0c;…

移远EC600U-CN开发板 11.15

制作一个简单UI: 1."端口设置"模块 *效果图 *代码 def backEvent(evt): #返回主界面code evt.get_code() if code lv.EVENT.CLICKED:lv.scr_load(mainInterface)def popUpEvent(evt): #弹窗提醒code evt.get_code()if code lv.EVENT.CL…

YOLOv8改进实战 | 更换主干网络Backbone(五)之2023最新轻量化主干网络VanillaNet,深度学习中极简主义的力量

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…

HackTheBox-Starting Point--Tier 2---Unified

文章目录 一 Unified 测试过程1.1 打点1.2 权限获取1.3 权限提升 二 题目 一 Unified 测试过程 1.1 打点 1.端口扫描 nmap -sV -sC 2.访问8080端口 页面跳转到&#xff1a;https://10.129.96.149:8443/manage/account/login?redirect%2Fmanage   观察到版本号为unifi 6.4.5…

【LeetCode刷题-滑动窗口】--1423.可获得的最大点数

1423.可获得的最大点数 思路&#xff1a; 数组cardPoints的长度为n&#xff0c;由于只能从开头和末尾拿k张卡牌&#xff0c;所以最后剩下的必然是连续的n-k张卡牌&#xff0c;可以通过求出剩余卡牌点数之和的最小值&#xff0c;来求出拿走卡牌点数之和的最大值 算法&#xff…

antd中的form表单数据不更新

antd中的form表单 initialValue导致数据不更新问题 理解 &#xff1a; initialValue就是所谓的defaultValue,只会在第一次赋值的时候改变&#xff0c;却又有一些不同&#xff0c;因为 initialValue又会因其他改动而改变。 解决&#xff1a; form.resetFields();