fga研发牛人心得总结_第1页
fga研发牛人心得总结_第2页
fga研发牛人心得总结_第3页
fga研发牛人心得总结_第4页
fga研发牛人心得总结_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

FPGA研发之道FPGA是个什么玩意?FPGA是个什么玩意?

首先来说:

FPGA是一种器件。其英文名feildprogramable

gatearry。很长,但不通俗。通俗来说,是一种功能强大似乎无所不能的器件。通常用于通信、网络、图像处理、工业控制等不同领域的器件。就像ARM、DSP等嵌入式器件一样,成为无数码农码工们情感倾泻而出的代码真正获得生命的地方。只不过,一样的编程,却是不一样的思想。嵌入式软件人员看到的是C。而FPGA工程师看到是硬件描述语言,verilog或VHDL。软件看到是函数、对象、重构。FPGA工程师则是模块、流水、复用。从现象上看,都是代码到下载程序再到硬件上运行。不能只看现象而忽略本质。FPGA开发本质上是设计一颗IC,“**的身子,丫鬟的命”不是所有verilog/VHDL代码,都能获得青睐去流片成为真正的芯片,而更多的则成为运行在FPGA器件上,成为完成相同功能的替代品。其实现的功能却一点也不逊色于百万身价流片的近亲。从而成为独树一帜的行业。

FPGA开发的流程,是通过verilog/VHDL等硬件描述语言通过EDA工具编译、综合、布局布线成为下载文件,最终加载到FPGA器件中去,完成所实现的功能。那硬件描述语言描述的是什么?这里描述的就是组合逻辑电路和时序逻辑电路。组合逻辑电路就是大家所熟知的与门、或门、非门。时序逻辑电路则是触发器。数字芯片上绝大部分逻辑都是这两种逻辑实现的。也就是基本上每个电子行业的人所学过的数字电路。顺便说一下,感谢香农大师,在其硕士毕业论文<继电器与开关电路的符号分析>就奠定了数字电路的的根基。只不过在FPGA中,与或非的操作变成了查找表的操作。于是所有的数字电路变成了查找表和寄存器,这就构成了FPGA的基础。查找表负责逻辑实现,寄存器存储电路状态。二者配合,双剑合璧,天衣无缝。这是最初的FPGA的雏形。现代FPGA内部出了查找表和寄存器之外,还有RAM块,用于存储大量的数据块,这是因为RAM块较寄存器来存储大量数据更能节省芯片实现的面积。FPGA内部的时序电路则需要时钟的输入,通常FPGA内部需要时钟种类较多,因此需要在片内产生所需的的相关的时钟,如不同频率,不同相位的时钟,因此时钟管理单元DCM/PLL也是必不可少的内部部件。除此之外,FPGA内部还包括接口I/O,I/O分为普通I/O和高速I/O,高速I/O支持例如高速的SERDES,用于实现XAUI,PCIE等高速接口,这些接口动辄几Gbps到10Gbps以上。此外种类多种多样的硬核IP也是各FPGA厂商差异化竞争利器,例如POWERPC、ARM等硬核IP。从而构成CPU+FPGA于一体的集可编程性和可重构的处理平台。因此,相对来所,FPGA虽然发展有二三十年的历史,其基本架构一直不变不大。

回到问题开始的地方,FPGA的英文翻译过来是现场可编程门阵列。这是相对ASIC来说的,ASIC的硬件也可看做是门阵列,但是其是非可编程的器件。流片完成其功能就固化了,而FPGA的可编程性就在其能够重新下载配置文件,来改变其内在的功能,这就是其可编程性的由来。从前端开发流程来说,FPGA和ASIC开发并无二至。由于ASIC开发一次性投入成本较高,FPGA无疑是一种经济的替代方案,用于实现的高速的数据并行处理。如业务能够支撑大规模应用并且协议固化,则能够分摊成本的ASIC实现就有成本的优势。

FPGA作为一种器件,技术上主要垄断在少数大公司手中,那就是双巨头ALTERA和XILINX。除此之外还有一些份额相对较小的公司,例如ACTEL和LATTICE。不止是FPGA的硬件芯片,其配套的EDA工具技术壁垒更高。因此相对于CPU来说,FPGA的国产化更不乐观,不过已经有国内的厂商来从事这一行业,例如国微和京微雅格等,也在一些细分市场上推出自己的FPGA产品。FPGA和他那些小伙伴们(一)系统架构组成通常来讲,“一个好汉三个帮”,一个完整的嵌入式系统中由单独一个FPGA使用的情况较少。通常由多个器件组合完成,例如由一个FPGA+CPU来构成。通常为一个FPGA+ARM,ARM负责软件配置管理,界面输入外设操作等操作,FPGA负责大数据量运算,可以看做CPU的专用协处理器来使用,也常会用于扩展外部接口。常用的有ARM+FPGA,DSP+FPGA,或者网络处理器+FPGA等种种架构形式,这些架构形式构成整个高速嵌入式设备的处理形态。

不得不说的是,随着技术的进步,现在CPU中集成的单元也随之增加,例如TI的“达芬奇”架构的处理器内部通常由ARM+DSP构成。同时异构的处理器形态业逐渐流行,如ARM9+ARM7的结构。这类一个主要处理系统(ARM9)外带辅助处理系统(ARM7)的设计,同样成为现在处理器设计的流行方向。主处理系统运行嵌入式操作系统,而辅助处理单元则专注某一些的专用领域的处理。这些系统的应用减少了FPGA作为CPU协处理单元的领域。因为毕竟FPGA相比ARM等流行嵌入式处理器价格要相对较高。

在这种情形下,FPGA的厂商似乎也感受到了压力,不约而同推出了带ARM硬核的FPGA,例如ALTERA的

和XILINX的ZYNQ和ALTERA的SOCFPGA。这是即是互相竞争的需要,也是同众多CPU厂商一掰手腕的杰总。即使在这两种在趋势下,经典的处理器+FPGA的设计仍然可看做为高性能嵌入式系统的典型配置。

经典的处理器+FPGA的配置中有多种的架构形式,即多个处理器单元,可能是ARM,MIPS,或者DSP,FPGA也可能是多片的配置,具体架构形式于具体处理的业务相关和目标设备的定位也相关。因为FPGA作为简单业务流大数据量的处理形态仍然是CPU无可比拟的优势,FPGA内部可以开发大量业务数据并行,从而实现高速的数据处理。

在实现高速处理方面,CPU的另一个发展趋势是多核,多核处理器也能处理大数据量的业务的并行,例如业界TERILA已推出64核的多核处理器,采用MIPS处理器,通过二维MASH网络连接在一起,形成NOC的结构。在性能上已经和现有的高速FPGA的处理能力上不相上下。但是多核处理器的不得不说的问题就是,同一业务流分配到多核处理上后,如需交互,例如访问同一资源,就会造成读写的缓存一致的问题,解决的这一问题的天然思路是加锁,即在变量访问上加自旋锁,但是带来的问题就是处理性能的急剧下降。而FPGA无论并行处理和同一变量的访问,都可以变成工程师的设计水平的问题,没有原理性的挑战。

没有一种器件可以满足全人类的众多需求,因此不用担心FPGA没有用武之地。必定是一系列产品的组合。下面主要介绍一下FPGA可以作为现今热门场景的几种应用。(1)网络存储产品,特别是现在的NAS,或者SAN设备上,其存储的时间、接口、安全性等都要求较高,而FPGA无论处理性能还是扩展接口的能力都使其在这一领域大有作为。现在高端FPGA单片就可以扩展32个或者更多4G或者8G的FC接口。并且其协议处理相对的固定,也使FPGA在这一领域有大量的可能应用。(2)高速网络设备,现在高速网络设备10G、40/100G以太网设备领域,同样FPGA也是关键的处理部件。特别是IPv6的商用化及大数据对于基础设施的高要求,都使这一领域的处理应用会逐渐广泛,这一领域通常是高速网络处理器(NP)+FPGA的典型架构。(3)4G等通信设备,对于新一代通信基站的信号处理,FPGA+DSP阵列的架构就是绝配。特别是在专用处理芯片面世之前,这样的架构可以保证新一代通信基础设施的迅速研发和部署。铺浊没有完美抚的架构,只海有合适的组架合,各种芯慈片和架构都疼是为应用服僵务,互相的仙渗透是趋势斗,也是必然把。FPGA庆相对处理器龟的可编程领丛域,仍然属愚于小众(虽危然人数也不站少)。但是撞正像一则笑毕话所说:大逢腿虽然比根掘命根子粗,榜但决没有命梳子重要。这使算开个玩笑眠。FPGA再的实现为以俘后的芯片化炉留下了许多再可能和想象阶空间,从而蒸在应用大量果爆发时通过垄芯片化来大日幅降低成本姥,这这也正肠是其他可编漠程器件所不谢能比拟的。告FPGA和柱他那些小伙婚伴们(二贤)器件互魂联老系统架构确玩定,下一步辽就是FPG李A与各组成铅器件之间互础联的问题了延。通常来说锐,CPU和取FPGA的药互联接口,先主要取决两逃个要素:栏

(盲1)CPU脚所支持的接戏口。臣

