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

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

3天内不再提示

时序约束怎么用?时序约束到底是要干嘛?

冬至子 来源:玩儿转FPGA 作者:胡建东 2023-06-28 15:10 次阅读

很多小伙伴开始学习时序约束的时候第一个疑惑就是标题,有的人可能会疑惑很久。不明白时序约束是什么作用,更不明白怎么用。

FPGA内部结构=LUT+触发器+走线+嵌入式模块(RAM,乘法器等)。下图大致描述了它的抽象结构。

图片

以上公式告诉我们:信号是通过走线和各个模块产生连接。然后信号通过走线必然有延迟,有人认为电信是光速走线延时应该很短,可以忽略(全局时钟线的延时在时序紧张的情况下是不可忽略的),然而走线延迟可能超过你的想像。

1.电信号在走线槽里面传播并不是光速,走线上有分布电感和地平面有分布电容,二者值越大,对电容充电时间越长,走线延迟越长,这写参数自然由工艺和封装来决定,和我们设计无关,但是却对我们的设计方法产生重大影响,传输模型如下:

图片

2.除了传输线模型的延时以外,走线本身会经过很多类似路由器的结构去改变走线方向,在资源紧张的情况下可能会走过多个路由,这也就是为什么FPGA内部走线会很绕的原因,经过多级路由的走线延时会大大增加,在时序报告里面也可以看到的走线延迟=传输线延迟+路由延迟。

3.如果设计里面组合逻辑很多那么信号就会经过多个LUT,这也会产生延迟,在时序报告里面可以看见组合逻辑延迟和逻辑级数这2个选项。

综合以上3点,FPGA内部延时不可忽略!并且常常达到ns级!。

图片

上图为实际生成的数字电路模型,从中看出

图片

根据上图公式,tnet和tlogic一旦增加,最小时钟周期就会增加,也就意味着系统可以跑的最高频率会下降。

那么编译器怎么知道哪个是你的时钟,你的主时钟需要跑多少MHZ呢?如果编译器设计高了,会编译时间增长甚至报错,低了会导致实际上板产生竞争冒险,从而导致错误。所以为了避免以上问题,我们需要高速编译器这个时钟到底要多快,还有,相位关系,占空比。这样编译器才能根据我们的需求去对比延时所算出来会不会竞争冒险。所有的时序约束都是要告诉编译器,我的时钟和数据要满足怎样的关系,然后交给编译器去计算最糟糕的情况下能不能满足条件,还差多少ns就会不满足条件。

所以,为了告诉编译器时钟参数就有了

create_clock -name clk -period 10 [get_ports sysclk],这句xdc命令告诉编译器,时钟clk,从sysclk(get ports 后面摄取的是顶层要分配引脚的物理引脚,get pins后面摄取的是生成的某个寄存器或者器件的引脚,get nets摄取的是里面生成的某根线)这个引脚输入,时钟周期是10ns,由于相位和占空比未声明,所以初相位为0,占空比为50%。如下图:

图片

如果想调节初相位90°和占空比25%:

create_clock -name devclk -period 10 -waveform {2.5 5} [get_ports sysclk]

这里-waveform {2.5 5}代表第一个跳变沿在第2.5ns处产生,第二个跳变沿在5ns处产生从而形成下图的时钟,这样就可以把所有的相位和占空比关系都描述清除。

图片

编译器会根据时钟sysclk的周期和相位,在整个sysclk时钟域,计算延迟后对比sysclk和对应寄存器的数据端口进行对比,看是否满会产生竞争冒险,不满足的地方会报告出来。

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

    关注

    41

    文章

    3590

    浏览量

    129459
  • 乘法器
    +关注

    关注

    8

    文章

    205

    浏览量

    37049
  • 触发器
    +关注

    关注

    14

    文章

    2000

    浏览量

    61142
  • LUT
    LUT
    +关注

    关注

    0

    文章

    49

    浏览量

    12505
  • FPGA系统
    +关注

    关注

    0

    文章

    10

    浏览量

    7032
