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

news2025/8/6 16:18:21

系列文章目录

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


文章目录

  • 系列文章目录
  • 前言
  • Quartus时序约束
    • 不进行时序约束的后果
    • 时序约束方法
      • TimeQuest Timing Analyzer 工具来对工程添加约束。
        • 创建网表
        • 读取SDC文件
        • 创建时钟(Create Clock)
        • 写入SDC文件
  • 时序约束语法补充
  • 参考文章


前言

最近由于不懂时序约束,在高速信号采集上面吃了很多亏,不知道系统工作异常的原因是什么。记录一下查到的资料,有些许自己的理解,可能有误。


Quartus时序约束

不进行时序约束的后果

在程序编译之后,会出现时序约束标红
在这里插入图片描述
如果不自己编写时序约束文件,就会出现系统进行默认分配,这里如果没有自己编写sdc时序分析文件,quartus会自动分析潜在的时钟,如下图,在clock中查看
在这里插入图片描述
可能我们的输入是50M的时钟,系统按照1000M时钟进行了约束,但是你的FPGA内部寄存器和连线导致的延时,它不能满足1000M的时钟,所以就会标红。一些简单的程序,系统按照1000M去优化是没有问题的,但是复杂的程序就会出错了
在这里插入图片描述
在TimeQusst Timing Analyzer下,slow 1200mv 85C model和slow 1200mv 0C Model以及Fast 1200mv 0C model里,quartus根据代码程序,按照刚才的clock会进行分析,Fmax表示当下条件下,该时钟的最大频率

  • Clocks:这一项是显示当前的设计中有哪些时钟信号

  • Slow 1200mV 85C Model:芯片内核供电电压 1200mV,工作温度85度情况下的慢慢速传输模型。

  • Slow 1200mV 0C Model:芯片内核供电电压 1200mV,工作温度0度情况下的慢速传输模型。

  • Fast 1200mV 0C Model:芯片内核供电电压 1200mV,工作温度0度情况下的快速传输模型。

时序约束方法

在上一篇文章已经简单介绍了一些时序约束的语法,现在介绍如何利用quaruts编写时序约束

  • 熟悉了可以直接自己编写SDC文件
  • 用 TimeQuest Timing Analyzer Wizard 软件按照向导的指引操作。
  • 可以使用 TimeQuest Timing Analyzer 工具用图形化界面添加约束。

TimeQuest Timing Analyzer 工具来对工程添加约束。

菜单栏依次点击:Tools->TimeQuest Timing Analyzer 可以打开,也可以直接点击工具栏里的 TimeQuest Timing Analyzer 图标
在这里插入图片描述

创建网表

约束的对象就是网表,网表就是 Quartus 软件经过编译,布局布线后得到的实际电路信息,该电路信息就是对应下载到芯片中后实际在芯片中呈现的电路。直接双击 Create Timing Netlist 选项就可以创建网表。
在这里插入图片描述

读取SDC文件

时序约束文件可以指导EDA软件(Quartus)进行布局布线,还可以指导时序分析软件(TimeQuest Timing Analyzer)对EDA软件编译得到的网表进行分析报告。
如果用户没有编写,就是使用默认那个1000M约束的默认文件。

创建时钟(Create Clock)

创建时钟约束,就是为当前网表模型指定一个明确的时钟信号。这样时序分析软件就能够基于该时钟参数,对网表中的各信号进行分析了。
在这里插入图片描述
在这里插入图片描述
在这个界面筛选时钟以及选择时钟本体
在这里插入图片描述

例如:
在这里插入图片描述
将代码中的 MISO信号重命名为dclkn进行约束,占空比为50%,周期是10ns。(上升沿和下降沿不填默认是50%占空比)

命令窗:
在这里插入图片描述
如果出现:
在这里插入图片描述
约束被忽略了,因为系统默认约束过了那么就不能创建了,只能更改
在这里插入图片描述
在这里插入图片描述
注意:clock name不能改,改了还是会被忽略

写入SDC文件

在这里插入图片描述
到这里就基本完成了,最后记得把SDC文件添加到工程里面就可以了

时序约束语法补充