(兆2)交互的斑业务。资妙通常来说籍,FPGA快一般支持与浆CPU连接屯的数字接口斩,其常用的猛有EMIF逝,PCI,蛙PCI-E齐,UPP,盖网口(MI烤I/GMI猫I/RGM废II),D者DR等接口知。作为总线租类接口,F道PGA通常吸作为从设备煌与CPU连音接,CPU纸作为主设备艳通过访问直肿接映射的地彻址对FPG送A进行访问南。根据是否陕有时钟同步脊,通常总线遗访问分为同涝步或异步的械总线,根据苗CPU外部瞧总线协议有见所不同,但扒数据、地址胖、控制信号忙基本是总线殖访问类型中苗总线信号所取不能省略的步。CPU手滋册中会对信密号定义和时令序控制有着惕详细的说明趋,FPGA匹需要根据这绢些详细说明复来实现相应尘的逻辑。同王时CPU还来可以对访问城时序进行设途置,比如最雨快时钟,甚未至所需的最遗小建立时间禽和保持时间御,这些一般捧CPU都可队以进行设置筝,而这些具衰体参数,不遮仅影响FP温GA的实现郊,也决定总贷线访问的速姑度和效率。籍对于同步总楚线,只需要祸根据输入时摄钟进行采样肥处理即可,构但对于异步同总线,则需海要的对进入脂的控制信号米进行同步化四处理,通常奋处理方式是存寄存两拍,罚去掉毛刺。茶因此用于采驻样的时钟就档与CPU所前设置的总线猜参数相关,响如采样时钟面较低,等控击制信号稳定季后在译码后翠输出,一个离总线操作周偷期的时间就祥会相对较长朋,其处理的钩效率也相对斧较低;假如库采样时钟过慌快,则对关辽键路径又是伙一个挑战,份因此合理设播定采样频率换,便于接口唉的移植并接越口的效率是兆设计的关键训点和平衡点锄。饿劲对于总线保型的访问来获说,数据信畜号通常为三慨态信号,用疮于输入和输徒出。这种设积计的目的是鼓为了减少外惜部连线的数临量。因为数贺据信号相对遇较多一般为奔8/16/漠32位数据破总线。总线孟的访问的优念势是直接映袍射到系统的别地址区间,吸访问较为直巴观。但相对布传输速率不似高,通常在君几十到10搞0Mbps迎以下。这种臂原因的造成巨主要为以下仿因素(1)钥受制总线访腊问的间隔,古总线操作周脉期等因素,含总线访问间咸隔即两次访恩问之间总线殖空闲的时间锤,而总线操上作周期为从蚕发起到相应乐的时间。(狸2)不支持科双向传输,写并且FPG梳A需主动发书起对CPU霸操作时,一眨般只有发起影CPU的中教断处理一种秃方式。这种离总线型操作深特点,使其贞可以用作系挽统的管理操墨作,例如F闯PGA内部织寄存器配置您,运行过程美中所需参数宅配置,以及累数据流量较峡小的信息交呈互等操作。换这些操作数吼据量和所需墓带宽适中,厕可以应对普季通的嵌入式神系统的处理议需求。冷雨对于大数据亦流量的数据纳交互,一般袜采用专用的弃总线交互,拨其特点是,总支持双向传伏输,总线传翅输速率较快倡,例如GM宗II/RG祥MII、U谨pp、专用债LVDS接编口,及SE换RDES接奖口。专用S寇ERDES挽接口一般支校持的有PC流I-E,X卫AUI,S弹GMII,制SATA,视Inter纲laken粗接口等接口旺。GMII饺/RGMI甜I,专用L舞VDS接口绞一般处理在夕1GbpS凯一下的业务贷形式,而P卧CI-E,武根据其型号增不同,支持捉几Gbps详的传输速率谱。而XAU废I可支持到弄10Gbp欲s的传输速咬率,lnt舞erlak帝en接口可堤支持到40焦Gbps的桑业务传输。任菊对于不同速所需的业务肺形式及处理性器的类型,柴则可选择相秆应的接口形凉式,来传输子具体的业务凭。现今主流能FPGA中恭都提供的各心种接口的I密P。选择F区PGA与各治型CPU互装联接口,一昆般选择主流圾的应用交互妖方案,特殊吊的接口缺少奋支撑IP,咸导致开发、锣调试、维护适和兼容性的盖成本都较大驶,同时注意艇系统的持续屡演进的需要昌,如只在本淹项目使用一字次,而下一额项目或开发台阶段已摒弃食此类接口,坏则需提前规历划技术路线砍。毕竟一个华稳定、高效弊的接口互联采是一个项目歉成功的基础振。或乖不是所有的弯嵌入式系统兔都需要“高孔大上”的接密口形式,各并类低速的稳借定接口也同疾样在FPG锋A的接口互遇联中有着重业要的角色,雁其中UAR块T、SPI御、I2C等歪连接形式也探非常的常见起。毕竟,一极个优秀的设威计不是“高哪大上”的堆朵积,而是对宗需求最小成刻本的满足。涝适合的才是即最美的。茶灵活性的陷红阱米如果说用一博个词来描述灾FPGA的写特性,灵活拌性肯定名列溉前茅。赛悉

FP流GA的灵活缎性在于:牢搏

(掌一)I/O怒的灵活性,扯其可以通过解其I/O组钢成各种接口疤与各种器件捞连接,并且膀支持不同的浮电气特性。湖乏

(签二)内部存伶储器灵活性连,可以通过油IP生成工胖具生成各种薄深度和宽度渗的RAM或钱者FIFO蜓等。升匀

(兆三)逻辑的获灵活性,内呆部逻辑通可废生成的各种亿类型IP。冷名蛇

对年于I/O接苏口来说,F今PGA的I鹿/O可以支疑持不同类型忆的电平和驱哭动能力,各举I/O未定洽义之前其地量位平等,例翻如一个数据坝信号可将其策约束在任意荡引脚,只要鹊其电平符合忌连接的规范致。因此硬件尺工程师基于甩这种认识,乘在PCB布叔线时,基于斩布线需要,坦便调整其布舰线的顺序,责例如互换两赞个信号的位盲置。通常情狐况上,这种宽调整是没有隶任何问题的短。但是随着拿FPGA的语接口IP核六硬核化的趋怠势,逐渐由矩很多的接口选IP不能支舞持这种调整披。例如对于恐较早的SD枕RAM或者玉DDRSD湾RAM来说呆,在xil恩inx和A搭LTERA便的FPGA寒上,其数据真、地址信号选等都是可调犁的。但是随防着DDR2们,DDR3偶接口的出现骑,其IP接唯口,只能支停持在某个B津ANK并且宽例化结束后私直接生成相狼应的约束文谱件,而这些唤的改动将会乖导致布局布气线的错误。毙另一些例子燃则是一些高纯速SERD究ES的组合持。例如对于暑XAUI接纲口来说,其秃硬核IP(污ALTER其A)上就不民支持4组S引ERDES升的顺序互换价,这将会影赠响其硬核F材CS的编码友。如果板级苗连接上与P住HY的顺序辈与FPGA隙例化IP的坑约束不一致姜,则其硬核岸PCS就不编能布局布线膀通过(软核弟FCS可以李支持调整)株。这种灵活绸性认识导致调硬件板级互名联的问题可解谓屡见不鲜间,特别是系替统复杂度的粘上升,板级够连线的增加雾,将会导致摔设计人员疏谋忽从而掉入很“灵活性的父陷阱”。解纺决此类问题助的方法。包老括(1)预绑评估,在设烛计之前就在禽FPGA上痰评估所需的窜接口的逻辑京占用、约束缺位置、时钟葛需求等等,伯预先评估给拆系统设计提忠供相应的数售据支撑和设水计参考。(件2)沟通,些对于设计的诱变更,要进筒行有效沟通改,不能使铁促路警察,各捉管一段。(极3)设计评借审,虽然老职套,但每个擦环节上的评碌审能有效减左少掉入类似刷陷阱的几率赛。塑傍

对于模内部存储资佛源,大多数婚FPGA工滚程师就是拿快来就用的状蛛态。而缺少破整体内部m多emory同规划,一般牲来说,对于得单端口、双名端口、假双肿端口,各型插芯片手册中暮都有明确的良定义,例如窝xilin吓x的SPA俯TAN3系耗列中最小R鞋AM单元为仔18K。一毅个RAM例偶化最小单位扎就是18K唤。而新的器魂件中最小单牢位一般为9术K。也就是宋说虽然工程惰师例化的较闹小的RAM督,例如25星6*16.册只有4K,炒但是其也占铲用一个最小炎单元,根据迫器件的不同焰而不同。而粥乱用双端口皆导致RAM月资源的过分监占用则是更勤常见的设计河问题。FP家GA内部对都于单个RA照M能够支持就的真双端口公是有限制的雹。举例说明门,对于AL搭TERA的究9K的存储么单元一般支祥持512*削18的双端阻口RAM。课但如果是一脑个256*玻32的双端部口则需要占导用2个9K禾的存储RA耽M。也就是晋说,RAM今器件的能力厕是有限的,殖这取决于R动AM的外部躲互联线是有门限的,以刚桨才说的25其6*32的坚双端口RA头M来说,其饿需要数据线守就是64根其(双端口)肝,对于单个哗RAM的连够线资源来说甜,这是FP钞GA内部逻箩辑资源难以辨承受的。所巷以根据器件亲特定,合理挠规划内部m讲emory湖资源,才能牢在最大限度狐的达到高效耍的利用。每混

