https://www.cnblogs.com/limanjihe/p/9796998.html

用FPGA对ASIC进行原型验证的过程

https://max.book118.com/html/2018/0521/167709843.shtm

鉴于芯片设计的复杂度提升, 成功设计一个芯片所牵扯的步骤与过程也愈加复杂,所需花费的资金也成倍增加,一个典型的芯片开发项目的周期和花销如下所示

可以见到在芯片制造出来之前,很多精力会花费在RTL代码验证工作上,另外软件的相关开发工作,也会在得到芯片前开始,这2方面都需要借助FPGA原形来模拟芯片的行为,帮助硬件开发和软件开发者,共同提升工作效率。

FPGA原型在数字芯片设计中,基本是必不可少的,原因非常明显,相比用仿真器,或者加速器等来跑仿真,FPGA的运行速度,更接近真实芯片,可以配合软件开发者来进行底层软件的开发。当然FPGA原型作为芯片的替身,也是有诸多限制的,比如规模限制,速度限制,功耗限制,结构限制等,在使用FPGA原型作为芯片的替代时,需要进行相应的修改,才能完成相应功能,甚至有些功能最终无法覆盖。

如果对FPGA中可以映射为ASIC的资源做逐一对比,我们可以得到这样的表格。

以上表格看出,除了普通的RTL逻辑以及基本端口,其他的类似存储时钟DSP等,最好都是做手动修改进行映射,把ASIC设计转换为FPGA比较靠谱。

要把一块ASIC做出FPGA的原型,需要大致一下步骤,

1 FPGA选型

2 做板或者购买原型板。

3 将ASIC设计转换装入FPGA

4 调试启动FPGA原型

5 载入软件协同运行

6 软硬件系统验证

下文就按照这些步骤逐一讨论:

第一个就是FPGA的选型问题,在选型前,当然需要对ASIC的设计进行大致的了解,包括以下各方面:

选型问题最关心的几个维度:

1 容量 其中包括纯逻辑容量,存储容量,dsp单元容量这些

2 内置IP 包括时钟,存储控制,cpu等的硬核

3 接口 普通接口与专用高速接口

4 速度 资源占用率在50%左右时的速度,一般被用来评估原型

其中纯逻辑容量,也就是ASIC中组合电路与触发器的容量,是可以直接与FPGA中的资源换算的。

比如上图xilinx V7 2000T中有2.4M FF,大致对应ASIC的2输入与非门10M gates,如果使用率按照50%算,大概放置5M逻辑门没问题。

内置的存储器,可以实现21M的单双端口ram,rom,fifo等,如果ASIC中使用的存储稍微多一点,也可以用lut实现部分的存储,替代block ram。

如果使用较多乘加运算,也可以映射fpga中的dsp器件实现,具体各种型号的FPGA包含多少器件,可以参考xilinx文档。

对于内置ip,最先要考虑的,就是时钟模块MMCM,一般FPGA会有几个到几十个时钟模块,例如下表2000T中包含24个CMTs,也就是24个PLL和MMCM,每组PLL和MMCM可以对一个时钟域的时钟进行分频倍频。一般ASIC会包含多个时钟域,每个时钟域至少需要一个CMTs对时钟进行操作,可以据此选择使用哪个FPGA器件。

如要选择带有ARM硬核的FPGA来模拟ASIC中的ARM核,则需要选择zynq系列。系统中自研的逻辑,则通过AXI挂入总线中,当然这样未必能使FPGA与ASIC中的系统完全一致,但是作为一个圆形,也是足够的,以下是部分带有ARM核的FPGA的容量以及相应IP情况

对于接口的限制,一般FPGA的普通接口数量够大,不会成为瓶颈,主要在于ASIC所需的特定接口,在FPGA中是否能够满足,很多时候这些特定接口需要外接phy才能完成相应功能。

影响FPGA最终运行速度的因素很多,包括代码风格,具体设计,资源占用率,FPGA型号等,所以这需要在RTL代码基本框架完成后,通过工具综合才能得到一个大致数值,所以作为ASIC原型,尽量选择速度够快的FPGA。

通过以上限定条件,基本可以选出使用哪种FPGA型号,但是可能ASIC资源占用太多,任何一种都装不下,这就有2种解决方式了。一种是分块分别验证,当然这样风险极高,且没法直接验证最终系统。

另外就是使用多片FPGA得到原型,这就要涉及不同FPGA之中功能划分的问题,这个是比较麻烦且有难度的事情,对FPGA电路设计,以及ASIC到FPGA的代码转换,都有挺多新问题。

