tcl学习之路(四)(vivado设计分析)

news2024/11/13 10:21:41

1.FPGA芯片架构中的对象

  在打开elaborated/synthesied/implemented的情况下,可使用如下命令获取期望的SLICE。SLICE分为SLICEL和SLICEM,由LUT、FF、MUX、CARRY组成。

set all_slice [get_sites SLICE*]
set col_slice [get_sites SLICEX0Y*]
set all_sliceL [get_sites -filter "SITE_TYPE == SLICEL"]
set all_sliceM [get_sites -filter "SITE_TYPE == SLICEM"]
#资源的个数可用llength来查看
llength $all_slice

  BEL(Basic Element 基本要素 )是FPGA内部的基本单元,属于器件对象,也就是器件结构的一部分。换言之,即便是一个空设计,只要打开Device视图,也能看到BEL。具体地,BEL包括触发器、查找表、进位链、F7MUX、F8MUX和F9MUX(这里以UltraScale系列芯片为例,不难看出,这些基本单元都在SLICE内)。BEL还包括DSP内部的基本单元。使用get_bels可以获取bel资源。

get_bels -of [get_sites SLICE_X0Y0]
#这里=~表示匹配
get_bels -of [get_sites SLICE_X0Y0] -filter "TYPE =~ *6LUT || TYPE =~ *FF"

  每一个SLICE都是一个基本的site,除了SLICE还有DSP48、BLOCK RAM等site,一个或多个同类型的site可以组成一个tile。

get_tiles

  不同的tile按列排列构成了clock region。

get_clock_regions

  SLR(super logic region)由多个clock region构成。单die(芯片未封装前的晶粒)芯片只包含一个SLR,而多die芯片,也就是SSI器件,包含两个以上的SLR。

get_slrs

  对于获取的对象,可以通过highlight_objects使其高亮,也可以通过show_objects使其在单独的窗口中呈现,还可以通过mark_objects对其进行标记。在这些命令前面加get_,可以获取对象名称,加un可以取消命令结果。

2.网表中的对象

  在进行设计分析、设计调试或描述约束时,都要寻找RTL代码所描述的对象,比如寄存器、存储单元、计算单元,或某个时钟、某个引脚。某根网线、某个端口等。
  网表中最关键的五个要素为单元cell、时钟clock、引脚pin、网线net、端口part。可以使用如下命令获取

get_cells
get_clocks
get_pins
get_nets
get_ports
#current_instance可以设置顶层,如果后面不跟任何参数,那么就将设计顶层模块视为顶层
current_instance 

  使用-hier可以逐层查找目标对象。

set dut [get_cells -hier ip_*]
#可以新打开一个窗口看到你查找的返回结果
show_objects $dut -name dut
#还可以通过对象特定属性进行查找,比如NAME
set ip [get_cells -hier -filter "NAME =~ ip*" U0]

  对于特定属性,还有一个比较重要的是REF_NAME(引用名),下面介绍一下7系列FPGA的引用名

同步时钟使能异步复位D触发器  FDCE
同步时钟使能异步置位D触发器  FDPE
同步时钟使能同步复位D触发器  FDRE
同步时钟使能同步置位D触发器  FDSE
异步复位锁存器              LDCE
异步置位锁存器              LDPE
使用DSP48构成的计算单元     DSP48E1
使用Block RAM构成的36KbFIFO      FIFO36E1
使用Block RAM构成的36Kb存储单元   RAMB36E1
使用Block RAM构成的18KbFIFO      FIFO18E1
使用Block RAM构成的18Kb存储单元   RAMB18E1

  通常情况下,在找引脚或网线时,首先获取引脚或网线所隶属的单元,在通过-of来找到引脚或网线。

3.时钟分析

#生成时钟报告,可以看到时钟名称、时钟周期、占空比、时钟属性和时钟源
report_clocks
#生成时钟网络报告,可以查看哪个时钟遗漏了时钟周期约束,还可以检查到是否出现了BUFG级联的情形
report_clock_networks -name network_1
#生成时钟资源利用率报告
report_clock_utilization -name clkuti1
#精简版报告,关注点放在时钟树的源头上
report_clock_utilization -clock_roots_only -name clkuti1

  在7系列FPGA中,时钟资源包括全局时钟缓冲器(BUFGCTRL),区域时钟缓冲器(BUFH/BUFR/BUFMR/BUFIO)和时钟生成模块(MMCM/PLL)等。如图
       在这里插入图片描述

4.时序分析

  生成时序报告的方式有两种:一种是通过命令report_timing或report_timing_summary生成时序报告;另一种是先用get_timing_paths获取特定时序路径,再用report_timing生成这些路径的时序报告。下面给出一些选项的含义

