欢迎FPGA工程师加入官方微信技术群

点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群

1

FPGA简单介绍

FPGA的用处比我们平时想象的用处更广泛,原因在于其中集成的模块种类更多,而不仅仅是原来的简单逻辑单元(LE)。

现在的FPGA不仅包含以前的LE,RAM也更大更快更灵活,管教IOB也更加的复杂,支持的IO类型也更多,而且内部还集成了一些特殊功能单元,包括以下部分:

DSP:实际上就是乘加器,FPGA内部可以集成多个乘加器,而一般的DSP芯片往往每个core只有一个。换言之,FPGA可以更容易实现多个DSP core功能。在某些需要大量乘加计算的场合,往往多个乘加器并行工作的速度可以远远超过一个高速乘加器。

SERDES:高速串行接口。将来PCI-E、XAUI、HT、S-ATA等高速串行接口会越来越多。有了SERDES模块,FPGA可以很容易将这些高速串行接口集成进来,无需再购买专门的接口芯片。

CPU core:分为2种,软core和硬core.软core是用逻辑代码写的CPU模块,可以在任何资源足够的FPGA中实现,使用非常灵活。而且在大容量的FPGA中还可以集成多个软core,实现多核并行处理。硬core是在特定的FPGA内部做好的CPU core,优点是速度快、性能好,缺点是不够灵活。

不过,FPGA还是有缺点。对于某些高主频的应用,FPGA就无能为力了。现在虽然理论上FPGA可以支持的500MHz,但在实际设计中,往往200MHz以上工作频率就很难实现了。好了,下面步入正题:FPGA的设计要点。

2

FPGA发展史

FPGA的发展历史如下图所示。相对于PROM、PAL/GAL、CPLD而言,FPGA规模更大性能更高。

图1 FPGA发展史

FPGA芯片主流生产厂家包括Xilinx、Altera、Lattice、Microsemi,其中前两家的市场份额合计达到88%。目前FPGA主流厂商全部为美国厂商。国产FPGA由于研发起步较美国晚至少20年,目前还处于成长期,仅限于低端,在通信市场还没有成熟应用。

2015年12月,Intel公司斥资167亿美元收购了Altera公司。Altera被收购后不久即制定了英特尔处理器与FPGA集成的产品路线图。这两种产品集成的好处是可以提供创新的异构多核架构,适应例如人工智能等新市场的需求,同时能大幅缩减功耗。

图2 FPGA在电信领域的应用历史

