时间:2024-07-23 来源:网络搜集 关于我们 0
作为半吊子的硬件开发工程师,一个偶然的机会就去面试了一家互联网公司的项目经理,其实平台还挺大的,这里面试都通过了,期间产生的一些问题也跟大家做分享一下。
面试一共是四轮,两轮技术面,一轮综合面试,一轮hr面,都死采取电话面试的过程。
其中当问到FPGA的时候,我第一时间竟然只是听过,但是不知道具体是什么东西,抱着务实求真和学习的态度,也就有了这篇文章的出来,希望在总结的同时,也可以跟大家一起分享学习一下。
我将从三个部分跟大家介绍一下什么是FPGA,他的工作原理,以及更为复杂的FPGA架构。
听到这个名词的时候,第一时间是耳熟,FPGA的官方解释是Field-Programmable Gate Array,翻译过来就是现场可编程门阵列。
它是在PAL、GAL、CPLD(不可读系列)等可编程器件的基础上进一步发展的产物,跟ASIC相比,它是作为一种半定制电路而出现的,既解决了定制电路的不足,也克服了可编程门阵列电路有限的缺点。
相信你应该有听过CPU,GPU等通用处理器吧,FPGA跟他们相比具有更高的效率,更高的速度、功耗更低等优点,但是他易于开发的程度远远不如GPU。
跟刚才ASIC这种专职专用的定制电路相比,FPGA的开发难度较小,开发周期也是更短,更适用于复杂多变的数据中心等应用,但是缺点呢?它牺牲了资源,成本较高,性能上会比专职专用的ASIC定制电路差,在一定程度上不能完全的替代ASIC。
由于FPGA 需要反复烧写,所以他实现组合逻辑的结构不能像ASIC 那样通过固定的与非门来完成,而只能采用一种抑郁反复配置的结构。查找表(LUT)可以很好地满足这一要求,目前主流FPGA 都采用了基于SRAM 工艺的查找表结构。通过烧写文件改变查找表内容的方法来实现对FPGA 的重复配置。
FPGA 的原理就是如此,他通过烧写文件去配置查找表的内容,从而在相同的电路情况下实现了不同的逻辑功能。
那么什么是查找表呢?
查找表(Look-Up-Table)简称为LUT,LUT 本质上就是一个RAM。目前FPGA 中多实用4 输入的LUT,所以每一个LUT 可以看成一个有4 位地址线的RAM。当用户通过原理图或HDL 语言描述了一个逻辑电路以后,FPGA 开发软件会自动计算逻辑电路的所有可能结果,并把真值表(即结果)事先写入RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查找表,找出相应的内容,然后输出即可。
简短概括上面的那段话就是:
通过开发软件将所有可能的结果写到LUT上,然后通过输入是何种状态,直接查找输出结果。下面这种图应该会让你比较直观的看出来。它的查找表是什么呢?
在 FPGA,用户首先写出“y=(a&b)|c”代码,软件工具(QUARTUS、ISE 或 VIVADO)分析这一行代码,得出 a、b、c 不同值下(共8 种不同值),y 的值分别是多少。然后软件工具将结果写到LUT 上,从而实现了该代码的功能。下图就是FPGA 的实现基本结构。LUT 就像一个RAM,abc 则相当于地址,通过abc 的地址就得读到值赋给y。是不是不难理解呢?到目前为止。
赛灵思公司在1985 年推出的第一块FPGA—XC2064 包含8×8=64 的逻辑块阵列,每个逻辑块包含一个四输入查找表及其它一些简单功能。
由于它们的容量非常有限,因此早期的FPGA 只用来执行一些相对简单的任务,比如集中一些胶合逻辑,或实现基本的状态机。
但是随着时间的推移和工艺节点的进步,FPGA 的容量和性能不断得到提高,功耗却不断的下降。直到大约2006 年以前广泛使用的一直是四输入查找表,一些高端器件可能使用六、七或八输入的查找表,这些大家伙可能被用作一个大的查找表,或分裂成许多更小的功能,比如两个四输入的查找表或一个三输入一个五输入的查找表。
在实际的高端器件中,这种可编程构造可以描述相当于百万级(有时甚至千万级)的原始逻辑门。
如果某个逻辑功能(比方说计数器)是用FPGA 的可编程构造实现的,那么这个功能可以被说成“软功能”,我们称之为软内核。
相比之下,如果某个功能是直接用芯片实现的,则被说成“硬功能”,我们一般称之为硬内核。
软内核的优势在于,你可以让它们做你想让它们做的任何事,注意,是数字功能,不包括模拟功能。硬内核的优势是它们占用较少的硅片面积,具有较高的性能,并且功耗较低,并且硬内核可用于实现模拟功能。例如锁相环的倍频功能,这需要用于模拟电路,所以这一部分是在FPGA 内部用硬件来实现的。
可能第一部分什么是FPGA,以及FPGA的工作原理大家理解起来不会那么难,第三部分我更多使用文字描述的形式展现,更多也是一种定义,希望不会给你们觉得困难。
总之FPGA理解起来就是一堆的门电路组合,可以反复的进行擦写,好的甚至可以擦写百万次,其实针对FGPA的还有两部分细节我还没跟大家介绍,由于篇幅有限,下篇会跟大家补上,主要是:
带嵌入式处理器的FPGAFPGA的编程方式让大家对它有个整体的认识,然后我就会详细的介绍他的设计与应用,也是为自己理解应用FPGA打下基础,在日后工作上有更深的理解。
欢迎大家点赞,评论,支持和收藏,你的支持是对我创作的认可!感谢!