当前位置: 首页 > news >正文

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

        为了准确地对设计中的外部时序上下文进行建模,必须提供输入和输出端口的时序信息。因此要进行输入输出延时约束,延迟约束用的是set_input_delayset_output_delay,分别用于input端和output端,其时钟源可以是时钟输入管脚,也可以是虚拟时钟。

一、输入接口约束

set_input_delay -clock<args> -reference_pin<args> -clock_fall -rese -max -add_delay<delay><objects>
  • -clock用于指定约束引脚的同步时钟(源时钟),<args>为同步时钟的名称,可以是主时钟或虚拟时钟;
  • -reference_pin用于指定延时值<delay>的参考时钟,<args>为参考时钟名称;可选项,若不指定该选项则默认参考时钟为-clock指定的同步时钟;
  • -clock_fall指定输入延时约束取值相对于同步时钟的下降沿;可选项,若不指定则默认为-clock_rise;
  • -rise指定约束信号相对时钟边沿的关系是上升沿,也可以用-fall指定为下降沿;
  • -max表示设定最大延时值,也可以用-min设置最小延时值;若不指定-max或-min。则输入延时值同时用最大和最小延时值的时序分析路径;
  • <delay>指定将应用到目标输入引脚的延时值,有效值为大于或等于0的浮点数,默认为1.0;
  • <objects>用于指定约束的目标输入引脚名称。

以主时钟为同步时钟的输入引脚约束

        首先定义输入引脚为CLK0的主时钟sysCLK,然后约束了-max和-min值同2ns的输入延时约束

create_clock -name sysClk -period 10 [get_ports CLK0]
set_input_delay -clock sysClk 2 [get_ports DIN]

以虚拟时钟为同步时钟的输入引脚约束

        首先定义虚拟时钟clk_port_virt,然后约束了-max和-min值同2ns的输入延时约束

create_clock -name clk_port_virt -period 10
set_input_delay -clock clk_port_virt 2 [get_ports DIN]

指定最大和最小延时值得输入引脚约束

        首先定义输入引脚为CLK0的主时钟sysCLK,然后约束了-max和-min值分别为4ns和1ns的输入延时约束

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]

参考时钟下降沿的输入引脚约束

        对输入引脚DIN进行约束,指定其相对同步时钟clk1下降沿后2ns的输入延时

set_input_delay -clock_fall -clock clk1 2 [get_ports DIN]

同时指定同步时钟和参考时钟的输入引脚约束

        对输入引脚reset进行约束,指定其同步时钟为wbCLK,相对参考时钟wbCLK_IBUF_BUFG_inst/O上升沿后2ns的输入延时值

set_input_delay -clock wbCLK 2 -reference_pin [get_pin wbCLK_IBUF_BUFG_inst/0] [get_ports reset]

多组参考组合的输入引脚约束

        对输入时钟引脚DDR_CLK_IN做主时钟约束,命名为clk_ddr,以clk_ddr作为同步时钟,对输入数据引脚DDR_IN分别做同步时钟上升沿和下降沿的输入延时约束,并分别指定其输入延时的最大值和最小值。

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

二、输出接口约束

        set_output_delay命令用于指定输出数据引脚相对于其时钟沿的路径延时。通常输出延时值包含了数据信号从FPGA引脚到外部芯片的板级延时、外部芯片的建立时间和保存时间等。输出延时值可以是正值或负值。

        set_output_delay以-max和-min参数分别表示约束的最大值和最小值,最大值用于建立时间检查,最小值用于保持时间检查。

        set_output_delay约束命令的语法与set_input_delay相似:

set_output_delay -clock<args> -reference_pin<args> -clock_fall -rese -max -add_delay<delay><objects>
  • -clock用于指定约束引脚的同步时钟(源时钟),<args>为同步时钟的名称,可以是主时钟或虚拟时钟;
  • -reference_pin用于指定延时值<delay>的参考时钟,<args>为参考时钟名称;可选项,若不指定该选项则默认参考时钟为-clock指定的同步时钟;
  • -clock_fall指定输入延时约束取值相对于同步时钟的下降沿;可选项,若不指定则默认为-clock_rise;
  • -rise指定约束信号相对时钟边沿的关系是上升沿,也可以用-fall指定为下降沿;
  • -max表示设定最大延时值,也可以用-min设置最小延时值;若不指定-max或-min。则输入延时值同时用最大和最小延时值的时序分析路径;
  • <delay>指定将应用到目标输入引脚的延时值,有效值为大于或等于0的浮点数,默认为1.0;
  • <objects>用于指定约束的目标输入引脚名称。