第2步就是制版,这需要考量的方面也是相当多,比如信号完整性,电源问题,时钟问题,可扩展性等,本人对此没有直接经验,也就无从展开。当然对于需要多个FPGA的验证板,一般实力的团队,未必能搞定,所以选择花钱买平安,直接选用类似HAPS这样的验证系统,可能更靠谱。

第3步就是ASIC的设计装入FPGA。这需要对原本面向ASIC的代码,进行修改。

对于一般的纯RTL逻辑,在ASIC中与FPGA中都可以综合出可用结果,但是以下表中的器件,需要修改

芯片中的pad,一般是fab厂给出的硬核,具有输入输出,驱动上下拉控制等。在转换成FPGA时,一般会在例化中直接用assign替代,并.XDC或者.v中指定上下拉等

如果有ASIC门级网表,可以把底层ASIC实例器件用verilog行为描述替换,在FPGA综合中则可以对应实现。其他的简单cell例化,也可以这样转换一下。

对于存储器,一般可以在FPGA中找到与ASIC功能一致的SRAM,ROM ,可以直接把FPGA MEM 外包一层改变端口名字,替代ASIC MEM。小的嵌入flash,则可以把FPGA的SRAM包一层逻辑来模仿。

其他的硬核IP, 可能需要在FPGA中寻找功能一致的,并相应修改接口,与ASIC代码中其他部分有效连接。

对于BIST,最直接的办法是去除,一般不会影响实际功能。

对于各种门控时钟,倍频分频等,一般需要针对FPGA做手动修改,使用DCM完成与芯片中时钟一致的行为。

以下就一些修改中会出现的具体问题,详细说明。

首先我们拿到的ASIC设计的结构,基本如下图所示,最外一圈是各种pad ring,里边先是芯片的各种辅助功能,包括 clk, rst, power, test,debug等。然后是与芯片实际功能相关的部分,可能包括部分模拟电路,数字电路包括cpu,mem 总线,各种逻辑控制等。我们需要明确用FPGA来原形验证的,主要是数字电路中的那些核心功能,芯片核心外部的那些辅助逻辑,很多是需要修改的,也是无法得到验证的。这里的pad一般直接在FPGA中直接去例化一个包含几个assign语句的 FPGA PAD 等效实例,clk rst 需要根据具体上电顺序,时钟资源做调整,一般会对rst功能进行简化,做成一个全局复位,clk中的分频与关断功能会放在CMT中实现。power控制,一般在FPGA中直接忽略,因为用FPGA几乎无法模拟各种UPF指定的行为。debug test可以根据实际情况保留或者去除,但是即使保持,一般也不会真的去用。核心功能中需要更改的,一般就是各种内部存储器了。

时钟门控 clock gating 一般在ASIC中广泛使用,一般会在clk模块中例化成由latch与门组成的门控单元,对某个模块进行时钟控制。这些门控单元,如果直接在FPGA中例化为相同逻辑的latch与门,逻辑功能是没有问题的。但是这时与门出来的受控时钟,则不能再FPGA的专用时钟网络中走线,而是走普通的信号网络,这样FPGA能达到的频率很差。为了纠正这样情况,可以把对寄存器的门控,放在寄存器端,也就是选用FPGA中行如FDCE这样带门控的寄存器。这个过程可以手动完成,但是比较麻烦,一般来说专门的FPGA综合工具能做这种自动转换。比如 vivado中使用 (* gated_clock = "true" *) input clk_a; 标定受控时钟,并在脚本加入 -gated_clock_conversion on 综合选项。

当然如果需要的可控时钟不太多,也就是少于FPGA中BUFGCE的数量,则可以直接把门控信号加在 BUFGCE的控制端,输出就是走时钟网络的门控信号了。如果FPGA器件中有 BUFHCE,则可以对更多层级的时钟进行门控,也就可以得到更多的受控时钟。

有关FPGA门控时钟的更详细解释,可以参照 https://forums.xilinx.com/t5/General-Technical-Discussion/Reg-Clock-gati...

ASIC转变到FPGA使用的综合约束,在SDC与XDC基本相容,例如

这些都可以直接使用,当然很多情况下FPGA还是不可能跑到ASIC速度,必须降速运行。另外还需要添加FPGA中对管脚位置,类型,驱动强度等的约束,以及一些综合选项

以上即为对ASIC代码更改的主要部分,在下到FPGA板调试前,最好对更改的FPGA代码进行仿真,确认功能正常,减少上板调试的工作量。

第4步为启动调试FPGA原型。

在把修改后的FPGA代码装入调试前,先需要保证FPGA板本身是正常可用的,这时如果是外购的开发板或者类似haps的验证系统,则会省去一些麻烦。

