FPGA时序约束(三)时序约束基本路径的深入分析

news2024/11/22 21:00:09

系列文章目录

FPGA时序约束(一)基本概念入门及简单语法

FPGA时序约束(二)利用Quartus18对Altera进行时序约束


文章目录

  • 系列文章目录
  • 前言
  • 基本时序路径
    • 时钟偏差
    • 寄存器到寄存器(reg2reg)
      • 建立时间余量
      • 保持时间余量
    • Set input delay
      • 系统同步接口路径分析(引脚到寄存器)
      • 源同步接口的路径分析(引脚到寄存器)
    • Set output delay
      • 系统同步接口路径分析(寄存器到引脚)
      • 源同步接口路径分析(寄存器到引脚)
    • 引脚到引脚(set min/max delay)


前言

在读《FPGA时序约束与分析》吴厚航时记录的读书笔记,也是在上一篇系列文章继续学习时序分析。

基本时序路径

时钟偏差

以SiT8021系列的晶振为例:
在这里插入图片描述
Frequency Tolerance(时钟精度):在这个手册中时initial Tolerance,±15ppm:每秒产生15us的偏差。如果时钟周期是25M,那么一个周期的偏差就是1/25M*(15/1000000)=0.6ps。ppm:part per million即百万分之一。
Frequency Stability(时钟稳定,指温漂):有的也叫Frequency versus Temperature Characteristics,可选50ppm和100ppm的两种,同样的算法,25M下,一个周期的偏差值就是2ps和4ps
Jitter(时钟抖动):晶振源固有的噪声和干扰通常会带来时钟信号的周期性偏差,就是图中的RMS Period Jitter。

FPGA中,会将时钟抖动作为Clock Uncertainty加以约束。

寄存器到寄存器(reg2reg)

以同时钟源进行分析:我们主要时分析计算数据到达的时间和时钟到达的时间进行制约,满足建立时间和保持时间。
(数据到达时间和数据需求时间)
在上篇系列文章中《FPGA时序约束(二)利用Quartus18对Altera进行时序约束》中也有分析,但是记录的不是很清楚,这里再重新分析一下。

建立时间余量

建立时间余量计算公式中:时钟启动沿(launch edge)定义为0ns,时钟锁存沿(latch edge)为一个时钟周期。
launch是reg1数据发送,latch是reg2数据锁存,在寄存器到寄存器,数据锁存总是慢一个周期,见下图
在这里插入图片描述
Data Arrival Time=Launch Edge+Tclk1 ( max)+Td,这里的Td包括了Tco和Tdate
Data Required Time=Latch Edge+Tclk2 (min)-Tsu

建立时间余量:Setup Time Slack =Data Required Time-Data Arrival Time=Tclk2-Tclk1+一个周期-Tsu-Td。
作最坏打算,使约束满足最差情况:Tclk2取最小值,Tclk1取最大值,使得建立时间余量最小。

这里Tckl1和Tclk2有一段重复路径,在具体的路径下,Tcommon不存在最大值或最小值,但是实际计算中我们采用min的Tckl2和max的Tclk1中会包含Tcommon最大值和最小值,所以应该的计算公式是:(Tclk2(min)-Tcommon(min))-(Tclk1(max)-Tcommon(max)),即剔除掉Tcommon。

综上,所以需要补偿一个+Tcommon(max)-Tcommon(min)在最后建立余量公式中。
这个值即clock pessimism removal(上篇文章提到的时钟悲观,一般算在clock skew里面,时钟偏斜,Skew=Tclk2(min)-Tclk1(max)+Clock Pessimism)

最终加入Clock Uncertainty和Clock pessimism removal(CPR)(Tcommon(max)-Tcommon(min))后的结果是:
Setup Time Slack =Data Required Time-Data Arrival Time=Tclk2-Tclk1+Tclk2-Tclk1-Tsu-Td+CPR-clock uncertainty。
(书中这里介绍clock uncertainty,时钟源本身产生的不用周期的偏差,需要考虑,依我看,clock uncertainty只要在最终表达式中是减去,表示最坏影响)

保持时间余量

