FPGA 可编程性与布局布线原理探究 您所在的位置:网站首页 fpga可以设计什么芯片 FPGA 可编程性与布局布线原理探究

FPGA 可编程性与布局布线原理探究

2024-06-02 08:29| 来源: 网络整理| 查看: 265

学习 FPGA 也有了一段时间,在不断 coding 的过程中,对综合、布局布线等操作感到一丝丝的困惑,特将一些个人感悟总结如下:

为什么说 FPGA 是可编程的?

以基于 SRAM 的 FPGA 举例,由于 FPGA 是极其细粒度的架构,无论是怎样的电路,综合到片上之后都将以 LUT 、触发器和 MUX 的结构组成,而一个 k 输入的 LUT 又是由 2 k 2^k 2k 个 SRAM bit 位作为选择输出,从而一个 k 输入的查找表可以配置实现任意 k 输入1输出的组合逻辑,如下图所示。

之所以说 FPGA 是可编程的,是因为这些 SRAM bit 位是可配置的,可以通过 HDL 综合出我们想要的组合逻辑函数,而又有触发器的存在,所以 FPGA 上可以实现任意一个数字电路。

在这里插入图片描述

关于布局布线(P&R)

布局布线是FPGA支持软件设计中关键的一步,主要是确定逻辑单元的位置(布局),确定逻辑单元之间的连线(布线)。

布局布线的下一阶段是编程下载,故布局布线结果需要提供给编程下载阶段作为输入。国外布局布线的学术研究主要是研究布局布线算法,采用一种简单FPGA芯片结构来验证算法的优劣。编程下载把布局布线的结果作为输入,然后生成位流文件下载到芯片中。

由于布局和布线都是NP问题,通常采用模拟退火算法来解决布局问题获得较高的解的质量,采用拥塞协商布线算法来解决布线问题,但是需要较长的运行时间。目前研究集中于降低功耗,减少延时等,没有考虑如何修改算法适用于某种实际的FPGA器件。

现如今有一些新的算法,例如将图论与 P&R 进行结合——使用最大团算法来完成布局布线问题的求解,然而依旧是 NP 难问题,无法确定能在一定时间内得到解,甚至还有采用启发式算法——如深度强化学习,巧妙地设计奖励函数,来训练智能体对问题进行求解。

互连资源

一般包括可编程的开关块,连接块,线等。开关块用来实现线与线之间互连连接块用于和逻辑块端口连接。线一般分为以下几种:

单长度线:用于2个相邻的逻辑块互连。多长度线:用于实现相隔的逻辑块互连。但是单长线和多长度线因为要经过开关矩阵,每经过一次,延时增加1次,所以信号延时不可确定。长线:跨越整个的行或者列。不经过开关阵列所以信号延时小,一般用于关键信号的传输。 一些基本资源

BLE:基本的逻辑单元,模型可由一个LUT和一个D触发器组成,包含了组合逻辑和时序逻辑。

CLB:复杂的可配置逻辑单元,由一个或一个以上的BLE组成,FPGA在此基础上进行布局布线,如下图:

在这里插入图片描述

FPGA 支持软件设计的流程

在这里插入图片描述

电路输入是把用户输入的VHDL, Verilog,电路原理图等检查语法错误后转换成逻辑网表。

逻辑综合是把逻辑网表进行逻辑优化,考虑面积减少,延迟减少,逻辑化简,功耗降低等,化简后生成优化网表。

工艺映射是把优化网表进行跟工艺相关的映射转换,比如转化成含有LUT(查找表)和flip-flop(触发器)的网表,最后生成映射后的网表。

单元划分要考虑把映射后的网表划分到实际的FPGA芯片逻辑单元,把映射后的网表中的LUT, flip-flop等合并组合成实际FPGA芯片逻辑单元,生成逻辑单元网表。

布局布线把生成的单元网表进行确定每个单元在芯片中的位置(布局),确定每个单元之间如何连线(布线)。

编程下载分2步,编程是把布局布线的结果生成可以写入到芯片的位流文件,下载是把位流文件写入FPGA芯片中。

FPGA划分和布局布线问题 划分算法回顾

RASP是一个基于SRAM的FPGA综合系统,它可以把电路划分成基于查找表LUT的逻辑单元。它创建一个图,图中顶点表示LUT,如果2个顶点之间有边表示这2个LUT可以放到同一个逻辑单元中。如果2个顶点之间没有边,可能是因为违反了逻辑单元的某些约定比如是超过了逻辑单元的最大输入数目。VPAC对输入LUT和触发器(latch)的网表,输出如图4.2的逻辑单元网表。它把图2.4的基本逻辑单元( BLE)组合成复杂的逻辑单元(CLB), CLB就是一种FPGA使用的逻辑单元。一个BLE包含一个LUT和一个Latch,而一个CLB包含多个的BLE。 在这里插入图片描述