如果是头次开发的FPGA板,则需要先装入一个最简单的FPGA镜像文件,测试一下FPGA的电源供电,下载连接是否可用,然后通过几个用于测试的FPGA文件,测试下板上与FPGA连接的其他器件是否正常工作。一般头次设计的板子,多少会有各种问题,比如电源供电问题,管脚连接的差分信号匹配问题,阻抗匹配,电流驱动,信号质量等问题 如果板子通过了以上测试,则可以认为电路硬件设计没有问题,可以装入FPGA原形文件进行测试了。

装入修改了的FPGA原型模拟ASIC,一般不会一次成功,一般出现的问题可以分为以下三类:

1 RTL逻辑错误,包括原本ASIC既有的和修改过程引入的错误。

2 接口错误 与外部器件的电信号连接错误,包括电压不匹配,驱动电流不一致等。

3 软件错误 MCU运行的软件没有正确配置相关功能导致,这种一般在仿真中难以发现,因为仿真很少运行真正的软件系统。

对fpga原型的板上调试,可以归纳为以下步骤。

当载入实际运行的软件后,通过FPGA原型,就可以如同在实际芯片中一样,对软件进行测试修改,同时完成系统级的验证工作了。也就进入了步骤5.6,这与普通的嵌入式软件开发大致相同。

对于通过FPGA进行原型验证,有以下设计流程上的建议,值得参考

以上参考了xilinx网站内容,以及FPMM等书。

https://developer.aliyun.com/article/740415

高性能SoC FPGA原型验证系列——综述

温柔的养猫人 2019-12-24 530浏览量

简介: 本系列博文将结合自己在FPGA原型验证方面的工作经验,先从总体上探讨FPGA原型验证的优势和挑战,然后介绍市面常见的FPGA原型平台并分析各自的优缺点,随后重点介绍平头哥高性能SoC使用的FPGA原型平台,后续还会就FPGA原型中的关键技术进一步展开讨论,并给出自己的一些经验和技巧总结,希望通过系列博文能带给读者关于FPGA原型验证一个系统的认识。当然,我更希望参与FPGA原型平台工作的同学能够一起切磋技艺,为平台建设出谋划策,快速迭代我们的平台,让我们一起打造更加Smart的FPGA原型平台.

FPGA算是芯片产业的一颗明珠,广泛用于通信、计算、控制等领域。由于其内部电路可重构的特点,几乎可以完全映射芯片的逻辑设计,被当作一种性价比优越的芯片验证基础设施,不管是芯片设计、硬件设计还是驱动开发的同学多多少少都参与过FPGA原型验证工作,对FPGA应该都不陌生。
本系列博文将结合自己在FPGA原型验证方面的工作经验,先从总体上探讨FPGA原型验证的优势和挑战,然后介绍市面常见的FPGA原型平台并分析各自的优缺点,随后重点介绍平头哥高性能SoC使用的FPGA原型平台,后续还会就FPGA原型中的关键技术进一步展开讨论,并给出自己的一些经验和技巧总结,希望通过系列博文能带给读者关于FPGA原型验证一个系统的认识。当然,我更希望参与FPGA原型平台工作的同学能够一起切磋技艺,为平台建设出谋划策,快速迭代我们的平台,让我们一起打造更加Smart的FPGA原型平台!

什么是FPGA原型?

FPGA原型验证是一种成熟芯片验证技术,通过将RTL移植到现场可编程门阵列(FPGA)来验证ASIC的功能,并在芯片的基本功能验证通过后就可以开始驱动的开发,一直到芯片Tape Out并回片后都可以进行驱动和应用的开发,当芯片回片后,可以直接基于FPGA版本的驱动驱动和应用程序,进行简单的适配,就可以应用到SoC芯片上,将SoC芯片Time-to-Market的时间控制的很完美。
除了可以提前进行软件开发外,从成本上来说,FPGA原型验证是一个性价比很高的验证手段。相对于动辄几百万甚至上千万RMB的Emulator(硬件仿真加速器,例如Mentor的Veloce,Synopsy的ZeBu,Candance的Palladium),FPGA在价格上可以说非常的亲民。
更重要的FPGA原型在运行速度上也有绝对的优势,相对于EDA验证,在速度上当然是高了好几个数量级,即使是和Emulator相对,性能上也是碾压,所以FPGA原型验证被几乎所有的芯片设计公司使用,是使用最为广泛的验证技术之一。而对于软件的开发,只有FPGA是最能接近ASIC的验证平台,提早基于FPGA原型验证平台进行软件驱动开发和应用开发,对于缩短最终芯片Time-to-Market周期意义重大。在软硬件深度定制化,要求芯片到应用的一站式交付的今天,FPGA原型平台的重要性进一步提升。甚至一些硬件产品早期就是以FPGA的形态面世,经过几轮的迭代,在有出货量保证的前提下,基于成本功耗考虑,才会推出SoC芯片。
针对FPGA原型验证的旺盛需求,很多公司都推出了自己的FPGA原型验证平台,并且跟随着Xilinx和Altera(现在是Intel)推出新节点的FPGA芯片而不断升级自己的FPGA原型验证平台。市面上典型的产品有Synopsys的HAPS系列,Cadence公司的ProTIum,S2C公司的Prodigy系列,国内的公司如亚科宏宇的VeriTiger系列等。目前市面上在售的原型平台使用的最大容量FPGA是Xilinx的VU440(Virtex UltraScal 440,20nm工艺),单颗FPGA芯片可以容纳的芯片门数是26~30Million,一般为了容纳更大的SoC芯片设计,会采用多颗芯片级联。