FPG陵A内部可以锯例化各型I蒙P,基于I秩P的复用的培可以大大增端加研发的进她度。但是各猎种IP的互速联之间则需惹对IP的特丧性了解清楚枪,明确IP引是否为业务栗所需的IP纲。有的IP浸和工程所需安可能只是名蒙称一致,但桐其功能却不晴是你想要的取。例如网口今IP在MI苗I连接方式津下,是用于由FPGA连召接PHY的口操作。如果调FPGA与再CPU通过庄MII连接堂,现有的I稼P则难以满扩足需求。这奉是因为MI匀I连接PH辅Y其所有的塑时钟都是P当HY提供的垄。CPU的捧设计也是与检PHY连接禾,其时钟也拨有PHY提卸供。而如果诞二者连接,耗就变成都等材着对方提供技时钟,则就冶变成没有时疫钟。这种调蝶试问题相对狼来说容易解夹决,不过在命系统规划是心,就需要对盒整个IP是档否能够满足屠系统的设计蛋要求,有着屯明确的判断秩。右鸦灵活性是卷FPGA最唇大的特性,箩在设计中避臭开那些灵活厦性的陷阱,乱才能从FP厚GA整体上忽提升设计能坚力,而不是题做只会写V钞erilo句g的码农。滩毕竟FPG颈A设计不是弃软件设计,乒其最终要成键为变成硬件咽承载的,每式一行语句都级要考虑其综透合后的电路胁,才能真正辜领会FPG疑A设计的精亦髓。竖从零开始调姓试FPGA希

“合抱之沸木,生于毫裹末;九层之法台,起于垒洲土;千里之校行,始于足侧下。”

革老子《道验德经》查对于新手来勤说,如何上寨手调试FP念GA是关键梳的一步。奸对于每一个愉新设计的F即PGA板卡燕,也需要从妨零开始调试倡。候那么如何开宽始调试?缸下面介绍一运种简易的调选试方法。吊(1)至繁少设定一个安输入时钟下input盈

sys削_clk;缝(2)设蛇定输出o级utput久[N-1菌:0]

西led;梯(3)设定蹄32位计数客器reg盈[31:菜0]

l钓ed_cn各t;馒(4)时表钟驱动计数归器开始工作合alway驶s@(po判sedge忍sys_自clk)墨led_c引nt<=程led_芦cnt+束1打(5)输出句led信号血。帐assig垦nled冷=le抗d_cnt僚[M:N]编;程序完成。隙(6)设定串管教约束旬如果为XI协LINX晶

FPG益A,在U台CF文件中旅

NE同T“sy瘦s_clk遇”

盲LOC

誓=管脚名帐称裙如果为AL迟TERA旧

FPGA淹,在QS惊F文件中,同添加

s妇et_lo研catio慈n_ass辨ignme贺nt

管嫌脚名称-票to

s饰ys_cl宣k械其他管脚,拥可依次类推脏。只(7)编译功,布局、布蛮线,生成配因置文件。准XILIN毁X

生成夜BIT文件境。样ALTER禾A生成S束OF文件少(8)连接仰JTAG,泼下载相应的梢配置文件。芦(9)观察相是否闪灯(叛肉眼可见)锹。悉关于闪灯的武解释如下:劈assig千n

led肢=led联_cnt[丢M:N];唱

l速ed_cn章t为32逃bit的信跪号,需要几短个闪灯,则渐根据输入时裳钟的频率和王肉眼能够分忌辨的时间(咽100ms相)。如输出穴时钟为25妙Mhz。则烘闪灯看见的瞒位置能够分暑批到10h门z。需分频附2.5M=皱32‘h偿2625A浸0,因此,伤则需要输出它至少为le益d_cnt厦[21]位畅,才能看到载闪灯。型虽然程序简序单,但是,览通过调试可恭以确认:柱(1)首先溜可确定JT捆AG下载器棉的正确连接唤,能够正常酷下载下载文劳件。如不能求,常见问题锄包括奥(一)检查猎是否安装驱将动。委(二)下载毕器是否由红誓灯变成黄灯退/绿灯。如装红灯亮一般铸情况下,J证TAG的与魄电路板VC邀C没有供电去。泰(三)检查撤JTAG连都接的线序。扔(四)检查通JTAG电马路,检查原然理图上TM滋S,TDI世,TDO的擦上拉和下拉惑电阻是否与秩datas愿heet中鹊一致。贿通过以上四阿种方式,可云排除绝大部至分JTAG土下载的错误紫。距(2)可以析判断晶振是糕否起振,下厉载后无灯闪状。尚(一)首先闲,示波器查宴看晶振频率帮,观察晶振诊的输出,如和无输出,查颗看晶振的电窑源和地信号似,如电源正笨常,而晶振哑无反应,则泻更换晶振。俊(二)如无蓄示波器,也张有替代的方氏法,通过嵌攀入式逻辑分新析仪抓信号拼(任意信号星)。如逻辑发分析仪点击稻采样后无反碍应,则无时液钟输入。染这是因为逻铃辑分析仪也姜需要时钟进掠行逻辑值的喉存储。储(3)如正可常下载后闪迈灯,证明该狭FPGA板回卡硬件设计芳上能够达到遵最低限度的泉FPGA调瓜试状态。功最后,说明败一下,为什坏么是闪灯而透不是亮灯的训程序,这是悔因为,首先卖闪灯可以判叨断外部晶振爹工作正常,帽并且由于L选ED等通常奔为上拉,也优就是说逻辑庙值0表示灯递亮,而也不胖排除某硬件油工程师非要来下拉。逻辑船1表示亮。标因此采用闪蔑灯更加方便规。卖问题:为什绸么LED灯维值为什么要底上拉?招这是因为:恰LED上拉辩后,需要灯过亮时电流由涌外部电源提仅供,而下拉御,灯亮时电昆流由芯片的顿CMOS电地路驱动。这现种在设计中延应避免。则架构设计漫蹲谈(一)流荒驱动和调用幻式修勿用讳言,巨现在国内F敬PGA开发拒还处于小作扮坊的开发阶华段,一般都介是三、四个英人,七八台铸机器.小作让坊如何也能顺做出大成果虫。这是每个挪FPGA工姜程师都要面铸临的问题。喂架构设计是姜面临的第一讽关。经常有困这样的项目煤,需求分析稿,架构设计梦匆匆忙忙,疮号称一两个串月开发完毕胡,实际上维蓄护项目就花类了一年半时单间。主要包香括几个问题鼠,一,性能锤不满足需求跨。二,设计宏频繁变更。斤三,系统不皂稳定,调试图问题不收敛忧。易伤

磨刀号不误砍柴工揉,FPGA欣设计的需求虫分析是整个致设计第一步粗。如何将系绝统的拜功能需求爱,转换成F喉PGA的设级计需求,是后FPGA架制构设计的首屡要问题。首威先,需要锤明确划分软欢件和硬件的并边界。软件证主要处理输瞒入输出、界兰面显示、系还统管理、设奏备维护。而弟FPGA则乌负责大数据偷流的处理。核宜

如嘱果使用几百罩元FPGA摩实现了一个黎十几元单片益机就能完成债的功能,就凳算实现的非皂常完美,那杆么这是一个魂什么样的神戚设计?任何沙一个项目都隐要考虑成本僻,研发成本疏、物料成本盯、维护成本孙等等。FP钥GA的使用削位置必定是盯其他器件难竞以企及的优凯势。结窗

因此纸对于一个F陪PGA架构驰设计,其首懒先需要考虑盘就是性能,局如没有性能告的需求,其随他的处理器过ARM就可匆能替代其功订能。其次就赛是接口,用幼于处理器扩封展其没有的习接口,作为闭高速接口转涨换。最后,劫需要考虑就河是可维护性虾,FPGA导的调试是非执常耗时的,亚一个大型的绵FPGA的欢编译时间在苗几小时甚至脉更高(通过圈嵌入式分析紫仪抓信号,刺每天工作8斤小时,只能呈分析两到三拐次)。而软地件调试只需烧make,嘴编译时间以泥秒来记(这箭个问题可以突通过提升编馒译服务器性柴能改善而不嫩能消失,本传质上要考虑宾可测性设计缝)。如果不障考虑维护性巩和可测性,隐调试成本和临压力就非常沉之大。湾奸

通忽常,FPG抖A的大部分旦架构设计可翅以采用数据响流驱动的方问式来实现,仆例子1,假尾设一个实现厚视频解压缩瓦FPGA的降设计,输入洁是无线接口齐,输出为显滑示屏。那么主输入输出的偷接口基本就雕能确定。以预数据流为驱沾动可以粗略葬划分,输入灰接口->解凡压缩模块-乐>视频转换耗模块->显嘉示接口。如医需要视频缓幸冲,则确定守是否需要连佣接外部存储掏器。那就需泼要确认在什鼓么位置进行萌数据的缓冲愿。通过要支味持显示的画筐面的质量,胡就能确认最盈大码流,同坊样可以计算特视频解压模进块和转换模查块的计算能中力,从而导技出所需的内撞部总线宽度污,系统频率所,以及子模口块个数等等扶。例子2,瞎某支持通过芳有线电视网妖上网电视I表P网关,同美样也是输入丝的普通IP淡网络,输出止为有线调试活网的调试解吓调器。将I晨P报文等长敞填充后,在听固定时隙内隆送入有线电保视网中,同园样也是基于例数据流驱动第的方式。朱目

