在ISE时代,很多工程师习惯使用SmartExplorer的方法实现时序收敛。首先,这种方法适用于时序接近收敛的情形;同时,这种方法其实是一种扫描策略的方法,无需工程师过多关注。因此,在很多案例中,这种方法就显得简单且高效,但其不利之处在于工程师们并没有真正找到导致时序违例的根本原因。
布线延迟过大除了拥塞导致之外,还可能是其他因素。下图显示了降低布线延迟的另一流程(因其他因素导致布线延迟过大的处理流程)。
(1)时序约束:主要用于规范设计的时序行为,表达设计者期望满足的时序条件,知道综合和布局布线阶段的优化算法等。
本文讨论FPGA的构建过程,由于FPGA的过程太多了,恐怕会有歧义,这个过程,不是开发过程,不是开发流程,而是实实在在的FPGA编译的过程,使用编译恐怕不是太合适,但是大家都叫习惯了,也知道FPGA的编译过程就是指的是FPGA实现的中间一系列过程,例如综合,实现以及最后生成比特流编程文件。
当前,随着PCB尺寸要求越来越小,器件密度要求越来越高,PCB设计的难度也就逐渐增大。如何在保证质量的同时缩短设计时间?这需要工程师们有过硬的技术知识,以及掌握一些设计技巧。
建立时间和保持时间是FPGA时序约束中两个最基本的概念,同样在芯片电路时序分析中也存在。
Vivado会优先对全局资源进行布线,比如时钟、复位、I/O和其他专用资源;接下来就是根据时序的紧张程度进行布线,优先布线时序紧张的路径。
什么是静态时序分析?静态时序分析就是Static Timing Analysis,简称 STA。它可以简单的定义为:设计者提出一些特定的时序要求(或者说是添加特定的时序约束),套用特定的时序模型,针对特定的电路进行分析。分析的最终结果当然是要求系统时序满足设计者提出的要求。
布局规划是为设计增加布局布线约束的过程。一个大型高速设计的布局规划是实现时序收敛的关键。好的布局规划可以大大提高设计性能,并确保设计结果的质量。差的布局规划具有相反的效果,使其无法满足时序约束,并导致设计结果与预期不符。
信号完整性(Signal Inte grity,SI)是指信号在信号线上的质量,即信号在电路中以正确的时序和电压作出响应的能力。如果电路中信号能够以要求的时序、持续时间和电压幅度到达接收器,则可确定该电路具有较好的信号完整性。反之,当信号不能正常响应时,就出现了信号完整性问题。
时序约束对项目有什么影响? • 实现工具不会试图发现能够获得最佳速度的布局和布线方式 – 相反,设计实现工具试图满足您设定的性能目标 • 性能目标通过时序约束来体现 – 时序约束提高设计性能的途径是将逻辑放得尽可能近,从而使用尽可能短的布线资源 – 请注意,当我们讨论约束编辑器时,我们在这儿指的是Xilinx Constraints Editor
大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。
IO约束,如位置和IO标准 引脚分配命令 Set_property PACKAGE_PIN <pin name> [get_ports <port>] 驱动能力设置 Set_property DRIVE <2 4 5 8 12 16 24> [get_ports <port>] 电气标准 Set_property IOSTANDARD <IO standard> [get_ports <port>] 引脚抖动 Set_property SLEW <SLOW|FAST> [get_ports <port>]
DFX(Dynamic Function eXchange)的前身是PR(部分可重配置,Partial Reconfiguration)。使用DFX这个名字更能准确描述其功能,即在线切换设计中某个模块的功能。我们把这个模块对应的FPGA物理区域称之为一个可重配置分区(RP,Reconfigurable Partition)。同一个RP下可动态切换的模块称之为可重配置模块(RM,Reconfigurable Module)。一个RP下可以有一个或多个RM。每个RP要通过手工布局(画Pblock)的方式指定其在FPGA中的具体位置和大小(位置约束+面积约束)。
该部分引用本公众号上一篇时序约束文章中的内容,在Quartus中采用逻辑锁定的办法来解决FPGA和外部接口的时序问题,也就是输入输出的寄存Rxd/Txd的寄存器到外部器件寄存器的时序问题。
所谓增量实现,更严格地讲是增量布局和增量布线。它是在设计改动较小的情形下参考原始设计的布局、布线结果,将其中未改动的模块、引脚和网线等直接复用,而对发生改变的部分重新布局、布线。这样做的好处是显而易见的,即节省运行时间,能提高再次布局、布线结果的可预测性,并有助于时序收敛。
如下图所示,设计中仅有一条路径出现保持时间违例,如果通过更换布线策略实现保持时间收敛,那么就需要重新布线,这样既耗时又不能百分之百确保保持时间违例被修复。此时我们可以尝试重新布线,而这种布线只针对违例路径。
在分析place_design生成的dcp时,就要开始关注保持时间违例,尤其是当WHS < -0.5ns时。这是因为过大的保持时间违例往往会导致布线时间增大,同时,在布线阶段,工具未必能修复此类违例。
近年来,随着人工智能技术开始广泛应用,大规模和超大规模逻辑复杂的人工智能(Artificial Intelligence)芯片设计需求日渐增加,后端物理实现在布局布线方面的挑战也随之而来。由于复杂的数据交互给传统的后端宏单元布局规划工作带来很大的挑战。在宏单元的摆放,绕线阻塞的评估和低功耗的实现等方面的难度越来越大,需要增加迭代次数来寻求最优方案,从而需要较长的设计周期。为了满足市场应用的需求,如何提高设计效率就成为AI芯片设计的一个重要课题。
1.翻译过程 在翻译过程中,设计文件和约束文件将被合并生成NGD(原始类型数据库)输出文件和BLD文件。 1) Translation Report:用以显示翻译步骤的报告 2) Floorplan Design:用以启动Xilinx布局管理器(Floorplanner)进行手动布局,提高布局器效率 3) Generate Post-Translate Simulation Model:用以产生翻译步骤后仿真模型。由于该仿真模型不包括实际布线延时,所以有时省略此仿真步骤 2.映射过程 在映射过程中,由转
注:零基础学会FPGA时序约束。本期推送配套相关独家教学视频,关注公众号,后台回复“时序分析培训”或留下您的邮箱,即可获取视频链接。视频内容是由团队郑圆圆同学讲解,欢迎批评指正。以下是节选的视频片段。
ug1292第一页的主题是初始设计检查。这一步是针对综合后或者opt_design阶段生成的dcp。尽管在Vivado下,从功能仿真到综合、布局布线、直至生成.bit文件是相对自动化的流程,但是解决时序违例仍然是一个复杂且耗时的过程。仅仅靠log信息或者布线后的时序报告往往很难定位,这是因为实现过程中的每一步(opt_design逻辑优化,place_design布局, phys_opt_design物理优化, route_design布线)都会做一些优化,这些优化可能会导致关键路径被掩盖,例如,有时发现设计中逻辑级数(Logic Level)较高的路径时序收敛了,反倒是逻辑级数较低甚至为0的路径出现时序违例。因此,采取按部就班的策略,检查每一步的结果,及时且尽早发现设计中的问题是很有必要的。
在同步电路中,时钟信号连接所有的寄存器和锁存器,是整个电路工作的基本保障。然而从时钟的根节点到每个寄存器时钟端的延时,由于走的路径不相同,到达的时间也不相同
在时序报告中,会显示出clock path skew,如果时钟偏移超过0.5ns,就需要额外关注了。
在DFX设计中,我们要手工布局(floorplan)完成面积和位置约束;在非DFX设计中,有时为了实现时序收敛,我们也会用手工布局的方法,这都涉及到画Pblock。Xilinx建议尽可能使Pblock为矩形。具体是什么原因呢?在此问题之前,我们解释Pblock的一个属性CONTAIN_ROUTING。
,今天写的这个其实很早我就想记录下了,以前学数电的时候好像就有接触到相关的一些概念,但是后来学FPGA以后没太注意,感觉没什么关系,直到多次遇到梗以后才想着对这些概念重新了解下,特别是上几个月在求职的时候发现一些公司在招聘要求上写了需要对FPGA的架构要熟悉,那时候我还对架构有点懵逼,差点就不想玩了,然后耐着性子重新去找资料看了下,原来这些已经有过接触,这个要求上的架构指的就是FPGA的结构
我们还可以采用手工布局的方式,这对于时序违例路径集中在某一个模块或某一个层次内的情形较为适用。使用此方法时需要注意Pblock的大小。Pblock不能太小,否则会增加布局布线的压力;Pblock也不能太大,否则会浪费资源。实际上,Vivado针对Pblock的资源利用率也提供了指导值,该指导值跟整个芯片的资源利用率指导值一致,可通过命令report_failfast查看。Pblock的形状也是一个重要的因素。通常建议为标准的矩形。不规则的形状如在矩形框中挖掉一个小的矩形形成“回”字形状会严重危害时序性能且导致编译时间增长。Pblock的位置也是一个重要因素。可以先让工具自动布局,在此基础上观察关键模块的分布情况,然后参考此位置确定Pblock的位置。可以看到,使用Pblock要求工程师有一定的工程经验,需要考虑的因素也较多。如果Pblock的位置不合理,可能会出现顾此失彼的情形(Pblock内的模块时序改善了,而其他模块的时序又恶化了)。Pblock的另一弊端是缺乏灵活性。当芯片型号发生改变时很有可能重新确定Pblock的大小或位置。
像上面这个图中,由于在约束中忘记指定mdc和mdio的电平,再经过了长时间的综合和实现后,最后的Generate Bitstream报错了。
NVIDIA于2020年在IEEE Micro上刊出了一篇题为 “Accelerating Chip Design with Machine Learning”的文章。该文章总结了NV在AI for EDA领域做的研究工作,包括设计空间探索、功耗分析、可布线性预测、模拟芯片设计等,并提出了AI 辅助芯片设计的一些愿景。
在数字实现过程中,如果把DFT 合到综合这一步,那只有综合跟布局布线是优化过程,其他步骤都是『验证』过程。所以只有综合跟布局布线会做逻辑更改,不论是综合还是布局布线都可以细分成多个步骤,在每一个细分步骤中都有逻辑的增减,对于每一步加入的cell 都会有对应的命名规则,这些命名规则对于PPA debug 很有用,可以根据这些命名规则得知相应的cell 是在哪一步加入的,依图索骥就可以到对应的步骤里去看,是否可以通过调整变量设置来约束工具行为以得到想要的结果。
概要: 本章旨在说明如何生成电路原理图、把设计信息更新到PCB文件中以及在PCB中布线和生成器件输出文件。并且介绍了工程和集成库的概念以及提供了3D PCB开发环境的简要说明。 欢迎使用Altium Designer,这是一个完善的适应电子产品发展的开发软件。本章将以"非稳态多谐振荡器"为例,介绍如何创建一个PCB工程。
很多新生代的FPGA工程师都没使用过使用原理图输入进行FPGA设计,没有经历过那些“画原理图和连线”的工作,这得益于HDL(Hardware Description Language) 硬件描述语言和语言综合工具及其它EDA相关工具的推广,使广大的工程师的工作重心从底层连线上转移到功能实现上。
FPGA由6部分组成,分别为可编程输入/输出单元、基本可编程逻辑单元、嵌入式块RAM、丰富的布线资源、底层嵌入功能单元和内嵌专用硬核等。 每个单元简介如下: 1.可编程输入/输出单元(I/O单元) 目前大多数FPGA的I/O单元被设计为可编程模式,即通过软件的灵活配置,可适应不同的电器标准与I/O物理特性;可以调整匹配阻抗特性,上下拉电阻;可以调整输出驱动电流的大小等。 2.基本可编程逻辑单元 FPGA的基本可编程逻辑单元是由查找表(LUT)和寄存器(Reg
从字面意思来看,所谓过约束是指约束过紧了。这个“过”体现在setup requirement变小了,对于单周期路径,这个值通常与时钟周期一致,但在过约束情况下,等效于这个值变小了,也就是时钟频率变大了。
1. 使用Relative Propagation Delay约束差分线TX+_GP0和TX-_GP0
无论在设计的哪个阶段,RTL Analysis、Synthesis还是Implementation,打开Design Run的结果,都可以看到Device视图。如果没有显示Device视图,可在Vivado菜单下找到Window,点击Device即可显示出来。那么在Device视图下我们能看到什么呢?
1.建立保持时间 2.四种时序路径 第一类时序路径:从设备A的时钟到FPGA的第一级寄存器的数据输入端口 第二类时序路径:两个同步原件之间的路径,比如rega时钟端口到regb的数据端口 第三类
这整个流程称为RTL2GDSII,利用GDSII来生产芯片的过程称作流片(Tapeout),以上是一个Fabless公司的简易设计流程,最后将GDSII送至Foundry生产芯片。
目前主流的FPGA仍是基于查找表技术的,已经远远超出了先前版本的基本性能,并且整合了常用功能(如RAM、时钟管理和DSP)的硬核(ASIC型)模块。如图1-1所示(注:图1-1只是一个示意图,实际上每一个系列的FPGA都有其相应的内部结构),FPGA芯片主要由6部分完成,分别为:可编程输入输出单元、基本可编程逻辑单元、完整的时钟管理、嵌入块式RAM、丰富的布线资源、内嵌的底层功能单元和内嵌专用硬件模块。
时序约束的目的本质上是通过时序约束对Vivado的布局和布线过程进行干预,也就通过Vivado工具重新规划设计中所有功能单元的位置,以及布局的策略。 时序约束策略1 Net_delay比较大的情况下
应用场景:如何利用Tcl 在已完成布局布线的设计上对网表或是布局布线进行局部修改,从而在最短时间内,以最小的代价完成个别的设计改动需求。 什么是ECO? ECO 指的是Engineering Chan
拥塞是一个复杂的问题,导致拥塞的因素也很多。在分析拥塞问题时,首先要生成设计拥塞报告。生成方法:
二、设计文件输入 Flow Navigator–Project Manager–add sources或Sources窗口的
对于设计者来说,当然希望我们设计的电路的工作频率(在这里如无特别说明,工作频率指FPGA片内的工作频率)尽量高。我们也经常听说用资源换速度,用流水的方式可以提高工作频率,这确实是一个很重要的方法,今天我想进一步去分析该如何提高电路的工作频率。
同步电路的速度是指同步系统时钟的速度,同步时钟愈快,电路处理数据的时间间隔越短,电路在单位时间内处理的数据量就愈大。假设Tco是触发器的输入数据被时钟打入到触发器到数据到达触发器输出端的延时时间(Tco=Tsetpup+Thold);Tdelay是组合逻辑的延时;Tsetup是D触发器的建立时间。假设数据已被时钟打入D触发器,那么数据到达第一个触发器的Q输出端需要的延时时间是Tco,经过组合逻辑的延时时间为Tdelay,然后到达第二个触发器的D端,要希望时钟能在第二个触发器再次被稳定地打入触发器,则时钟的延迟必须大于Tco+Tdelay+Tsetup,也就是说最小的时钟周期Tmin =Tco+Tdelay+Tsetup,即最快的时钟频率Fmax =1/Tmin。FPGA开发软件也是通过这种方法来计算系统最高运行速度Fmax。因为Tco和Tsetup是由具体的器件工艺决定的,故设计电路时只能改变组合逻辑的延迟时间Tdelay,所以说缩短触发器间组合逻辑的延时时间是提高同步电路速度的关键所在。由于一般同步电路都大于一级锁存,而要使电路稳定工作,时钟周期必须满足最大延时要求。故只有缩短最长延时路径,才能提高电路的工作频率。可以将较大的组合逻辑分解为较小的N块,通过适当的方法平均分配组合逻辑,然后在中间插入触发器,并和原触发器使用相同的时钟,就可以避免在两个触发器之间出现过大的延时,消除速度瓶颈,这样可以提高电路的工作频率。这就是所谓"流水线"技术的基本设计思想,即原设计速度受限部分用一个时钟周期实现,采用流水线技术插入触发器后,可用N个时钟周期实现,因此系统的工作速度可以加快,吞吐量加大。注意,流水线设计会在原数据通路上加入延时,另外硬件面积也会稍有增加。
请说明 IC 前端整合(RTL To Netlist)所包含的流程,并简要说明一下 Synthesis 的主要任务,以及 Synthesis 的输入和输出。
前端设计是把源代码综合为对应的门级网表的过程,而后端设计则是把门级网表布局布线到芯片上最终实现的过程。 ISE 中设计实现的每一步都是相对独立的过程,数据模型各不相同,用户需要维护不同的输入文件,例如
有两种代码风格可用来描述移位寄存器。第一种风格如图1所示,第二种风格如图2所示。相比而言,第一种风格易于参数化,且将移位深度设置为参数可实现设计复用。同时,这种风格还可方便地使用综合属性SRL_STYLE,从而达到控制综合结果的目的。第二种风格是无法使用SRL_STYLE的。SRL_STYLE的具体使用方法可参考这里Vivado综合属性:SRL_STYLE。
前言:本文章为FPGA问答系列,我们会定期整理FPGA交流群(包括其他FPGA博主的群)里面有价值的问题,并汇总成文章,如果问题多的话就每周整理一期,如果问题少就每两周整理一期,一方面是希望能帮到不经常看群消息的小伙伴,另一方面也算是我们的技术积累。
领取专属 10元无门槛券
手把手带您无忧上云