FPGA原型的优势

性能

相比Emulator,FPGA在速度上有50-100倍的优势。这就决定了在FPGA原型上可以进行实际的应用开发。FPGA原型验证平台典型的运行速度是50MHz左右,而Emulator典型的运行频率是1MHz左右,两者之间巨大的性能差异决定了FPGA可以运行更加复杂接近真实场景的应用程序,而Emulator更适合于运行针对速度进行优化的程序,两者的侧重点有所不同。

成本

相比硬件仿真加速器 (比如Veloce),FPGA在成本上具有5-10倍的优势。对于中小型的芯片公司,FPGA如果比作日常快餐,而Emulator就是米其林星级大餐。两者之间巨大的成本差让许多公司青睐于FPGA原型。

移植性

软件工程师可以直接在FPGA原型平台上进driver/app的开发,当芯片回来后,只需要数周的时间就可以bring up软硬件,从而加速产品的发布,这一点对于当前DSSoC(Domain Specific SoC)意义重大。定制化芯片意味着定制化的软件应用,如何提前进行软件开发,等芯片回来后应用已经ready可能是每个芯片公司的期望。从现有的技术上来说,唯有FPGA原型平台具备承载软件驱动和应用开发的能力,所以单从这个点上来讲,FPGA原型平台不可替代。

FPGA原型的挑战

可观测性

FPGA也是芯片产品,所以内部的信号无法直接观测。通常需要借助于FPGA的debug工具在生成bit文件前选取要观察的信号,当bit文件加载运行时,通过配套的debug工具观察指定的信号波形,受限于Block RAM的容量以及信号优化等原因,调试效率比较低。

迭代速度

由于SoC芯片的设计频率很高,为了让原型验证平台尽可能和SoC芯片性能接近,用户期望让FPGA原型平台运行在尽可能高的频率上,但是由于SoC的RTL代码是为芯片实现设计,大量深层次组合逻辑的存在(这样可以节省芯片面积),导致了SoC RTL代码在FPGA上实现时时序收敛困难,往往只能达到几MHz。对于大型的SoC,内部的CPU/GPU/CODEC/NPU等计算和编解码模块逻辑复杂,往往成为整个设计的timing wall,导致时序优化过程会占据FPGA Implementation过程30-40%的时间。根据个人的经验,在timing critical的情况下,1千万门规模的ASIC设计,在FPGA上实现需要10小时以上,导致每个工作日只能进行一次迭代。

高速接口

外部子板和FPGA IO之间的高速同步接口是FPGA的痛点和难点:一方面,相比于ASIC,FPGA在IO时序方面可以调整的空间有限,它不能像ASIC一样可以通过时序约束来灵活调整FPGA IO信号之间的skew,导致并行信号接口之间的path skew很难控制在一个比较理想的范围内,最终会导致数据采样失败,降低频率往往时一种有效的办法,但是有些控制器和PHY之间的接口是需要满足标准规范的,不能无限制的降低,对于这种情况有时只能想尽办法尝试修复时序,甚至需要修改代码。
另一方面,原型验证使用的子板用量小,市场上往往没有销售,很多时候需要自行设计,进一步给调试带来了不确定性,也延长了调试周期。
高速接口的调试往往消耗了大量的人力资源,很多时候都是靠调试的经验和灵感解决问题,总结起来就是费时费力,而且效果不佳。

平台兼容性

市面上的FPGA原型验证平台有很多,但是缺乏统一的接口标准,引脚的排布也不统一,导致子板不兼容,工程师在setup硬件平台和调试子板的时候常常举步维艰,不得不重新设计子板,或者通过跳线等方式临时满足要求,效率和稳定性上都得不到保证。如果想切换到其他平台,也会消耗很多人力资源,并且维护多套平台的成本也是不容小觑的。

容量限制

