时序优化的常见

本期求职笔试题目来源大疆硬件逻辑岗,共2道题,涉及知识点包含:时序约束中异步时钟的设置、典型时序优化方法。

33、根据约束关系set_clock_groups -async -group {CLK1CLK3}{CLK2},下图哪些路径会进行时序检查( )(多选题)

A Path4 B Path2C Path3 D Path1 解析:本题目主要考察了时序约束中异步时钟的设置看到这一串英文大家不禁会联想到中讲过输入延迟约束,没错它们都是用Tcl命令所做的时序约束。而今天这道题目涉及到的是对异步时钟的约束,和set_false_path设置成伪路径的功能类似。我们要想明白题意就要明白set_clock_groups -async -group {CLK1CLK3}{CLK2}这句约束的意思,set_clock_groups是设置禁用识别的时钟组之间的时序分析命令;-async用于指定时钟之间的异步关系,让时序分析工具忽略异步时钟之间的路径;-group后面紧跟指定要忽略时钟之间路径的异步时钟的名字。因为图中CLK1、CLK2、CLK3三个时钟之间彼此都是异步的关系,所以这句话的意思也就很明确了,就是设置CLK1、CLK2、CLK3相互异步的三个时钟之间的路径不进行时序检查。那么我们很快就可以从图中得到答案,PATH2和PATH3路径是不同时钟所作用的两个寄存器,所以PATH2和PATH3路径不会进行时序检查;而PATH1和PATH4路径是同一时钟所作用的两个寄存器,所以PATH1和PATH4路径会进行时序检查,答案选择A和D

既然和set_false_path和set_clock_groups的功能类似,那我们就来看看它们各自的特点。set_false_path的优势是:灵活、针对性好、便于时序分析和调试。劣势是:①逐条约束会占用大量时间来调试和分析,效率低下。②时序例外的优先级比较复杂,多种时序例外约束共存的情况下,很容易产生意想不到的冲突,进一步增加调试时间,降低效率。③这么做极容易产生臃肿的XDC约束文件,而且时序例外的执行更耗内存,直接导致工具运行时间变长。而set_clock_groups的优势是:简单、快速、执行效率高。劣势是:会掩盖时序报告中所有的跨时钟域路径,容易误伤,不利于时序分析。所以我们不能盲目的只用其中的一种,要具体问题具体分析。set_clock_groups还可以用于解决重叠(单点多个)时钟的问题。重叠时钟是指多个时钟共享完全相同的时钟传输网络,例如两个时钟经过一个MUX选择后输出的时钟,在有多种运行模式的设计中很常见。

34、FPGA相对于ASIC,优势是灵活可编程,不足是可实现的最高频率有限。请介绍一下在FPGA开发中典型的时序优化方法。(问答题)解析:本题目主要考察了时序优化的方法该题目的第一句话完全就是科普,和问题没有什么关系。问题是在第二句话中表达的,我们要思考该从什么角度去找FPGA典型的时序优化方法。1)根据时序分析理论公式优化优化时序的目的是什么?其目的就是为了满足系统正常运行时所需要的建立、保持时间,最终得出两个关键的公式:Sslack(建立时间的余量)= [T_cycle –(Tco + Tdata)+ △T] – T_setup ≥ 0Hslack(保持时间的余量)= [(Tco + Tdata)–△T] – T_hold ≥ 0根据公式可以看出同一系统内的建立时间余量和保持时间余量是一对矛盾体,如果建立时间余量大了,保持时间余量必定会缩小,反之亦然。我们需要做的就是让建立保持时间余量和保持时间余量尽量保持平衡。如果建立时间余量较小或者不满足要求,我们就可以根据公式来分析满足建立时间的要求。我们可以在建立时间余量公式中增加时钟的周期T_cycle,也就是减小时钟T_cycle的频率,但是一般系统时钟在设计之初都是确定的,后期不能修改,所以这个方法不可取。我们可以在建立时间余量公式中减小Tco,但是Tco作为寄存器的固有属性往往都是固定好的,不能改变。我们可以在建立时间余量公式中减小Tdata,怎么减小Tdata呢?我们知道Tdata是寄存器之间路径所造成的延时,其中又包括布线延时和组合逻辑延时,所以我们要尽量减小布线延时和组合逻辑延时,如何降低布线延时和组合逻辑延时呢?(1)减小扇出Fanout,扇出指模块直接调用的下级模块的个数,如果这个数值过大的话,在FPGA直接表现为Net Delay较大,不利于时序收敛。减小扇出的方法有:①寄存器复制,寄存器复制是解决高扇出问题最常用的方法之一,通过复制几个相同的寄存器来分担由原先一个寄存器驱动所有模块的任务,继而达到减小扇出的目的。②Max_Fanout属性,在代码中可以设置信号属性,将对应信号的Max_Fanout属性设置成一个合理的值,当实际的设计中该信号的Fanout超过了这个值,综合器就会自动对该信号采用优化手段,常用的手段其实就是寄存器复制。但最好不要在综合设置中指定,过低的扇出限制会造成设计堵塞反而不利于时序收敛,最好的方法是根据设计中时序最差路径的扇出进行针对性的优化。③BUFG,通常BUFG是用于全局时钟的资源,可以解决信号因为高扇出产生的问题。但是其一般用于时钟或者复位之类扇出超级大的信号,此类信号涉及的逻辑遍布整个芯片,而BUFG可以从全局的角度优化布线。如果不是关键时序路径,而且高扇出网络直接连接到触发器,对扇出超过25K的Net插入BUFG。(2)减小逻辑级数Logic Level,一个Logic Level的延迟对应的是一个LUT和一个Net的延迟,对于不同的器件,不同频率的设计能容纳的Logic Level是不同的,否则会造成时序收敛困难。Logic Levell太大的处理方法就是重定时(Retiming),典型的重定时方法就是流水线,将过于冗长的组合逻辑增加寄存器进行打拍。对于时钟偏斜△T来说因为不确定正负,其对建立时间和保持时间的影响是相反的,所以我们希望|△T|尽可能的小,所以尽量不要用生成时钟,而采用全局时钟,这样才会有更小的|△T|。在实践中,我发现保持时间的问题往往是异步问题产生的。对于一个信号的跨时钟域问题,一般使用双寄存器法(对于慢采快的结绳法这里不讨论)。为了降低MTBF(Mean Time Between Failures,平均无障碍时间),这两个寄存器最好位于同一个Slice中。