上篇文章有一些简单的介绍语法,这次又学习了一些比较详细的,总共有13种约束命令。以下命令都可以在菜单的constraint里面找到,直接设置好参数让软件自动生成,当然也可以自己生成添加。(都是参考文章末尾的第二篇文章的,还有很多看不懂,慢慢加入东西吧)

  • Creat clock
    约束外部进入FPGA的时钟,其他IC产生的给FPGA的类时钟信号

  • Creat generated clock
    约束pLL(derive_pll_clocks)
    约束FPGA输出到外部的时钟
    时钟多路复用器(clock muxes)
    涟漪时钟(ripple clocks),FPGA内部寄存器输出的时钟
    在这里插入图片描述
    在这里插入图片描述

    phase:是偏移多少度
    offset:是偏移多少ns
    例子:create_generated_clock -name 起名字 -source [get_ports {原时钟}] [get_ports {生成的时钟}]

  • set_clock_latency
    对输入到FPGA的时钟及类时钟(其他芯片产生的时钟给FPGA)
    可以自己选择延迟类型在这里插入图片描述
    late指最大时钟延迟,early指最小时钟延迟(第二篇参考文章里面有详细解释,没太看懂)

  • Set_clock_uncertainty
    对时钟出现的抖动进行约束,是一个时钟到另一个时钟的约束,用 derive_clock_uncertainty约束命令不需要确定uncertainy的时间,
    在这里插入图片描述

  • Set_clock_groups
    把相关的时钟分成一个组,与其它不相关的时钟区分开。 timequest只对这组内的时钟域进行分析,组间的时钟路径将不会分析。

  • set_input_delay
    对外部IC输入到FPGA管脚的约束,这个约束命令中的延迟信息需要告诉timequest。
    在这里插入图片描述

在这里插入图片描述
外部IC到FPGA输入管脚Din[3:0]的最大延时是4ns,最小延时是2ns,外部IC时钟是ext1_clk。add delay选项用于说明有另外的外部寄存器连接到端口,通常用于对双倍速率接口的约束。

  • set_output_delay
    FPGA输出到IC的延迟,与输入延迟相似

  • set false path
    不要分析某个路径或某组路径

  • set_multicycle_path
    两个寄存器间的数据传输在一个周期内没法完成时,我们可以通过该约束命令来改变他的建立关系值和保持关系值让其满足时序要求。

  • set muximum delay和set minimum delay
    一般建议不要用

参考文章

一、FPGA时序分析工具(TimeQuest)

二、timequest静态时序分析学习笔记——命令约束

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

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

相关文章

八股总结(三)操作系统内存管理、进程线程、进程同步与通信、中断与异常、常用命令

layout: post title: 八股总结(三)操作系统内存管理、进程线程、进程同步与通信、中断与异常、常用命令 description: 八股总结(三)操作系统内存管理、进程线程、进程同步与通信、中断与异常、常用命令 tag: 八股总结 文章目录操作…

基础SQL语法及使用案例

通用SQL语法 SQL语句可以单行或多行书写,以分号结尾。SQL语句可以使用空格/缩进来增强语句的可读性。MySOL数据库的SQL语句不区分大小写,关键字建议使用大写。注释: 单行注释:--注释内容 或 #注释内容(MySQL特有) 多行注释&#…

英伟达驱动爆雷?CPU占用率过高怎么办?

又有一新驱动导致CPU占用率过高? 上周英伟达发布531.18显卡驱动,为大家带来了视频超分辨率技术,并为新发布的热门游戏《原子之心》提供支持。 但在安装新驱动后没过不久就有玩家反映,在游戏结束后会出现CPU占用率突然飙升到10%以…

YOLOv5源码逐行超详细注释与解读(2)——推理部分detect.py

前言 前面简单介绍了YOLOv5的项目目录结构(直通车:YOLOv5源码逐行超详细注释与解读(1)——项目目录结构解析),对项目整体有了大致了解。 今天要学习的是detect.py。通常这个文件是用来预测一张图片或者一…

TCL 拥抱云原生,实现 IT 成本治理优化

作者:行疾 TCL 工程师团队基于阿里云企业云原生 IT 成本治理方案沉淀了一套成熟的 IT 企业成本治理流程与系统,通过阿里云容器服务提供的开箱即用的成本洞察、资源智能画像等功能,进行业务成本拆分、闲置资源可视化发现,并制定弹性…

【开源库学习】从OkHttp到Retrofit(其二 Retrofit)