保持时间余量计算公式中:时钟启动沿和时钟锁存沿都为0ns。可以看到是第二次数据launch时,要保证第一次launch的数据被latch的保持时间。
在这里插入图片描述
同理;
Data Arrival Time=Launch Edge+Tclk1( min)+Td
Data Required Time=Latch Edge+Tclk2 (max)+Th+Clock Uncertainty-Clock Pessimism
Hold Time Slack= Data Arrival Time-Data Required Time
保持时间余量的减数和被减数与建立时间余量是相反的,所以作最坏打算时,是Tclk1取min,Tclk2取max。
这里最后的表达式还是-Clock Uncertainty(始终将clock uncertainty作最坏的打算加入表达式中)

建立时间和保持时间余量是相对立的,平衡是最好的状态

Set input delay

系统同步接口路径分析(引脚到寄存器)

系统同步接口:FPGA与外部芯片的时钟都由外部同一时钟源产生

分析pin2reg(pin to reg):

在这里插入图片描述
外部芯片的内部寄存器的状态一般不会给出详细的内部信息,但是再手册中通常都会给出芯片引脚的一些时序信息,如Tco(数据在时钟沿后多长时间范围内是有效的)、Tsu(建立时间)和Th(保持时间)等。

仍然用前面的reg2reg的方法来分析:

  • Tc2i_pcb表示时钟信号从时钟源到外部芯片(源寄存器reg1)所经过的PCB走线延时。
  • Tco表示时钟启动沿到达外部芯片引脚,一直到外部芯片数据引脚输出数据所经过的延时。这个延时包含了时钟从外部芯片输入引脚到源寄存器regl1的延时,及数据从reg1到芯片输出引脚的延时。
  • Td_pcb是数据信号在PCB上的走线延时。
  • Tpin2reg则是数据信号从FPGA器件的引脚到目的寄存器reg2输入端的延时,也就是pin2reg 实际要约束的路径延时。
  • Tc2j_pcb表示时钟信号从时钟源到达FPGA器件引脚所经过的PCB走线延时。
  • Tc2j_fp表示时钟信号从FPGA器件输人引脚到目的寄存器reg2所经过的时钟网络延时。
  • Tsu表示目的寄存器的建立时间。
  • Th表示目的寄存器的保持时间。

Data Arrival Time=Launch Edge+Tc2i_pcb( max)+Tco( max)+Td_pcb( max)+Tpin2reg(max)
Data Required Time=Latch Edge+Tc2j_pcb( min)+Tc2j_fp(min)-Tsu-Clock Uncertainty Time
Setup Time Slack=Data Required Time-Data Arrival Time

这里的时钟路径在不像前面的reg2reg有时钟共同路径,所以没有Clock Pessimisim Time。

在上面的公式中,只有Tpin2reg和Tc2j_fp的延时值是未知的。Tc2j_fp是时钟从FPGA输人引脚到FPGA寄存器的延时,通常在硬件电路设计时需要把这样的时钟信号分配到FPGA专用时钟引脚上,通常会走全局时钟网络(在上一篇系列文章有如何走线在全局时钟上),尽可能地减小时钟引脚到寄存器的时钟网络延时,所以这个路径的延时通常会是一个较小的时间值。

具有很大变数的是Tpin2reg,使用set_input_delay命令进行约束设置。set_input_delay命令所设定的最大值(-max)和最小值(-min)分别用建立时间和保持时间分析。

这里Data Required Time和Data Arrival Time不是一个固定公式,应该只是为了计算最后Setup Time Slack的值而创建的两个方便理解的公式。将Tc2j_pcb( min)移动到Data Arrival Time中,但是保证Setup Time Slack不变。

Data Arrival Time=Launch Edge+Tc2i_pcb( max)+Tco( max)+Td_pcb( max)+Tpin2reg(max)-Tc2j_pcb( min)
Data Required Time=Latch Edge+Tc2j_fp(min)-Tsu-Clock Uncertainty Time
书中介绍这样FPGA的外部所有延时信息都集中在Data Arrival Time里面,就是set_input_delay-max要约束的值
set_input_delay(max)=Tc2i_pcb( max)+Tco( max)+Td_pcb( max)-Tc2j_pcb( min)
(对这个解释目前还是没有很明白,为什么要这样变换,主要是如何理解输入延时,时序约束是为了告诉FPGA时钟和数据的相位关系,从而让FPGA能够正确接收,在上面将FPGA的所有外部延时计算到一个公式中,告诉FPGA数据到达相对时钟的延时情况,这样FPGA就会对Tpin2reg的走线进行优化)