数据五流驱动式架驼构椅,可以作为慧FPGA设熊计中一个最漂重要的架构俯。通常来说暗应用于IP炭领域、存储者领域、数字谜处理领域等当较大型FP吃GA设计都箱是坊数据流驱动往式架构,姐主要包括输延入接口单元粒,主处理单音元,输出接崇口单元。还盗可能包括,莲辅助处理单祖元、外部存买储单元。这细些单元之间拍一般采用流专水式处理,孕即处理完毕乳后,数据打系包发完下一光级处理。其掩中输入输出井可能有多个营,此时还需语要架构内部韵实现数据的厘交换。狸患

另一虫种较为常用琴的架构方式但为缸调用式架构念,炎即一般FP旱GA通过标滔准接口如P影CI、PC胁I-E,C津PCI,P歇CI-X,毫EMIF等抵等。各种接奖口,FPG中A内部实现通某一加速单栏元,如视频龄加速,数据狱处理,格式奇转换等操作勺。这种结构漆基本基本围糖绕FPGA造接口、加速糖单元展开,垮属于数据的酸反馈类型,币即处理完数告据又反馈回冈接口模块。启尼

其他虽余然各型各样璃,如SOP谷C,如各型虾接口,但本惊质上其都是帜为上述架构划服务的,或纸做配置管理奥替代外部C自PU,或在恒数据流中间懒传递中间参森数。或在内要部实现CP肺U+协处理障器的架构,悬因此说,无物他变化。畜盐

孙子版兵法云:“板兵无常势,惊水无常形”室。但是对于订一种设计技递术来说,没喜有一种固定祸演进的架构侵和设计,那锣么项目的整席个设计层次酬总是推到重负来,从本质停上说,就是扣一种低水平毙重复。如果贝总结规律,绣提炼共性,劣才能在提升尿设计层次,兼在小作坊中借取得大成果寿。浴架构设计漫嗓谈(二)稳绪定压倒一切吵敏捷开发宣咬言中,有一很条定律是挖“瓶可以工作的拾软件胜过面房面俱到的文胀档婆”棵。如何定义时可可以工作贿的,这就是丑需求确定后寇架构设计的孟首要问题。宝而大部分看冈这句话的同贷志更喜欢后叔半句,用于坊作为不写文嫌档的借口。蛙FPGA受的架构设计涨最首先可以卡确定就是外县接接口,就龄像以前说的冠,稳定可靠赶的接口是成技功的一半。伸接口的选择侮需要考虑几鸽个问题。蓄1,横避胖有无外部成娇熟睬IP残。一般来说弟,们ALTER斜A闭和泄XILIN庙X秃都提供大量阵的接口管IP鲜,采用这些弊IP凯能够提升研量发进度,但犹不同油IP伙在不同梯FPGA惊上需要不同枯licen坟se粪,这个需要绣通过代理商委来获得(中溪国国情,软黄件是不卖钱斧的)。保2,不判倾自研接口潜IP布,能否满足亭时间、进度副、稳定性、贩及兼容性的鞠要求。缠案例刮1醒设计一个网莲络接口在逻靠辑设计上相塘对简单,比炕如课MII艰接口等同于沈4bit垦数据线的扯25MHZ梨样,而时RGM滨II软可以使用双凯沿饰125Mh应z庄的采样专用胆的双沿采样邀寄存器完成炎(使用寄存芒器原语)。树但是如何支岁持与不同武PHY樱连接一个兼次容性问题(联所谓设计挑慢PHY填的问题,这杯个问题后面区详述)。雄贤甘案例中2:CPU竹通过接口连锣接许FPGA柿时,如果说CPU急此时软复位垄,则有管脚涝会上拉,此陈时如果该管考脚连接青FPGA秃接口是控制场信号且控制歉信号高电平钉有效,则此换时最FPGA或逻辑必然出安错。同样服FPGA晋在配置时,麻管教输出高矩阻,如此时渣CPU寻上电且板级罢电路管脚上菊拉,则同样萝会导致妻CPU还采样出错(肥误操作的问丢题)。刊不能只是考贵虑编写仆veril略og牌代码仿真能鸽对就行,接锦口设计应该月站在系统的词角度来看问涌题,问题不陪是孤立的,从还是互相联片系。拘设计中,如誉果需要存储谎大量数据,树就需要在外为部设计外部温存储器,这构是因为捐FPGA尖内部长RAM窑的数量是有挖限的。是采雾用泄SRAM指、学DDR2婚、淘DDR3搬。这就需要纱综合考虑存饶储数据大大唐小,因为得SRAM华的容量也有还限,但是其边接口简单,步实现简单方玩便,且读取坚延时较小。虾DDR2取、肯DDR3讨的容量较大差,接口复杂蚀,但诚FPGA敞内部有成熟幼IP架可用,但是短读取的延时郊较大,从发炭起读信号到水读回数据一附般在十几个骡时钟周期以钩上。如果对净数据时延有绍要求,需要麦上一次存储羡数据作为下库一次使用,获且数据量不烂太大(几百密K费到几兆),惰则抽SRAM神是较好的选耻择。而其他特方面站DDR2/鹿DDR3认是较好的选齐择。为什么奇不用梳SDRAM精或者返DDR寒。这是因为消设计完毕,助采购会告诉见你,市场上拦这样老的芯贪片基本都停劝产了。阳FPGA校接口在设计扰选择的原则眉就是:能力就够用,简单墨易用。特别重值得一提的难是高速宰SERDE钞S规接口,最好街使用厂商给泡的参考设计葱,有硬核则以不选择软核油,测试稳定邀后,一定要谁专门的位置柜约束,避免忧后面添加的紧逻辑拥挤后家影响到接口润时序,也可必避免接口设餐计人员与最质终的逻辑设呼计人员扯皮程(不添加过题多逻辑,接丘口是好用的薪)。一个分底析高速桐SERDE棋S吩的示波器,闷采样频率至访少新20G栗甚至更高以喂上,动辄上吧百万,出现齐问题,不一兼定有硬件条不件可调试。峡回到开头,叶如何定义替“版可用的尝”扭设计,稳定厨我想是前提酷,而接口的颗稳定性更是耍前提的前提箭。这里稳定真包括,满负繁荷边界测试例,量产、环坝境试验等一馒系列稳定可的靠。而在架务构设计中,里就选择成熟错的接口,能员有效的避免恩后续流程中深的问题,从栋源头保证产融品的质量。规架构设计漫床谈(三)时妹钟和复位拿接口确定以厚后,FPG节A内部如何塑规划?首先录需要考虑就眉是时钟和复卷位。理时钟:集根据时钟的逆分类,可以脱分为逻辑时击钟,接口时翅钟,存储器渴时钟等;塘跪

(朽1)逻辑时踢钟取决与逻姜辑的关键路忌径,最终值押是设计和优脉化的结果,装从经验而不爽是实际出发魄:低端FP哨GA(cy腊clone丝span被tan)工萍作频率在4晓0-80M脚hz之间,岸而高端器件降(stra桨tixv障irtex种)可达10测0-200令Mhz之间通,根据各系边列的先后性市能会有所提愈升,但不是比革命性的。等森所(2)接口寿时钟,异步澡信号的时序腰一般也是通箩过FPGA殿片内同步逻撞辑产生,一赚般需要同步此化,即接口不的同步化采族样。某些接累口的同步时省钟一般是固雁定而精确的拳,例如下表璃所示,如S棍ERDES关的时钟尽量寄由该BAN季K的专用时辨钟管脚输入跪,这样可保事证一组SE赏RDES组沾成的高速接但口时钟偏斜安一致。挤接口名称垮IP输入时输钟离备注镜MII节25Mhz湾

枣RGMII垮/GMII躲125Mh绘z怕

少XAUI赤156.2碰5Mhz伤差分智IP内部倍绵频使用咱PCI各33Mhz巡

者PCI-e扎100Mz习差分输入扬IP内部倍长频使用绑阵

(段3)外部存页储器时钟:筐这里时钟主度要为LPD茎DR/DD弟R2/DD璃R3等器件霉的时钟,一穗般来说FP膜GA的接口确不用工作在轿相应器件的骗最高频率。假能够满足系产统缓存数据雄的性能即可光,但是一般衫这些IP的本接口都规定惜了相应的最掘小时钟频率集,因为这些体接口状态机竭需不停进行影外部器件的全刷新(充电拴),过低的风频率可能会倚引起刷新的浅问题,造成邪数据丢失或回者不稳定。侄临

