FPGA硬件加速学习 vivado hls --------------- 002

参考如下链接:
https://github.com/xupsh/pp4fpgas-cn

简介

需要充分理解 内存层级和带宽、空间局部性与时间局部性、并行结构和计算与存储之间的取舍和平衡。
可参考UCSD的 CSE 237C
总体来说,HLS可以自动完成以下曾经需要手动完成的工作:

  • HLS自动分析并利用一个算法中潜在的并发性
  • HLS自动在需要的路径上插入寄存器,并自动选择最理想的时钟
  • HLS自动产生控制数据在一个路径上出入方向的逻辑
  • HLS自动完成设计的部分与系统中其他部分的接口
  • HLS自动映射数据到储存单位以平衡资源使用与带宽
  • HLS自动将程序中计算的部分对应到逻辑单位,在实现等效计算的前提下自动选取最有效的实施方式

根据Vivado HLS的使用指南,我们将对我们的输入程序作出以下规范:

  • 不使用动态内存分配(不使用malloc(),free(),new和delete())
  • 减少使用指针对指针的操作 不使用系统调用(例如abort(),exit(),printf()),我们可以在其他代码例如测试平台上使用这些指令,但 是综合的时候这些指令会被无视(或直接删掉)
  • 减少使用其他标准库里的内容(支持math.h里常用的内容,但还是有一些不兼容)
  • 减少使用C++中的函数指针和虚拟函数
  • 不使用递归方程
  • 精准的表达我们的交互接口

FPGA的构造

FPGA由一个可编程逻辑模块的矩阵和与之相连的内存组成,通常这些模块是以查找表(LUT)的形式 存在,也就是说把地址信号输入进去,对应内存位置的内容会直接被输出出来。一个N位查找表可以以一个 N位输入真值表的方式来表示。
在这里插入图片描述

触发器(FF)是FPGA最基本的内存单位,通常触发器是配有查找表的,这样是为方便查找表之间的复 制与组合。在这基础上再加入一个规定它们的函数(例如全加器),就可以创建一个更为复杂的逻辑单 位,称为可配置逻辑块(CLB)或逻辑矩阵块(LAB)。有些设计工具中还会把它称作片(Slice)。为避 免歧义,我们将在下文中用slice作描述,这样读者可以对在Vivado设计工具中出现的Slice更加熟悉。一个 slice是几个查找表,触发器,和多路复用器(MUX)组合到一起而形成的更强大的可编程逻辑单位。每个 slice需要的小部件数视FPGA的架构而变,但总体来说每个slice真的只包含不多的几个部件。图1.1中的c部 分就是由1个三位输入查找表和1个触发器组成的slice。slice可以变得更加复杂一点,比如常见的全加器。 FPGA内部通常有一些定义好的全加器slice,这看起来有点违背FPGA的"可编写性"。但实际上使用全加器在 硬件设计中太过于常见,把所有的全加器每次重新编写成一个slice会降低效率。灵活性和高效综合考虑, 一些被配置好的slice是一个对整个系统有益的设计。

在这里插入图片描述
图1.2:由查找表和触发器组成的slice,通常slice比图上结构更加复杂一点,slice之间通过连线通道(routing channel)和开关盒(switchbox)相连,这两个用于连接的设备提供了一个同样可编写的互联和自定义的数 据传输方向。开关盒是一个包含很多开关(传输晶体管制成)的部分,提供了编写传输路径的能力

可编写的互联是FPGA最关键的特性之一,它能提供一个slice之间更灵活的连线网络。slice的输入与输 出全都与连线通道相连,连线通道也是通过配置比特来决定每个slice的输入输出通向哪里,而通道本身则 与开关盒相连。开关盒由很多传输晶体管充当的开关所组成,它的工作便是连接通道与通道。
图1.2展示了一个slice,连线通道和开关盒之间的连接方式。slice的每个输入输出都应与通道中的一条 路线相连。所谓路线,我们可以简单的把它想成一跟比特层级的跳线,在物理层级上这条线路是由传输晶 体管构成的,同样具有可编写性。

开关盒像是一个连接矩阵,沟通不同连接通道中的各个路线。FPGA一般有一个2D的形式,能给使用者 一个大概的2D计算模型,我们称之为岛状结构。在岛状结构里,每个slice都是一个逻辑岛,岛与岛之间通 过连线通道和开关盒相连。在这里每个开关盒在上下左右四个方向连接了四个连线通道。

在这里插入图片描述
图1.3:2D的FPGA岛状结构。每个slice内的逻辑与内存通过连接通道和开关盒相连。IO模块有一个对外接 口,可以通往内存,处理器,传感器等等。一些FPGA上IO直接与芯片引脚相连,一些FPGA则用起连接逻 辑架构和片上的一些资源。

在这里插入图片描述
图1.4:现代FPGA变得更加异构化,一些FPGA除了可编程部分之外,加入了很多预配好的结构比如寄存器 堆,自定义数据路径,高速互联等等。现如今FPGA通常配有一个或多个处理器,比如ARM或x86核,两者 协同控制系统。

我们说到FPGA上要承载的晶体管变得越来越多,这也是FPGA上多了很多预配好的资源的原因。这部 分硬件用于完成特定工作。很多设计都需要大量的加法和乘法,因此FPGA厂商把这部分的内容预配好以直 接使用。像DSP48数据路径已经被用一种高效的方法预配好,添加了乘法、加法、乘积、逻辑操作等一系 列算数。对于DSP48这样的模块来说,它们依旧保留了一定的可编写性,但不像其他可编程逻辑那样完全 灵活。这样综合而言,用户在DSP48这样的模块上进行乘法这样的操作会比重新编写高效的多。所以我们 说灵活性和效率有时候是此消彼长的。

块RAM(BRAM)是另一个预配好的模块。BRAM是一个支持多种内存形式和接口的可配置随机储存 器,可以储存字节,对字,全字,双字等等等。BRAM还可以把这些数据传给本地片上总线(与可编程逻 辑交流)或处理器总线(与片上处理器交流)等等接口。总体来说它有两个功能,一是芯片上各部分的数 据转移,二是储存大一些的数据集。slice经过编写也可以储存数据(通过触发器),但这样做会增加额外 消耗。

FPGA设计与处理

在这里插入图片描述
设想中的嵌入式FPGA设计结构图,包括接口核心(蓝色框),标准核(绿色框),和应用加速核 (紫色框)。注意应用加速核也可能自带流接口,内存对应

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值