以主时钟为同步时钟的输出引脚约束

        对输出引脚DOUT进行输出延时约束,首先定义主时钟sysCLK,然后约束了-max和-min值同6ns的输出延时约束

create_clock -name sysClk -period 10 [get_ports CLK0]
set_output_delay -clock sysClk 6 [get_ports DOUT]

以虚拟时钟为同步时钟的输出引脚约束

         对输出引脚DOUT进行输出延时约束,首先定义虚拟时钟clk_port_virt,然后约束了-max和-min值同6ns的输入延时约束

create_clock -name clk_port_virt -period 10
set_output_delay -clock clk_port_virt 6 [get_ports DOUT]

同时指定时钟上升沿和下降沿的输出引脚约束

         对DDR数据端口DDR_DOUT进行输出延时约束,参考时钟为主时钟clk_ddr。在约束中输出数据引脚DDR_OUT在时钟clk_ddr的上升沿和下降沿同时需要采样,所以使用-clock_fall -add -delay选项额外指定下降沿的输出延时(无-clock_fall -add -delay选项默认为上升沿的输出延时约束)

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

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

参考文献:

《FPGA时序约束与分析》
《正点原子FPGA静态时序分析与时序约束》 
《Intel Quartus Prime Standard Edition用户指南: Timing Analyzer》
《Vivado Design Suite User Guide: Using Constraints(UG903)》
《Vivado Design Suite 用户指南: 设计分析与收敛技巧 (UG906)》

相关文章:

  • 数脉观察二丨 详解CroPoolv2.0锁仓收益机制 文末附锁仓教程
  • 软件测试|测试平台开发-Flask 入门:编写第一个简单 Web 应用
  • 华为OD机试 - 寻找最优的路测线路(Java JS Python C)
  • 谈谈我的三次考研经历
  • 网络流总结
  • HNU-数据库系统-实验3-数据库设计
  • Lumeical Script------Script Prompt 中的两种输出方式
  • 冬装活动提成计算
  • 练习-双指针的使用
  • 阿里云PolarDB数据库不同配置租用价格表
  • Flutter中的Container小部件介绍与使用
  • SQL高级:事务
  • 【普中开发板】基于51单片机的温度报警器LCD1602_可调上下限( proteus仿真+程序+设计报告+讲解视频)
  • hexo主题配置遇到的问题
  • 学习笔记:C++之 switch语句
  • 【EOS】Cleos基础
  • 【前端学习】-粗谈选择器
  • django开发-定时任务的使用
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JavaWeb(学习笔记二)
  • Java到底能干嘛?
  • JSONP原理
  • JS题目及答案整理
  • Mybatis初体验
  • node和express搭建代理服务器(源码)
  • SAP云平台里Global Account和Sub Account的关系
  • Spring核心 Bean的高级装配
  • Vue2.x学习三:事件处理生命周期钩子
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 从重复到重用
  • 高度不固定时垂直居中
  • 讲清楚之javascript作用域
  • 利用DataURL技术在网页上显示图片
  • 深度学习入门:10门免费线上课程推荐
  • 使用 Docker 部署 Spring Boot项目
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • "无招胜有招"nbsp;史上最全的互…
  • #100天计划# 2013年9月29日
  • #Lua:Lua调用C++生成的DLL库
  • #QT项目实战(天气预报)
  • #stm32整理(一)flash读写
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (二)c52学习之旅-简单了解单片机
  • (二)斐波那契Fabonacci函数
  • (四)模仿学习-完成后台管理页面查询
  • (图)IntelliTrace Tools 跟踪云端程序
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转载)hibernate缓存
  • ./configure,make,make install的作用(转)
  • .apk文件,IIS不支持下载解决
  • .NET MVC之AOP
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET微信公众号开发-2.0创建自定义菜单
  • /dev下添加设备节点的方法步骤(通过device_create)