2)通过代码风格优化,好的代码风格会更利于时序的优化。(2)时钟管理单元尽量放在顶层,有助于以共享逻辑从而提高性能降低功耗。(3)如果并不需要优先级,尽量将If语句转化为case语句。(4)尽量不要使用Don't Touch这类语句。如今Vivado综合工具已经很完善了,除非代码有问题或者手动复制寄存器,否则一般不会发生电路被综合掉的现象。使用这些语句会覆盖Vivado综合设置,导致电路没有得到充分的优化,给时序收敛造成困难。3)使用EDA开发工具的综合策略优化(1)Vivado综合实现本质是时序驱动的,因此再也没有ISE那种用随机种子综合实现满足时序收敛的工具。通过Vivado在布局布线方面提供了几种不同的策略(directive)组合可以产生上千种不同的布局布线结果.(2)使用Tcl脚本自定义布局布线过程,足以满足需求。Vivado可支持同时运行多个Implementation,为这种“设计时间换取性能”的方法提供了工具上的便利。(3)Implementation里Post-place Phys Opt Design和Post-route Phys Opt Design是没有使能的,工程后期使能这两个配置也能在一定程度上改善时序收敛

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 基础命令

目录 一、MySQL简介 1.MySQL 的主要特点包括 2.MySQL 的主要用途包括: 二、MySQL 基础命令 1. 基本操作 1.1 进入 1.2 选择数据库 1.3 修改密码 1.4 所有命令后面都要加 “;” 2. 创建 2.1 创建数据库 2.2 创建数据表 2.3 常见字段 3. 修改/更新 3.1…

PPT制作加速器:3款工具插件的演示文稿制作更高效

IvyhTools英豪插件 IvyhTools是一款功能强大的PPT插件,主要用于辅助用户进行各种PPT编辑和处理操作。该插件具备以下主要功能: 字体编辑:用户可以对PPT中的字体进行编辑和调整。 动图录制:支持录制动态图像,方便用户在…

Codeforces Round 970 (Div. 3) (个人题解)(未补完)

前言: 昨天晚上的比赛,可惜E题太笨了没想到如何解决,不过好在看到F过的多直接跳过去写F了,能过个5个也还不错了,而且一个罚时也没吃。之后的题我还是会再能补的时候补完的噢! 正文: 链接&…

PLUTO: 推动基于模仿学习的自动驾驶规划的极限

PLUTO: Pushing the Limit of Imitation Learning-based Planning for Autonomous Driving PLUTO: 推动基于模仿学习的自动驾驶规划的极限 https://arxiv.org/abs/2404.14327 Abstract We present PLUTO, a powerful framework that Pushes the Limit of imitation learn…

AJAX基础与进阶

一、express基本使用 1. 在最外层启动终端,添加文件 2. 创建 express 框架 // 1. 引入express const express require(express);// 2. 创建应用对象 const app express();// 3. 创建路由规则 //request 是对请求报文的封装 //response 是对响应报文的封装 app.g…

Java Excel转PDF(免费)

目前市面上 Excel 转 PDF 的组件较多: 收费:aspose、GcExcel、spire开源:jacob、itextpdf 其中收费的组件封装得比较好,代码简洁,转换的效果也很好,但收费也高得离谱: 为了成本考虑&#xff…

1、Django Admin学习模型