对于大型的设计(大于2千万等效ASIC门),一块FPGA往往容纳不下,此时必须将多块FPGA互联才能容纳整个设计。在这种情况下,就需要对大型的设计进行Partition即分区。Partition引入了新的问题,而这些问题其实在芯片中并不存在,很多时候耗费很多人力去实现一个可用的Partition方案,仅仅是受限于FPGA的容量而不得已为之,不是服务于SoC芯片原型验证的本身。
Partition引入的最大问题是对IO的需求激增,虽然FPGA有超过1000个IO可用,但是一个完整的SoC如果被拆分成规模相当的两部分时,两部分之间的互联信号数量往往会远超1000个,所以通常情况下受限于IO的数量,必须采用TDM(Time Division Multiplex),即FPGA内部的多个并行信号转为高速串行信号,通过FPGA IO传输到另一块FPGA,然后再解复用,转换成并行信号,实现信号从一个FPGA到另一块FPGA的传递。引入了TDM虽然解决了IO瓶颈,但是Mux和De-Mux引入了额外的延时,导致cross-FPGA的path成为critical path,进一步降低了FPGA的可运行频率,可以说Partition是不得已而为之的方案,最终的结果就是得到一个可用的方案而不是一个理想的方案,是不得不妥协的结果。
另一个方面,由于在SoC原型验证中模块常常会增减,导致需要频繁的改动Partition的方案,如果手动去处理,往往需要花费很多精力才能得到一个上文提到还算可用的方案。此外,处理大量的cross FPGA信号非常容易出错,所以对于大型的SoC FPGA原型验证,更为可行的方案是采用自动化的工具去完成Partition,这对EDA工具都提出了全新的挑战。

市面常见的平台

我们在前期FPGA平台选型中评估了市面常见的几种FPGA原型平台,本章节将对这几个平台进行介绍,并分析各家平台的优劣势。

  • 亚科鸿宇 VeriTiger-H4000T
  • S2C Single VU440
  • Synopsys HAPS-80

亚科鸿宇VeriTiger-H4000T

优势

1.性价比上有一定优势;

不足

1.调试手段比较单一,不支持RTL Debug;
2.无自动化Partition工具,需要手动Partition,手动插入TDM(Time Domain Multiplexing)模块,可靠性和效率难保证;

S2C Single VU440

使用1颗Virtex UltraScale VU440芯片,平台的结构跟我们用实验室使用的V7 Single-E平台(用V7 2000T芯片)类似。

优势

1.平台结构和我们正在使用的V7 Single-E类似,有一定的兼容性和继承性,上手比较快;
2.子板丰富并且价格便宜。

不足

1.有高级的调试工具和Partition工具,但是这些EDA工具的性能和易用性待检验;
2.可扩展性待检验。

Synopsy HAPS-80

图中展示的是HAPS-80 S26平台,使用1颗Virtex UltraScale VU440。

优势

1.Synopsys的工具(Synplify、Identity和Protocompiler)对HAPS-80平台原生支持,EDA易用,生态好;
2.Synopsys IP的FPGA验证环境一般都是针对HAPS平台设计,有配套的IP开发套件(IPK,IP Prototyping Package),能有效缩短接口类IP的调试周期;
3.调试手段多样,抓取波形也很方便;
4.有自动化的Partition工具,多板级联方案成熟。

不足

子板和主板价格相对较高。

综合评估下来,我们选用了Synopsys平台,最关键的一点是HAPS平台的Partition工具和多板的级联方案很成熟,这一点对于我们高性能的SoC FPGA原型验证最为关键。
由于时间有限,博主今天就介绍到这里,关于HAPS平台更详细的介绍将在下一篇博文中呈现,希望能抽出更多时间与大家分享,读者有关于FPGA的任何问题都欢迎留言探讨,让我为平头哥的基础平台建设建言献策,打造如丝般顺滑的用户体验!

原文作者:友飞

1引 言

随着SOC(系统芯片)设计任务复杂度的提高,功能验证已成为系统设计中最大的瓶颈。对于百万门级的SOC芯片,每次投片的NRE是巨大的,预计,在未来两年,验证在设计中所占的比重将达到50%以上。由于SOC系统普遍涉及实时环境下的应用,现有的仿真工具不可能解决所有的功能验证问题,有必要利用FPGA在接近实时的条件下进行软硬件协同验证。基于多片FPGA实现的验证往往面临系统分割的挑战。盲目的、缺少优化的系统分割,不仅很可能在综合、分割、板上实现出现多次反复,浪费大量的时间,而且也难以保证FPGA验证结果与ASIC设计的一致性。

