购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第四讲

打胜仗未雨需绸缪
做设计把握到细节FPGA结构与面向FPGA的设计

“一知半解是危险的。”我的朋友赫奇斯会这样引经据典地说。

——《历史学家》

有诗赞曰:

“未见朝霞披星光,春夏秋冬加班忙。唯看代码千万行,不晓电路真模样。已是鬓角微挂霜,方知经年在砌墙。悟道某家有仙方,却往单元结构想。”

不知道从什么时候开始,通信界的好运气用完了。当加班成为新常态时,能在百忙之中思考事务本质的人就少了。俗话说:“炮弹坑里面没有无神论者”,贫道可以加个下联:“生产线上面没有好工程师”,对仗不是特别工整,大家见笑了。

这个加班的逆流目前已经波及了整个电子设计界,如黄河泛滥,一发不可收拾。“宁做金融狗,莫为电子人”。但只见“公司一片月,万人加班声。任务做不尽,总是忙碌情。何日定需求,白劳罢远征”,这是凡人的状态。贫道是:“别人笑我忒疯癫,我笑别人看不穿。不见马桶豪杰墓,无码无图心作田。”做设计的关键,在这里老道给诸位一一叙来:“有钱的帮个钱场,没钱的帮个人场!”

一、两朵花儿一样红

昆曲《牡丹亭》里唱道:“【醉扶归】……(旦)不到园林,怎知春色如许!”,老夫在这里引用这个俗句的用意是做设计时,不知道自己使用的器件的特点和内部结构是危险的。不敢说这样就不能完成既定目标,但是某家保证你要想成为绝顶(当然,如果您还想保留一头青丝,算我白说)高手那是势必比登天还难。

前文书中讲到过“(数字逻辑设计的)两大境界:‘第一层:眼里代码心中电路;第二层:原理图至逻辑单元’”。在这一讲里,直接讲的是第二层,这个类似于打通任督二脉的作用。下面一定有人问了:“怎么还是跳跃性发展啊,第一层还没有讲,就上第二层了?”这里且容许贫道做一个解释:第一层会在本套书后面详细道来,一直会讲到读者达到“吐着吐着就吐习惯了”的地步。而这个第二层仅仅在本讲里说说,属于听热闹的内容,此中奥妙只能大家在自己的工程实践中去慢慢体味了。这个和学武艺是一个道理:招式和内容,师傅可以教你;至于能不能打通任督二脉,那就要看小施主您的造化了(当然,这个主要取决于贵客在书里的地位,你知道的!)。

这里有一个小小的声明:本讲以下部分的插图均来源于网络,如果原作者感觉不爽,请与说书人联系,定会立即撤换(马上就要有TPP(跨太平洋战略经济伙伴关系协定,Trans-Pacific Partnership Agreement)了,以防万一。说不定贫道火了,要去TPP国家进行主题演讲呢?)

今天不把别的表,给广大听众说一段《攻城狮相亲记》,大家说可好?

却说一天,某工程师(男,名字不叫小明,姑且叫他小狮吧)看到新闻报道:“大陆男多女少趋势加重”。于是,不得不忍痛割原则,决定采用相亲方式来解决终身大事。消息传开,隔壁李阿姨介绍了一个姑娘叫ASIC,并且给了玉照一张,见图1.19。楼下老王慢了一步,给小狮相中了少女一位,芳名 FPGA,也有照片一幅,见图1.20(不会有人真以为某家在讲故事《攻城狮相亲记》吧?)。

小狮一看犯了难,这两位可谓半斤对八两,长相都差不多啊!本着“广泛撒网重点培养”的精神,发挥多多益善的实力,小狮决定都去处处。所谓“路遥知马力,日久见人心”,把问题交给时间这把杀猪刀,以后再去选择自然是没有错的。

图1.19 ASIC外观图(联发科公司手机芯片)

图1.20 FPGA外观图(Xilinx公司VIRTEX-6)

光阴如箭,日月如梭;有话说长,没话说短。小狮处两个对象非止一日,吃饭、花前月下也不算少,他的心里却都难割舍。某日,他突然接到两个电话,两位美女前后被车撞了。幸好不是“气死马”的那位开车。但是小狮却极为为难(这完全是“你妈和你女友同时落水”的困境嘛!怎么破?),反正,小狮破了(怎么解决的,卖个关子,简单来说是贫道的锦囊妙计。预知详情可以与生活出版社联系,购买老道的《恋爱指南——双船秘籍》 )。A小姐和F女士都做了核磁共振的图片,见图1.21和图1.22,小狮顺便比较一番。(不准说粗话,此处省略3个字),这内部也还是不分伯仲、彼此彼此吗?常言道:难的不是没有选择,而是选择太多。

