0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA案例解析:针对源同步的时序约束

454398 来源:CSDN博主 作者:meper 2020-11-20 14:44 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

约束流程

说到FPGA时序约束的流程,不同的公司可能有些不一样。反正条条大路通罗马,找到一种适合自己的就行了。从系统上来看,同步时序约束可以分为系统同步与源同步两大类。简单点来说,系统同步是指FPGA与外部器件共用外部时钟;源同步(SDR,DDR)即时钟与数据一起从上游器件发送过来的情况。在设计当中,我们遇到的绝大部分都是针对源同步的时序约束问题。所以下文讲述的主要是针对源同步的时序约束。

根据网络上收集的资料以及结合自己的使用习惯,我比较趋向于下面的约束流程方式:时序约束一共包含以下几个步骤:时钟约束、IO约束以及时序例外。这几个步骤应该可以解决我们设计当中绝大多数情况下的时序约束问题。

1. 首先约束时钟。输入时钟,输出时钟。从种类 来看不外乎以下几种:单端输入时钟、差分输入时钟、GT或恢复时钟(例如LVDS信号恢复出来的时钟)、PLL产生的时钟以及自己产生的门控时钟。
2.IO约束。只有等待内部时钟完全通过后,再配置input delay和output delays,告知FPGA外部端口的数据时序关系。
3.时序例外。在约束完时钟以及IO后,还是有时序违例的时候,注意检查一下是否有时序例外的情况,例如多周期时钟路径、异步时钟、常量、以及互斥时钟路径等等。

常用指令

下面我们就根据约束的流程来介绍一下每个步骤中的常用指令。

时钟约束

常用指令:Create_clock、Create_generated_clock、derive pll_clocks、create_virtual_clock。

对时钟的约束,首先要明确,我们要约束的时钟有哪些,然后针对不同的时钟进行约束。下面针对不同类型的时钟,对其约束的指令作简要分析。

单端输入时钟:

图1 单端输入时钟约束

这里用到了create_clock,一开始不熟悉语法的同学可以通过Timequest 的GUI界面或者Templete里面的模板里找到该指令。

差分输入时钟:

差分输入时钟,只需约束P端输入时钟即可,方法同上。

PLL产生的时钟:

针对PLL产生的时钟一般有两种方式。一种是通过derive pll_clocks即可,PLL会根据所设定的参数,自行约束输出时钟。这样做的好处就是,指令少,当PLL煽出的时钟比较多的时候,很有优势,不利的地方在于,PLL生产的时钟名字命名不可把控,区分度不明显,不利于后续的引用。所以我比较趋向于后面一种方式,是通过Create_clock、Create_generated_clock这两条指令完成。

图2 PLL生成的时钟约束

首先用create_clock指令对输入的时钟clk_in进行约束,然后通过create_generated_clock指令对PLL的输出时钟进行约束,这里PLL的输出时钟只是做了90°的相位偏移,频率不变。有童鞋可能会问,如果要倍频或者分频呢?该怎样写?说实话,一开始学的时候,我也记不得指令的格式。在这里,再一次强调,在初学的时候,没有必要去纠结语法。很多时候,约束的时候,只需标明用到的约束信息出来即可,再退一步讲,可以通过GUI界面产生相应的指令,你需要做的是明确相关的参数,知道怎么填就行啦,重点是理解时序约束的流程、应该怎么去约束才是重点。

GT或恢复的时钟

GT或恢复的时钟(例如高速串口过来恢复出来的时钟)针对这种情况,一般都是FPGA内部用IP核恢复出来时钟,约束格式同上。

图3 GT或者恢复时钟的约束

自己分频的时钟

(不建议这种方法,推荐PLL来产生,如果非要这样做,务必添加约束)

图4 自己生成的时钟

虚拟时钟create_virtual_clock

官网上的手册推荐在IO约束的时候,使用虚拟时钟,尤其是在约束输入延迟的时候。虚拟时钟表征的是上游器件内部用于输出数据的时钟(从另一个角度考虑,它表征的类似SDR模式中第一级D触发器的时钟)。通过约束告诉FPGA 的Input_Clock(实际上是Clock_Out)和虚拟时钟(数据)的相位关系。FPGA根据参数Input_delay在布线时进行调整使得布线满足时序要求。