从OkHttp到Retrofit简单使用实现原理loadServiceMethodConverter简单使用 class RetrofitActivity : AppCompatActivity() {companion object {const val SERVER "https://www.xxx.com/"}var disposable:Disposable? null;override fun onCreate(savedInstanceSt…

Lesson 8.2 CART 分类树的建模流程与 sklearn 评估器参数详解

文章目录一、CART 决策树的分类流程1. CART 树的基本生长过程1.1 规则评估指标选取与设置1.2 决策树备选规则创建方法1.3 挑选最佳分类规则划分数据集1.4 决策树的生长过程2. CART 树的剪枝二、CART 分类树的 Scikit-Learn 快速实现方法与评估器参数详解1. CART 分类树的 sklea…

Linux线程概念

重新认识一下进程 在之前写过的与进程相关的博文中,都把进程看作是只有一个PCB的进程。如图: 而实际上,在Linux中,进程不止一个执行流,而是可能会有几个或很多个。同一个进程中,每一个执行流都指向同一个虚…

【C语言】3天速刷C语言(初识)

【声明】本篇博客只用于对与刚学习C语言的同学的一个初始了解,具体内容请继续关注本专栏后续内容。什么是C语言C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及…

模仿评论样式

主要用到了padding-left把左侧的空白给留出来,然后把头像定位到留出的空白位置。行内对齐样式,使用了display:inline-flex;align-items:center;图标本来要用字体比较方便,暂时用的从icon font下载的svg样式写的一塌糊涂,一点也没考…

说说转义字符 “\”

转义字符-escape character character 表示字符,包含两层含义, 1.字母 2.符号 转义: 改变含义 字符: 字母、符号 转义字符: 把 字母、符号 的含义改变了注意:这里有 2 个常常被忽视、忽略、轻视的转义规则&…

Java类加载器原理与实践

文章目录一、Java程序启动并运行的过程二、类加载器三、Java8内置的类加载器1. AppClassLoader2. ExtClassLoader3. BootStrap ClassLoader4. 3个类加载器之间的关系四、双亲委派模型五、关键类java.lang.ClassLoader1. loadClass(..)2. denfineClass(..)3. findClass(..)4. fi…

k8s client-go源码解析之informer 一

Informer(一) 注意:本文内容为学习笔记,内容为个人见解,不保证准确性,但欢迎大家讨论何指教。 本篇为先导篇, 介绍informer的入口工厂函数。 informer目录结构 (仅展示部分目录,省略的目录相似) clien…

项目实战典型案例27——对生产环境以及生产数据的敬畏之心

对生产环境以及生产数据的敬畏之心一:背景介绍总结升华一:背景介绍 本篇博客是对项目开发中出现的对生产环境以及生产数据的敬畏之心行的总结并进行的改进。目的是将经历转变为自己的经验。通过博客的方式分享给大家,大家一起共同进步和提高…

SpringCloud之 Gateway路由网关

文章目录Gateway 路由网关一、部署网关🍍①添加依赖🍍②设置配置文件🍍③创建启动类🍍④路由功能配置🍍⑤路由访问服务二、路由过滤器2.1 单个过滤器: 配置文件2.2 全局过滤器: 自定义类提示:以下是本篇文章…

【数据结构初阶】详解链表OJ题

目录一.删除链表中等于给定值的节点二.合并有序链表并返回三.链表的回文结构1.反转单链表2.返回非空链表的中间节点四.输出链表倒数第K个节点五.基于给定值x分割单链表六.返回两个链表的第一个中间节点一.删除链表中等于给定值的节点 我们先来看第一题(题目链接): 因为我们需…

王道《操作系统》学习(二)—— 进程管理(一)

2.1 进程的概念、组成、特征、组织 2.1.1 进程的概念 这里像QQ这个程序执行了多次,虽然名字一样,但是它们的PID不同。 2.1.2 进程的组成 (1)PCB (2)程序段 和 数据段 小例子:程序是如何执行的&…

Nacos实现配置中心

文章目录配置中心提供的基础功能Nacos实现配置中心1、在配置文件增加配置(application.yml)2、使用Value来引用配置使用配置中心,怎样的配置方式呢一、安装nacos二、启动服务发现1、引入依赖2、配置文件3、开启服务注册发现功能4、启动服务三…

quarkus 生产环境与k8s集成总结

quarkus 生产环境与k8s集成总结 大纲 基础准备quarkus2.13.7脚手架工程配置GraalVM-java11 安装配置配置maven3.8.7linux环境下云原生二进制文件打包环境搭建编译运行quarkus二进制文件quarkus二进制文件制作为docker镜像并运行使用k8s部署quarkus二进制文件 基础准备 生产…

手把手交叉编译mysql

1.下载mysql(注意下载boost版本,这样会少一步编译) 下载mysql的时候一定要看好交叉编译工具链的版本。因为mysql 8.0需要的工具链版本较高,所以有可能不支持 查看链接如下: MySQL :: MySQL 8.0 Reference Manual :: …