




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第第页传统FPGA开发方式讲解简介
对于一个软件开发人员,可能听说过(FPGA),甚至在大学课程设计中,可能拿FPGA做过计算机体系架构相关的验证,但是对于它的第一印象可能觉得这是(硬件)(工程师)干的事儿。
目前,随着(人工智能)的兴起,(GPU)借助(深度学习),走上了历史的舞台,并且正如火如荼的跑者各种各样的业务,从tr(ai)ning到inference都有它的身影。FPGA也借着这股浪潮,慢慢地走向数据中心,发挥着它的优势。所以接下来就讲讲FPGA如何能让(程序员)们更好友好的开发,而不需要写那些烦人的RTL代码,不需要使用VCS,Model(sim)这样的(仿真)软件,就能轻轻松松实现unit(te)st。
实现这一(编程)思想的转变,是因为FPGA借助OpenCL实现了编程,程序员只需要通过C/(C++)添加适当的pragma就能实现FPGA编程。为了让您用OpenCL实现的FPGA应用能够有更高的性能,您需要熟悉如下介绍的硬件。另外,将会介绍编译优化选项,有助于将您的OpenCL应用更好的实现RTL的转换和映射,并部署到FPGA上执行。
FPGA概览
FPGA是高规格的(集成电路),可以实现通过不断的配置和拼接,达到无限精度的函数功能,因为它不像(CPU)或者GPU那样,基本数据类型的位宽都是固定的,相反FPGA能够做的非常灵活。在使用FPGA的过程中,特别适合一些low-level的操作,比如像bitmasking、shif(ti)ng、(ad)dition这样的操作都可以非常容易的实现。
为了达到并行化计算,FPGA内部包含了查找表(LUTs),(寄存器)(register),片上存储(on-chipmem(or)y)以及算术运算硬核(比如(数字信号)(处理器)((DSP))块)。这些FPGA内部的模块通过(网络)连接在一起,通过编程的手段,可以对连接进行配置,从而实现特定的逻辑功能。这种网络连接可重配的特性为FPGA提供了高层次可编程的能力。(FPGA的可编程性就体现在改变各个模块和逻辑资源之间的连接方式)
举个例子,查找表(LUTs)体现的FPGA可编程能力,对于程序猿来说,可以等价理解为一个存储器((RAM))。对于3-bits输入的LUT可以等价理解为一个拥有3位地址线并且8个1-bit存储单元的存储器(一个8长度的数组,数组内每个元素是1bit)。那么当需要实现3-bits数字按位与操作的时候,8长度数组存的是3-bits输入数字的按位与结果,一共是8种可能性。当需要实现3-bits按位异或的时候,8长度数组存的是3-bits输入数字的按位异或结果,一共也是8种可能性。这样,在一个(时钟)周期内,3-bits的按位运算就能够获取到,并且实现不同功能的按位运算,完全是可编程的(等价于修改RAM内的数值)。
3-bits输入LUT实现按位与(bit-wiseAND)示例:
注:3-bits输入LUT查找表
我们看到的三输入的按位与操作,如下所示,在FPGA内部,可通过LUT实现。
如上展示了3输入,1输出的LUT实现。当将LUT并联,串联等方式结合起来后就可以实现更加复杂的逻辑运算了。
传统FPGA开发
传统FPGA与软件开发对比
对于传统的FPGA开发与软件开发,工具链可以通过下表简单对比:
注:传统FPGA与软件开发对比表
重点介绍一下,编译阶段的Synthesis(综合),这部分与软件开发的编译有较大的不同。一般的处理器CPU、GPU等,都是已经生产出来的(ASIC),有各自的指令集可以使用。但是对于FPGA,一切都是空白,有的只是零部件,什么都没有,但是可以自己创造任何结构形式的电路,自由度非常的高。这种自由度是FPGA的优势,也是开发过程中的劣势。
传统的FPGA开发就像10岁时候的(Linux),想吃一个蛋糕,需要自己从原材料开始加工。FPGA正是这种状态,想要实现一个(算法),需要写RTL,需要设计状态机,需要仿真正确性。
传统FPGA开发方式
复杂系统,需要使用有限状态机(FSM),一般就需要设计下图包含的三部分逻辑:组合电路,时序电路,输出逻辑。通过组合逻辑获取下一个状态是什么,时序逻辑用于存储当前状态,输出逻辑混合组合、时序电路,得到最终输出结果。
然后,针对具体算法,设计逻辑在状态机中的流转过程:
实现的RTL是这样的:
modulefsm_using_single_always(
clock
,//clockreset
,//(Ac)tivehigh,synresetreq_0
,//Request0req_1
,//Request1gnt_0
,//Grant0gnt_1
);//=============InputPorts=============================input
clock,reset,req_0,req_1;//=============OutputPorts===========================output
gnt_0,gnt_1;//=============InputportsDataType===================wire
clock,reset,req_0,req_1;//=============OutputPortsDataType==================reg
gnt_0,gnt_1;//=============InternalConstants======================parameterSIZE=3
;
parameterIDLE
=3'b001,GNT0=3'b010,GNT1=3'b100;//=============InternalVariables======================reg
[SIZE-1:0]
state
;//SeqpartoftheFSMreg
[SIZE-1:0]
next_state
;//combopartofFSM//==========CodestartesHere==========================always@(posedgeclock)begin:FSMif(reset==1'b1)begin
state#GenerateHostexe.$make#Toruntheapplication$envCL_CONTEXT_EMULATOR_DEVICE_ALTERA=8./bin/host-ah=512-aw=512-bw=512
上述脚本中,通过
-march=emulator设置创建一个可用于CPUdebug的设备可执行文件。-g添加调试flag。—board用于创建适配该设备的debugging文件。CL_CONTEXT_EMULATOR_DEVICE_ALTERA为用于CPU仿真的设备数量。
当执行上述脚本后,输出如下:
$envCL_CONTEXT_EMULATOR_DEVICE_ALTERA=8./bin/host-ah=512-aw=512-bw=512Matrixsizes:
A:512x512
B:512x512
C:512x512InitializingOpenCL
Platform:AlteraSDKforOpenCL
Using8device(s)
EmulatorDevice:EmulatedDevice
...
EmulatorDevice:EmulatedDevice
UsingAOCX:matrix_mult.aocx
Generatinginputmatrices
Launchingfordevice0(globalsize:512,64)
...
Launchingfordevice7(globalsize:512,64)
Time:5596.620ms
Kerneltime(device0):5500.896ms
...
Kerneltime(device7):5137.931ms
Throughput:0.05GFLOPS
Computingreferenceoutput
Verifying
Verification:PASS
通过仿真时候设置Device=8,模拟8个设备运行(512,512)*(512,512)规模的矩阵,最终验证正确。接下来就可以将其真正编译到FPGA设备上后运行。
FPGA设备上运行矩阵乘
这个时候,真正要将代码下载到FPGA上执行了,这时候,只需要做一件事,那就是用OpenCLSDK提供的编译器,将
*.cl代码适配到FPGA上,执行编译命令如下:
$aocdevice/matrix_mult.cl-obin/matrix_mult.aocx--fp-relaxed--fpc--no-interleavingdefault
--board
这个过程比较慢,一般需要几个小时到10几个小时,视FPGA上资源大小而定。(目前这部分时间太长暂时无法解决,因为这里的编译,其实是在行程一个能够正常工作的电路,软件会进行布局布线等工作)
等待编译完成后,将生成的matrix_mult.aocx文件烧写到FPGA上就ok啦。
烧写的命令如下:
$aoclprogrammatrix_mult.aocx
这时候,大功告成,可以运行host端程序了:
$./host-ah=512-aw=512-bw=512Matrixsizes:
A:512x512
B:512x512
C:512x512InitializingOpenCL
Platform:AlteraSDKforOpenCL
Using1device(s)
:AlteraOpenCLQPIFPGA
UsingAOCX:matrix_mult.aocx
Generatinginputmatrices
Launchingfordevice0(globalsize:512,512)
Time:2.253ms
Kerneltime(device0):2.191ms
Throughput:119.13GFLOPS
Computingreferenc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 车队运输时效保障合同范本模板
- 餐饮加盟商信息保密合同范本
- 餐饮业店铺租赁合同及食品安全责任书
- 芯片销售保密协议书范本
- 中草药购销协议书范本
- 餐饮店股东合作协议及知识产权保护
- 甜品店品牌授权及区域代理合同
- 生态环保项目拆旧房屋搬迁与补偿协议范本
- 古董拍卖委托授权合同模板
- 餐饮业股权并购及品牌授权与经营合同
- 人教部编版五年级下册语文期末复习现代文阅读(含课内、课外)专项训练(三)(含答案)
- 育苗基地可行性研究报告
- 植物拓染教学课件
- 访谈保密协议书范本
- 医务人员职业暴露预防及处理课件
- 2025-2030年中国地效飞行器行业市场运行态势及发展前景研判报告
- 房地产市场报告 -2025年第一季度天津写字楼和零售物业市场概况报告
- 2025年全国中小学生安全知识网络竞赛试题及答案(共150题)
- 【中兴通讯】2025年AI RAN白皮书
- 输血管理委员会2024年工作总结
- 北京市朝阳区2023-2024学年七年级下学期期末地理试卷(原卷版)
评论
0/150
提交评论