图5 虚拟时钟关系

我们分边沿对齐和中心对齐两种模式对输入进行约束,对于边沿对齐的信号,我们通常会将其输入引脚输入值专用的PLL输入口,进行90°相移。约束如下所示:注意在对齐模式下,图6中对clk_in进行约束时不需要进行额外的移相,而仅对clock(经过PLL后的输出时钟)进行移相90°。

图6 边沿对齐输入时钟约束

create_clock-name virtual_clock -period 10

create_clock-name input_clock -period 10 [get_ports clock_in]

create_generated_clock-name plus_90_degrees -source [get_pins PLL|inclk[0]] -phase 90

对于中心对齐模式,其输入时序模型如图7所示,其约束图下方所示。一般而言,对于中心对齐模式,我们FPGA内部不会使用专门的锁相环对齐进行移相操作,但若依然使用PLL,上述边沿对齐对PLL的约束方法依然有效。但对clk_in的约束依然要表现出和virtual clock的相位关系。

图7 中心对齐输入时序约束

create_clock -namevirtual_clock -period 10

create_clock -nameinput_clock -period 10 [get_ports clock_in] -waveform {2.5 7.5}

IO约束

IO的约束主要是指input_delay与output_delay这两种,编译软件(ISE/Quartus)是个很强大而又很傻的工具,在设计的时候,你务必要告诉他在FPGA外部的信号时序关系,他才能够知道怎么去优化内部的时序,以满足时序设计要求。

Set Input_delay

从输入来看,无非有以下两种情况:SDR与DDR。

SDR是指,数据只在时钟的上升沿更新,而DDR是时钟的上升沿与下降沿都会更新。按照时钟与数据对齐方式来划分,又可以分为沿对齐与中心对齐两种。对于输入延迟的获取,一般来说有以下三种途径:文中直接给出Tco、Tdata等参数;通过查阅上级器件的数据手册;通过示波器来实测。查上游的器件手册(主要看Tsu 与Th),那么可以推算出,FPGA输入延迟的最值,为了方便描述,这里设定时钟与数据在PCB上的传输延迟一致:

Input delay max = T – Tsu;

Input delay min = Th;

当时钟与数据到达FPGA的延时不一致时,计算公式如下:

Input_delay_min = Th_min+ (T_data_max -T_clk_min)

Input_delay_max = T-Tsu_max+ (T_data_min -T_clk_max)

其中T_data是数据延时,T_clk是时钟延时,由此可见在PCB布线的时候,务必让时钟与数据的走线尽可能等长。这样不容易导致时序违例现象。(这个公式无论是中心对齐或者边沿对齐都适用,只不过中心对齐与边沿对齐他们的建立时间和保持时间计算不一样而已,稍后说明。) 其中T为FPGA用于采集上游器件发送过来的数据时钟。又或者直接通过示波器观察时钟与数据的延迟关系。有些情况,例如给定了相关数值的话(Tco ,data_delay等数值),可以直接算出输入延迟。跟上一篇计算数据到达时间里一样,这里就不展开论述。

图8 SDR中心对齐的输入输出延迟最值

图9 SDR边沿对齐的输入输出最值

回顾一下Tsu与Th的定义。setuptime :数据要能够被Latch Edge正确锁存,必须要在Latch Edge 到达之前保持稳定,这个提前到达的最少时间量,就是建立时间。

Hold time : 数据要能够被LatchEdge正确锁存,除了在Latch Edge到达之前提前准备好以外,还必须在Latch Edge到达后,保持稳定一段时间。这段保持稳定的时间,就是Hold time。图中DVW是指数据有效值宽度,图5中心对齐的情况下很好理解。对于图6中提到的边沿对齐情况,我觉得可以这么理解,在计算Tsu的时候,都是Latch时刻减去数据稳定起始沿时刻;而Th是数据稳定终止沿时刻减去Latch时刻。这么一算,不难可以得到在边沿对齐的情况下,保持时间Th为负的。代入公式可得,边沿对齐的情况下,input_delay_max=保持时间=-Th(这里的Th仅为数值,不带符号)。