FPGA在航天、军工、电信领域有非常成熟和广泛的应用。以电信领域为例,在电信设备一体机阶段,FPGA由于其编程的灵活性以及高性能被应用网络协议解析以及接口转换。

  • 在NFV(NetworkFunction Virtualization阶段,FPGA基于通用服务器和Hypervisor实现网元数据面5倍的性能提升,同时能够被通用Openstack框架管理编排。

  • 在云时代,FPGA已经被作为基本IaaS资源在公有云提供开发服务和加速服务,AWS、华为、BAT均有类似通用服务提供。

  • 截至目前,Intel的Stratix 10器件已被成功应用于微软实时人工智能云平台Brainwave项目。

3

FPGA整体结构

FPGA架构主要包括可配置逻辑块CLB(Configurable Logic Block)、输入输出块IOB(Input Output Block)、内部连线(Interconnect)和其它内嵌单元四个部分。

CLB是FPGA的基本逻辑单元。实际数量和特性会依器件的不同而改变,但是每个CLB都包含一个由4或6个输入、若干选择电路(多路复用器等)和触发器组成的可配置开关矩阵。开关矩阵具有高度的灵活性,经配置可以处理组合型逻辑、移位寄存器或 RAM。

FPGA可支持许多种I/O标准,因而可以为系统设计提供理想的接口桥接。FPGA 内的I/O按bank分组,每个bank能独立支持不同的I/O标准。目前最先进的FPGA提供了十多个I/O bank,能够提供灵活的I/O支持。

CLB 提供了逻辑性能,灵活的互连布线则负责在CLB和I/O之间传递信号。布线有几种类型,从设计用于专门实现 CLB 互连(短线资源)、到器件内的高速水平和垂直长线(长线资源)、再到时钟与其它全局信号的全局低skew布线(全局性专用布线资源)。一般,各厂家设计软件会将互连布线任务隐藏起来,用户根本看不到,从而大幅降低了设计复杂性。

内嵌硬核单元包括RAM、DSP、DCM(数字时钟管理模块)及其它特定接口硬核等,FPGA器件内部结构如下示意图。

图3 FPGA器件内部结构图

一般来说,器件型号数字越大,表示器件能提供的逻辑资源规模越大。在FPGA器件选型时,用户需要对照此表格,根据业务对逻辑资源(CLB)、内部BlockRAM、接口(高速Serdes对数)、数字信号处理(DSP硬核数)以及今后扩展等多方面的需求,综合考虑项目最合适的逻辑器件。

4

FPGA开发流程

FPGA的设计流程就是利用EDA开发软件和编程工具对FPGA芯片进行开发的过程。FPGA的开发流程一般如下图所示,包括功能定义/器件选型、设计输入、功能仿真、逻辑综合、布局布线与实现、编程调试等主要步骤。

1、功能定义/器件选型:在FPGA设计项目开始之前,必须有系统功能的定义和模块的划分,另外就是要根据任务要求,如系统的功能和复杂度,对工作速度和器件本身的资源、成本、以及连线的可布性等方面进行权衡,选择合适的设计方案和合适的器件类型。

2、 设计输入:设计输入指使用硬件描述语言将所设计的系统或电路用代码表述出来。最常用的硬件描述语言是Verilog HDL。

3、 功能仿真:功能仿真指在逻辑综合之前对用户所设计的电路进行逻辑功能验证。仿真前,需要搭建好测试平台并准备好测试激励,仿真结果将会生成报告文件和输出信号波形,从中便可以观察各个节点信号的变化。如果发现错误,则返回设计修改逻辑设计。常用仿真工具有Model Tech公司的ModelSim、Sysnopsys公司的VCS等软件。

4、 逻辑综合:所谓综合就是将较高级抽象层次的描述转化成较低层次的描述。综合优化根据目标与要求优化所生成的逻辑连接,使层次设计平面化,供FPGA布局布线软件进行实现。就目前的层次来看,综合优化是指将设计输入编译成由与门、或门、非门、RAM、触发器等基本逻辑单元组成的逻辑连接网表,而并非真实的门级电路。

真实具体的门级电路需要利用FPGA制造商的布局布线功能,根据综合后生成的标准门级结构网表来产生。为了能转换成标准的门级结构网表,HDL程序的编写必须符合特定综合器所要求的风格。常用的综合工具有Synplicity公司的Synplify/Synplify Pro软件以及各个FPGA厂家自己推出的综合开发工具。

5、布局布线与实现:布局布线可理解为利用实现工具把逻辑映射到目标器件结构的资源中,决定逻辑的最佳布局,选择逻辑与输入输出功能链接的布线通道进行连线,并产生相应文件(如配置文件与相关报告);实现是将综合生成的逻辑网表配置到具体的FPGA芯片上。由于只有FPGA芯片生产商对芯片结构最为了解,所以布局布线必须选择芯片开发商提供的工具。

6、编程调试:设计的最后一步就是编程调试。芯片编程是指产生使用的数据文件(位数据流文件,Bitstream Generaon),将编程数据加载到FPGA芯片中;之后便可进行上板测试。最后将FPGA文件(如.bit文件)从电脑下载到单板上的FPGA芯片中。

5

如何使用FPGA

FPGA开发完毕,最终得到验证好的加载文件。输出加载文件后,即可开始正常业务处理和验证(以软件加载方式为例,描述整个过程)

  • 1、逻辑加载;

  • 2、单板软件加载逻辑后,需要复位逻辑;

  • 3、复位完成后,软件需等待等待一段时间至逻辑锁相环工作稳定;

  • 4、软件启动对逻辑的外部RAM、内部Block RAM、DDRC等的自检操作;

  • 5、软件完成自检以后,对逻辑所有可写RAM空间及寄存器进行初始化操作;

  • 6、初始化完毕,软件参考逻辑芯片手册配置表项及寄存器;

  • 7、逻辑准备好,可以开始处理业务。

6

FPGA适用场景

FPGA适合非规则性多并发、密集计算及协议解析处理场景,例如人工智能、基因测序、视频编码、数据压缩、图片处理、网络处理等各领域的加速。

7

FPGA设计要点之一:时钟树

对于FPGA来说,要尽可能避免异步设计,尽可能采用同步设计。

同步设计的第一个关键,也是关键中的关键,就是时钟树。

一个糟糕的时钟树,对FPGA设计来说,是一场无法弥补的灾难,是一个没有打好地基的大楼,崩溃是必然的。

具体一些的设计细则:

1)尽可能采用单一时钟;

