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

为什么说 FPGA 是可编程的?

以基于 SRAM 的 FPGA 举例,由于 FPGA 是极其细粒度的架构,无论是怎样的电路,综合到片上之后都将以 LUT 、触发器和 MUX 的结构组成,而一个 k 输入的 LUT 又是由 2k2^k2k 个 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 支持软件设计的流程

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

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

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

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

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

  6. 编程下载分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的个数。

  1. 每个CLB中最多有N个BLE
  2. 每个CLB中最多使用I个输入
  3. 每个BLE最多使用K个输入
  4. 每个CLB最多有M个时钟

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

FPGA布局问题

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

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

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

  1. 最小化功耗
  2. 最小化信号间的串扰

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

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

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

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

FPGA布线问题

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

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

布线问题是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)是一个考虑布通性的布线工具。

FPGA 可编程性与布局布线原理探究相关推荐

  1. 今日说“法”:FPGA“可编程” 的 “魅惑”

    今日说"法":FPGA"可编程" 的 "魅惑" 欢迎大侠来到FPGA技术江湖新栏目今日说"法",当然,在这里我们肯定不是 ...

  2. mvcc原理_MVCC原理探究及MySQL源码实现分析

    沃趣科技数据库专家  董红禹 MVCC原理探究及MySQL源码实现分析 数据库多版本读场景 session 1 session 2 select a from test; return a = 10 ...

  3. (18)FPGA面试题查找表的原理与结构

    1.1 FPGA面试题查找表的原理与结构 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题查找表的原理与结构: 5)结束语. 1.1.2 本节引言 &quo ...

  4. 计算机信息管理系统设计原理探究,计算机信息管理系统设计原理探究

    盛巍 摘 要:在计算机信息技术发展和应用速度不断提升的背景之下,我国社会各个行业的计算机信息管理系统需求不断提升.人们可以通过计算机信息管理系统收集自己需要的信息资料,并对数据信息进行分析,在各项决策 ...

  5. (176)FPGA与门实现门控时钟原理

    (176)FPGA与门实现门控时钟原理 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA与门实现门控时钟原理: 5)结束语. 1.1.2 本节引言 "不 ...

  6. Source Map的原理探究

    摘要: Source Map很神奇,它的原理挺复杂的- 原文:source map 的原理探究 地址:https://www.cnblogs.com/Wayou/p/understanding_fro ...

  7. SQL Servr 2008空间数据应用系列六:基于SQLCRL的空间数据可编程性

    友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. 2.具备 Transact-SQL 编程经验和使用 SQL Server Ma ...

  8. java lock的原理,Java中Lock原理探究

    在对于lock锁的使用上,很多人只是掌握了最基础的方法,但是对实现的过程不是很清楚.这里我们对lock锁功能的实现进行分析,以ReentrantLock为例,分析它的锁类型,并对相关的调用方法进行展示 ...

  9. vmware nat模式原理探究,实现虚拟机跨网段管理

    vmware nat模式原理探究: 理解nat模式,我们能更加了解主机与虚拟机之间如何通信,以及虚拟机如何实现上网. 以及便于我们分析虚拟机与主机无法通信和无法上外网的问题. 下面通过实战:虚拟网络拓 ...

  10. SQL Server 2008空间数据应用系列六:基于SQLCRL的空间数据可编程性

    友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. 2.具备 Transact-SQL 编程经验和使用 SQL Server Ma ...

最新文章

  1. 0基础该如何学Python?这些方法你必须了解
  2. 年终盘点:2015年人工智能的五大关键词
  3. 周志华《机器学习》课后习题(第三章):线性模型
  4. 手机端双击页面放大的问题
  5. 做Tiktok如何选择地区?
  6. 奈飞文化手册_《奈飞文化手册》速阅提炼分享4
  7. 《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·007【简单查询】
  8. Vue2版Cnode社区webapp
  9. 穿越计算机的迷雾--读书笔记五
  10. UE4-蓝图-角色的移动,视角控制(五)人物走动到停下过度动画
  11. 《影响中国大数据产业进程100人》 刘冬冬: 数据如何来支持新的商业战争
  12. ps设计精讲精练笔记
  13. Android自定义View之滑杆内部带数字的SeekBar
  14. 最快的扫雷记录,初级只需要0.49秒,一眨眼就结束的操作!
  15. 【干货】游戏开发团队部门岗位
  16. matlab单边带调制器设计,通信系统综合设计与实践(基于MATLAB的单边带调制)研究.doc...
  17. K8S 报错笔记--持续更新
  18. 用google搜索图书的方法
  19. 模式识别(八)神经网络(BPNNCNN)识别细胞数据集
  20. IOS越狱相关-2017

热门文章

  1. linux 串口驱动
  2. 【黑客工作台特效-----附 效果 + 源代码】
  3. php 61850,IEC61850客户端
  4. 计算机网络原理最详细解说
  5. 端口映射器与端口映射软件的区别及内网发布网站到外网的使用
  6. Weblogic 部署两个应用
  7. 安装SqlServer 2017 时出现“Polybase要求安装Oracle JRE 7 更新51(64位)或更高版本规则失效”报错的解决办法
  8. 高等数学辅导讲义_历年真题,复习讲义的经验分享(数二127分)
  9. Linux内核启动过程学习
  10. mysql中文模糊查询_解决mysql中文模糊查询问题的方法