同理,计算保持时间余量;
Data Arrival Time=Launch Edge+Tc2i_pcb( min)+Tco(min)+Td_pcb(min)+Tpin2reg(min)-Tc2j_pcb( max)
Data Required Time=Latch Edge+Tc2j_fp(max)+Th+Clock Uncertainty Time
set_input_delay(min)=Tc2i_pcb(min)+Tco(min)+Td_pcb(min)-Tc2j_pcb(max)

源同步接口的路径分析(引脚到寄存器)

外部芯片给FPGA一个数据和同步时钟
在这里插入图片描述
通常,在外部芯片中我们可以找到Tco的值,外部芯片的时钟启动沿到外部芯片数据输出引脚的延时时间。外部芯片的时钟走线延时Tc_ext已经包含在Tco里了,所以可以认为它的取值是0。

在这里插入图片描述

推导出建立时间余量公式:(这里和上面一样,对公式Tc2j_pcb进行了变换)
Data Arrival Time=Launch Edge+Tco( max)+Td_pcb ( max)十Tpin2reg ( max)-Tc2j_pcb(min)
Data Required Time=Latch Edge+Tc2j_fp( min)-Tsu-Clock Uncertainty Time
set_input_delay(max)=Tco( max)+Td_pcb( max)-Tc2j_pcb( min)

保持时间余量公式:
==Data Arrival Time=Launch Edge+Tco(min)+Td_pcb(min)+Tpin2reg(min)-Tc2j_pcb( max)
Data Required Time=Latch Edge+Tc2j_fp(max)+Th+Clock Uncertainty Time
set_input_delay(min)=Tco(min)+Td_pcb(min)-Tc2j_pcb(max)

如果手册中没有Tco的最大最小值,可以根据建立时间和保持时间自己计算:
在这里插入图片描述
Tco(max)=Tclk-Tsu
Tco(min)=Th

Set output delay

系统同步接口路径分析(寄存器到引脚)

这里的FPGA的引脚是用作输出,目的寄存器是在外部芯片中
在这里插入图片描述

  • Tc2i_pcb表示时钟信号从时钟源到FPGA输人引脚所经过的PCB走线延时。
  • Tc2i_fp表示时钟信号从FPGA输人引脚到其内部的源寄存器regl所经过的时钟网络延时。
  • Treg2pin则是数据信号从FPGA器件的源寄存器到其输出引脚的延时,也就是reg2pin实际要约束的路径延时。
  • Td_pcb是数据信号在PCB上的走线延时。
  • Tc2j_pcb表示时钟信号从时钟源到达外部芯片引脚所经过的PCB走线延时。
  • Tsu表示外部芯片(通常包括目的寄存器和外部芯片中所有相关的路径延时信息)的建立时间。
  • Th表示外部芯片(通常包括目的寄存器和外部芯片中所有相关的路径延时信息)的保持时间。

建立时间余量:
Data Arrival Time=Launch Edge+Tc2i_pcb( max)+Tc2i_fp( max)+Treg2pin( max)+Td_pcb( max)
Data Required Time=Latch Edge+Tc2j_pcb( min)-Tsu
Setup Time Slack=Data Required Time- Data Arrival Time

保持时间余量;
Data Arrival Time=Launch Edge+Tc2i_pcb( min)+Tc2i_fp(min)+Treg2pin( min)+Td_pcb (min)
Data Required Time=Latch Edge+Tc2j_pcb( max)+Tn
Hold Time Slack=Data Arrival Time-Data Required Time

和之前分析的一样,Tc2i_fp还是忽略掉,用set_output_delay约束Treg2pin。

还是要变换公式,要把FPGA的外部延时综合在一起,其他的延时编译器都是知道的,变到Data Required Time中

set_output_delay(max)=Tc2i_pcb( max)-Tc2j_pcb(min)+Td_pcb(max)+Tsu

set_output_delay(min)=Tc2i_pcb(min)-Tc2j_pcb(max)+Td_pcb(min)-Th