图10输入延迟约束

图10中,左边是通过查阅上游器件数据手册得到的数据,右边的是用示波器测量得到的数据。

注:在对DDR的约束中,记得时钟下降沿约束的时候加上-clock_fall与-add_delay;上面列举的例程中,原著中都没有用到虚拟时钟,但是官网手册中也只是推荐使用,并没有说一定要用虚拟时钟。看个人喜好吧,如果要用虚拟时钟,可以这样约束,后续会列举一个完整的例子。

Set output_delay

输出延时的分析与输入延时类似。这里设定时钟与数据在PCB上的传输延迟一致:

output delay max = Tsu;

output delay min = -Th;

当时钟与数据到达FPGA的延时不一致时,计算公式如下:

Output_delay_min= -Th_max + (Tdata_min-Tclk_max)

Output_delay_max=Tsu_max + (Tdata_max-Tclk_min)

其中,T_data是数据延迟;T_clk为时钟的延迟。

上述是DDR中心对齐输出的输出延迟约束。

上述是DDR边沿对齐输出的输出延迟约束。

SDR的输出约束方式类似,这里就不在累赘了。

时序例外

时序例外一般用在clock与IO都约束后,还是不满足时序要求的情况下。主要包括以下几种情况:

1. 多周期set_milticycle_path(不推荐)
2. 不需要检测路径(常见,重要)set_false_path
3. 常量与伪常量
4.互斥的路径
5. 异步时钟(这种情况下,务必要确保逻辑上对异步时钟域的信号做了处理,例如打两拍,FIFO等手段处理)
6. 组合电路延时,即逻辑不经过任何时钟处理就输出的情况。

个人比较取向与set_false_path与set_clock_groups-exclusive。