本文在传统边界划分的基础上,通过静态时序分析工具,利用关键路径时延信息,对分割过程进行约束。新的验证策略注重系统分割在时序收敛、面积、数量和管脚数等方面的平衡,目的是使分割结果趋于合理,验证环境更加接近SOC设计原型,避免传统FPGA验证在系统分割、综合和设计等环节的反复迭代,实现了验证和SOC开发调试的同步。文章同时讨论了该方法对于信号完整性分析的贡献。

最后,通过一个分割实例,就分割效率与传统方法进行了对比。

2传统的FPGA验证流程

传统的FPGA验证流程如图1所示。这种综合与分割相互无关的验证流程存在诸多缺陷。首先,从ASIC结构到FPGA结构的转换存在差异,例如,很多SOC系统设计经常会处理时钟信号穿越“与”、“或”、“与非”等门的情况,如图2所示。 

此时,综合工具一般不会自动选用FPGA专有的时钟结构,其结果是产生时钟歪斜(clockskew),导致ASIC代码和综合出来的FPGA在功能上不一致。即,如果忽略时钟树在时钟域范围的扩散效应,分割时很有可能导致从ASIC结构到FPGA结构的转换的不一致。这个例子同时说明,类似的问题同样会在其它电路网络中发生,RTL设计在满足时序收敛要求的开发过程中,无论采用的是动态验证还是静态验证技术,都应当重视电路网络中路径延迟的影响。传统FPGA验证的系统分区分割策略通常采用沿自然边界划分的方式,设计者主观上通常过分依赖几何拓扑关系和层次化的系统模块划分,特别是忽略了分割过程与综合和时序分析的关系。这种过于简单化的分割策略很可能会导致不合理的结果,FPGA验证所映射的可能是没有意义的ASIC结构。

3 基于关键路径时延约束的FPGA验证流程

3.1关键路径时延提取 
关于FPGA验证,我们认为,高效率的系统分割至少应该具备两个条件:找到最佳的分割点和在系统级上逼近设计。首先,分割在技术上是可行的,允许将设计划分为多个适于单个FPGA实现的模块,在接近实时的环境下进行验证。目前最大的FP2GA标准封装可提供400到440个IˆO,对IˆO的管脚数目的支持不再成为分割的瓶颈,这也为传统的沿着内核或模块的边界进行直接划分提供了空间。在确定最佳分割点的反复迭代过程中,我们发现,利用静态时序分析获得的关键路径时延信息,完全可以用于实现收敛性更好的系统分割。静态时序分析是一种检查ASIC设计逻辑和时序的工具,其主要目的是计算各通路的性能,识别可靠的踪迹,诊断建立和保持时间的配合。静态时序分析会分析报告所有关键路径,包括一些重要的调试信息,比如每个网络节点的扇出或容性负载等。

通过实践发现,利用关键路径时延信息对系统分割和综合进行约束,可以保证分割按照相对确定的标准进行,获得时序优化的结果,从而有效地减少了功能验证过程中的反复。同时,为使验证过程更为接近ASIC功能,分割时尽量做到面积、晶体管数量和管脚的匹配,保证分割的结果对面积和IˆO利用而言都是合理的故障定位要求。这些措施均优化了FPGA验证过程,所获得的综合分区和时序收敛结果更好,为最终物理版图验证铺平了道路。我们采用的具体办法是,首先根据静态时序分析报告确定关键路径的分区门限,然后原则上沿着功能边界将延迟长的路径分割到同一个FPGA分区,通过更进一步的综合分区,获得收敛性更好的路径。其结果是,可以将需要验证的探测点更多地分割到FPGA边界,达到提高IˆO利用率的目的。显然,高的IˆO利用率能够有效地拓宽FPGA验证范围。经过改进的FPGA验证流程如图3所示。 

该流程的优势在于:分割是按照确定的标准进行的,针对传统验证流程的时序分析,仅仅对布局布线有效的缺陷,围绕时序分析这个中心,将逻辑实现和物理实现有机地结合在一起,着重考虑了关键路径时延对FPGA分割效率的影响,使分割结果更为合理。此外,新流程通过在综合、时序仿真过程、分割验证中交互进行静态时序分析,实现了综合、分割、验证、设计的高效同步。在关键的时延信息和边界条件约束下,经过迭代,功能块延时和布线延时,能够取得与实际比较一致的效果,多片FPGA实现时的代码修改量也得到减少。Xilinx、Altera等FPGA生产商大多支持兼容的第三方时序分析工具,应用时选用Synopsys的PrimeTime进行静态时序分析。该工具的优势在于不要求用户输入激励或测试矢量,可通过调用db格式的网表文件,方便地查看关键路径或指定通路的时序。