-from         时序路径的起点,可以是端口、引脚、单元或时钟
-to           时序路径的终点,可以是端口、引脚、单元或时钟
-through      时序路径穿过的节点,可以是引脚、单元或网线
-delay_type   时序分析的延迟类型,min代表分析保持时间,max代表分析建立时间,min_max代表两者都分析
-hold         等同min
-setup        等同max
-max_paths    待分析的时序路径的最大个数(最小值为1)
-nworst       以同一点作为终点的最糟糕的时序路径个数(默认值为1)
-slack_lesser_than   只分析时序裕量小于指定值的路径
-slack_greater_than  只分析时序裕量大于指定值的路径
-group        分析指定组的时序路径,可通过命令get_path_groups或group_path获取
-of_objects   指定时序路径对象,由get_timing_paths获取

5.质量分析

#在综合后或布局布线后使用
report_qor_assessment

  使用后观察到QoR Assessment Score,该分数范围为1-5,分值越高表示时序越容易收敛。如果分数小于等于3,说明要改善时序了,就大概率不用进行后面的操作了。
          在这里插入图片描述
  第二部分要注意 Status,若是REVIEW,则说明会在很大程度上影响时序收敛,需要解决。
          在这里插入图片描述

#生成改善设计质量的建议报告
report_qor_suggesrions

  在布线后的.dcp中执行命令report_qor_suggestions可以得出基于机器学习的建议策略,同时要求原始的实现策略必须是Explore或Default。

6.资源利用率分析

#生成了资源利用分析
report_utilization -name util -file util.rpt
#可以保存到.xlsx文件中
report_utilization -name util -spreadsheet_file util_table.xlsx -spreadsheet_table "Hierarchy"

7.逻辑级数分析

  逻辑级数是指时序路径起点单元和终点单元之间的组合逻辑门的个数。通常认为一个查找表加一根网线的延迟为0.5ns。使时序收敛的方法有流水线和重定时。

#用于分析逻辑级数
report_design_analysis -logic_level_distribution -logic_level_dist_paths 100 -min_level 10 -max_level 100  -name logiclecela

8.复杂度与拥塞分析

report_design_analysis -complexity -name cplx

可以得出如下界面:
       在这里插入图片描述
  我们需要特别关注Rent、Average Fanout、Total Instance这三个参数。
  Rent反应了模块的互连度,该指数越高,互连越重。较重的互连意味着设计会消耗大量的全局布线资源,从而导致布线拥堵。

Rent范围
0~0.65  正常
0.65~0.85  如果total instances超过了15000,则要格外注意
>0.85      如果total instances超过了15000,布局布线会失败
Average Fanout范围
<4  正常
4~5 布局可能会出现拥塞。如果是SSI器件,并且Total instances超过了100000,则很难将实际放在1个SLR内或分布到两个SLR内
>5   布局布线可能会失败

  导致Rent指数过高的原因:较高的LUT6利用率(同时会导致扇出过高),以及Block RAM和DSP利用率。当Rent或Fout较高时,可以对相关模块使用OOC综合方式,以避免工具执行边界优化,从而降低LUT6的使用率。还可以使用模块化综合技术,采用模块化综合属性LUT_COMBINING,阻止LUT整合,降低LUT6的使用率。

#分析拥塞程度
report_design_analysis -congestion -name cong

  在报告中,需要格外关注Type和Level

type                  产生原因
全局拥塞(Global)        较高的LUT6利用率,过多的控制集,不合理的位置约束
长线拥塞(Long)          较高的BRAM或DSP利用率,过多的跨die网线
短线拥塞(Short)         较高的MUXF或进位链利用率
level                QoR影响
小于等于4                 影响不大
5                        在布局布线时会遇到一些困难
6                        会遇到很多困难,编译时间显著增加
7                        会失败

9.扇出分析

#-load_types可以显示负载类型
report_high_fanout_nets -load_types -name high
#-clock_regions可以显示负载在每个时钟区域的个数
report_high_fanout_nets -clock_regions -name high
#-fanout_greater_than和-fanout_lesser_than可以限定扇出值
report_high_fanout_nets -fanout_greater_than 1000 -fanout_lesser_than 2000 -name high
#可以使用-cells限定分析的单元,-max_nets可以限定分析网线的最大个数,-timing可以显示网线所在路径的时序信息
report_high_fanout_nets -cells cpuEngine -max_nets 4 -timing -name high
#假设网线reset_reg有18个引脚为数据信号,可以借助如下代码,找到这18个信号
set net [get_nets reset_reg]
set mypin [get_pins -of $net -filter "DIRECTION==IN" -leaf]
set target_pin [filter $mypin "REF_PIN_NAME != CLR && REF_PIN_NAME != R && REF_PIN_NAME != PRE && REF_PIN_NAME != S"]
show_objects $target_pin -name data_pin

