pp4fpga-Chapter 1 简介

目标:HLS代码优化设计

1.1 HLS high level synthesis

1 EDAElectronic Design Automation,电子设计自动化)工具可以先把RTL转化为数电模型,再由模型转换成一个设备上的具体电路实现方案。

2 HLS的目标是根据用户提供的输入和限制,替用户做出很多决定。

3 HLS使用规范:

① 不使用动态内存分配(malloc(), free(), new 和 delete());

减少使用指针对指针的操作!!!

③ 不使用系统调用(abort(),exit(), printf()),综合的时候这些代码会被无视(或者直接删掉)

④ 减少使用其他标准库中的内容(支持math.h里常用的内容,但还有一些不兼容 ,可以用hls_math.h这个后面如果有必要的话还会再分析,因为我在调用数学函数时出现了问题)

减少使用C++中的函数指针和虚拟函数

⑥ 不使用递归方程(递归:在运行过程中不断调用自己)

4 HLS 设计完成后进行的操作

当RTL级设计可用时,Vivado HLS设计套装里进行的是逻辑综合,将RTL级设计转换成一个FPGA逻辑部件的连线表,该连线表包含需要的逻辑部件以及它们之间的连线方式。Vivado之后将连线表和目标设备中的可用资源相关联,该过程称为布局布线palce and route,用户可以将生成的比特流(只能说HLS生成IP核后在vivado中设计后生成bit stream)上传到FPGA以实现想要的功能。

1.2 FPGA构造

1 FPGA构造

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

相当于一个寄存器只有0和1两个信号,通过不同寄存器值之间的逻辑组合成为一个逻辑真值表,当外部信号输入后,最终 都转换成 0,1值,FPGA自动通过查找LUT来输出最终结果。实际上FPGA大多使用4-6位输入的查找表作为运算基础。

2 FPGA内存单位--触发器TT,slice, BRAM

2.1 TT

触发器(TT,trigger)是FPGA基本的内存单位。通常触发器是配有查找表的,以便于查找表之间的复制与组合。在此基础上加入一个规定它们的 函数,就可以创建为一个更复杂的逻辑单位,即可配置逻辑块(CLB)或逻辑矩阵块(LAB)也被称为片slice。

一个slice是几个查找表LUT,触发器FF,和多路复用器MUX组合到一起而形成的更强大的可编程逻辑单位。

2.2 slice 

可编写的互联 是FPGA的关键特性,它能提供一个slice之间更灵活的连线网络。slice的输入与输出全都与连线通道相连,连线通多通过配置比特来决定每个slice之间的输入和输出通向哪里,而通道本身则与开关盒相连。(开关盒由很多传输晶体管充当的开关所组成,其工作是连接通道与通道。)所谓连线通道,可以理解为一跟比特层级的跳线,在物理层级上这条线路是由传输晶体管构成,同样具有可编写性。开关盒像是一个连接矩阵,沟通不同连接通道中的各个路线。FPGA一般有一个2D形式,能给使用者一个大概2D的计算模型即 岛状结构。 每个开关盒上下左右四个方向连接了四个连线通道。

FPGA的逻辑部分通过一些IO模块与外部设备相联系,像微控制器,传感器,作动器(通过D/A接口连接电机)。

2.3 BRAM

BRAM(块RAM,约32000bits)是另一个预配好的模块。BRAM是一个支持多种内存形式和接口的可配置随机存储器,可以存储字节、对字、全字、双字等。BRAM还可以把这些数据传给本地片上总线或处理器总线等接口.其功能可以表述为:1 芯片上各个部分的数据转移;2存储大的数据集。

BRAM在不牺牲很大带宽的前提下,提供了更大的存储密度。带宽的牺牲主要在于每个周期BRAM只有1-2个入口可以被接通。外部内存对于带宽的牺牲更大,但提供了最大的容量。HLS允许设计者指明到底将这段数据放在哪里。

3 带处理器的FPGA