3.2 信号完整性的保证 
新流程对SOC验证效率的另一贡献,是提供了一种在代码级优化信号完整性的途径,有利于在综合和板级验证的过程中对信号完整性实施动态的控制,及早发现设计中隐藏的严重的信号完整性缺陷。信号完整性(SignalIntegrity,SI)是指传输线上的信号质量及信号定时的准确性。SOC芯片设计一般要求数据必须在时钟触发沿建立之前稳定,才能保证逻辑控制的准确性。应当注意到,摩尔定律所隐藏的另一层含义是,RTL系统设计要随时应付工艺实现条件的变化,因为设计不可能总是针对最新的工艺条件实现的。

新的工艺条件可能会给原设计带来影响。例如,设计从0125Lm工艺转向0118Lm工艺实现时,就存在信号完整性问题。随着系统速度和处理带宽的增加,信号完整性的影响会表现得更加突出。另一方面,传统的RTL设计在设计和验证环节存在与信号完整性分析脱节的现象,难以发现并修正信号完整性缺陷,或者在向更高标准工艺迁移时,由于代码修改量太大,势必加重系统验证等环节的负担,从而使设计效率大打折扣。因此,我们的出发点是,争取以最小的代码修改量,实现RTL代码与FPGA的直接映射,保证FPGA功能验证的要求;同时,将信号完整性的影响在验证过程中以更直观的方式体现出来。

分析表明,最直观的信号完整性问题通常与电路模块之间的互连点有关,这在静态时序分析中实际上有所反映。特别需要指出的是,新的FPGA验证流程是建立在经过优化的系统分割基础上的。正如上一节所指出,延迟长的路径基本约束在同一个FPGA分区。经过这样的优化处理,实际上,一方面是对信号完整性有一定的优化;另一方面,由于IˆO利用率的提高,更多的故障探测点分割到了FPGA的边界,信号完整性在协同验证中会得到更多的反映,通过软件全速仿真,比较容易查找和定位设计缺陷,及早消除设计隐患;同时,为RTL代码的动态优化提供了依据,有利于在设计前期尽量减少信号完整性缺陷,使之适应工艺条件变化的能力更强,提高设计的稳健性。通过采取以上措施,我们在原SOC设计的基础上,以较小的代码修改量,实现了从0125Lm向0118LmCMOS工艺的平滑过渡,并通过了系统后仿真。

4 系统分割验证结果

FPGA分割选用XilinxISE基于网表的集成验证环境,采用三种XC4000系列器件(XC4003、XC4005、XC4010)生成验证原型。该系列器件能生允许范围内的任意频率,可方便地提取片上和片外的精确50ˆ50占空比的时钟,时钟边缘的定时精度达到1%。加之经过改进的时钟布线,验证环境比较接近高性能SOC的实际要求,能够保证验证环境与SOC系统保持最大限度的一致。图4是采用地址ˆ数据复用实现的PCI接口模块的FPGA分割结果。其中,PCI控制单元采用两级控制流水方式实现与FIFO的高速数据交换,流水线控制信号完全约束在FPGA边界内部。图5是FPGA在布局布线后,50MHz系统时钟下PCI接口64字节数据缓冲存储器读操作的后仿真结果。 

这种更为准确的分割验证同样会给板级测试带来方便。硬件仿真时,可以利用逻辑分析仪的数据接口测试流到探测头的信号,也可以通过串口或以太网接口对逻辑分析信道进行采集分析,便捷地测试FPGA之间的传递信号。经过改善的FPGA分割验证策略比较准确地反映了信号网中的路由拓扑,包括FPGA内部组合逻辑延迟、信号通过FPGA边界所需的时间;故障的定位也相对容易,某些故障还可以提前预知。在进一步的验证工作中,使用了6片XC4000对一个基于Verilog语言实现的的SOC系统(包括VLIW处理器核、总线控制器、IˆO接口等)进行了分割(设计是以较小粒度的方式实现的,这样分割效果更为理想)。全芯片软件固化激励测试的结果与RTL测试结果完全一致。表1列出了改进方案与传统分割结果的数据对比。结果表明,IˆO利用率有明显的提高,逻辑控制块的利用率也有所改进,进一步证明了方案的有效性。 

5结 论

本文探讨了一种经过优化的SOC系统的FP2GA协同验证策略,依靠静态时序分析工具,利用关键路径时延对分割过程进行约束,显著改善了传统的沿自然边界分割的效率,验证结果更为接近SOC运行环境。新的协同验证流程实现了SOC设计与FPGA验证的同步,减少了不必要的反复迭代环节,有利于排除系统设计阶段可能导致系统失效的因素,加大了系统设计生产调试一次成功的可能性。