图1.21 某ASIC的布局(Layout)图

图1.22 某FPGA的布局(Layout)图

讲故事的写法,比科技书板脸严肃的“科技八股”累多了。容我歇歇,说点套话。对于ASIC和FPGA的比较,可以通过不同方面来进行。在商务方面,可以通过产品的设计周期和生命周期、前期投入和后期成本等来进行比较。从系统架构和工程设计角度而言,两者的区别主要在于设计的灵活度、可定制程度及基本设计单元等(这些下面一节自会介绍,听众朋友少安勿燥。不想听我啰唆的朋友,也可以直接跳过下面的几百字,直接听下一节的书,不影响理解)。

这一节里选择了最不可能有差别的部分进行比较,找不出差异也是必然的(如果谁能找出问题,那就是“鸡蛋里面挑骨头”的主,大家反而需要小心伺候着)。

首先,比较外貌就是一个伪命题,不管什么数字芯片的长相都差不多。数字芯片之间的区别仅仅在于尺寸大小和管脚类型。因此,用这个因素来区别ASIC和FPGA是绝对不靠谱的。

再说底层的布局图,无论是ASIC还是FPGA到了最下层都是单晶硅、各种渗透及连线,自然也不会有多大的区别。从某种意义上说,FPGA 也是一种特殊的集成电路,只不过是可以动态配置结构而已,在内部核心上是没有创新的。

以上属于“涨姿势”的内容,大家看个热闹就好。千万别对这些内容“打破砂锅问到底”,细节老道我也不是很清楚。

二、查看结构自分晓

剧透一下,知道贫道给小狮的锦囊里写的是什么吗?偷偷告诉你吧:“预知心腹事,且听背后言。”不多说了,这是《七侠五义》里的台词;本书里的词是:“要想知道是秦淮河还是金陵女大的,只需看其谈吐(功能结构)。”

通过内线(谷歌搜索),找到了ASIC与FPGA的功能结构,如图1.23和图1.24所示。瞧一瞧,看一看,这个区别不是很明显吗?ASIC作为专用器件,其功能单元是专业设计的,各个单元有自身专门的功能(具体这个东西是干什么的,可以参考和尚的《IP核芯志》;不了解这个,对于理解本书也没有障碍,可以选择自然忽略);反观FPGA的情况,其中有很多功能基本相同的单元,通过这些单元的排列链接以达成“可编程”的战役目的。

图1.23 某ASIC的功能结构图(参数可配置的串行FIR滤波器)

小狮通过比较,感觉FPGA才是“上得厅堂,下得厨房,安得系统,打得流氓”的多面手,于是毅然决然把该女士作为唯一了。因此,这里有必要对FPGA的功能结构里的每个单元做一个详细的介绍(以下以Xilinx公司的FPGA为例子进行说明,内容来源于该公司的资料翻译)。

图1.24 某FPGA的功能结构图

1.可编程输入/输出单元(Input Output Block,IOB)

可编程输入/输出单元简称I/O单元,是芯片与外界电路的接口部分。这部分单元完成不同电气特性下对输入/输出信号的驱动与匹配要求。为了便于管理和适应多种电气标准,FPGA的IOB被划分为若干个组(bank),每个bank的接口标准由其接口电压决定,一个bank只能有一种接口电压,但不同bank的接口电压可以不同。只有相同电气标准的端口才能连接在一起,电压标准相同是接口标准的基本条件。通过软件的灵活配置,可适配不同的电气标准与 I/O 物理特性,可以调整驱动电流的大小,可以改变上、下拉电阻,还可以调节信号的时延。目前,I/O 口的频率也越来越高(一句话,这些东西是用来输入/输出信号的)。

2.可配置逻辑块(Configurable Logic Block,CLB)

CLB 是FPGA内的基本逻辑单元,是FPGA完成各种需求功能的最基础单元。CLB的实际数量和特性会依器件的不同而不同,但是每个CLB都包含一个可配置开关矩阵,此矩阵由4或6个输入、一些选型电路(多路复用器等)和触发器组成。开关矩阵是高度灵活的,可以对其进行配置以便处理组合逻辑、移位寄存器或RAM。每个CLB模块不仅可以用于实现组合逻辑、时序逻辑,还可以配置为分布式RAM和分布式ROM。(这部分是本书关心的重点之一,下一节将会重点介绍)。