(字4)另外一怎些需要输出顶的低速时钟圾,例如I2托C、MDI挂O、低速采渴样等操作,伍可以通过内此部分频得到扇。不用通过衫PLL/D技CM产生所罗需时钟。在抢XILIN瘦X的FPG宽A中,禁止五PLL产生许的时钟直接淡输出到管脚胞上,而AL湾TERA的防器件可以如两此操作。解抱决此类问题揭的方法可通黑过ODDR谋器件通过时阿钟及其18奇0度相位时毙钟(反向)牢接入的时钟爬管脚分别采介样0、1逻蚊辑得到。排因为有了D现CM/PL竖L这些专用江产生时钟的南器件,似乎爱产生任意时箱钟输出都是滑可能是,但歼实际例化的画结果,时钟皂的输出只能愤选取某些范议围和某些频俯率,取决于援输入时钟和装分频系数,茧CLK_O崖UT=做CLK_I案N*(M伐/N)鞠窝。这些分频祝系数基本取的整数,其产校生的频率也保是有限的值堪。梦复位:激根据复位的页分类,FP购GA内部复川位可以分为液硬复位,逻土辑复位、软拳复位等;调硬复位:故僚名思议,即雅外部引脚引菜入的复位,另可以在上电雀时给入,使颠整个FPG宵A逻辑配置饺完成后,能际够达到稳定姜的状态,这北种复位重要安性在于复杂协单板上除了睛FPGA外铸,可能还有举多个器件(苏CPU、D瑞SP),其花上电顺序不贱同,在未完弓成全部上电追之前,其工祥作状态为不千稳定状态。跃这种复位引组脚可以通过聪专用时钟管敢脚引入,也勾可通过普通爬I/O引入征,一般由单朋板MCU或闲者CPLD政给出。健逻辑复位:猫则是由FP邀GA内部逻甩辑产生,例恢如可以通过卡计数产生,鼓等待一段时纵间开始工作斥,一般等待纵外部某些信腔号准备好,庄另一种FP毙GA内部逻页辑准备好的优状态信号,疯常见的有D迹CM/PL胶L的LOC次K信号;只烟有内部各逻研辑准备好后蚂,FPGA元才能正常工捧作。另外F驰PGA内部植如设计逻辑蒙的看门狗的僵话,其产生蛾的复位属于姥这个层次。众软复位:严核格的说,应忘属于调试接唉口,指FP搅GA接收外吐部指令产生墓的复位信号启,用于复位晨某些模块,司用于定位和里排除问题,棍也属于可测讯性设计的一盏部分。例如咸FPGA通易过EMIF半接口与CP秧U连接,内印部设定软复飘位寄存器,穿CPU通过荡写此寄存器尘可以复位F筹PGA内部巩单元逻辑,跳通过写内部笔寄存器进行崇软复位,是礼复杂IP常许用的功能接晒口。调试时隐,FPGA佳返回错误或躲无返回,通到过软复位能遮否恢复,可转以迅速定位热分割问题,跟加快调试速抹度。剥复位一般通池过差与霉或者浮或瞒的方式(高磨电平或、低梯电平与),爸产生统一的欢复位给各模逢块使用。模莲块软复位信愧号,只在本替模块内部使龟用。辱

问题:同道步复位好、协还是异步复睛位好?归舌XILIN是X虽然推荐少同步复位,体但也不一概汤而论,复位免的目的是使闷整个系统处怠于初始状态哨,这根据个疤人写代码经兰验,这些操竖作都可以,塌前提是整个筒设计为同步卸设计,时钟钩域之间相互饼隔开,复位哥信号足够长落,而不是毛椒刺。下面推是荐一种异步翼复位的同步显化方式,其身电路图如下坊:士

时钟和复克位基本上每僻个模块的基咬本输入,也榴是FPGA连架构上首先府要规划的部文分,而不要绍用到才考虑跳,搞的整个芽设计到处例烂化DCM或昏者输出LO光CK进行复们位,这些对抵于工程的可庄维护性和问秒题定位都没胀有益处。《皮治家格言》穷说:“宜未再雨而绸缪,勉毋临渴而掘锹井。这与F兴PGA时钟礼和复位的规次划是同一个乓意思。境架构设计漫饲谈(四)并滋行与复用久FPGA其朝在众多器件煌中能够被工括程师青睐的纳一个很重要周的原因就是顾其强悍的处祝理能力。那扇如何能够做晚到高速的数纱据处理,数苹据的并行处算理则是其中随一个很重要烦的方式。详数据的并行屡处理,从结星构上非常简假单,但是设相计上却是相机当复杂,对疗于现有的F稼PGA来说野,虽然各种论FPGA的赛容量都在增绳加,但是在浓有限的逻辑剂中达到更高秃的处理能力瓶则是FPG既A工程师面搭临的挑战。拨常用并行计骡算结构如下歉图所示:盘上图中:前搏端处理单元作负责将进入青数据信息,核分配到多个稻计算单元中饼,图中为3刮个计算单元赶(几个根据服所需的性能鸣计算得出)饰。然后计算坐单元计算完属毕后,交付本后端处理单娱元整合为统泛一数据流传犬入下一级。哄如果单个计灰算单元的处矿理能力为N瞒渠,则通过并介行的方式,弃根据并行度描M,其计算感能力为N*掀M;在此结渡构中,涉及绪到几个问题净:遵一,令辟企残讲前端处理单勺元如何将数以据分配到多荒个计算单元形,其中一种遣算法为ro胀und-r标obin,镰轮流写入下瘦一级计算单杏元,这种方计式一般使用监用计算单元智计算数据块暑的时间等同虏。更常用的赠一种方式,膛可以根据计教算单元的标电示,即忙闲秋状态,如果闯哪个计算单津元标示为闲唇状态,则分精配其数据块居。慎二,捞巾龄落摔计算单元和太前后端处理翻之间如何进首行数据交互剃。一般来说咬,计算单元走处理频率较粥低,为关键残路径所在。销前后端处理拥流量较大,海时钟频率较脸高,因此通柿过异步FI裁FO连接,绳或者双端口顿RAM都是千合适的方式视。如果数据陆可分块计算延,且块的大糠小不定,建决议使用FI头FO作为隔牲离手段,同辞时使用可编妈程满信号,颗作为前端处杠理识别计算腿模块的忙闲棕标示。茄三,耗出虹革驳如果数据有朽先后的标示扔,即先计算洪的数据需要贯先被送出,技则后端处理迫模块需要额罢外的信号,甩确定读取各关个计算模块萍的顺序。这挠是因为:如波果数据等长驻,则计算时金间等长,则卡先计算的数先据会先被送出出。但是如艘果数据块不贤等长,后送偿入的小的数晚据块肯能先肢被计算完毕孤,后端处理糖单元如果不瓶识别先后计赴算的数据块齐,就会造成崭数据的乱序梢。这可以通参过前端计算宗单元通过小勾的FIFO少通知后端计殿算单元获知做首先读取那废个计算单元迎输出的数据微,即使其他赵计算单元输叔出已准备好搬,也要等待绢按照顺序来挨读取。徒

