FPGA设计时序约束十四、Set_External_Delay

news/2025/1/17 15:20:22/

一、序言

    在时序约束中对clock的约束还存在一种特殊的延时约束set external delay。set external delay如字面含义,设置外部的时延值,但这个外部时延主要是指反馈时延,即信号从FPGA的output端口输出后经过外部电路回到输入端口的时延值。

二、Set External Delay

2.1 设置界面

进入Timing Constraints界面,在左侧Clock栏中选中Set External Delay,右侧即显示Set External Delay

 

设置界面中需设置反馈路径中的输出端口output port和输入端口input port,delay value为设置的时延值。勾选“Specify min/max values”后可设置max和min,即指进行setup或hold分析,“Add to existing external delay”勾选后对于约束的端口如果存在其他的外部时延约束,则会将其覆盖。

 

2.2 命令语法

命令格式

set_external_delay ‑from <args> ‑to <args> [‑min] [‑max] [‑add] [‑quiet] [‑verbose] <delay_value>

参数含义

 

三、工程示例

3.1 工程代码

设计中以PLL的反馈时钟输入输出为例设置set_external_delay

module set_external_delay(d1,rst,clk,clkfb,clkfb_out,out);
output out;
input d1,rst;
input clk,clkfb;
output clkfb_out;
reg ff1,ff2;
wire feedback,clk1;PLLE2_BASE #(.BANDWIDTH("OPTIMIZED"),  // OPTIMIZED, HIGH, LOW.CLKFBOUT_MULT(5),        // Multiply value for all CLKOUT, (2-64).CLKFBOUT_PHASE(0.0),     // Phase offset in degrees of CLKFB, (-360.000-360.000)..CLKIN1_PERIOD(0.0),      // Input clock period in ns to ps resolution (i.e. 33.333 is 30 MHz).// CLKOUT0_DIVIDE - CLKOUT5_DIVIDE: Divide amount for each CLKOUT (1-128).CLKOUT0_DIVIDE(1),.CLKOUT1_DIVIDE(1),.CLKOUT2_DIVIDE(1),.CLKOUT3_DIVIDE(1),.CLKOUT4_DIVIDE(1),.CLKOUT5_DIVIDE(1),// CLKOUT0_DUTY_CYCLE - CLKOUT5_DUTY_CYCLE: Duty cycle for each CLKOUT (0.001-0.999)..CLKOUT0_DUTY_CYCLE(0.5),.CLKOUT1_DUTY_CYCLE(0.5),.CLKOUT2_DUTY_CYCLE(0.5),.CLKOUT3_DUTY_CYCLE(0.5),.CLKOUT4_DUTY_CYCLE(0.5),.CLKOUT5_DUTY_CYCLE(0.5),// CLKOUT0_PHASE - CLKOUT5_PHASE: Phase offset for each CLKOUT (-360.000-360.000)..CLKOUT0_PHASE(0.0),.CLKOUT1_PHASE(0.0),.CLKOUT2_PHASE(0.0),.CLKOUT3_PHASE(0.0),.CLKOUT4_PHASE(0.0),.CLKOUT5_PHASE(0.0),.DIVCLK_DIVIDE(1),        // Master division value, (1-56).REF_JITTER1(0.0),        // Reference input jitter in UI, (0.000-0.999)..STARTUP_WAIT("FALSE")    // Delay DONE until PLL Locks, ("TRUE"/"FALSE"))PLLE2_BASE_inst (// Clock Outputs: 1-bit (each) output: User configurable clock outputs.CLKOUT0(),   // 1-bit output: CLKOUT0.CLKOUT1(clk1),   // 1-bit output: CLKOUT1.CLKOUT2(),   // 1-bit output: CLKOUT2.CLKOUT3(),   // 1-bit output: CLKOUT3.CLKOUT4(),   // 1-bit output: CLKOUT4.CLKOUT5(),   // 1-bit output: CLKOUT5// Feedback Clocks: 1-bit (each) output: Clock feedback ports.CLKFBOUT(clkfb_out), // 1-bit output: Feedback clock.LOCKED(LOCKED),     // 1-bit output: LOCK.CLKIN1(clk),     // 1-bit input: Input clock// Control Ports: 1-bit (each) input: PLL control ports.PWRDWN(PWRDWN),     // 1-bit input: Power-down.RST(rst),           // 1-bit input: Reset// Feedback Clocks: 1-bit (each) input: Clock feedback ports.CLKFBIN(clkfb)    // 1-bit input: Feedback clock);always@(posedge clk1)
begin
if(!rst)ff1<=1'b0;
else ff1<=d1;
endalways@(posedge clk1)
begin
if(!rst)ff2<=1'b0;
else ff2<=ff1; 
end 
assign out=ff2;endmodule