3.数字时钟管理模块(Digital Clock Management,DCM)

时钟信号是时序逻辑电路里最重要的信号(没有之一),因此,业内很多 FPGA 均提供数字时钟管理。先进的FPGA提供数字时钟管理和相位环路锁定。相位环路锁定能够提供精确的时钟,且能够降低抖动,并实现过滤功能。

4.嵌入式块RAM(Block RAM,BRAM)

大多数FPGA都具有内嵌的块RAM,这大大拓展了FPGA的应用范围和灵活性。块RAM可被配置为单端口RAM、双端口RAM、内容地址存储器(CAM)及FIFO等常用存储结构。CAM存储器在其内部的每个存储单元中都有一个比较逻辑,写入CAM中的数据会和内部的每一个数据进行比较,并返回与端口数据相同的所有数据的地址,因而在路由的地址交换器中有广泛的应用。除了块RAM外,还可以将FPGA中的 LUT灵活配置成RAM、ROM和FIFO等结构。在实际应用中,芯片内部的块RAM的数量也是选择芯片的一个重要因素。

单片块 RAM 的容量和位宽有限,因此可以将多片块 RAM 级联起来形成更大的RAM,此时FPGA内部RAM的最大规格只受限于芯片内部的块RAM的数量。

5.布线资源

布线资源连通FPGA内部的所有单元,而连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。FPGA 芯片内部有着丰富的布线资源,根据工艺、长度、宽度和分布位置的不同而划分为4类不同的类别。第一类是全局布线资源,用于芯片内部全局时钟和全局复位/置位的布线;第二类是长线资源,用以完成芯片Bank间的高速信号和第二全局时钟信号的布线;第三类是短线资源,用于完成基本逻辑单元之间的逻辑互连和布线;第四类是分布式的布线资源,用于专有时钟、复位等控制信号线。

在实际中,设计者不需要直接选择布线资源,布局布线器可自动地根据输入逻辑网表的拓扑结构和约束条件选择布线资源来连通各个模块单元。从本质上讲,布线资源的使用方法和设计的结果有密切、直接的关系。

6.底层内嵌功能单元

内嵌功能模块主要指DLL(Delay Locked Loop,延时锁相环)、PLL(Phase Locked Loop,相位锁相环)。

7.内嵌专用硬核

内嵌专用硬核是相对底层嵌入的软核而言的,指FPGA处理能力强大的硬核(Hard Core)。为了提高FPGA的性能,芯片生产商在芯片内部集成了一些专用的硬核。例如,为了提高FPGA的乘法速度,主流的FPGA 中都集成了专用乘法器;为了其他通信总线与接口标准,很多高端的 FPGA 内部都集成了串并收发器(SERDES),可以达到数十Gbps的收发速度。”

看出来了吧,上面七部分中的很多单元在一个具体的工程中,全被用到的可能性实际不算太高。这和智能手机的情况类似,实际用户只用到了机器中的一部分功能,但他们全要为所有的功能买单。所谓“样样懂,样样松”,FPGA为了达到名字里这个G(可编程)的名至实归,实际上把很多东西浪费了。最后啰唆一句,这样一来对于FPGA型号的选择就很有讲究了,提醒听众们注意(当然,也不排除有很多地方会“只买贵的,不买对的”)。

三、逻辑单元详分解

揭开CLB的盖头来,你将会看到如图1.25所示的一副尊容。以Xilinx公司的FPGA器件为例,CLB由多个(一般为2个或4个)相同的Slice(这个词还真不好翻译,我查了半天百度,看到唯一靠点谱的说法是逻辑片)和附加逻辑构成。其中,Slice是基本的逻辑电路实现单元,属于重点内容,后面详细介绍;外围电路中,开关网络主要完成一般信号的可配置连接,快速连接线主要进行时钟和复位等关键信号的连接。

图1.25 Xilinx公司FPGA中CLB的结构图

另外,每个CLB模块不仅可以用于实现组合逻辑、时序逻辑,还可以配置为分布式RAM和分布式ROM(不过强烈不建议这样做,因为太浪费了。不仅仅是“百年古树做牙签——大材小用”,而且时序性能也会大打折扣)。

还有不服的没有?“货物出门,概不退换”啊!没有了?那么贫道继续和大家扯Slice里的故事。