数据的并盼行处理是F析PGA常用顶的提升处理吉性能的方法葬,其优点是蚁结构简单,嚼通过计算单达元模块的复薪用达到高性许能的处理。界缺点,显而逗易见就是达罗到M倍的性始能就要要耗晃费M倍逻辑观。棒与之相反减歇少逻辑的另艇一种方式,诵则是复用,填即一个处理跪能力较强的岔模块,可以府被N的单元兵复用,通过明复用,而不革用每个单元抚例化模块,苏可以达到减幅少逻辑的效讨果,但控制晓复杂度就会旷上升。其结盒构图如下所秤示:肉上图复用的阶结构图中,遗分别介绍了乐流过模式复康用和调用模担式复用。流服过模式下,碰计算单元处装理多路数据愉块,然后将赏数据块分配婆到多路上,泳这种情况下悄,通过ro痒und-r所obin可背以保证各个扫通路公平机翻会获得计算坝单元。其处塌理思路与上月图描述并行大处理类似。垒调用模式下牵,计算单元乘被多个主设升备复用,这院种架构可以保通过总线及隶仲裁的方式疲来使各个主星设备能够获帐取计算单元胖的处理(有婶很多成熟的逝例子可供使皆用,如AH怒B等)。如某果多个主设迟备和多个计芦算单元的情拿况,则可以考不通过总线碌而通过交换捡矩阵,来减端少总线处理扛带来的总线邪瓶颈。迫实际应用场柏合,设计的但架构都应简巧单实用为好锡,交互矩阵礼虽然实用灵吼活,但其逻委辑量,边界辰测试验证的灵难度都较大记,在需要灵驾活支持多端写口互联互通体的情况下使晌用,可谓物昼尽其用。但巴如果仅仅用甩于一般计算移单元能力复慈用的场景,锈就属于过度避设计,其可董以通过化简叨成上述两种劳简单模式,砍达到高速的亿数据处理的拴效果。宾并行和复用捐,虽然是看展其来属性相址反的操作,露但其本质上仰就是通过处奶理能力和逻弦辑数量的平卫衡,从而以临最优的策略勉满足项目的务需要。设计鸭如此,人生辅亦然。那架构设计漫性谈(五)数反字电路的灵球魂-流水线唯流水线,最扇早为人熟知翁,起源于十数九世纪初的参福特汽车工撕厂,富有远团见的福特,冲改变了那种测人围着汽车唇转、负责各样个环节的生透产模式,转诊变成了流动讨的汽车组装贿线和固定操拐作的人员。痛于是,工厂伙的一头是不株断输入的橡粱胶和钢铁,农工厂的另一忙头则是一辆苍辆正在下线驴的汽车。这馒种改变,不扩但提升了效忽率,更是拉伙开了工业时毛代大生产的算序幕。遵肯如今,朋这种模式常愤常应用于数莲字电路的设抚计之中,与材现在流驱动粪的旱FPGA阳架构不谋而众合。举例来畏说:某设计纲输入为批A诞种数据流,林而输出则是鄙B皆种数据流,玉其流水架构捐如下所示:图熔撒睁每个模块只软负责处理其周中的一部分垫,这种处理番的好处是,景1饰、简化设计滨,每个模块种只负责其中牢的一个功能台,便于功能割和模块划分倡。虾2耗,时序优化掏,流水的处冈理便于进行检时序的优化挖,特别是处卫理复杂的逻想辑,可以通饰过流水设计峰,改善关键童路径,提升线处理频率,命并能提升处怒理性能。范肾弱各个流水线跟之间的连接纵方式也可通片过多种方式端,如果是处异理的是数据奔块,流水模陡块之间可以云通过贵FIFO驰或者姐RAM拘进行数据暂碎存的方式进油行直接连接首、也可以通闪过寄存器直叮接透传。也申可通过某些酷支持著brust利传输的常用持业界标准总霞线接口进行绘点对点隐的互联,例捡如荐AHB意,扁WISHB厘ONE供,秧AVALO些N-绣ST怨等接口,这页种设计的优棒点是标准化榆,便于模块阵基于标准接怠口复用。每熊个模块的接谷收接口为从唐接口(饿SLAVE许),而发送竹接口为主接票口(亩MASTE胞R烈)。火架构流水的刘好处一目了亮然,但另一校个问题,对板于某些设计株就需要谨慎绞处理,那就能是疫时延猾。对于进入爬流水线的信穴息厕A亲,如果接入蹈的流水处理后的模块越多灯,其输出时犬的时延也越税高,因此如穴对处理时延铃要要求的设球计就需要在植架构设计时圣,谨慎对待唐添加流水线针。架构设计丸时,可以通戏过处理各个烦单元之间的狼延时估计,剂从而评估系执统的时延,善避免最终不秘能满足时延月短的需求,誉返回来修改泰架构。饭流水架构在垒另种设计中喊则无能为力鼻,那就是带渠反馈的设计莲,如下图所聚示:驾离餐图中,需要奶处理模块的捐输入,需要渐上一次计算船后的结果的肚值,也就是总输出要反馈歌回设计的输盲入。例如某吊帧图像的解垃压需要解压献所后的上一煮帧的值,才匙能计算得出罗。此时,流年水的处理就叶不能使用,眯若强行添加诊流水,则输丸入需等待。低丝如上图中,挂如在需反馈丸的设计中强斜加流水,则紫输入信息餐Ai乒需要等待剧Ai-1即处理完毕后卷,再进行输凶入,则脉处理模块崇1铅,就只能等胁待(空闲)市。因此,问扔题出现了,迷流水线等待梅实际上就是般其流水处理唤的的效果没眠有达到,白忆白浪费了逻酷辑和设计。望昼流水应用在哗调用式的设烟计中,可以径通过接口与株处理流水并准行达到。即校写入、处理教、读出等操旺作可以做到霸流水式架构蒜,从而增加旁处理的能力类。课流水是算FPGA轧架构设计无中一种常用眼的手段,通渗过合理划分去流水层次,剥简化设计,凤优化时序。冬同时流水在刺模块设计咽中也是一种倚常用的手段障和技巧。这啦将在后续重缓陆续介绍。三,流水本身踏简单易懂,粱而真正能在垫设计中活用者,就需要对块FPGA叉所处理的业巡务有着深刻辈的理解。正婶如那就话,志知晓容易,赏践行不易,园且行且珍惜千。诞设计不是凑扣波形(一)傍FIFO(宿上)饿FIFO逐是弟FPGA网内部一种常滴用的资源,矛可以通过欺FPGA张厂家的的内IP浓生成工具生葵成相应的颂FIFO振。勇FIFO丛可分为同步再FIFO提和异步为FIFO趴,其区别主悉要是,读写捡的时钟是否踩为同一时钟效,如使用一远个时钟则为干同步互FIFO映,读写时钟蜂分开则为异确步格FIFO猪。一般来说茫,较大的娇FIFO洋可以选择使诞用内部盆BLOCK计RAM择资源,而小捧的裂FIFO裹可以使用寄误存器资源例膛化使用。没封篮一般来说,初FIFO蚀的主要信号页包括:愿信号认数据信号鸭读信号牵rd_en禁读数据滤dout浸读空信号果empty否写信号闷wr_en俘写数据炉din据写满信号启full产坛挠实际使用中拘,可编程满分的信号(锹XILIN缓X令易的半FIFO贴)较为常用既,论ALTER弱A貌的糊FIFO槐中,可以通怖过写深度(箩即写入多少给的数据值)般来构造其可奉编程满信号寿。通过配置颠thres乞hold辜(门限)的摔值可以设定集可编程满起停效时的设FIFO乏深度。钓田杠祝上图所示为在FIFO壤的模型,可洒以看做一个培漏桶模型,痒其中输入、糠输出、满信懂号、空信号途、可编程满滋等信号如图撒所示,一目帽了然。遥棉其中徒thres根hold杀信号可以看搜做水位线,次通过此信号呼可以设置可套编程满信号奉。铸FIFO振的其他的信若号也大都与太其深度相关随,如有特殊零需求,可通稀过厂商提供编的凯IP分生成工具的谢图形界面进取行选择使用归。乔施春FIFO铸的使用场景纠有多种,其幼中主要如下侮所示:答(1)状呢趋剧数据的缓冲损,如模型图蛙所示,如果卖数据的写入云速率高,但罩间隔大,且裙会有突发;志读出速率小炼,但相对均闪匀。则通过片设置相应深挠度的补FIFO怠,可以起到舱数据暂存的角功能,且能娃够使后续处碌理流程平滑艳,避免前级私突发时,后植级来不及处姥理而丢弃数派据。换(2)侍何厌碑时钟域的隔孟离。对于不铜同时钟域的屡数据传递,冶则数据可以波通过兼FIFO牧进行隔离,软避免跨时钟御域的数据传临输带来的设风计与约束上犹的复杂度。陡更盐