在FPGA上附有处理器,使得FPGA具有了运行操作系统的能力,如Linux。它可以通过驱动和外部设备进行交流,可以运行更大的软件包比如OpenCV,可以运行更高级的语言python以更快的速度运行。处理器经常成为了整个系统的控制者,协调了各方之间的数据传输,也协调了各个IP核心和板上资源的关系。

 1.3 FPGA设计与处理

1 FPGA的结构

        FPGA的设计更多是由一个个大组件或IP核组件而成,在整个设计的外围临近I/O引脚的地方通常是一些少量的逻辑,一般用于完成时序和协议,比如内存控制模块,视频接口核心或者模拟数字转换器等。这部分被称为I/O接口核,通常以RTL形式构架并需要加上其他的时序限制。

时序限制的目的:阐明信号蔓延到电路板和连接装置的影响。使用I/O引脚附近逻辑的考虑是为了高速接口的实施需要,这些逻辑更适合在高速前提下实现数据的序列化和反序列化,时钟的恢复与分布和精准延迟某些信号,以不断从寄存器中获取数据。

        除了I/O引脚,FPGA一般会有标准核,处理器核心,片上内存核连接开关都属于标准核。标准核还包括原生的哈数处理部件如滤波器,FFT快速傅里叶变换,编解码器等。标准核心主要是同步电路,它除了时序时钟限制之外不大有限制。

        最后一种核心:加速器核。加速核通常由时钟限制而规定的同步电路,这些核是系统设计师在具体应用中不可避免要接触的部分。

        基于FPGA的系统设计方法:1 以核为基础的设计方法 将HLS产生的加速器核当作一个普通的核。用HLS创造出这种核之后将其与IO接口核和标准核组合到一起,得到完整的设计。     2 以平台为基础的设计方法 先用IO接口核和标准核组合出一个样板,然后再通过HLS用壳shell的接口将各式算法或对象组合进去,只要壳支持双边的接口,加速器核在平台与平台之间的移动也非常容易。

1.4 设计优化

1 性能特点

衡量设计好坏的标准: 计算时间;

任务task是表示一个行为的基本单位,在HLS中与之对应的是调用函数。

任务延迟就是任务开始到任务完成中间的这段时间。

任务间隔(又称为生产力,throughput)是任务开始到下一个任务开始之间的时间。

所有的任务输入,输出和计算的时间都属于任务延迟,但很多任务的开始不等同于读取输入,同样任务的结束也不等同于写入输出。数据率同时取决于任务间隔和函数参数的多少。

 

左侧的图表示:每一个周期都执行新任务。对应fully-pipelined结构。

右侧表示系统每次读取四段输入,处理数据,然后再合成一个4段输出。这种结构的任务延迟和任务间隔相同,且每个周期只有一个任务再执行。

1.5 处理速率的限制

1 递归 recurrance,这里是指某个部件的计算需要这个部件之前一轮计算的结果,递归是限制产力throughput的重要因素,即使在流水结构中也是如此。顺序化结构递归虽不影响处理速率,但是在流水结构中是一个很不理想的状况。

2 资源限制 ,其中一中形式就是设计边缘线路,由于一个同步电路中的每根跳线在每周期只能抓取传送1bit数据,因此如果int32_t f这样形式的函数作为一个单独模块在100MHz的频率和1的任务间隔下运行,它最大的数据处理量就是3.2Gbit. 另一种资源限制来自于用户给的限制,如果用户规定了在综合中可用的操作数,就是给处理率添加了限制条件。

1.6 重建代码

接下来会学到 几个应用程序用于产出硬件结构的代码,具体包括RTL,FIR,DFT,FFT, SpMV稀疏矩阵乘矢量,矩阵相乘,排序,哈夫曼编码。

并且针对每一种方法:

强调重建代码对于高质量设计的重要性,比如在高性能和低使用面积上。

对常见的内容提供重建的代码;

讨论重建对硬件的影响;

使用必要的HLS指令以实现最好的设计。

                                                                                                 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小菜鸡变形记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值