Slice的结构如图1.26所示,一个Slice由两个4/6输入的LUT(查找表,Look Up Table)、进位算术逻辑、D 触发器和函数复用器组成。算术逻辑包括一个异或门和一个专用与门,一个异或门可以使一个Slice实现2bit全加操作,专用与门用于提高乘法器的效率(这个后文书有详细讲解,这里属于“看热闹”的内容);进位逻辑由专用进位信号和函数复用器(MUXC)组成,还包括两条快速进位链,用于提高CLB模块的处理速度,以及实现快速的算术加减法操作。4输入LUT用于实现组合逻辑运算。

图1.26 Xilinx公司某款FPGA Slice的结构

有些低端的FPGA里也可能没有进位算术逻辑部分,但是LUT(无论是几端口,这个数字对于设计者而言无关紧要)和D触发器是绝对不能少的。一个基本单元里,LUT和D触发器的个数不同,公司也是不同的,这个主要取决于FPGA设计者(这里指的是设计 FPGA 芯片的工程师,不是指用 FPGA 来设计其他引用的工程师。严谨,严谨!)对于大多数应用的认识,这个属于经验的范畴,设计得好,单位资源利用率就会高,布线资源也不会很浪费。

书归正传。初次看到图1.26的同学们有没有感到惊讶呢?如果有,说明你的《数字电子技术》的学费没白交。说好的用于组合逻辑的门级电路呢?还有编码器、译码器等,这些器件都没有,怎么设计组合逻辑啊?

EDA(电子设计自动化,Electronic Design Automation)软件“做人很厚道”的,不会那么多前辈先生都能做的东西,到你这个小菜鸟这里故意刁难的。数电有数电的玩法(顺便提一句,这个和ASIC的设计理念差不多),但是FPGA却有FPGA自己的情怀。前面说过,FPGA为了通用性,也就是叫“G”名副其实,不得不浪费了很多东西。想一想,组合逻辑是如此的丰富多彩,FPGA 不可能每种器件都给你备下很多吧?FPGA 设计者是大拿,不是吃素的,于是想到了万能的查找表方法。

LUT 说起来也是一个很古老的概念了,在和尚的《IP 核芯志》里是这样说的:“除了利用RAM(Random Access Memory,随机存取存储器)做LUT的几个江湖败类,偏安于黑暗的角落之外……”,可见在20世纪70年代,LUT的思想就存在了。而且可以这样说,正是 LUT 的思想演化出了后来各种可编程逻辑器件。说起来,FPGA 是 LUT的徒子徒孙,达拉孙辈的。

下面介绍一点技术层面的LUT问题。LUT本质上就是一个RAM,里面存着真值表。在目前的FPGA中,多数采用4输入的LUT,因此每一个LUT可以看成一个有4 位地址线的RAM。当用户通过原理图或HDL语言描述了一个逻辑电路以后,EDA软件会自动计算逻辑电路的所有可能结果,并把真值表事先写入RAM。这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。对于输入高于4比特的输入,EDA软件会自动把输入拆分成若干LUT,最后联合输出(真值表是什么,这个不用讲了吧。不懂的人,数电考试肯定作弊的,回去重修!)。官方说法是:“由于基于LUT的FPGA具有很高的集成度,其器件密度从数万门到数千万门不等,可以完成极其复杂的时序与逻辑组合逻辑电路功能,所以适用于高速、高密度的高端数字逻辑电路设计领域”。本书介绍的结构竟然是流行趋势,好极好极!

最后来看一看开发流程里的“综合”这个过程,那些“优化”什么的“亮瞎钛合金狗眼”的概念对于FPGA的组合逻辑方面还存在吗?我们应该独立思考。贫道闻到了退化的味道。这也不是说EDA软件没用,LUT组合方面的算法还是可圈可点的。

“话不说不明,窗户纸不捅不透”。技术就是这层窗户纸,老道就是捅纸人。高抬腿,轻落足……“来人啊,抓贼!”(未完待续)

最后捎带说一下《相亲记》的结果吧,省得老有人打听。小狮又单身了,原因是总加班,有工作无生活,这个女孩子受不了了。

这正是:

“芯片阵列并列来,面貌核心分不开。照妖宝镜这边抬,结构组合差别来。识得底线多感慨,设计思路上层台。万条河流归沧海,千种组合表内待。” WvE6hlCDVl8zsCz4z3rPEbrbw3M5yQ3iSF53hfGhtSUzesM5tFTrgKKaK0MQmhvA

点击中间区域
呼出菜单
上一章
目录
下一章
×