编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1656

    文章

    22290

    浏览量

    630399
  • pcb
    pcb
    +关注

    关注

    4391

    文章

    23746

    浏览量

    420841
  • DDR
    DDR
    +关注

    关注

    11

    文章

    747

    浏览量

    68546
  • 时序约束
    +关注

    关注

    1

    文章

    118

    浏览量

    13894
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    数字IC/FPGA设计中的时序优化方法

    在数字IC/FPGA设计的过程中,对PPA的优化是无处不在的,也是芯片设计工程师的使命所在。此节主要将介绍performance性能的优化,如何对时序路径进行优化,提高工作时钟频率。
    的头像 发表于 12-09 10:33 1406次阅读
    数字IC/<b class='flag-5'>FPGA</b>设计中的<b class='flag-5'>时序</b>优化方法

    时序约束问题的解决办法

    Time 是否满足约束。 我们要留意的是 WNS 和 WHS 两个数值,如果这两个数值为红色,就说明时序不满足约束。下面将解释怎么解决这个问题。 1. Setup Time 违例 Setup
    发表于 10-24 09:55

    关于综合保持时间约束不满足的问题

    1、将 nuclei-config.xdc 和 nuclei-master.xdc 加入到项目工程中,综合得到时序约束报告如下: 保持时间约束不满足,分析原因,发现所有不满足均出现在
    发表于 10-24 07:42

    技术资讯 I Allegro 设计中的走线约束设计

    本文要点在进行时序等长布线操作的时候,在布线操作的时候不管你是走蛇形线还是走折线,约束管理器会自动帮你计算长度、标偏差,通过精确控制走线长度,来实现信号的时序匹配。约束设计就是一套精准
    的头像 发表于 09-05 15:19 913次阅读
    技术资讯 I Allegro 设计中的走线<b class='flag-5'>约束</b>设计

    双北斗卫星时钟同步装置:安徽京准自主可控的“时序”守护者

    双北斗卫星时钟同步装置:安徽京准自主可控的“时序”守护者
    的头像 发表于 09-05 08:43 772次阅读
    双北斗卫星时钟<b class='flag-5'>同步</b>装置:安徽京准自主可控的“<b class='flag-5'>时序</b>”守护者

    AMD FPGA异步模式与同步模式的对比

    本文讲述了AMD UltraScale /UltraScale+ FPGA 原生模式下,异步模式与同步模式的对比及其对时钟设置的影响。
    的头像 发表于 07-07 13:47 1435次阅读

    功率分析仪运算原理 什么是同步?有功功率运算

    横河功率分析仪的通用运算原理则是首先检测出指定信号的周期,并将检测周期的整数倍时间设为测量区间,随后对这段时间内采集到的数据进行平均运算,这一测量方式也被称为“同步周期平均法”,其中用于定义测量周期的输入信号被称为同步
    的头像 发表于 06-30 15:30 706次阅读
    功率分析仪运算原理 什么是<b class='flag-5'>同步</b><b class='flag-5'>源</b>?有功功率运算

    西门子再收购EDA公司 西门子宣布收购Excellicon公司 时序约束工具开发商

    精彩看点 此次收购将帮助系统级芯片 (SoC) 设计人员通过经市场检验的时序约束管理能力来加速设计,并提高功能约束和结构约束的正确性   西门子宣布 收购 Excellicon 公司
    的头像 发表于 05-20 19:04 1282次阅读
    西门子再收购EDA公司  西门子宣布收购Excellicon公司  <b class='flag-5'>时序</b><b class='flag-5'>约束</b>工具开发商

    AnyWay变频功率分析仪同步来自电压还是电流信号?

    一、功率分析仪同步的作用 同步是功率分析仪进行正确傅里叶变换的前提,选择合理的 功率分析仪同步
    的头像 发表于 05-19 10:13 519次阅读

    FPGA时序约束之设置时钟组

    Vivado中时序分析工具默认会分析设计中所有时钟相关的时序路径,除非时序约束中设置了时钟组或false路径。使用set_clock_groups命令可以使
    的头像 发表于 04-23 09:50 973次阅读
    <b class='flag-5'>FPGA</b><b class='flag-5'>时序</b><b class='flag-5'>约束</b>之设置时钟组

    MSO8000示波器8通道同步采样实现原理揭秘

    在高速数字电路、电源系统、通信协议调试等复杂场景中,多通道同步采样能力是示波器性能的关键指标。普MSO8000系列示波器凭借其创新的硬件架构和智能算法,实现了高达8通道(4模拟+16数字)的同步
    的头像 发表于 04-16 15:50 723次阅读
    普<b class='flag-5'>源</b>MSO8000示波器8通道<b class='flag-5'>同步</b>采样实现原理揭秘

    一文详解Vivado时序约束

    Vivado的时序约束是保存在xdc文件中,添加或创建设计的工程源文件后,需要创建xdc文件设置时序约束时序
    的头像 发表于 03-24 09:44 4396次阅读
    一文详解Vivado<b class='flag-5'>时序</b><b class='flag-5'>约束</b>

    【国产FPGA必备教程】——紫光同创FPGA图像视频教程,适用于小眼睛FPGA盘古全系列开发板

    案例、时序约束及收敛方法等,教程内容丰富,从入门到应用提高,覆盖紫光同创FPGA开发全流程,教程适用于小眼睛科技盘古系列、泰坦系列全开发套件。目前,小眼睛科技基于FPGA赛事配套紫光同
    发表于 02-19 15:44

    xilinx FPGA IOB约束使用以及注意事项

    采用了IOB约束,那么就可以保证从IO到达寄存器或者从寄存器到达IO之间的走线延迟最短,同时由于IO的位置是固定的,即存在于IO附近,所以每一次编译都不会造成输入或者输出的时序发生改变。 二、为什么要使用IOB约束 考虑一个场景
    的头像 发表于 01-16 11:02 1496次阅读
    xilinx <b class='flag-5'>FPGA</b> IOB<b class='flag-5'>约束</b>使用以及注意事项

    FPGA驱动AD芯片之实现与芯片通信

    概述: 利用FPGA实现AD芯片的时序,进一步实现与AD芯片数据的交互,主要熟悉FPGA时序图的实现,掌握时序图转换Verilog硬件描述
    的头像 发表于 12-17 15:27 1524次阅读
    <b class='flag-5'>FPGA</b>驱动AD芯片之实现与芯片通信