10.UFDM分析

  全称"UltraFast Design Methodology"翻译为超快速设计方法。是Xilinx针对Vivado提出的一个设计方法学,涵盖了板级规划、代码风格、时序约束、时序收敛等方面的内容。

report_methodology -name ufdm_1

11.跨时钟域分析

report_clock_interaction -delay_type min_max -name timing_1
#分析跨时钟域路径在HDL方面的问题以及在约束层面的问题Clock Domain Crossings
report_cdc -name cdc1

12.约束分析

report_exceptions -name exceptions_1
#-coverage可以显示时序例外约束的覆盖率
report_exceptions -coverage -name exceptions_2
#-write_valid_exceptions生成设计中有效的时序例外约束 -write_merged_exceptions生成被合并的时序例外约束;都要与-file同时使用
report_exceptions -write_valid_exceptions -file ./valid_exceptions.rpt
report_exceptions -write_merged_exceptions -file ./valid_exceptions.rpt
#将有效的时序约束输出到指定的文件中,-exclude_physical可以排除物理约束
write_xdc -constraints VALID -exclude_physical ./valid_timing_constraiints.xdc

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

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

相关文章

Golang bitset 基本使用

安装&#xff1a; go get github.com/bits-and-blooms/bitset下面代码把fmtx换成fmt就行 //------------基本操作------------//构建一个64bit长度的bitsetb : bitset.New(64)//放入一个数b.Set(10)fmtx.Println("add-10&#xff1a;", b.DumpAsBits()) // 0000000…

HttpRunner搭建接口自动化测试项目

前言&#xff1a;前面写过一篇PytestAllure接口自动化测试框架搭建的博客&#xff0c;这篇博客学习另外一款优秀的开源的接口自动化测试框架&#xff1a;HttpRunner&#xff0c;本博客主要学习如何搭建基于HttpRunner的接口自动化测试项目 PytestAllure接口自动化测试框架搭建…

11款UML/SysML建模工具更新(2023.7)Papyrus、UModel……

DDD领域驱动设计批评文集 欢迎加入“软件方法建模师”群 《软件方法》各章合集 最近一段时间更新的工具有&#xff1a; 工具最新版本&#xff1a;drawio-desktop 21.6.5 更新时间&#xff1a;2023年7月22日 工具简介 开源绘图工具&#xff0c;用Electron编写&#xff0c;…

【office】world设置标题

这里写目录标题 一、整理样式库二、设置标题编号三、设置标题其它信息1.设置 标题 1a.设置字体b.设置边框c.设置段落 2.设置 标题 2a.设置字体b.设置边框 3.设置 标题 3a.设置字体b.设置边框 4.设置 标题 4a.设置字体 5.设置 标题 5a.设置字体 一、整理样式库 1.选择“开始” …

【腾讯云 Cloud Studio 实战训练营】提升开发效率与协作:探索腾讯云 Cloud Studio 的强大功能与优势

文章目录 一、前言二、认识腾讯云 Cloud Studio2.1 什么是云端开发环境2.2 CDE 的特点与优点2.2.1 提高效率&#xff0c;开发环境一键运行2.2.2 提高生产力&#xff0c;可以并行的工作2.2.3 开发更加规范2.2.4 提供监管&#xff0c;降低资本与资源 2.3 云端开发环境具备的四大要…

【算法|双指针系列No.2】leetcode1089. 复写零

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

部署模型并与 TVM 集成

本篇文章译自英文文档 Deploy Models and Integrate TVM tvm 0.14.dev0 documentation 更多 TVM 中文文档可访问 →Apache TVM 是一个端到端的深度学习编译框架&#xff0c;适用于 CPU、GPU 和各种机器学习加速芯片。 | Apache TVM 中文站 本节介绍如何将 TVM 部署到各种平台&…

MediaUni——面向未来的流媒体传输网络设计与实践

// “立足当下&#xff0c;着眼未来”&#xff0c;任何一位从业者都应该谨遵这样的格言。阿里云通过总结这么多年的流媒体传输服务&#xff0c;分析痛点、提出措施、改进技术、认真思考&#xff0c;带来了MediaUni这样一个面向未来的流媒体传输网络。LiveVideoStackCon2023上…

接口幂等性实现方式