设定cLB含有N个BLE,有I个输入,N个输出,M个时钟,LUT的大小为K。VPACK尝试在满足下面的条件下把尽量多的BLE放到一个CLB中,来减少使用的CLB的个数。

每个CLB中最多有N个BLE每个CLB中最多使用I个输入每个BLE最多使用K个输入每个CLB最多有M个时钟

VPACK分2步:首先把LUT和Latch组合成BLE,然后把BLE组合成CLB。

FPGA布局问题

FPGA布局的任务是在芯片的可变模块中安排所有的逻辑单元的位置。理想情况下布局阶段的目标是:

确保布线器能够完成布线最小化关键网络延时使芯片尽量密集

还可能会有一些附加目标:

最小化功耗最小化信号间的串扰

这些任务很难用算法的解来定义,满足要求比较困难,所以目前的布局工具一般采用更确定且可达到的准则,最常用的布局目标是下面的一个或多个:

使估计的互连总长度最小符合关键网络的时序要求使互连的拥塞最小

这些目标中的每一个或多或少都会影响到另一个,所以一般要折中考虑。布局问题是NP难问题,商用CAD工具中存在两类布局算法,早期的结构式布局算法和迭代式布局算法。结构式布局算法是用一组规则达到结构化布局。比较常用的方法是最小割算法,最小割布局算法[f}l应用了逐次划分的方法。现在最常用的是迭代式布局算法,首先产生一个初始解,然后用迭代算法来改进它。

模拟退火算法(Simulated Annealing algorithm)是目前使用最广泛的迭代式布局算法,Kirkpatrick, Gerlatt和Vecchi最先应用模拟退火算法来解VLSI问题。从那以后的经验表明模拟退火算法通常需要很慢的冷却进度,这样就需要很长的CPU运行时间。实验证明基于最小割的布局布线算法比模拟退火算法快,但是模拟退火布局算法可以获得更好的布局质量。

FPGA布线问题

FPGA的布线的任务是安排逻辑单元之间如何通过布线通道和布线开关进行连线。布线目标是下面的一个或者多个:

使互连总长度最小使布线完成的概率最大,有最好的布通性使关键路径的延迟最小

布线问题是NP完全问题,布线算法分2类,1类是分开的全局布线和详细布线算法,另1类是组合的全局布线和细节布线算法。迷宫布线器(Maze Router)是很多其他布线算法的基础,采用的是(广度)breadth-first搜索的方法,能够确保找到路径。不过这种方法的最大缺点是速度慢,尤其是一条网有很多节点的时候。

深度搜索显示了可以使用(深度)depth-first搜索的方法可以减少搜索时间,也可能找到2点间最短路径。直接搜索提出采用扩展靠近网的目标节点的方法来进行搜索,这种方法称作(直接)directed-search搜索,这种方法可以显著提高速度。下图显示了breadth-first方法和directed-search方法。网的源端(发射端)用“S”标记,网的目标端(接收端)用“T’’标记。 在这里插入图片描述 由于FPGA布线资源是有限制的,布线算法要处理布线拥塞问题。如果一个网使用了过多的特殊资源,那么可能就不能够对其他的网进行布线,从而导致布线失败。有2种方法来解决这个问题,1种方法称作擦除(rip-up)重布(re-route) ,在这种方法下,使用了过多资源的网被擦除,然后重新对这些网进行布线。布线成功取决于选择哪些网进行擦除和重新布线。

另外一种解决拥塞问题的改进方法是多次迭代(multi-iteration),它是在擦除重布的基础上改进的。每次迭代是对所有的网进行擦除和重布一次,它不是一次擦除所有的网,而是每次擦除一个网,在其他网存在的基础上进行重新布局这个网。

早期的布线算法采用的是分开的全局布线和详细布线算法,它是先执行全局布线,再执行详细布线。全局布线是为了给每个网选择互连线,但是不选择具体的通道和开关。详细布线选择具体的通道和开关。这类算法有CGE(Course GraphExpansion), SEGA(Segment Allocator), FPR等。由于先全局布线后详细布线的方法为了容易实现,把布线分成了2部分,全局布线不知道开关盒和连接盒的结构,详细布线可能不能够使用全局布线的结果布通所有的网,布线效果不是很理想。后来发展了组合的布线算法,可以一次布线时做到全局布线和详细布线,从而综合考虑所有布线资源,获得比较好的效果。使用组合的布线算法如TRACER是一个考虑时序的布线工具,GBP(Greedy Bin Packing)是一个考虑布通性的布线工具。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有