(这里有点混乱,公式为什么要这么变也没有解释)

源同步接口路径分析(寄存器到引脚)

在这里插入图片描述
推导出建立时间余量公式:
Data Arrival Time=Launch Edge+Tc2i_fp( max)+Td_pcb ( max)+Treg2pin ( max)
Data Required Time=Latch Edge+Tc2j_pcb+Tc2j_fp( min)-Tsu-Clock Uncertainty Time

==

保持时间余量公式:
Data Arrival Time=Launch Edge+Tc2i_fp(min)+Td_pcb(min)+Treg2pin(min)
Data Required Time=Latch Edge+Tc2j_fp(max)+Tc2j_pcb+Th+Clock Uncertainty Time

对公式变换得到:
set_output_delay( max)=Td_pcb ( max)+Tsu-Tc2j_pcb(min)
set_output_delay( min)=Td_pcb (min)-Th-Tc2j_pcb(max)

总结下来,set_input_delay和 set_output_delay 的约束值计算公式,都是将时序路径中所有FPGA器件外部的延时信息汇总在一起,告诉FPGA编译工具,使其引导布局布线,以保证其内部的延时能够满足系统(FPGA器件和外部芯片)的时序要求。

引脚到引脚(set min/max delay)

pin2pin即 FPGA外部信号从 FPGA的输入引脚到输出引脚所经过的整个路径延时。
整个路径延时基本上只是一些组合逻辑延时和走线延时。没有所谓的建立时间和保持时间,只需要set_max_delay或set_min_delay这两条约束命令分别指定某个输入引脚到某个输出引脚的最大或最小延时值。至于这个最大或最小延时值如何确定,取决于实际的应用,没有什么通用公式可以套用。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PHP实现以数组var_dump,array_combine等函数的方法功能举例

目录 前言 一、什么是数组 二、把两个数组合并成一个数组 1.1运行流程(思想) 1.2代码段 1.3运行截图 三、自动创建数组的一个案例 1.1运行流程(思想) 1.2代码段 1.3运行截图 前言 1.若有选择,可实现在目录里…

小朋友排队

[蓝桥杯 2014 省 B] 小朋友排队 题目描述 n n n 个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。 每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是 0 0 0。 如果某个小朋友…

Python 学习曲线 从 Python 新手到 Pro

Python 学习曲线 从 Python新手到 Pro 使用代码片段介绍: Python 是世界上最通用和使用最广泛的编程语言之一,以其简单性、可读性和多功能性而闻名。 在本文中,我们将探讨一系列示例场景,其中代码由具有三个不同专业知识水平的程序…

文件系统和动静态库

目录 再识文件属性 查看文件属性的原理 初识inode 了解磁盘 什么是磁盘 磁盘的结构 磁盘的存储结构 CHS寻址 磁盘的逻辑结构 使用LBA地址的意义 理解文件系统 页框和页帧 分治思想管理 Linux ext2文件系统 软硬链接 软链接 硬链接 文件的三个时间 动静态库 …

java运行python脚本,待完善版

参考资料: windows下调用CMD运行方式 兼容linux/windows,同步异步方式 指定特殊运行环境的运行(如:anaconda运行环境) 整合以上三种方式终极版源码 相关内容: 调用python脚本传参说明 如果不传参数,python脚本可以随意写,比如:

【课程介绍篇】C/C++后台开发岗位技能知识树

1 C/C后台开发岗位技能知识树 2 Linux C/C后台架构开发 成长体系课程 3 C技术历史更新 https://www.0voice.com/uiwebsite/html/courses/

《UVM实战》学习笔记——第七章 UVM中的寄存器模型2——期望值/镜像值、自动/显示预测、操作方式

文章目录 前言一、寄存器模型对DUT的模拟1.1 期望值和镜像值1.2 常见操作对期望值和镜像值的影响 二、prediction分类2.1 自动预测2.2 显式预测 三、访问寄存器方式四、mem和reg的联系和差别五、内建built_in sequence5.1 寄存器模型内建序列5.2 存储器模型内建序列5.3 禁止域名…

安装APP时弹窗未知风险未知开发者,还能下载吗?