FIFO将设计中有两乐个需要注意观事项,首先宣,不能溢出扶,即满后还伏要写导致溢南出,对于数再据帧的操作爬来说,每次吨写入一个数萄据帧时,如京果每写一个石宽度(撑FIFO望的宽度)的乔数据,都要护检查满信号辛,则处理较方为复杂,如泛果在写之前塑没满,写过尸程不检查,矮则就容易导稼致溢出。因畅此可编程满交的设定尤为波必要,通过稳设置可编程饭满的水位线粮,保证能够薯存储一个数身据帧,这样仇写之前检查辈可编程满即吼可。箭其次,另一扑更容易出错辩的问题,就俊是空信号。勾对于拦FIFO俗来说,在读厦过程中出现婚空信号,则堡其没有代表劈该值没有被帐读出,对于削读信号来说早,如设定读奖出一定长度鸽的值,只在捉一开始检测烦非空,如状袋态机的触发妨信号,容易愉出现过程中坝间也为空的见信号,会导摄致某些数据筑未读出,特成别是写速满牌而读速快的尊场景下。育带因此快rden兴与滴!empt粮y那信号要一起乔有效才算将张数据读出。运空信号处理估相对容易出穗错,懒人自律有笨方法,忠下面介绍一妻种应用于数抹据帧处理的武FIFO屋使用方式,絮只需在读开盯始检测空信头号即可,可毁以简化其处乞理读数据的谣流程:诞誓其处理结构妹如上图所示郑,数据缓存姜以大牵FIFO哄(快BLOCK炸援RAM纽实现)为主造,而每存储嫁完毕一个数丢据帧向小道FIFO(糊寄存器实现蛾)茂内写入值。语当小渣FIFO译标示非空时颤,告则标示大燕FIFO鄙中已存储一纲个整帧。则叫下一级模块怎可以只需检若测小秩FIFO菊非空时,从冒而读出一个孝整帧,过程培中大承FIFO欠一直未非空唐,可以不用耽处理非空信凝号,从而简索化设计和验塌证的流程。杠猾抛此外还有李FIFO屋其他应用方胶式,下节接祥着介绍。(拘未完待续)痒-设计不是派凑波形(二钟)FIFO见(下)缺FIFO葱在肠FPGA投设计中除了陪上篇所介绍虚的功能之外烘,仍王还有以下作境为以下功能身使用:飞(1)仁兄颗价内存申请锯采在软件设计贱中,使用璃m转alloc扯()和僚free尺()等函数碰可以用于内朴存的申请和搞释放。特别漫是在有操作基系统的环境鱼下,可以保鞭证系统的内已存空间被动别态的分配和敌使用,非常锄的方便。如交果在吗FPGA胸内部实现此点动态的内存引分配和申请扁,相对来说吗较为复杂,萄例如某些需谋要外部数据雪存储且需动遣态改变的应届用需求下,茶需要对征FPGA近外部气DDR(葱或巩SRAM督等蜘)上的存储空间梁,进行动态畜的分配和释植放。通过使暮用似FIFO默作为内存分挽配器,虽然矿比不上软件窃的灵活和方尝便,但是使惠用也较为简倍便。柴举例说明假政设外部存储壶空间为烛8Mbyt雁e礼,可将其划倒分为纺8192好个栽1Kbyt竿e年空间。并将挣数值礼0-819线1妹存储酒FIFO暂中,援FIFO碧内部存储所收标示可用的盏内存空间。容如下图所示循。捐首先,进行席内存的初始喘化,即将虾0-819童1部写入久FIFO启中。薪坑如需申请内助存后,从极FIFO顿中读取值征A宋,然后根据内A门的标示,写固入统A犁所指示的外掀部存储区(情DDR胆)中相应的佣位置,即申着请戏{A园,码10’h0怕_00}来->{A,迹10’h3其_FF}婆的空间区域另。河咐染如释放内存喷后,即可向拿FIFO负中写入相应躺的值。即可权保证下次该漠空间能够被谨设计使用。垫狮邻在此种设计诉中,另FIFO蚀承担了内存选分配和释放尽器的角色。奇此时只能申搭请或释放最面小单元倍数点的内存空间旦,如本例所诊示:为敌1Kbit缓。如竭FIFO表读空,则代嘉表申请内存索失败,需要榆等待其他块饭内存释放后源再写入箱FIFO丹中,才能再后次申请。银(2)席班歼圣串并转换咬对于串并转堵换,可能对抬于脆FPGA泼工程师来说任,非常常见堆,但是如果燥有专门的沟IP席实现此功能坑,可简化设域计,减少出态错及验证的转工作量。例渗如:对于外尊部输入的需胁要进行串并萍转换的信号谎,并进行存目储的信号,酱如设计进行雾串并转换在画存储等操作带,设计,可献以直接通过患例化读写位科宽不一致的欠FIFO蚊,例如穷1老入泛8魄出的抵FIFO乞,可直接将将外部输入信已号直接转换死成文8BIT纯信号并进行郊存储后,供鸡后续处理使势用(其他的批)。谦(3)扮同亿优业务优先级军划分君通过茄FIFO垂设置不同水积位线,可以与划分不同的钢业务优先级正,保证高业足务优先级数雕据流在带宽宾受限时,优堤先通过,而污低业务优先悼级只能在满咏足高优先级姻需求后有多拢余的带宽时宗才能通过。枯并且可以划盟分多个优先住级,满足多期种业务的需塘求。设计将液在以后篇幅巧中详述。肺(宵4考)固定带宽村设定尚通过对邮FIFO脱接口的读出士使能,能够毛保证实现固旨定带宽的输彩出,例如训FIFO事读接口为钩32bit巴,而读时钟叹为好50Mhz耽,则输出为筝1.6Gb稍it/S府。如实现固犁定带宽的输节出(如找1Gbit此/S穿),有两种垒方式治,聋一种可以通杜过降低时钟拒频率到家31.25骡Mhz摘。另一种方批式,可通过禽读信号中间境插入等待周尘期,如果读罩出长度为匀N钱的数据所需图时钟周期为哲M渣,则需等待绵(镇3M/5嫌)的周期,看从而降低至哭1Gbit捷/S蹈的处理能力肌,这在某些神需要进行流渔量限制的业嗽务方式中使雀用。改对于两FIFO喊来说,作为劈FPGA蒸内部资源的绵一个常用器屋件,最常见傍应用于异步岭时钟域划分遮和缓冲数据安,但不仅限缴于此,简化谜设计、减少镇耦合、输入鼠输出接口固幅定,便于仿亿真和验证,卸都是使用耕FIFO惭带来的设计辩上的益处。斑设计不是凑然波形(三)熊RAM长在FPGA旗内部资源中游,RAM是捏较为常用的领一种资源。泼壮通常实例化完RAM中,膨一种使用为贺BLOCK雹RAM头挤也就是块R候AM膀乞。另外资源朋可以通过寄报存器搭,也胆就是分布式面RAM。前份者一般用于守提供较大的纷存储空间,培后者则提供救小的存储空访间。须沙在实际应用骆过程中,一愿般使用的包醋括,单端口遵、双端口R挂AM,RO琴M等形式等蛛不同的形式锻。午勾实际应用中凡FIFO也敲是利用RA互M和逻辑一亦起实现的。数假贷对于一块R排AM中,其鸡能够例化的雁深度是有限档的。例如c高yclon我e4的RA叼M9k中可涨以例化的资多源如下所示臭:睁尖

因此:例荐化化深度<窃256的R传AM,其同们样也需要占衰用一块BL赌OCKRA旗M的资源,凯例如例化宽储度为64筹辆深度为12膨8的RAM化,其资源为蔬8K砖略。但是仍然宣需要占用两扫块BOCK列RAM。尿也就是说,谜只要例化R扇AM深度少弓于256.脂则对于本器婶件9K来说扁,剩下的资较源也是浪费众。袄浇手那是不是可顶以例化成双惊端口RAM臭,通过高位祝地址区分,宋变为两个单设端口RAM居(widt谣h:32,顾depth群:128)买来使用,这室样就可以节委省资源了?泥棚倡

而对于双讨端口RAM雹来说,每个黑M9K能够枪配置是的最桥小深度就变趁成是512柴,而最大宽积度为18,抄如下图所示眨,因此作为盼真双端口R调AM使用,嘉深度小于5敞12的话,束仍然会占用浇1块RAM誉。且宽度》积18就会多激占用额外的若一块RAM婆,因此上述恋的节省资源旨的方式是不说正确的。酿通过查看d晚atash岛eet的中捎RAM能够祝配置的方式亚,从而能够逆正确的使用阻RAM资源混,从而达到形高的利用效聪率。可以看狂出,RAM脚9K其应用夹方式受限,沾主要是因为布RAM的端街口的连接信送号受限,例怨如:该RA乌M9K的读固端口最大支版持36根信迟号线,因此膊对于单端口昏其支持的宽侦度为36,府双端口为1牌8(两个端季口,总共3特6根数据线祝),作为F汁PGA来说款,其布线资秧源是有限的称,不可能无阵限制的增加述其端口数。壳RAM例化攻时,有时需放要初始化R兰AM,AL榆TERA和考XLINX锈的初始化方太法如下所示躬:斗(1)AL狮TERA练RAM中,见例化时为M浪IF文件,迫其格式为:楼DEPTH晒=32念;

姥椅灾席--Th搞esiz券eof巨memor揉yin赞words挺WIDTH于=8;绑夜聪司见--Th嚷esiz棵eof酒d洽atai盗nbit挺s榜ADDRE个SS_RA糖DIX=泛HEX;丰显量--Th玩erad创ixfo穷radd粮ress盾value蜡s千DATA_颠RADIX踩=HE炎X;

啦云商--Th标erad较ixfo流rdat奥aval童ues含CONTE沉NT

打碍枕乔种--st傻arto畏f(ad雅dress佛:da原tapa何irs)让BEGIN看00:干0;

么球拳

--寒memo觉ryad吵dress傅:da免ta除01:杀1;END;板(2)训在XILI赠NX的RA满M中,RA旗M出示化文镇件为COE倦文件,其格为式为:百敏

M奔EMORY织_INIT倡IALIZ挺ATION丰_RADI述X=2;

猜牢设定进制盛MEMOR补Y_INI塔TIALI挤ZATIO笑N_VEC殖TOR=

熔些初始化向量腰批值得注意的挎是:XIL捏INX的R你AM初始化言后会自动生莲成MIF文简件,而此m固if文件与绣ALTER更A

顷室mif文件搅格式不同。僻不能用于初替始化ALT国ERA的您搞RAM。膝熔倚鉴于例化不帐同IP的复迎杂性,现在唤编译工具也企支持利用V怨ERILO万G语言来描返述RAM,姥而编译工具涛自动识别为巩RAM,自祖动产生相应膊的IP核,竿下面以XI必LINX的胸EDA工具版为例简要介呜绍。粱modul困eram佩(串clk,典wr,ad课dr,di收n,dou犹t);灭input纵clk;杏input争[7:0抓]add娘r;蜡input弯wr;姐input声[31:梁0]di术n;辫outpu巩t[31窜:0]d均out;忘reg[宅31:0]血

mem芦[0:2申55];席reg[瓶31:0]专dout附;是alway才s@(po愉sedge畏clk)截if(wr明)策mem[a诊ddr]起<=di阔n;冷alway道s@(p氏osedg罪ecl捡k)剑dout

纤=

m掩em[ad浮dr];脉endmo饲dule俊

上述描述懂可以被描述军成RAM,暮自动产生R地AM.其例洋化的报告为液:蝇=====鹊=====底=====愤=====移=====带=====贸=====夜=====雪=====桂=====匹=====乌=====上=====毅=====企===置*

忌猛共别庭

HD饥LSyn蚊thesi济s

签放互议垦不

*谊=====矩=====杆=====尘=====简=====再=====鸦=====骗=====养==锋=====茂=====券=====拦=====凳=====后=====柔=倒Perfo载rming伏bidi锁recti恐onal胖port腔resol酒ution躁...枯Synth敬esizi洗ngUn辟it购桨.可

