FPGA的设计原理 FPGA和CPLD的区别

可编程逻辑

1340人已加入

描述

1984年,Xilinx公司的创始人之一,密西根大学毕业生,RossFreeman第一次提出了可编程逻辑器件(PLD)的概念,让芯片成为一个空白的画布,可由工程师通过编程在上面任意“涂鸦”。

FPGA

(瞻仰一下大神)

Freeman也因为这项发明进入2009美国发明家名人堂。遗憾的是英年早逝的他没能看到他所缔造的FPGA帝国是多么的辉煌。

清华大学微电子研究所所长,中国半导体行业协会副理事长魏少军先生曾用印一本书来区别芯片的设计、制造、封测过程:设计相当于作家写了一本书,制造相当于印刷,封装相当于装订。那么FPGA是什么?如果是一个专业从事FPGA工作的老攻城狮可能会告诉你,”Field Programmable Gate Array“,然后再补上一句”It can be anything you want“。网上也有很多通俗易懂的类比。例如把FPGA的开发看作是数字积木搭建,东南大学汤勇明老师就写过一本《搭建你的数字积木——数字电路与逻辑设计》

一个个IP就像是一块块积木,通过调用IP"搭建"特定功能的电路,这个比喻来说明FPGA的开发再合适不过了。

也有人将FPGA比作是空白的大脑,大脑里面存在成千上万的神经元细胞,但是神经元之间并没有连接起来,也就还没有大脑强大的功能,但是当工程师用Verilog或者vhdl来对FPGA进行布局布线之后,神经元就连接到了一起,大脑也就有了一些功能,给大脑输入羊肉泡馍的画面,会流口水之类的反应。这个比喻来形容FPGA的设计原理再合适不过了。

另外,还有人将FPGA中的一些组成部分和生物化学有机体类比。FPGA中最基本的单元——可编程逻辑单元(CLB),可以类比为有机体中的蛋白质分子,生物化学的角度上,蛋白质可以合成更高更复杂的器官,例如心,肝,胃,胳膊腿等,那么同样CLB作为电子有机体中的蛋白质分子,当然就可以合成一个电子有机体(类比人)的各个模块(器官),有的器官复杂,需要很多蛋白质分子分层次合成,那么同样,有的电子系统的模块的也极其复杂,需要CLB分层次合成。

那么蛋白质分子在合成各种不同的器官的时候,靠什么做指导嘞?人体内部有着极其庞大复杂的DNA序列,这个DNA序列记录着人体的所有信息。在受精卵生成胚胎阶段,其中的某一段序列指导胚胎的这一坨(也就是这一堆蛋白质分子)成为未来的手,另一端序列指导胚胎的另一堆蛋白质分子成为未来的胳膊。那么同样,在FPGA中也会有等价于生物化学有机体中的DNA,就是bit_stream。bit_stream和DNA完全类似,就是一段序列,指导着若干CLB合成某一个执行具体功能的模块。

在有机体中还有脂肪的存在,脂肪的一大作用就是存储能量,在FPGA中负责存储的是BRAM,不同的是脂肪储存的是能量,BRAM储存的是数据。        

FPGA中还有一个很重要的东西叫做DSP,即数字信号处理器,在人的大脑里面有一片脑回沟区域专门负责数学运算,两者可以做一个类比。

生物体中还有一个十分重要的器官叫心脏,而FPGA中有一个东西叫时钟,心脏控制脉搏,时钟则负责整个系统的工作频率。有了心脏,人类才得以正常活动,有了时钟,系统才得以有条不紊的运行。

在FPGA的设计当中编写的RTL代码,通过软件工具可以生成人类看不懂的bit_stream,也就是说工程师每天的工作都是在编写FPGA的DNA,在生物学领域,我相信大多数的科学家毕生都在做着解读‘人类天书’DNA的工作吧。这样一一类比下来感觉FPGA的开发就像是在造人一样,顿时感觉代码都不枯燥了。

