星空-BPO行业整合方案提供者
专业化、科技化、国际化;高标准、广覆盖、全流程
了解更多FPGA HLS 的机理图文详解 时候:2024-12-19 18:25:48 手机看文章
扫描二维码随时随地手机看文章
HLS (high-level synthesis)称为高级综合, 它的首要功能是用 C/C++为FPGA开辟算法。这将晋升FPGA 算法开辟的出产力。
Xilinx最新的HLS是Vitis HLS。在Vivado 2020版本中替换本来的Vivado HLS, 功能略有差别。
HLS 的机理
简单地讲,HLS采样近似C说话来设计FPGA 逻辑。可是要实现这个方针,仍是不轻易的。究竟软件和硬件的功能实现存在很是年夜的不同。软件首要针对挨次法式履行。即使是平行法式履行,也是经由过程OS 的使命调剂CPU 的资本。宏不雅上是并发履行,而微不雅上依然是挨次占用CPU 履行的。另外一方面,基在FPGA 硬件逻辑,假如没有上下文联系关系,完全可以并交运行。在没有特殊语律例则下,讲C说话法式转换成为硬件逻辑,而且尽可能实现硬件的并行履行是有难度的。人们为此研究了快要20年。
在这个范畴的首要进献者是康奈尔年夜学的张志如博士,他是康奈尔年夜学ECE学院助理传授,计较机系统尝试室成员。他今朝的研究重点是异构计较的高级设计主动化。他的作品取得了 TODAES 的最好论文奖和 ICCAD 的最好论文提名。2006 年,他与人配合创建了 AutoESL Design Technologies, Inc.,将他关在高条理综合的博士论文研究贸易化。AutoESL 在 2011 年被 Xilinx 收购,收购后 AutoESL 东西改名为 Vivado HLS。
领会了HLS 的实现机理,有助在编写出高效力的HLS 逻辑。
软件编译器讲高级说话翻译成为机械说话。首要存眷的说话的语法转换法则,比拟之下,HLS 的翻译难度更年夜一些,模块中的语句情势上是前后挨次摆列。可是HLS极力转换成为并行执履行的硬件逻辑。而且经由过程数据流,管道等手艺实现硬件优化。笔者看来,HLS 的编译手艺长短常了不得的。
HLS的方针是按照用户供给的输入和限制主动替用户做出良多决议,HLS主动完成以下曾需要手动完成的工作。
HLS主动阐发并操纵一个算法中潜伏的并发性
HLS主动在需要的路径上插入寄放器,并主动选择最抱负的时钟
HLS主动发生节制数据在一个路径上收支标的目的的逻辑
HLS主动完成设计的部门与系统中其他部门的接口
HLS主动映照数据到贮存单元以均衡资本利用与带宽
HLS主动将法式入彀算的部门对应到逻辑单元,在实现等效计较的条件下主动拔取最有用的实行体例。
下面是一个简单的例子
从图可见,为了在时钟脉冲下节制法式的履行,在转换后,添加了一个有限状况机。
下面是轮回的机制:
由两个状况节制一个轮回。
HLS 对轮回语句实现多种优化
unroll
pipeline
看有缺省体例和PIPELINE的差比,速度提高了一倍。
使命的并行履行(Task Parallelism with HLS)HLS 中将每个语句看做为一个使命,它们多是一个语句,或是一个函数挪用。例如一个函数中挪用4个函数,A,B,C,D 。在C说话中,A,B,C,D是顺次履行的。可是在HLS 的实现中,假如A,B,C,D四个模块没稀有据的依靠关系的话,它们完全可以并行地履行。
我们假定, A 在两个分歧的数组中为 B 和 C 生成数据,而 D 利用数据来自 B 和 C 生成的两个分歧数组。让我们假定这类“钻石”通讯模式将运行两次(两次挪用),而且这两次运行是自力的。
void diamond (data_t vecIn[N],data_t vecOut[N]) { data_t c1[N],c2[N],c3[N],c4[N]; funcA(vecIn,c1,c2); funcB(c1,c3); funcC(c2,c4); funcD(c3,c4,vecOut); }
这是一种所谓“钻石”形链接(“diamond” shape connectivity.)。
全挨次履行对应在图 1 中的图,此中圆圈暗示用在实现序列化的某种情势的同步。
在菱形示例中,B 和 C 是完全自力的:它们欠亨信,不拜候同享内存资本,假如不需要同享计较资本,则可以期望它们并行履行。这致使了图 2 中的图表,在一次运行中具有一种 fork-join 并行性情势:B 和 C 在 A 竣事后并行履行,D 期待 B 和 C,但下一次运行依然是序列化的。
让我们走得更远一点。到今朝为止,之前的履行模式在挪用中操纵了使命级并行性。堆叠持续运行呢?假如它们是真正自力的,但假如每一个函数(即 A、B、C 或 D)重用与之前运行不异的计较硬件,我们可能仍但愿履行,例如,并行履行 A 的第二次挪用B 和 C 的第一次挪用。这是一种跨挪用的使命级流水线情势,致使如图 3 所示的图表。吞吐量此刻获得了提高,由于它遭到所有使命之间的最年夜延迟的限制,而不是它们的延迟之和。每次运行的延迟不变,但屡次运行的总延迟削减了。
这些看起来好复杂的模样,可是HLS 为我们实现了细节。我们只需领会这些机理便可以了。
C说话与硬件组件的区分HLS 采取了C说话描写逻辑,它们的对应关系以下:
可是,HLS 对C说话又做出了一些限制:
不利用动态内存分派(不利用malloc(),free(),new和delete())
削减利用指针对指针的操作
不利用系统挪用(例如abort(),exit(),printf()),我们可以在其他代码例如测试平台上利用这些指令,可是综合的时辰这些指令会被疏忽(或直接删失落)
削减利用其他尺度库里的内容(撑持math.h里经常使用的内容,但仍是有一些不兼容)
削减利用C++中的函数指针和虚拟函数
不利用递归方程
精准的表达我们的交互接口
竣事语HLS 采取C说话来描写FPGA 逻辑,这将周全晋升FPGA 设计的出产力。可是HLS 的代码生成与C说话基在语法的编译要复杂的多。HLS 极力实现并行操作和优化。否则就只是一个玩具。
虽然HLS 实现机制极其复杂,可是对FPGA 算法设计者而言,领会内部机理便可以了,其实不需要领会更多细节,这就是HLS的高级的地方。
欲知详情,请下载word文档 下载文档