阅读本文的人群:熟悉数字电路基本知识(如加法器、计数器、RAM等),熟悉基本的同步电路设计方法,熟悉HDL语言,对FPGA的结构有所了解,对FPGA设计流程比较了解。
一.序 言
1.FPGA的好处
设计工程师不在需要画繁琐的原理图PCB连线,从而将工作重心转移到功能实现上,极大地提高了工作效;随着HDL(Hardware Description Language)硬件描述语言语言综合工具及其它相关工具的推广已经加大的FPGA的应用普及。
2.工程师们在使用FPGA时的一些坏习惯
任何事务都是一分为二的,有利就有弊。
我们发现现在越来越多的工程师不关心自己的电路实现形式,以为“我只要将功能描述正确,其它事情交给工具就行了”。
在这种思想影响下,工程师在用HDL语言描述电路时,脑袋里没有任何电路概念,或者非常模糊;也不清楚自己写的代码综合出来之后是什么样子,映射到芯片中又会是什么样子,有没有充分利用到FPGA的一些特殊资源。遇到问题,首先想到的是换速度更快、容量更大的FPGA器件,导致物料成本上升;更为要命的是,由于不了解器件结构,更不了解与器件结构紧密相关的设计技巧,过分依赖综合等工具,工具不行,自己也就束手无策,导致问题迟迟不能解决,从而严重影响开发周期,导致开发成本急剧上升。
3.学好FPGA应该要具备的知识
目前,我们的设计规模越来越庞大,动辄上百万门、几百万门的电路屡见不鲜。同时我们所采用的器件工艺越来越先进,已经步入深亚微米时代。而在对待深亚微米的器件上,我们的设计方法将不可避免地发生变化,要更多地关注以前很少关注的线延时(我相信,ASIC设计以后也会如此)。
如果我们不在设计方法、设计技巧上有所提高,是无法面对这些庞大的基于深亚微米技术的电路设计。而且,现在的竞争越来越激励,从节约公司成本角度出发,也要求我们尽可能在比较小的器件里完成比较多的功能。
二.谈谈FPGA的工具几个关键问题
4.关于我们对FPGA工具过分依赖的问题认识
硬件描述语言和综合工具的产生,极大地提高了工程师的工作效率。然而,随着它们的普及与推广,一种不好的现象也在逐步蔓延;在设计过程中,只关注功能是否实现,而不考虑或很少考虑电路到底是如何实现的;过分依赖综合等工具来提高设计性能(如速度、面积等),而不是从设计本身来考虑自己的电路是否最佳。
如果将设计看成是一个化学变化,那么工具只是起到催化剂的作用,我们所掌握的背景知识、电路设计方法及有关技巧,才是参加化学反应的分子,是起决定作用的因素。
因此,设计遇到困难时,不能完全指望工具,更不能怪罪工具。只有我们才是决定设计成败的关键。
5.不管使用何种综合工具,都包括两个过程
过程1:是把行为级的描述通过一定的算法转化为门级的描述,该过程与设计的工艺库无关、与用户约束无关。
过程2:是把已经转化的门级描述在用户的约束下,通过算法映射到相应的工艺库中的器件上。对ASIC,是映射到厂商的Gate库中,对FPGA,是映射到FPGA器件的单元结构中。
从上两个步骤可知,当设计代码的的风格不一样时,则在综合第一步就已大部分决定了设计的性能(对ASIC来说,因为是转成Gate, 器件库一般也是Gate, 相对影响较少)因此,我们不难理解代码风格对FPGA设计的重要性。
6.说说具体的综合工具性能
不同综合工具的针对目标不一致和各综合工具的不同性能,导致了综合出来的结果也不同。
目前,综合工具主要有DC(Design Compiler)、FC2(FPGA Compiler II)、Synplify、Leonardo、Galileo 等综合工具:
1)DC:主要是用于ASIC的综合工具
2)FC2:是DC在FPGA综合方面的增强版
3)Leonardo:是做FPGA综合工具的先驱
4)Synplify:是目前成长最快的综合工具(由Synplicity公司出品)
无论哪家综合工具,对FPGA的综合,都必须紧密结合各FPGA厂家的FPGA结构,否则无法更好利用FPGA提供的优点;从目前来看,优选Synplify或Leonardo综合工具;DA的FPGA综合性能差但事宜ASIC综合。
到目前为止第三方的综合工具都未能很好利用FPGA器件,因为代码风格没有跟上,导致无法得到很好的性能。
7.逻辑代码风格的重要性
因为综合工具无法最大使用到器件所提供的优越性能,导致最终的产品性能变差;若想得到更好的性能,这要求在FPGA设计上,最好对一些设计采用一些Core(但这种基于FPGA器件(特有工艺)的代码设计,将降低设计代码的重用性能、以及FPGA设计与ASIC设计的兼容性)。
8.举例:以Xilinx为例,我们怎样采取恰当的代码风格,以提高电路性能:
1) 资源共享的应用限制在同一个module里。这样,综合工具才能最大限度地发挥其资源共享综合作用。
2) 尽可能将Critical path上所有相关逻辑放在同一个module里。这样,综合工具能够发挥其最佳综合效果。
3) Critical path所在的module与其它module分别综合,对critial path采用速度优先的综合策略,对其它module采用面积优先的综合策略。
4) 尽可能Register所有的Output。做到这一点,对加约束比较方便;同时一条路径上的组合逻辑不可能分散在各个module里,这对综合非常有利。可以比较方便地达到面,积速度双赢的目的。
5) 一个module的size不能太大。具体大小,由各综合工具而定。
6) 一个module尽量只有一个时钟,或者整个设计只有一个时钟。
引用地址:我学习FPGA的总结
一.序 言
1.FPGA的好处
设计工程师不在需要画繁琐的原理图PCB连线,从而将工作重心转移到功能实现上,极大地提高了工作效;随着HDL(Hardware Description Language)硬件描述语言语言综合工具及其它相关工具的推广已经加大的FPGA的应用普及。
2.工程师们在使用FPGA时的一些坏习惯
任何事务都是一分为二的,有利就有弊。
我们发现现在越来越多的工程师不关心自己的电路实现形式,以为“我只要将功能描述正确,其它事情交给工具就行了”。
在这种思想影响下,工程师在用HDL语言描述电路时,脑袋里没有任何电路概念,或者非常模糊;也不清楚自己写的代码综合出来之后是什么样子,映射到芯片中又会是什么样子,有没有充分利用到FPGA的一些特殊资源。遇到问题,首先想到的是换速度更快、容量更大的FPGA器件,导致物料成本上升;更为要命的是,由于不了解器件结构,更不了解与器件结构紧密相关的设计技巧,过分依赖综合等工具,工具不行,自己也就束手无策,导致问题迟迟不能解决,从而严重影响开发周期,导致开发成本急剧上升。
3.学好FPGA应该要具备的知识
目前,我们的设计规模越来越庞大,动辄上百万门、几百万门的电路屡见不鲜。同时我们所采用的器件工艺越来越先进,已经步入深亚微米时代。而在对待深亚微米的器件上,我们的设计方法将不可避免地发生变化,要更多地关注以前很少关注的线延时(我相信,ASIC设计以后也会如此)。
如果我们不在设计方法、设计技巧上有所提高,是无法面对这些庞大的基于深亚微米技术的电路设计。而且,现在的竞争越来越激励,从节约公司成本角度出发,也要求我们尽可能在比较小的器件里完成比较多的功能。
二.谈谈FPGA的工具几个关键问题
4.关于我们对FPGA工具过分依赖的问题认识
硬件描述语言和综合工具的产生,极大地提高了工程师的工作效率。然而,随着它们的普及与推广,一种不好的现象也在逐步蔓延;在设计过程中,只关注功能是否实现,而不考虑或很少考虑电路到底是如何实现的;过分依赖综合等工具来提高设计性能(如速度、面积等),而不是从设计本身来考虑自己的电路是否最佳。
如果将设计看成是一个化学变化,那么工具只是起到催化剂的作用,我们所掌握的背景知识、电路设计方法及有关技巧,才是参加化学反应的分子,是起决定作用的因素。
因此,设计遇到困难时,不能完全指望工具,更不能怪罪工具。只有我们才是决定设计成败的关键。
5.不管使用何种综合工具,都包括两个过程
过程1:是把行为级的描述通过一定的算法转化为门级的描述,该过程与设计的工艺库无关、与用户约束无关。
过程2:是把已经转化的门级描述在用户的约束下,通过算法映射到相应的工艺库中的器件上。对ASIC,是映射到厂商的Gate库中,对FPGA,是映射到FPGA器件的单元结构中。
从上两个步骤可知,当设计代码的的风格不一样时,则在综合第一步就已大部分决定了设计的性能(对ASIC来说,因为是转成Gate, 器件库一般也是Gate, 相对影响较少)因此,我们不难理解代码风格对FPGA设计的重要性。
6.说说具体的综合工具性能
不同综合工具的针对目标不一致和各综合工具的不同性能,导致了综合出来的结果也不同。
目前,综合工具主要有DC(Design Compiler)、FC2(FPGA Compiler II)、Synplify、Leonardo、Galileo 等综合工具:
1)DC:主要是用于ASIC的综合工具
2)FC2:是DC在FPGA综合方面的增强版
3)Leonardo:是做FPGA综合工具的先驱
4)Synplify:是目前成长最快的综合工具(由Synplicity公司出品)
无论哪家综合工具,对FPGA的综合,都必须紧密结合各FPGA厂家的FPGA结构,否则无法更好利用FPGA提供的优点;从目前来看,优选Synplify或Leonardo综合工具;DA的FPGA综合性能差但事宜ASIC综合。
到目前为止第三方的综合工具都未能很好利用FPGA器件,因为代码风格没有跟上,导致无法得到很好的性能。
7.逻辑代码风格的重要性
因为综合工具无法最大使用到器件所提供的优越性能,导致最终的产品性能变差;若想得到更好的性能,这要求在FPGA设计上,最好对一些设计采用一些Core(但这种基于FPGA器件(特有工艺)的代码设计,将降低设计代码的重用性能、以及FPGA设计与ASIC设计的兼容性)。
8.举例:以Xilinx为例,我们怎样采取恰当的代码风格,以提高电路性能:
1) 资源共享的应用限制在同一个module里。这样,综合工具才能最大限度地发挥其资源共享综合作用。
2) 尽可能将Critical path上所有相关逻辑放在同一个module里。这样,综合工具能够发挥其最佳综合效果。
3) Critical path所在的module与其它module分别综合,对critial path采用速度优先的综合策略,对其它module采用面积优先的综合策略。
4) 尽可能Register所有的Output。做到这一点,对加约束比较方便;同时一条路径上的组合逻辑不可能分散在各个module里,这对综合非常有利。可以比较方便地达到面,积速度双赢的目的。
5) 一个module的size不能太大。具体大小,由各综合工具而定。
6) 一个module尽量只有一个时钟,或者整个设计只有一个时钟。
小广播
热门活动
换一批
更多
最新嵌入式文章
更多精选电路图
更多热门文章
更多每日新闻
- Allegro MicroSystems 在 2024 年德国慕尼黑电子展上推出先进的磁性和电感式位置感测解决方案
- 左手车钥匙,右手活体检测雷达,UWB上车势在必行!
- 狂飙十年,国产CIS挤上牌桌
- 神盾短刀电池+雷神EM-i超级电混,吉利新能源甩出了两张“王炸”
- 浅谈功能安全之故障(fault),错误(error),失效(failure)
- 智能汽车2.0周期,这几大核心产业链迎来重大机会!
- 美日研发新型电池,宁德时代面临挑战?中国新能源电池产业如何应对?
- Rambus推出业界首款HBM 4控制器IP:背后有哪些技术细节?
- 村田推出高精度汽车用6轴惯性传感器
- 福特获得预充电报警专利 有助于节约成本和应对紧急情况
更多往期活动
11月16日历史上的今天
厂商技术中心