2)如果有多个时钟域,一定要仔细划分,千万小心;

3)跨时钟域的信号一定要做同步处理。对于控制信号,可以采用双采样;对于数据信号,可以采用异步fifo.需要注意的是,异步fifo不是万能的,一个异步fifo也只能解决一定范围内的频差问题。

4)尽可能将FPGA内部的PLL、DLL利用起来,这会给你的设计带来大量的好处。

5)对于特殊的IO接口,需要仔细计算Tsu、Tco、Th,并利用PLL、DLL、DDIO、管脚可设置的delay等多种工具来实现。简单对管脚进行Tsu、Tco、Th的约束往往是不行的。

可能说的不是很确切。这里的时钟树实际上泛指时钟方案,主要是时钟域和PLL等的规划,一般情况下不牵扯到走线时延的详细计算(一般都走全局时钟网络和局部时钟网络,时延固定),和ASIC中的时钟树不一样。对于ASIC,就必须对时钟网络的设计、布线、时延计算进行仔细的分析计算才行。

8

FPGA设计要点之二:FSM

FSM:有限状态机。这个可以说时逻辑设计的基础。几乎稍微大一点的逻辑设计,几乎都能看得到FSM.

FSM分为moore型和merly型,moore型的状态迁移和变量无关,merly型则有关。实际使用中大部分都采用merly型。

FSM通常有2种写法:单进程、双进程。

初学者往往喜欢单进程写法,格式如下:

简单的说,单进程FSM就是把所有的同步、异步处理都放入一个always中。

优点:

1)看起来比较简单明了,写起来也不用在每个case分支或者if分支中写全对各个信号和状态信号的处理。也可以简单在其中加入一些计数器进行计数处理。

2)所有的输出信号都已经是经过D触发器锁存了。

缺点:

1)优化效果不佳。由于同步、异步放在一起,编译器一般对异步逻辑的优化效果最好。单进程FSM把同步、异步混杂在一起的结果就是导致编译器优化效果差,往往导致逻辑速度慢、资源消耗多。

2)某些时候需要更快的信号输出,不必经过D触发器锁存,这时单进程FSM的处理就比较麻烦了。

双进程FSM,格式如下:

从上面可以看到,同步处理和异步处理分别放到2个always中。其中FSM状态变量也采用2个来进行控制。双进程FSM的原理我这里就不多说了,在很多逻辑设计书中都有介绍,大家可以去看看。

优点:

1)编译器优化效果明显,可以得到很理想的速度和资源占用率。

2)所有的输出信号(除了FSM_status_current)都是组合输出的,比单进程FSM快。

缺点:

1)所有的输出信号(除了FSM_status_current)都是组合输出的,在某些场合需要额外写代码来进行锁存。

2)在异步处理的always中,所有的if、case分支必须把所有的输出信号都赋值,而且不能出现在FSM中的输出信号回送赋值给本FSM中的其他信号的情况,否则会出现 latch。

latch会导致如下问题:

1)功能仿真结果和后仿不符;

2)出现无法测试的逻辑;

3)逻辑工作不稳定,特别是latch部分对毛刺异常敏感;

4)某些及其特殊的情况下,如果出现正反馈,可能会导致灾难性的后果。

这不是恐吓也不是开玩笑,我就亲眼见过一个小伙把他做的逻辑加载上去后,整个FPGA给炸飞了。后来怀疑可能是出现正反馈导致高频振荡,最后导致芯片过热炸掉(这个FPGA芯片没有安装散热片)。

9

FPGA设计要点之三:latch

首先解释一下:

1)stateCAD没有用过,不过我感觉用这个东东在构建大的系统的时候似乎不是很方便。也许用systemC或者system Verilog更好一些。

2)同步、异步的叫法是我所在公司的习惯叫法,不太对,不过已经习惯了,呵呵。

再讲一下latch:

前面讲到了latch的危害,再讲一下如何避免。我总结了以下几点

1)在组合逻辑进程中,if语句一定要有else!并且所有的信号都要在if的所有分支中被赋值。

 