此专栏应用环境和模型基于此文 开发环境 系统:windows11 开发工具:vscode 开发语言:python 3.8 开发框架:django 3.2 数据库:mysql8.4.1 项目目录 settings 注册两个应用 INSTALLED_APPS [django.contrib.ad…

关于STC-ISP软件选项“下次下载用户程序时擦除用户EEPROM区”的质疑

1.以前,在用STC-ISP软件下载代码时,该选项一般都默认勾选!见图1;因没用到该功能无视; 2.近日,首次下载需写入一些用户核心数据,以后谁升级代码下载都不能查看和更改这些数据! 3.于…

eureka一

Eureka 什么是eureka eureka服务调用流程 springcloud技术栈应用 分布式理论 CAP CAP理想运行情况 CAP不理想运行情况 CAP取舍 BASE BASE原理 搭建单机注册中心 服务提供者 服务消费者 集群服务注册中心 eureka功能详解 核心功能演示 Eureka源码解析 lifecycle的start

[极客大挑战 2020]Greatphp1

知识点: 1. PHP原生类在CTF中的利用 2. <??> <> <?php echo?> 以及 <??> <> <?php ?> 的变形 3. 正则表达式的取反绕过 进入页面又是熟悉的php的代码审计. <?php error_reporting(0); class SYCLOVER {public $syc;public $l…

基于 R 语言的深度学习——简单回归案例

近年来深度学习在人工智能领域飞速发展&#xff0c;各行业的学者、研究人员纷纷涌入研究热潮。本文将从 R 语言角度来介绍深度学习并解决以下几个问题&#xff1a; 什么是深度学习&#xff1f; 相关深度学习包有哪些&#xff1f; 如何配置工作环境&#xff1f; 如何使用神经…

微服务--认识微服务

微服务架构的演变 1. 单体架构&#xff08;Monolithic&#xff09; 阶段描述&#xff1a;在单体应用时代&#xff0c;整个应用程序被设计为一个项目&#xff0c;并在一个进程内运行。这种架构方式开发简单&#xff0c;便于集中管理&#xff0c;但随着应用的复杂化&#xff0c…

【算法 动态规划 简单多状态 dp 问题】打家劫舍题型

打家劫舍题型 按摩师 (easy)解题思路代码 打家劫舍II &#xff08;medium&#xff09;解题思路代码 删除并获得点数&#xff08;medium&#xff09;解题思路代码 按摩师 (easy) 题目链接 该题是打家劫舍的变形 解题思路 状态表示 分析: 注意题目, 对于当天的预约, 可以接受…

C语言遇见的一些小问题

问题如下&#xff1a; 1&#xff1a;为什么这样的代码为报错 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <algorithm> #include <cstdio> #include<string> #include<stdlib.h> using namespace std; int main() {int i …

mysql5.7 TIMESTAMP NOT NULL DEFAULT ‘0000-00-00 00:00:00‘ 换版8版本 引发的问题

mysql5.7 TIMESTAMP NOT NULL DEFAULT 0000-00-00 00:00:00 换版引发的问题 问题背景sql_mode上机演示5.78.4 问题背景 在项目mysql版本由5.7 换版到8.4版本后&#xff0c;我们进行回归测试时&#xff0c;却发现一个积年代码报错了&#xff0c;是数据库插入报的错 xxx can not…

华为IS-IS实验及配置

AR1配置 #进入ISIS进程 isis 1 #配置设备类型为Level-1is-level level-1 #定义区域和System-ID等信息network-entity 49.0001.0010.0000.0001.00 #ISIS邻居命名is-name AR1 #接口配置IP和启用ISIS interface GigabitEthernet0/0/0ip address 10.1.12.1 255.255.255.0 isis ena…

数仓基础(六):离线与实时数仓区别和建设思路

文章目录 离线与实时数仓区别和建设思路 一、离线数仓与实时数仓区别 二、实时数仓建设思路 离线与实时数仓区别和建设思路 ​​​​​​​一、离线数仓与实时数仓区别 离线数据与实时数仓区别如下&#xff1a; 对比方面 离线数仓 实时数仓 架构选择 传统大数据架构 …

Ribbon负载均衡底层原理

springcloude服务实例与服务实例之间发送请求&#xff0c;首先根据服务名注册到nacos&#xff0c;然后发送请求&#xff0c;nacos可以根据服务名找到对应的服务实例。 SpringCloudRibbon的底层采用了一个拦截器&#xff0c;拦截了openfeign发出的请求&#xff0c;对地址做了修…

【C++】将myString类中能够实现的操作都实现一遍

myString.h #ifndef MYSTERAM_H #define MYSTERAM_H #include <iostream> #include<cstring> using namespace std; class myString { private:char *str; //字符串int size; //字符串容量char error[20] "error"; public://无参构造myString():siz…

深入解析FPGA在SOC设计中的核心作用

在集成系统SoC设计中&#xff0c;CPU核心的嵌入至关重要&#xff0c;以实现软硬件的有效交互。此过程中涉及到功能IP&#xff08;如图像处理、无线通信等&#xff09;的验证和整合&#xff0c;利用硬件描述语言(HDL)来实现可编程逻辑(FPGA)&#xff0c;并通过验证技术提高设计效…