综合网表连接图如下图所示

 

输入输出引脚设置set_input_delay/set_output_delay,再是对PLL的反馈时钟输入端口和输出端口设置set_external_delay

create_clock -period 10.000 -name clk -waveform {0.000 5.000} [get_ports clk]
create_generated_clock -name clk1_gen -source [get_pins PLLE2_BASE_inst/CLKIN1] -divide_by 2 -add -master_clock clk [get_pins PLLE2_BASE_inst/CLKOUT1]
create_clock -period 6.000 -name clkfb -waveform {1.000 3.000} [get_ports clkfb]
set_input_delay -clock [get_clocks clkfb] 2.220 [get_ports d1]
set_output_delay -clock [get_clocks -of_objects [get_pins PLLE2_BASE_inst/CLKFBOUT]] 1.110 [get_ports clkfb_out]
set_external_delay -from [get_ports clkfb_out] -to [get_ports clkfb] -min 1.330

3.3 时序报告

    查看时序报告结果,会查找不到设置的约束值,因为该反馈路径时延值需在有外部逻辑时才会进行分析

 

四、参考资料

用户手册:ug903-vivado-using-constraints-en-us-2022.2.pdf

链接:https://pan.baidu.com/s/17AK_-J4wRXiFLtLTorlrwg?pwd=mylt 

提取码:mylt   


http://www.ppmy.cn/news/1285529.html

相关文章

MySQL 的内连接、左连接、右连接有什么区别?

MySQL 的内连接、左连接、右连接有什么区别&#xff1f; 在 MySQL 中&#xff0c;内连接&#xff08;INNER JOIN&#xff09;、左连接&#xff08;LEFT JOIN 或 LEFT OUTER JOIN&#xff09;和右连接&#xff08;RIGHT JOIN 或 RIGHT OUTER JOIN&#xff09;是用于合并两个或多…

猴子摘香蕉python

这是一个简单的 Python 代码示例&#xff0c;模拟了一个猴子摘香蕉的过程&#xff1a; class Monkey:def __init__(self, name):self.name nameself.bananas 0def pick(self, num):self.bananas numprint(f"{self.name} picked {num} bananas.")class Tree:def _…

Spring Boot学习随笔- 集成MyBatis-Plus,第一个MP程序(环境搭建、@TableName、@TableId、@TableField示例)

学习视频&#xff1a;【编程不良人】Mybatis-Plus整合SpringBoot实战教程,提高的你开发效率,后端人员必备! 引言 MyBatis-Plus是一个基于MyBatis的增强工具&#xff0c;旨在简化开发&#xff0c;提高效率。它扩展了MyBatis的功能&#xff0c;提供了许多实用的特性&#xff0c;…

spring boot使用配置文件对静态变量进行赋值

spring boot value ConfigurationProperties 注释静态配置文件变量引用 1.value 标签加在set方法上面&#xff0c;注意set方法是非静态 private static String userName;Value(value "${user.userName}")public void setUserName(String userName) {HelloWorldServ…

Android 13 默认关闭 快速打开相机

介绍 在设置菜单的手势界面里&#xff0c;快速打开相机是默认开启的&#xff0c;此功能当开启时连续点击两次电源键会打开相机&#xff0c;现在客户需要默认关闭。 效果展示 修改 这里一开始想到的就是配置文件&#xff0c;在路径下果然找到了,从注释中看使我们需要的&#x…

Nature | 大型语言模型(LLM)能够发现和产生新知识吗?

大型语言模型&#xff08;LLM&#xff09;是基于大量数据进行预训练的超大型深度学习模型。底层转换器是一组神经网络&#xff0c;这些神经网络由具有自注意力功能的编码器和解码器组成。编码器和解码器从一系列文本中提取含义&#xff0c;并理解其中的单词和短语之间的关系。通…

视频监控EasyCVR如何通过设置sei接口,实现在webrtc视频流中添加画框和文字?

安防视频监控系统基于视频综合管理平台EasyCVR视频系统&#xff0c;采用了开放式的网络结构&#xff0c;可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力&#xff0c;具备权限管…

在 Golang 应用程序中管理多个数据库

掌握在 Golang 项目中处理多个数据库的艺术 在当前软件开发领域中&#xff0c;处理单个应用程序内的多个数据库的需求越来越普遍。具有强大功能的 Golang 是处理此类任务的绝佳解决方案&#xff0c;无论您是与多个数据源合作还是仅为增强组织和可扩展性而分隔数据。在本文中&a…