FPGA协同验证方法-资料整理相关推荐

  1. 优秀公众号推荐 STM32与FPGA资料整理 windows小工具推荐

    文章目录 学习公众号推荐(无广告,良心推荐) 1.工具类 1.网罗灯下黑 2.平凡而诗意(这个老哥应该是弄深度学习的,整理的资料挺不错的,下面也还会推荐一次~) 3.Topbook 2.硬件类 1.吴 ...

  2. 变形监测基准点稳定性分析的必要性与方法?变形监测成果资料整理的内容和方法?3、变形分析与预测方法?

    变形监测基准点稳定性分析的必要性?方法? 必要性 变形监测分析与预报是工程或设备安全运营的基本保障,变形分析结果是对设计正确性的检验,是修改设计或类似工程新设计的依据. 变形体的位移由其上离散的目标点 ...

  3. 数据传输完整性_基于IBIS模型的FPGA信号完整性仿真验证方法

    人工智能与深度学习等领域的快速发展,使得FPGA等器件应用范围愈加广泛,同时也要求器件的开关速率加快.引脚数量增多.但陡峭的时钟边沿和增加的引脚数使得杂散.耦合.寄生电容电感会对器件产生诸多信号完整性 ...

  4. 资料整理方法(写于2021-02-16)

    资料整理方法 文章目录 资料整理方法 前言 平台APP账号及密码管理 网页浏览器书签栏管理 总体思想: 硬盘文件管理 结语 前言 在代码编程的学习过程中,需要查询许多资料,访问许多各色网站,自然也保存 ...

  5. 正则表达式验证方法整理

    第一次看正则表达式有些懵逼,以后肯定要用到,所以整理了网上常用的正则表达式验证方法,以备日后使用. 一.校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n ...

  6. 程序员优秀学习资料整理(不断更新中)

    如果你发现自己陷入各种新技术.工具包围中,而纠结于该选择哪些学习,读读这篇文章,技术的执念. 综合资源 资源链接汇集 awesome - 各种主流语言的优秀项目汇集 :+1: lists - 资源集合 ...

  7. 一图看懂 aiohttp 模块:基于 asyncio 的异步HTTP网络库, 资料整理+笔记(大全)

    本文由 大侠(AhcaoZhu)原创,转载请声明. 链接: https://blog.csdn.net/Ahcao2008 一图看懂 aiohttp 模块:基于 asyncio 的异步HTTP网络库, ...

  8. 验证中的FPGA原型验证

    reference: https://blog.csdn.net/zhajio/article/details/80612276 什么是FPGA原型? FPGA原型设计是一种成熟的技术,用于通过将RT ...

  9. 论文浅尝 | AAAI2020 - 多分量图卷积协同过滤方法

    论文笔记整理:郝凯龙,南京大学硕士. 来源:AAAI2020 链接:https://arxiv.org/pdf/1911.10699.pdf 动机 推荐系统实际上是在做用户-商品二部图上的链路预测,仅 ...

最新文章

  1. 面向过程(结构化)分析方法与面向对象分析方法的区别
  2. Skin设计小组新作品发布—绿草蓝天
  3. STM32 电机教程 24 - ST MCLIB实战之无感变绝对式位置传感器
  4. linux命令行提示符居中,linux命令行学习(54):修改提示符
  5. python pathname_Python模块的定义,模块的导入,__name__用法实例分析
  6. postman新手使用教程
  7. python坐标系不均匀_Python处理不平衡数据
  8. 软考信息系统项目管理师_管理科学(运筹学)2---软考高级之信息系统项目管理师034
  9. SpringBoot使用数据库
  10. 【perl】LWP module
  11. 181026英语每日一句
  12. Acer 4750 安装黑苹果_超详细安装黑苹果教程
  13. Ubuntu20.04显卡驱动安装
  14. 整合HikariCP
  15. java入门学习(三:数据类型)
  16. CodeForces 949A Zebras
  17. [HAOI2006]旅行comf(枚举+最小生成树)
  18. 计算机三级上机场,自学通过计算机二级、三级、四级,保研天津大学,证书拿到手软!你被中航大男神圈粉了吗?...
  19. 如何查看手机计算机历史记录,怎么查看电脑历史操作记录
  20. IDEA+SSH :图书管理系统实现

热门文章

  1. RuntimeError: stack expects each tensor to be equal size, but got [8] at entry 0 and [2] at entry 2
  2. 搜狗 2018校招 商业基础工程—测试开发练习题
  3. 记一次基于vmware的gentoo安装
  4. PiXYZStudio:Revit 模型轻量化
  5. 如何高效学习的一点思考
  6. 美颜sdk版本是什么意思?如何选择第三方美颜sdk?
  7. 【AI系列】1关于人工智能发展历史、资料推荐、技术体系的整理
  8. SQLyog免费下载地址
  9. 正方教务管理系统后台敏感日志查看漏洞
  10. SQL注入漏洞(postgresql注入)