另外需要注意,下面也会产生latch.也就是说在组合逻辑进程中不能出现自己赋值给自己或者间接出现自己赋值给自己的情况。

 

但如果是时序逻辑进程,则不存在该问题。

2)case语句的default一定不能少!原因和if语句相同,这里不再多说了。

需要提醒的是,在时序逻辑进程中,default语句也一定要加上,这是一个很好的习惯。

3)组合逻辑进程敏感变量不能少也不能多。这个问题倒不是太大,verilog2001语法中可以直接用 * 搞定了。

最后总结下,latch有弊就一定有利。在FPGA的LE中,总存在一个latch和一个D触发器,在支持DDR的IOE(IOB)中也存在着一个latch来实现DDIO.不过在我们平时的设计中,对latch还是要尽可能的敬而远之。

10

FPGA设计要点之四:逻辑仿真

仿真是FPGA设计中必不可少的一步。没有仿真,就没有一切。

仿真是一个单调而繁琐的工作,很容易让人产生放弃或者偷工减料的念头。这时一定要挺住!

仿真分为单元仿真、集成仿真、系统仿真。

单元仿真:针对每一个最小基本模块的仿真。单元仿真要求代码行覆盖率、条件分支覆盖率、表达式覆盖率必须达到100%!这三种覆盖率都可以通过MODELSIM来查看,不过需要在编译该模块时要在Compile option中设置好。

集成仿真:将多个大模块合在一起进行仿真。覆盖率要求尽量高。

系统仿真:将整个硬件系统合在一起进行仿真。此时整个仿真平台包含了逻辑周边芯片接口的仿真模型,以及BFM、Testbench等。系统仿真需要根据被仿真逻辑的功能、性能需求仔细设计仿真测试例和仿真测试平台。系统仿真是逻辑设计的一个大分支,是一门需要专门学习的学科。

欢迎通信工程师和FPGA工程师关注公众号

全国第一大FPGA微信技术群

欢迎大家加入全国FPGA微信技术群,这个群体拥有数万工程师、一群热爱技术的工程师,这里的FPGA工程师相互帮助,相互分享,技术氛围浓厚!赶紧叫上小伙伴一起加入吧!

用手指按住就可以加入FPGA全国技术群哦

FPGA之家元器件芯城

优势元器件服务,有需求请扫码联系群主:金娟 邮箱:293580331@qq.com 欢迎推荐给采购

ACTEL、AD部分优势订货(经营全系列):

XILINX、ALTERA优势现货或订货(经营全系列):

(以上器件为部分型号,更多型号请咨询群主金娟)

服务理念:FPGA之家元器件自营芯城,旨在方便工程师快速方便购买器件服务,经过数年竭诚服务,我们的客服遍布国内大型上市公司、军工科研单位、中小企业、最大的优势是强调服务至上的理念、并且做到快速交货、价格优惠!

直营品牌:Xilinx ALTERA ADI TI NXP ST E2V、镁光 等百余元器件品牌,尤其擅长欧美对华禁运器件,欢迎工程师朋友把我们推荐给采购或者亲自咨询我们!我们将一如既往提供业内最佳服务!

FPGA技术群官方鸣谢品牌:Xilinx、 intel(Altera)、microsemi(,Actel)、LattIC e,Vantis,Quicklogic,Lucent等