随着移动互联网的不断普及,人们的日常生活已与手机密不可分。根据相关研究,在使用手机时,人们90%以上的时间都花在某些应用程序上,巨大的需求使得各种各样的APP被开发出来。然而人们在使用APP时必须更加注意其是否来源可信企业&am…

数据结构与算法基础-学习-21-查找之平衡二叉树(AVL树)

目录 一、个人理解 二、最小失衡子树 三、平衡调整的四种类型 1、LL型 2、RR型 3、LR型 4、RL型 四、如何平衡调整 1、LL型调整 2、LR型调整 五、宏定义 六、结构体类型定义 1、AVL树结点类型 2、AVL树类型 3、AVL树结点搜索路径类型 七、函数定义 1、初始化AV…

基于CMS项目的JDBC的实战

基于CMS项目的JDBC的实战 使用的Javase技术,进行控制台输出的客户管理系统(CMS),主要功能包含登录,注册、客户信息的展示,客户信息的更新,客户信息添加删除客户、退出系统。 设计创建数据库 …

PEX高效批量网络装机

目录 一、部署PXE远程安装服务 1)PXE概述 若要搭建PEX网络体系,必须满足以下几个前提条件 2)搭建PXE远程安装服务器 ①安装并启用 TFTP 服务 ②安装并启用 DHCP 服务 ​编辑 ③准备 Linux 内核、初始化镜像文件 ④准备 PXE 引导程序 …

CUDA下载与对应版本查询

文章目录 1 算力,CUDA Driver Version,CUDA Runtime Version2 显卡型号3 实操4 镜像 1 算力,CUDA Driver Version,CUDA Runtime Version 比如说我们进入pytorch官网中,点击下载,如何找到适合自己的CUDA版本…

SCAU 统计学 实验5

8.14 总体平均值(μ):7.0 cm 总体方差(σ):0.03 cm 样本平均值(x̄):6.97 cm 样本方差(s):0.0375 cm 样本大小(n&#xff…

复旦MOSS大模型开源了!Github和Hugging Face同时上线

来源:量子位 复旦大模型MOSS,正式开源了! 作为国内首个开放测试的类ChatGPT产品,MOSS开源地址一放出,又冲上知乎热搜: 从官网介绍来看,MOSS是一个拥有160亿参数的开源对话语言模型。 它由约7…

EventLog Analyzer:高效保护网络安全的强大工具

网络安全是当今数字化世界中最为重要的话题之一。随着越来越多的组织、企业和个人将其业务转移到互联网上,网络安全问题变得越来越严峻。针对这个问题,EventLog Analyzer提供了一个有效的解决方案,让网络管理员可以更好地监控和保护其网络环境…

【虚拟仿真】Unity3D中实现UI的单击、双击、按压、拖动的不同状态判断

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 之前写了一篇在Unity中鼠标的单击、双击、拖动的文章&#xff…

Improving Language Understanding by Generative Pre-Training 论文阅读

论文题目:通过生成式预训练提高语言理解能力 GPT的全称:Generative Pre-trained Transformer。 Generative是指GPT可以利用先前的输入文本来生成新的文本。GPT的生成过程是基于统计的,它可以预测输入序列的下一个单词或字符,从而生…

春招,进阿里了....

个人背景是东北某 985 科班本硕,做的 测试开发,有两个自己写的小项目。下面是一些印象比较深刻的面试题 阿里一面 什么是软件测试? 软件测试过程中会面向哪些群体? 开发一个软件都要经过哪些阶段? 什么是黑盒测试&…

一块钱看Android Debug: avc denied 已存在的目录不能访问

某三方应用,使用了USB摄像头,启动应用后功能不能使用,看log有如下错误, denied后面{}里的是要执行的动作,比如append,open,execmod,link等等 scontext指的是域,对应的是te文件 上面报错这条对应te文件是untrusted_app.te, scontex…

如何将 WhatsApp 聊天添加到您的网站

WhatsApp是全球最受欢迎的消息传递应用程序。平台上有超过 2 亿活跃用户与朋友、家人和企业进行交流。对于企业而言,WhatsApp 是与客户进行个人、可访问和非正式对话的理想渠道。 要将 WhatsApp 作为渠道引入您的客户旅程,第一步是将 WhatsApp 聊天按钮…