R新elate垦dsou廉rcef桨ilei斥s"ra燕m.v".乱

F编ound乘256x3佳2-bit饱sing露le-po含rtRA素M伸扎fors坟ignal原栋.颜

F超ound跃32-bi侄treg巾ister寄for张signa最l叠畏.术

S骤ummar粱y:翠构

i脉nferr赏ed

任1RAM夕(s).局殊

i神nferr除ed

3沈2D-t材ypef尽lip-f箩lop(s散).掏Unit补蹲synth盯esize倘d.姻=====宇=====日=====担=====拿=====勒=====凯=====亲=====宫=====此=====英=====灵=====玉=====糕=====阁===瓦HDLS愁ynthe形sisR训eport序Macro取Stat右istic谈s垦#RAM妨s

钻颠迷丘厉怪寿惊剑

:能1迹

256x燕32-bi贿tsin逃gl骆e-por利tRAM郑孙庄科犯屯

:1掌#Reg肥ister盛s

访租拿箭易波设升

:明1勺

32-b阀itre凉giste猜r

铜润仿饭挪芒精

:真1企=====继=====罩=====佩=====缘=====村=====洲=====世=====期=====堤=====焦=====妥=====惰=====距=====犁===扩浙

综上:副羊RAM作为亭FPGA内第部一种基本暂资源,掌握估RAM的特飘性和基本用码法,则是F汽PGA工程锐师的基本技卵能,能够充低分利用FP致GA内部的辆资源,毕竟崖对于FPG范A来说“资果源就是金钱梢”,节省资澡源就是省钱久。陕写在cod量ing之前昂的铁律每写在cod坦ing之前稳的那些铁律汽少(1)注释馆:好的代瓶码首先必须蹲要有注释,监注释至少包振括文件注释寄,端口注释叫,功能语句到注释。泊膀溪文件注释:徒文件注释就鼠是一个说明疮文:这通常激在文件的头桶部注释,用幕于描述代码百为那个工程挺中,由谁写况的,日期是丝多少,功能驶描述,有哪咱些子功能,勺及版本修改颤的标示。这换样不论是谁民,一目了然亡。即使不写尾文档,也能讲知道大概。撕棕岭接口描述:既modul举e的接口信教号中,接口辞注释描述模幸块外部接口艰,例如AH屠B接口,和首SRAM接忍口等等。这到样读代码的黄人即可能够歼判断即模块施将AHB接冲口信号线转足换成SRA拾M接口信号忽。债愚新功能语句注醉释:内部嫁关键逻辑,辩状态机某状她态,读过程种、写过程。敞煮注释的重哄要性,毋庸刻置疑,好的感注释,能够载提高代码的璃可读性,可椒维护性等等昂。总之,养而成注释的好训习惯,代价婚不大,但是畏收益很大。筐(2)语句田:发开始写代码器是,在FP客GA设计中左,特别是在臭可综合的模诞块实现中,垦veril歇og的语句石是很固定的制。脂在声FPGA画的设耍计中,不外讲乎时序逻辑蔑和组合逻辑霜,除此之外孕,别无他法作。对于开始构功能编码来辩说,只需知词道组合逻辑筛信号即可生测效,时序逻睁辑在时钟的据下一拍起效惯就够了。帆下面是编码通的实例。周组合逻辑:沸两种组合逻肉辑的描述,门其功能是一腾致的。叛汉偿assig雾n侄习缎A=B肃?1贷:D坦队?咏吵2抛苍:3;偷浅屡alway多s@(*)打英身远if(B)闯寒燥逢A=1幅律温立else和忙阻if(D)劲谷邀寺A=2医;捏亚迫谜else勺秃通聋A=3恩;戏驻氧组合逻辑今如果是异步默复位的话,岁描述如下思极alway讽s@(po灰sedge坟sys_侍clko借rneg丢edge慈rst_n场)零歌败宣if(!r酷st_n)膝犯恐防a<=沫0;厚续灰湖else丢旨株武a<=辣b;掀菜夺也就是说,燥在veri和log的可临综合电路的狱编码中,只竖需要三种语惹句,分别是淡assig师n,al丧ways(纷*)伏掠及时序的a斥lways意(`CLO米CK_ED俱GEcl四k)慈呼。毅卧`CLOC桑K_EDG际E闸香可以是上升拘沿或者下降找沿。运拾张为什么用a株lways脑@(*)遮饰而不是al六ways(璃敏感信号列蔽表)。战“梁*盘”圾包含所有敏皇感信号列表暂,如果在c漫oding鸡过程中,漏透掉了某个敏鸟感信号,则员会导致仿真飞不正确,例作如本例中,漫敏感变量列暗表中,需要曲Bor浸C草富但是如果漏桑掉一个,仿饭真就会在B级或C有变化掘时,输出没瘦有变化。导敲致仿真和功激能不一致,摆但是对于综毒合工具来说泡,功能还是牙能够正常工呆作的,不会下因为敏感变期量列表中的葡值未列全而调不综合某条时语句。某些烘情况下,敏欧感列表的值凡可能有十几描个甚至更多寒,遗漏是可封能发生的事总情,但是为步了避免这种双问题,最好至采用alw孤ays(*迁)而不用敏乡感变量列表气的方式,来僻避免仿真结脊果不一致的认情况发生。仿(3)赋值拘:老话重提娃,阻塞与非机阻塞期很多同志喜早欢钻研阻塞宏赋值和非阻误塞赋值,这扛两种赋值,毯分别在al牌ways块席里面用于的完阻塞奖“鸽=丑”厦给组合逻辑提赋值,非阻岩塞商”察<=坛”锐给时序逻辑骂赋值。这应末该是铁律,俗应该在编码主过程中被严诚格的遵守下吓来。逮“弹为什么?,庭不这么用程馆序也能跑乖”侵。这句话部萌分是正确的绘,疑问永远窗是工程师最仰好的老师。网诚然,某些夜情况下,不望严格的执行爬也跑,但是抗在某些情况绍下,实现二蜜者就不一样蕉。励只烂对于下面两弯个例子来说男明,为什么君?索对于val秩ue1的描酸述方式:其单综合后的如德下所示翼侧宣如果从实际圣的编译结果欲上看踪耳b和b1眠高及c和c1聪其使用阻塞堂赋值和非阻甩塞赋值最终旧的结果是一蹈致的,因此毅,也就是说侵,某些情况火下,二者的夜编译结果一喘致。蹈违税而对于va卸lue2的笑描述方式:遵其综合后的蠢电路图如下络所示。械而对于第二部中描述方式改,阻塞赋值求和非阻塞赋背值的区别就持显现出来了粮,从综合后径的图中可以厕看到,c1眼信号是b1辣信号的寄存戏,而c信号泪和b信号为塌同一信号,净都为a信号弄的寄存。三作为FPG随A工程师,菜一项基本的素能力,就是辜要知道代码湾综合后的电速路和时序,凤不要让其表膜现和你预想犬的不一致,届“托不一致忠”捐就意味着失胁败。即是代烧码的失败,请也是工程的级失败仰对于阻塞和话非阻塞赋值录区别和详细元说明来说,哥其能够编写漆一本书(如炼有时间也可粒专题详述)秆,但是对F给PGA工程杆师,对于v辉erilo危g的编码而考言,则只需者要按照时序粱逻辑用义“稿<=潜”戴非阻塞,组克合逻辑用阻朗塞屡“趣=线”杨赋值即可。崇不要挑战那情些规律,试取图通过语言晃的特性来生勉成特殊电路纠的尝试是不键可取的,开条个玩笑的话爬,是没有前练途的,要把系设计的精力登放在通过可性用的电路来艇实现需求上仰,不要舍本馋逐末。在数沸字电路设计卵中,我们需畅要的是一个作确定的世界屠,嫁“立所见及所得抗”奋,不要让你秩所想的和综录合编译工具袖得认识不一驼致。这也就宫是不要乱用编和混用这两副个赋值的原睡因。淘(4)一个头变量一个附“棉家延”渗参泽不要在两个尊alway施s语句中同导一个变量赋具值。(这是腿必须的)市每讯也尽量不要凭在同一个a渴lways荣语句中,对鼓两个变量赋次值。(这是致可选的)浙如果是一组管信号,其有遵共同的控制久条件,则在岔同一alw摊ays语句案中赋值能够奸减少代码行节数,提高可泉读性,除此陕之外,最好养分开来写。沾如果几个不烤太相关的信斯号在同一里抛面赋值,其辱可读性极差杠,在组合逻蕉辑中,还容鼠易产生la代tch。躲而前者赋值刷方式,综合跨工具肯定会录报错,这到页不用很担心张,因为能够蚀报的错误时迁是最容易被话发现的。俗梦语说:巴“辟咬人的狗不纲叫分”安,而对于F而PGA设计史来说轮“吐致命的BU臭G,从来不西报错惩”篇。(5)锁存剑及柴FPGA中台不要有锁存贵器的产生。赤最容易产生饶的是在al菜ways(睡*)语句中指,最后一定牺是所有分支焦条件都要描扑述并赋值,朽(一定要有草最后的el苗se)。状尘态机中,同凯样如此,不泰但需要有d监efaul讲t的状态,燃每个状态的类都要有所有吨的分支都要寸赋值

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论