数据中心设备制造商长期以来一直热衷于利用fpga可能实现的大规模并行性,以在高效的功率预算内实现与需求保持同步所需的处理性能和i/o带宽。然而,传统上,在fpga中实现硬件计算平台一直是一项复杂的挑战,需要设计人员处理一些最低级别的硬件实现。
尽管一些最新的fpga设计方法结合了高级综合(hls)工具和软件编程语言(如opencl,c和c ++)简化了任务,并没有消除对专业fpga设计专业知识的需求。需要一种高级工作流程,允许软件工程师将fpga用作软件定义的计算平台,而无需硬件设计的痛苦。为满足这一需求,此类工作流应该能够:
从纯软件代码创建功能硬件
合并现有硬件ip块,如果
推断并创建所有支持硬件(接口,控制,时钟等)。
支持使用商用,现成的电路板和自定义平台
通过构造确保生成的硬件正确,从而消除硬件调试
仅支持使用标准软件调试工具调试功能块
考虑一个包含两个基本功能的软件算法:将数据处理成一个函数,然后发送到另一个函数进行进一步处理。从软件的角度来看,这个实现就像调用function1(),然后单独调用function2()一样简单,使用指向要处理的数据位置的指针。
图1对数据执行的功能
实施此类在没有正确的硬件抽象工具流程的基于fpga的硬件平台上的算法将要求软件开发人员提出类似于图2中的硬件设计(其中内核1和内核2各自相应)功能1和功能2的硬件实现。
图2使用双功能算法的详细硬件实现传统的fpga工具
硬件设计需要包括控制平面和数据平面。控制平面是执行引擎,它生成时钟和重置,管理系统启动,编排数据平面操作,并执行所有内务处理功能。数据平面实例化并连接处理元素,内核1和内核2,以及读取数据和写入处理数据所需的必要i/o接口。在图2中所示的示例中,这些接口是以太网和pci express(pcie)。
熟悉的挑战
没有特定硬件专业知识的软件开发人员可以使用高级综合工具(如 vivado hls )生成内核1和内核2,以编译软件函数function1()和function2( )用c或c ++编写的vhdl或verilog的fpga硬件描述。但是,使用hls工具无法生成设计的非算法元素,如接口,控制,时钟和复位。需要硬件设计人员将其创建为自定义ip。获取这些元素并连接它们的工作带来了另一个挑战,因为某些元素可能不容易获得,或者可能具有不同类型或大小的接口以及不同的时钟要求,特定的启动顺序等等。
实施设计同样面临严峻挑战。这些包括将设计映射到所选fpga平台的资源,生成适当的约束,并确认在fpga硬件上进行逻辑综合和实现后满足这些约束。即使是经验丰富的硬件设计人员也可能需要数周才能在新的fpga硬件上实现最简单的设计。
新方法
plda集团是嵌入式电子系统和ip的开发商,它创建了quickplay,允许软件开发人员完成这些任务,从而在fpga硬件上部分或全部实现cpu的应用程序。在这种以软件为中心的方法中,设计人员首先开发硬件引擎的c/c ++功能模型,然后使用标准c/c ++调试工具验证功能模型。然后指定目标fpga平台和i/o接口(pcie,以太网,ddr,qdr等),最后编译和构建硬件引擎。
为了使这个过程无缝工作,必须保证生成的硬件引擎与原始软件模型的功能相同。这意味着模型必须是确定性的,因此它将产生与硬件相同的结果,无论硬件实现运行得多快。不幸的是,大多数并行系统遭受不确定性执行。例如,多线程软件执行取决于cpu,os,以及在同一主机上运行的非相关进程。多次运行相同的多线程程序可能会有不同的行为。
硬件中的这种非确定性需要在电子波形级别调试硬件引擎本身。这将破坏针对软件开发人员的工具的目的,但quickplay的数据流模型保证了确定性执行,而不管执行引擎如何。该模型由并发功能组成,称为内核,与流通道通信,这与软件开发人员如何在白板上绘制应用程序相关联。任何内核的内容都可以是任意的c/c ++代码,第三方ip,甚至是hdl代码。
quickplay设计流程非常简单,如图3所示。
图3quickplay编译和执行流程
仔细研究设计流程
第1阶段:纯软件设计。 fpga设计是通过在c中添加和连接内核,并使用开发软件指定通信通道来创建的。 quickplay ide提供了一个c/c ++库和api来创建内核,流,流端口和内存端口,以及读取和写入流端口和内存端口。
第2阶段:功能验证确保软件模型正常工作。该模型在桌面上编译并使用测试程序执行,该测试程序将数据发送到输入,从而验证输出的正确性。
阶段3:然后从软件模型生成fpga硬件。在此阶段,使用简单的下拉菜单选择目标fpga平台和映射到设计输入和输出端口的物理接口。
阶段4:系统执行类似于功能验证,除了fpga设计在选定的fpga板上运行,而主机应用程序仍在软件中运行。实际数据可以流入和流出fpga板。在此阶段可以运行比在功能验证期间更多的测试。
阶段5:系统调试。即使在硬件中执行功能后发现错误,也无需在硬件级别进行调试,因为quickplay可确保软件模型与硬件实现之间的功能等效。软件版本中也存在硬件版本中的任何错误。
阶段6 :(可选)优化。虽然quickplay构建的整个基础架构在性能和利用率方面都非常高效,但设计的整体质量将取决于用户创建的内核的质量。由于通用c代码不会产生最有效的硬件实现,因此软件开发人员可以遵循一些技术和指南来大大提高hls生成代码的效率。进一步优化也可以通过使用vivado hls或在hdl中重新编码某些内核来完成。
摘要
这种简单的方法为大量软件工程师开放了基于fpga的计算,他们现在可以使用熟悉的技术在软件中进行建模,然后构建系统和硬件测试。目前还没有其他工具采用这种方法,也没有提供软件工程师可以在源级别专门设计和调试的框架。
生成的硬件效率也使quickplay成为硬件工程师寻找的好工具通过让quickplay处理平凡的硬件设计任务来节省数周或数月的设计工作,同时他们专注于真正的增值:处理内核。
quickplay的数据流计算模型使其成为理想的选择大量的fpga应用,无论是纯cpu协同处理,cpu采集数据的预处理还是后处理,还是仅涉及不涉及cpu的系统(网络,广播,视觉,医疗等应用)无线,hpc等。)
工业级路由器都有哪些特点?
每年一个行业领袖品牌奖,三雄极光凭什么?
赛普拉斯量产集成AWS的物联网设备管理安全解决方案
基于LPC11C24微控制器组成的CAN网络,实现对节点MCU的软件更新
华为Mate 50通过北斗发送紧急短信
使用QuickPlay进行软件定义的FPGA计算 最新的FPGA设计方法
华为在西班牙介绍其5G解决方案的研发成果
STR-Z4302引脚功能的电压资料参数
电瓶修复技术之电池鼓包热失控原理的介绍
BK3515NS,蓝牙ble-RF单芯片,参数资料及应用简介
第82届中国电子展为电子信息人才搭建交流平台
宁夏首个LED照明研发生产项目落户银川经济技术开发区 总投资达11亿元
关于工业插头的价格分析,受哪些因素的影响
jdbc与mybatis的区别
电源pfc电路可以取消吗?电源pfc电路图解
Microsoft Teams视频聊天人性化设计,更方便用户使用
PyTorch如何实现自定义CUDA算子并调用的方法且测量CUDA程序耗时
2011韩国电子展深圳或将组团参展掘商机
屏幕里的产线世代是个什么?屏幕产线里的那些道道解说!
百川智能发布Baichuan2 Turbo系列API,或将替代行业大模型