收藏 人收藏

    评论

    相关推荐

    VIVADO时序约束及STA基础

    时序约束的目的就是告诉工具当前的时序状态,以让工具尽量优化时序并给出详细的分析报告。一般在行为仿真后、综合前即创建基本的时序
    的头像 发表于 03-11 14:39 9765次阅读

    FPGA的IO口时序约束分析

      在高速系统中FPGA时序约束不止包括内部时钟约束,还应包括完整的IO时序约束时序例外
    发表于 09-27 09:56 1744次阅读

    FPGA时序约束之衍生时钟约束和时钟分组约束

    在FPGA设计中,时序约束对于电路性能和可靠性非常重要。在上一篇的文章中,已经详细介绍了FPGA时序约束的主时钟约束
    发表于 06-12 17:29 2721次阅读

    FPGA I/O口时序约束讲解

    前面讲解了时序约束的理论知识FPGA时序约束理论篇,本章讲解时序约束实际使用。
    发表于 08-14 18:22 1631次阅读
    FPGA I/O口<b class='flag-5'>时序</b><b class='flag-5'>约束</b>讲解

    请教时序约束的方法

    我是一个FPGA初学者,关于时序约束一直不是很明白,时序约束有什么呢?我只会全局时钟的时序
    发表于 07-04 09:45

    时序约束时序分析 ppt教程

    时序约束时序分析 ppt教程 本章概要:时序约束时序分析基础常用
    发表于 05-17 16:08 0次下载

    时序约束用户指南

    时序约束用户指南包含以下章节: ?第一章“时序约束用户指南引言” ?第2章“时序约束的方法” ?
    发表于 11-02 10:20 0次下载

    FPGA时序约束方法

    FPGA时序约束方法很好地资料,两大主流的时序约束都讲了!
    发表于 12-14 14:21 19次下载

    FPGA中的时序约束设计

    一个好的FPGA设计一定是包含两个层面:良好的代码风格和合理的约束时序约束作为FPGA设计中不可或缺的一部分,已发挥着越来越重要的作用。毋庸置疑,时序
    发表于 11-17 07:54 2566次阅读
    FPGA中的<b class='flag-5'>时序</b><b class='flag-5'>约束</b>设计

    深入了解时序约束以及如何利用时序约束实现FPGA 设计的最优结果

    作为赛灵思用户论坛的定期访客(见 ),我注意到新用户往往对时序收敛以及如何使用时序约束来达到时序收敛感到困惑。为帮助 FPGA设计新手实现时序
    发表于 11-24 19:37 5481次阅读
    深入了解<b class='flag-5'>时序</b><b class='flag-5'>约束</b>以及如何利用<b class='flag-5'>时序</b><b class='flag-5'>约束</b>实现FPGA 设计的最优结果

    FPGA时序约束简介

    在简单电路中,当频率较低时,数字信号的边沿时间可以忽略时,无需考虑时序约束。但在复杂电路中,为了减少系统中各部分延时,使系统协同工作,提高运行频率,需要进行时序约束。通常当频率高于50
    的头像 发表于 03-30 13:42 1.5w次阅读
    FPGA<b class='flag-5'>时序</b><b class='flag-5'>约束</b>简介

    FPGA设计之时序约束

    上一篇《FPGA时序约束分享01_约束四大步骤》一文中,介绍了时序约束的四大步骤。
    发表于 03-18 10:29 1667次阅读
    FPGA设计之<b class='flag-5'>时序</b><b class='flag-5'>约束</b>

    如何在Vivado中添加时序约束

    前面几篇文章已经详细介绍了FPGA时序约束基础知识以及常用的时序约束命令,相信大家已经基本掌握了时序约束
    的头像 发表于 06-23 17:44 2385次阅读
    如何在Vivado中添加<b class='flag-5'>时序</b><b class='flag-5'>约束</b>

    浅谈时序设计和时序约束

      本文主要介绍了时序设计和时序约束
    的头像 发表于 07-04 14:43 1409次阅读

    时序约束连载02~时序例外

    本文继续讲解时序约束的第四大步骤——时序例外
    的头像 发表于 07-11 17:17 709次阅读
    <b class='flag-5'>时序</b><b class='flag-5'>约束</b>连载02~<b class='flag-5'>时序</b>例外