首款 FPGA,即赛灵思 XC2064,只包含 64 个逻辑模块,每个模块含有两个 3 输入查找表 (LUT) 和一个寄存器。按照现在的计算,该器件有 64 个逻辑单元——不足 1000 个逻辑门。尽管容量很小,XC2064 晶片的尺寸却非常大,比当时的微处理器还要大;而且采用 2.5 微米工艺技术勉强能制造出这种器件。但随着IC制造工艺的发展,FPGA也迅速发展,资源爆炸式增长,ZYNQ系列的Z-7100的逻辑单元已经到了444k。

FPGA

 

 

与FPGA同为PLD的还有CPLD,CPLD(Complex Programmable Logic Device),复杂可编程逻辑器件。CPLD由可编程逻辑的功能围绕一个可编程互连矩阵构成,由固定长度的金属线实现逻辑单元之间的互连,并增加了I/O控制模块的数量和功能。

CPLD的基本结构可看成由可编程逻辑阵列(LAB),可编程I/O控制模块和可编程内部连线(PIA)等三部分组成。

可编程逻辑阵列(LAB):由若干个可编程逻辑宏单元(Logic Macro Cell,LMC)组成,LMC主要包括与阵列、或阵列、可编程触发器和多路选择器等电路,能独立地配置为时序或组合工作方式。

FPGA

FPGA由可编程逻辑块(CLB),输入/输出模块(IOB)及可编程互连资源(PIR)等三种可编程电路和一个SRAM结构的配置存储单元组成。CLB是实现逻辑功能的基本单元,他们通常规则排列成一个阵列,散布于整个芯片中。可编程输入/输出模块(IOB)主要完成芯片上的逻辑与外部引脚的接口,它通常排列在芯片的四周。可编程互连资源(PIR)包括各种长度的连线线段和一些可编程链接开关,他们将各个CLB之间或CLB与IOB之间以及IOB之间连接起来,构成特定功能的电路。

FPGA

CLB主要由逻辑函数发生器,触发器,数据选择器等电路组成。逻辑函数发生器主要由查找表(Look Up Table)构成。

查找表LUT实质上是一个RAM,当用户描述了一个逻辑电路后,软件会计算所有可能的结果,并写入RAM。每一个信号进行逻辑运算,就等于输入一个地址进行查表,找出地址对应的内容,输出结果。这样也大大加快了FPGA的运算速度。

FPGA和CPLD的区别主要有以下几点:

FPGA

(1) FPGA采用SRAM进行功能配置,可重复编程,但系统掉电后,SRAM中的数据丢失,因此,需要在FPGA外加EPROM,将配置数据写入其中,系统每次上电自动将数据引入SRAM中。CPLD器件一般采用EEPROM存储技术,可重复编程,并且系统掉电后,EEPROM中的数据不会丢失,适用于数据的保密。

(2)FPGA器件含有丰富的触发器资源,易于实现时序逻辑,如果要求实现较复杂的组合电路,则需要几个CLB结合起来实现。CPLD的与或阵列结构,更适用于实现大规模组合功能,但触发器资源相对较少。

(3)FPGA是细颗粒度结构,CPLD是粗粒度结构。FPGA内部有丰富连线资源,CLB分块较小,芯片利用率高。CPLD宏单元的与或阵列较大,通常不能完全被应用,且宏单元之间的主要通过高速数据通道连接,其容量有限,限制了器件的灵活布线,因此,CPLD利用率较FPGA器件低。

(4)FPGA为非连续式布线,CPLD为连续式布线。FPGA器件每次编程时实现的逻辑功能一样,但走的路线不同,因此延时不易控制,即时序延迟不可预测。CPLD每次布线路径一样,消除了分段式互连结构在定时上的差异,并在逻辑单元之间提供快速且具有固定延时的通路,CPLD的延时小,且时序延迟可预测。CPLD比FPGA可工作在更高的频率。

所以FPGA是什么?

It can be anything you want!

参考文献:

[1]知乎用户PIPI.FPGA与CPLD基本结构与区别[OL].

(2020-09-05).https://zhuanlan.zhihu.com/p/218280002

[2]知乎用户帅晶晶.(2019-12-22).

https://www.zhihu.com/question/326525860/answer/946167907

[3]张国斌.赛灵思,你都第一了还这样拼会让追赶着很绝望啊[OL].(2019-10-11)

作者:Fanxin Meng

编辑:黄飞

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分