FPGA 验证 why what how

这篇具有很好参考价值的文章主要介绍了FPGA 验证 why what how。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

为什么需要FPGA验证

1)FPGA可以模拟真实应用场景,对芯片的性能进行验证,规避算法的风险;
2)其次可以实现和外部器件对接,验证和外部器件(尤其是模拟器件)之间的接口;
3)再者FPGA速度快,对于一些长时间、大流量场景的验证可以放在FPGA上进行
4)软硬件协同验证:主要目的是验证系统级芯片软硬件接口的功能和时序,验证系统级芯片软硬件设计的正确性, 以及在芯片流片回来前开发应用软件。

FPGA验证流程

资源评估

方法1: FPGA与ASIC面积换算,业界常规的FPGA LUT与ASIC gate换算比例为1:9;可以在早期评估出大概结果,误差<30%;
方法2:根据历史数据,汇总各功能模块

平台选择

根据资源评估结果,确认选择平台;确认前需要同硬件讨论平台的数量和使用时间段,确定有足够硬件资源。
实际项目中需根据实际FPGA平台量进行规划。
xcvu440

方案规划

硬件方案 CRG方案…
FPGA 验证 why what how

代码适配

blackbox

将不需要的模块BLACKBOX掉,有利于资源及时序的收敛。
注意hready信号必须赋值为1,否则会导致总线挂死;其它一般赋值0
(建议对照define.lst将所有的BLACKBOX的代码都检查一遍,关注有没有对输出赋值,以保证避免VIVADO布局布线失败情况的发生。

CRG

分析ASIC的时钟方案,确认每一个时序MUX和分频,通CRG设计人员明确FPGA分支的选择,尽量减少时钟MUX和分频,关闭CG。后面的时序约束和时序优化都需要以此为基础。

MEM适配

抓线

1 代码中增加抓线ILA
FPGA 验证 why what how
FPGA 验证 why what how

2 在VIVADO 工程中增加抓线,再重新布局布线,生成BIN文件。

filelist 适配

FPGA与ASIC不一致的代码都放于replacement下

约束

位置约束

FPGA1 FPGA2 FPGA3 FPGA4
FPGA 验证 why what how

FPGA1和FPGA4:管教位置J1C和J1D互换
FPGA1和FPGA3一致;FPGA2和FPGA4一致
两个FPGA有一组AHB总线互联,需要MASTER来指定时序约束需求,INPUT DELAY (0,70%T),OUTPUT DELAY(0,30%T)。

时钟约束

端口时钟约束;衍生时钟约束;时钟分组;

综合

DesignWare是Synopsys提供的知识产权(Intellectual Property,简称IP)库。由于DesignWare库中的所有器件都是事先验证过的,使用该IP库我们可以设计得更快,设计的质量更高,增加设计的生产力和设计的可重复使用性,减少设计的风险和技术的风险。Vivado不支持DesignWare库。但是我们的适配器FPGA是xilinx的要用Vivado编译。如果遇到这种模块,DWxxx.v可综合解决方法有以下两种:
一种方法是自己手写一个Design Ware模块或者用Design Ware的仿真模型上修改而来。自己写可能有问题不推荐自己写;
另一种方法是用synplify_premier解决,implementation options-Verilog 选择Use DesignWare Foundation Library,配置Design Compiler Instailation Loation 与ASIC保持一致。
synplify run constraint check检查约束情况

Vivado布局布线

最开始跑版本可以先跑各模块,确定每个模块时序没有问题后再跑全版本。Synplify确认时钟约束的正确性,vivado timing report中requirement异常小的一般是时序约束有误;

时序优化

使用双端口RAM替换单端口RAM
注意在viavado中生成ram时,选无输出reg。
处理高扇出信号
高扇出的复位信号,设为false path。
多周期路径
确认时序报告中时序违例路径的时序需求; 可以和模块设计人员一起分析时序报告,对某些时序路径可以约多周期。
false path
CBB 提供的可以False Path 或者多周期的路径;
分析Worst Slack/关键路径,确认是否可以False Path或者约束多周期;
分析Inter-Clock Paths,两个时钟间是否需要分析;
DSP优化
dsp style : logic/dsp48,某项目经验为不使用dsp时序比较好。
分DIE
V900上有3个SLR,由某项目经验得到:不手工分die时序较好。
时序快满足要求时措施:回退到上个步骤,在OPTION选择优化,再重新跑版本
一般方案中,寄存器是实现在FPGA内部,因此到PAD的延时相对比较长,尤其是设计较大较复杂的时候。使用IOB Packing则将寄存器实现在FPGA边缘的IOB中,大大缩短延迟时间,提高了时序性能

跨片时序约束

两个FPGA有一组AHB总线互联,一般作为AHB总线的Slave设备都有2根hready信号,一个为input类型(hready_in),另一个为output类型(hready_out)。在AHB总线协议中,如果Master设备发起读写操作的时候,Slave设备不能及时响应的话,由Slave设备把hready_out信号拉低来拖延DataPhaze周期。hready_in是Slave设备用来判断Master设备是否对其它Slave设备的操作已经完成的信号。对于SLAVE侧hready_in是一个输入信号,由MASTER提供;而hready_out是一个输出信号,反馈给MASTER。
AHB总线跨片连接,需要MASTER来指定时序约束需求,一般INPUT DELAY (0,70%T),OUTPUT DELAY(0,30%T),留给片间走线40%T的裕量。

ECO

场景:EMMC CMD以及data需要做上拉处理。
解决方法:1 在VIVADO.xdc中增加相关约束,重新跑版本,耗时长,不推荐。
2 VIVADO 的ECO功能。具体实现如下:
(1) 打开floorplanning
(2)搜索要修改的端口,由下图可知端口的各种属性。
(3)重新按具体需求完成配置
(4)产生可供下载的bit 文件,此时必须在Tcl Console 中或是Tcl 模式下直接输入命令产生bit文件,而不能使用IDE 上的“Generate Bitstream”按钮。原因是后者读到的还是ECO 前已经完成布局布线的原始设计,生成的bit 文件自然也无法使用。

总结

代码 spyglass +filelist irun 发布版本给验证人员(自己先SOURCE tag编译一下,避免本地文件存在) EDA验证pass 各模块跑综合布局布线查看时序情况 跑全版本(满足checklist后再发布)。
注意:1 确保代码经过spyglass检查,满足《FPGA 设计入口Checklist》。
2 确保上板版本与EDA验证版本的一致性。
3 及时上库,版本记录。修改代码及时上库,做好版本记录,记录清楚每个版本修改的内容。
4尽量减少FPGA目录下的replacement file。文章来源地址https://www.toymoban.com/news/detail-473824.html

到了这里,关于FPGA 验证 why what how的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp前端+python后端=微信小程序支付到底怎么开发???国内的资料为什么没一篇能讲清楚,简简单单的只需要3步就可以了-V2版本

    真的,在接到这个任务的时候,本以为很简单,不就是普通的浏览器复制粘贴,最不济找下gpt给生成一下,但是到实际开发就不同了,不是后端出问题就是前端,搜资料,上百度上google,基本每一个人讲的都不一样,不是这问题就是那问题,特别是微信官方,自己接口的逻辑

    2024年01月22日
    浏览(55)
  • 为什么要给数据库加索引?转自 https: //blog.tankery.me/development/why-we-need-indexes-for-database

    这篇文章不是数据库索引的使用文档,不会给每个功能的使用都做介绍,而是通过我自己的案例,对案例中遇到的几个点做详细的说明。如果想查看具体的使用帮助,可以参考官网的文档:Query Planning “老谭,测试发现睡眠历史记录页面的打开速度太慢了,你给快速解决一下

    2024年02月03日
    浏览(38)
  • 为什么需要数据仓库

    为什么不在OLTP环境下分析?  OLTP环境也会存储历史数据,但这些历史数据并不是业务运行所需的,这些历史数据需要经常归档到数据仓库,并且在OLTP数据库中删除。 相比之下,事务环境适用于连续处理事务,通常应用于订单录入以及财务和零售事务。它们并不依赖历史数据

    2024年01月25日
    浏览(67)
  • 为什么需要超时控制

    本文将介绍为什么需要超时控制,然后详细介绍Go语言中实现超时控制的方法。其中,我们将讨论 time 包和 context 包实现超时控制的具体方式,并说明两者的适用场景,以便在程序中以更合适的方式来实现超时控制,提高程序的稳定性和可靠性。 超时控制可以帮助我们避免程

    2024年02月03日
    浏览(57)
  • 为什么需要websocket?

    前端和后端的交互模式最常见的就是前端发数据请求,从后端拿到数据后展示到页面中。如果前端不做操作,后端不能主动向前端推送数据,这也是http协议的缺陷。        因此,一种新的通信协议应运而生---websocket,他最大的特点就是服务端可以主动向客户端推送消息,客

    2024年02月12日
    浏览(59)
  • 为什么需要单元测试?

    为什么需要单元测试? 从产品角度而言,常规的功能测试、系统测试都是站在产品局部或全局功能进行测试,能够很好地与用户的需要相结合,但是缺乏了对产品研发细节(特别是代码细节的理解)。 从测试人员角度而言,功能测试和系统测试以及其他性能测试等等对测试

    2024年02月12日
    浏览(69)
  • 为什么需要uboot?

    bootROM: 一种固化在芯片内部的只读存储器(ROM),用于启动和初始化系统。BootROM 中通常包含了一些预先编写好的代码,用于完成系统启动前的基本初始化和配置, 例如初始化时钟、GPIO控制器、中断控制器、存储设备(SD卡、NAND Flash、SPicy Flash)等硬件资源, 检测启动设备

    2023年04月23日
    浏览(63)
  • 爬虫为什么需要ip

    爬虫需要使用爬虫ip主要是为了解决以下问题: 1、反爬虫机制:许多网站会设置反爬虫机制来防止爬虫程序的访问,例如限制IP地址的访问频率、检测访问来源等。使用爬虫ip可以绕过这些限制,使得爬虫程序更难被检测到。 2、访问限制:有些网站可能会对某些地区的IP地址

    2024年02月02日
    浏览(60)
  • 爬虫时为什么需要代理?

    我们都知道爬虫时是需要代理地址介入的。使用代理可以隐藏你的真实IP地址,防止被网站封禁或限制访问。此外,代理还可以帮助你绕过地理限制,访问被封锁的网站或服务。但是请注意,使用代理也可能会带来一些风险,例如代理服务器可能会记录你的访问数据,或者代

    2024年02月06日
    浏览(56)
  • 为什么需要对相机标定?

    以下内容来自系统教程如何搞定单目/鱼眼/双目/阵列 相机标定? 点击领取相机标定资料和代码 为什么需要对相机标定? 我们所处的世界是三维的,而相机拍摄的照片却是二维的,丢失了其中距离/深度的信息。从数学上可以简单理解为,相机本身类似一个映射函数,其将输

    2024年02月06日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包