优质博文&#xff1a;IT-BLOG-CN 幂等 操作的特点是一次和多次请求某一个资源对于资源本身应该具有同样的结果&#xff08;网络超时等问题除外&#xff09;。幂等函数或幂等方法是指可以使用相同参数重复执行&#xff0c;并能获得相同结果的函数。这些函数不会影响系统状态&am…

最小公倍数题解:湘大oj1075 辗转相除法

一、链接 求最小公倍数 二、题目 Description 有多个测试用例&#xff0c;每行两个正整数x,y&#xff0c;保证x*y不超过2^31-1。如果x与y都为0&#xff0c;则输入结束。 每行输出一个测试用例的结果&#xff0c;即x与y的最小公倍数。&#xff08;最后一行有回车&#xff09;…

软著是什么

因公司需要申请软著&#xff0c;提前将相关资料整理如下&#xff0c;方便查询。 一、是什么 作为一名软件开发者&#xff0c;了解软件著作权可以帮助我们保护创作的成果&#xff0c;确保其他人不会未经授权地使用我们的代码。如果你要在你的软件中使用其他人的代码&#xff0…

百度Apollo中轨迹的表示方式

本文只是对于初学者的一种直观普及&#xff0c;以及对于规划路径可视化的另外一种体会。对于做规划控制的工程师来说太简单。只是本人初学者&#xff0c;在学习控制模块时候对于模块输入参数有所迷惑。所以记录一下。 首先明确轨迹表达的方式&#xff0c;以及对于控制模块输入的…

【C# 基础精讲】数组的创建与操作

数组是C#编程中非常重要的数据结构&#xff0c;它是一种用于存储相同类型元素的集合。通过数组&#xff0c;我们可以方便地访问和处理多个相关数据&#xff0c;这在很多编程场景下都是非常有用的。本文将详细介绍C#数组的创建与操作&#xff0c;包括数组的声明、初始化、访问元…

.bit域名调研

.bit域名研究 问题&#xff1a; .bit域名和ENS域名的相同点&#xff1f;不同点&#xff1f;有什么关系&#xff1f; .bit的定义 .bit 是基于区块链的&#xff0c;开源的&#xff0c;跨链去中心化账户系统.bit 提供了以 .bit 为后缀的全局唯一的命名体系&#xff0c;可用于加密…

半导体器件||的学习

电子管的介绍&#xff1a; 到底什么是电子管&#xff08;真空管&#xff09;&#xff1f; - 知乎 芯片破壁者&#xff08;一&#xff09;&#xff1a;从电子管到晶体管“奇迹”寻踪 - 知乎 晶体管&#xff1a; 什么是晶体管&#xff1f;它有什么作用&#xff1f; - 知乎 改…

Fastjson 使用指南

文章目录 Fastjson 使用指南0 简要说明为什么要用JSON&#xff1f;用JSON的好处是什么&#xff1f;为什么要用JSON&#xff1f;JSON好处 1 常用数据类型的JSON格式值的范围 2 快速上手2.1 依赖2.2 实体类2.3 测试类 3 常见用法3.1 序列化操作核心操作对象转换为JSON串list转换J…

CAD练习——绘制房子平面图

首先还是需要设置图层、标注、文字等 XL&#xff1a;构造线 用构造线勾勒大致的轮廓&#xff1a; 使用多线命令&#xff1a;ML 绘制墙壁 可以看到有很多交叉点的位置 用多线编辑工具将交叉点处理 有一部分处理不了的&#xff0c;先讲多线分解&#xff0c;然后用修剪打理&…

一站式印度跨境电商平台开发--多用户购物商城搭建

搭建一个一站式印度跨境电商平台开发&#xff0c;需要考虑以下几个方面&#xff1a;平台设计&#xff0c;技术架构&#xff0c;多用户购物商城搭建。 一、平台设计&#xff1a; 1. 市场调研&#xff1a;了解印度电商市场的特点和需求&#xff0c;确定目标用户群体。 2. 平台功…

【Q-dir】常用设置分享

Q-dir是一个资源管理器&#xff0c;但有些宝藏设置在初始使用时没有展现&#xff0c;后面配合AHK设置快捷键启动更方便&#xff0c;快捷键推荐winq 点击这个小按钮可以展示导航窗格 此处是设置导航窗格&#xff0c;又名树状列表 点击空白出返回上一页 使用颜色过滤器&…

python几岁可以学零基础,python多大的孩子可以学

大家好&#xff0c;小编为大家解答多大的孩子可以学python的问题。很多人还不知道学python多大年龄可以学&#xff0c;现在让我们一起来看看吧&#xff01; python编程是现在很多孩子接触编程的好选择&#xff0c;它能够给孩子带来容易入门的效果。那么&#xff0c;python编程少…