altera fpga sdi输出方案_FPGA设计太复杂?四大设计要点总结助你快速上手!相关推荐

  1. altera fpga sdi输出方案_FPGA在电力电子中的应用有哪些?

    大家好,很抱歉上周末没有及时更新公众号,本来这期想聊聊IGBT的拖尾电流,但是由于周末去深圳高交会(高新技术成果交易会)逛了一天,时间给耽搁了,感觉要想把拖尾电流讲清楚也不太容易,还得需要点时间,为了 ...

  2. altera fpga sdi输出方案_高段位攻城狮是这样解决SI分析、DDR、FPGA国产化问题的! | 电巢直播答疑汇总...

    小长假结束后的第三个工作日,你们是否还记得节前的直播课内容嘞?温故而知新,在学习新东西的时候,记得多回顾, 直播中大家遇到的问题已经整理出来了,老师们已经做了详细的回答,如果还有不理解的地方,可以在E ...

  3. 嫌官方文档太烂?TensorFlow 开源工具书,助你快速上手开发!

    公众号关注 "GitHubDaily" 设为 "星标",每天带你逛 GitHub! 转自机器之心 「官方文档排布凌乱.搜索难用.API 丑陋不堪--」这是很多人 ...

  4. linux欢迎界面设计,Ubuntu 18.04 LTS新增欢迎界面--方便用户快速上手新系统

    在Ubuntu生态系统中有很多风味版本都有欢迎界面,例如Ubuntu MATE和Ubuntu Budgie,还有很多基于Ubuntu的GNU/Linux发行版本,在系统安装完成之后为消费者设置提供快捷 ...

  5. FPGA从零设计[1]——关于Altera FPGA的下载器接口

    好久发博客了,一晃一年过去了. 最近打算学习FPGA,手头有几块开发板在用,平时练练代码足够了,但是作为一只硬件狗不亲自设计一块属于自己的开发板实在说不过去.正巧博主这段时间在深入学习Cadence ...

  6. Altera FPGA/CPLD设计 基础篇+高级篇(附随书光盘)

    获取方法: 微信公众号:OpenFPGA   后台回复 Altera设计 基础篇介绍 <Altera FPGA/CPLD设计(基础篇)>是王诚.蔡海宁.吴继华编著的一本图书.该书可作为高等 ...

  7. FPGA之道(54)状态机的设计

    文章目录 前言 状态机的设计 状态浅析 真正的状态 抽象的状态与中间变量 抽象状态的设计方法 抽象状态与中间变量的权衡 基本状态介绍 初始态 结束态 中继态 分支态 复位态 空闲态 多余态 状态的一些 ...

  8. Altera FPGA配置过程

    在FPGA正常工作时,配置数据存储在SRAM中,这个SRAM单元也被称为配置存储器(configure RAM).由于SRAM是易失性存储器,因此在FPGA上电之后,外部电路需要将配置数据重新载入到芯 ...

  9. FPGA学习笔记之Altera FPGA使用JIC文件配置固化教程

    FPGA学习笔记之Altera FPGA使用JIC文件配置固化教程 很多做过单片机的朋友都知 道,我们在对MCU烧写完程序固件后,那么该程序固件就存储在了该MCU内部.即使MCU断电了再重新上电,程序 ...

最新文章

  1. POJ 3174 暴力枚举
  2. 深入理解JVM虚拟机(七):虚拟机字节码执行引擎
  3. 题目:社区人员登记管理系统(有源码链接免费下载)
  4. java gui 控制台_在GUI面板中创建Java控制台
  5. 微观计量经济学_微观经济学与数据科学
  6. 2020年“双11”各家晒出成绩单,你还没付完尾款,有的人已经收货了!
  7. 友华pt622g说明书_友华通信电信光猫 双口光纤猫PT622 这个可以设置无线吗
  8. IOS开发之——硬件开发-传感器概述(01)
  9. 卷积神经网络与机器视觉,卷积神经网络图像分类
  10. 网络摄像机进行互联网视频直播录像方案的选择,EasyNVS or EasyCloud or EasyGBS?
  11. 一周小结(七)——从零开始配置VINS-Mono运行环境
  12. python练习3:输入某年某月某日,判断这一天是这一年的第几天?
  13. 维棠flv视频下载软件 v2.0.9.4官方免费版
  14. 水果店圈子:怎么做好水果店线上营销方案,水果店线上如何做
  15. ESP32开发之旅——人体感应传感器HC-SR501
  16. python3跑通smpl模型_SMPL模型改用python3+numpy计算
  17. Quectel_Ec600硬件练习
  18. Tita OKR分享:如何用OKR开周会?
  19. 【LeetCode】127. Word Ladder 解题报告(Python)
  20. 图片编辑器哪个比较好?这篇文章告诉你

热门文章

  1. 百度的一道 java 高频面试题的多种解法
  2. VMware ESXI 虚拟磁盘工具 - vmkfstools 使用实例
  3. 【linux基础】16、软件包管理
  4. 常用脚本--在线重建或重整实例下所有索引
  5. SpringBoot启动源码探究---getRunListener()
  6. asp.net 网站模板怎么用,就是16aspx上面下下来的模板,里面有个sln文件,其他全是文件夹的东西...
  7. 自己在项目中写的一个Jquery插件和Jquery tab 功能
  8. 贪心算法求解问题的选择准则
  9. easyui弹出层在最顶层显示跳出iframe框架通用javascript代码
  10. 人与自然蠓的故事-上好像以前播过!