首页 > 代码库 > FPGA之初认识
FPGA之初认识
什么是FPGA
FPGA(Field-Programmable Gate Array),即现场可编程门阵列 。看到编程两个字码农就笑了,不就是编程嘛,那可是我们的强项 。且慢,此编程非彼编程 。一定要把 FPGA 的编程和软件编程区分开来 。软件的编程,处理器会逐条的把语言翻译成各种控制信号,去控制内部电路完成一个个运算或操作 。那么FPGA的编程是怎么实现的呢?无论 Altera 家还是 Xlinix 家的 FPGA,叫法有什么差异,基本单元都相似,都是由真值表和 D 触发器构成 。改变真值表的值就改变了逻辑功能,再通过和D触发器组合来实现任何时序逻辑 。所以我们对 FPGA 的编程,实际上就是去修改这些真值表和连接关系,使他们组成一张专门的真值表,去实现特定的功能 。这和软件编程一步步运行程序有本质的区别 。要想玩转 FPGA,就必须理解 FPGA 内部的工作原理,学习如何利用这些单元实现复杂的逻辑设计 。
谁用FPGA?
FPGA是给设计电子系统的工程师使用的。这些工程师通常是使用已有的芯片搭配在一起完成一个电子设备,如基站、机顶盒、视频监控设备等。当现有芯片无法满足系统的需求时,就需要用FPGA来快速的定义一个能用的芯片。前面说了,FPGA里面无法就是一些“真值表”、触发器、各种连线以及一些硬件资源,电子系统工程师使用FPGA进行设计时无非就是考虑如何将这些资源组合起来实现一定的逻辑功能而已。
FPGA的结构
FPGA内部主要三块:可编程的逻辑单元、可编程的连线和 可编程的IO模块。
可编程的逻辑单元是什么?其基本结构是某种存储器(SRAM、 FLASH等)制成的4输入或6输入1输出地“真值表”加上一个D触发器构成。任何一个4、1组合逻辑电路,都有一张对应的“真值表”,若用存储器制成的4、1“真值表”,只需要修改其“真值表”内部值就可以输出任意4、1组合逻辑。这些“真值表”内部值是什么?就是那些01编码而已。如果要实现时序逻辑电路怎么办?这不又是D触发器嘛,任何的时序逻辑都可以转换为组合逻辑+D触发器来完成。
但这毕竟只实现了4输入1输出的逻辑电路而已,通常逻辑电路的规模那是相当的大哦。那怎么办呢?这个时候就需要用到可编程连线了。在这些连线上有很多用存储器控制的链接点,通过改写对应存储器的值就可以确定哪些线是连上的而哪些线是断开的。这就可以把很多可编程逻辑单元组合起来形成大型的逻辑电路。
最后就是可编程的IO,这其实是FPGA作为芯片级使用必须要注意的。任何芯片都必然有输入引脚和输出引脚。有可编程的IO可以任意的定义某个非专用引脚(FPGA中有专门的非用户可使用的测试、下载用引脚)为输入还是输出,还可以对IO的电平标准进行设置。
总归一句话,FPGA之所以可编程是因为可以通过特殊的01代码制作成一张张 “真值表”,并将这些“真值表”组合起来以实现大规模的逻辑功能。现在的FPGA,不单单是有前面讲的那三块,还有很多专用的硬件功能单元,如何利用好这些单元实现复杂的逻辑电路设计,是从菜鸟迈向高手的路上必须要克服的障碍。而这一切,还是必须先从了解FPGA内部逻辑及其工作原理做起。
HDL语言
HDL语言的英语全称是:Hardware Description Language,注意这个单词Description,而不是Design。老外为什么要用Description这个词而不是Design呢?因为HDL确实不是用用来设计硬件的,而仅仅是用来描述硬件的。描述这个词精确地反映了HDL语言的本质,HDL语言不过是已知硬件电路的文本表现形式而已,只是将电路用文本的形式描述出来而已。
在编写语言之前,硬件电路应该已经被设计出来了。但是很多人就不理解了,既然硬件都已经被设计出来了,直接拿去制作部就完了,为什么还要转化为文字表达形式再通过EDA工具这些麻烦的流程呢?硬件设计也是有不同的抽象层次,每一个层次都需要设计。最高的抽象层次为算法级、然后依次是体系结构级、寄存器传输级、门级、物理版图级。使用HDL的好处在于我们已经设计好了一个寄存器传输级的电路,那么用HDL描述以后转化为文本的形式,剩下的向更低层次的转换就可以让EDA工具(注)去做了,这就大大的降低了工作量。也就是说在对这一抽象层次上硬件单元进行描述可以被EDA工具(FPGA开发软件)理解转化为底层的门级电路或其他结构的电路(即FPGA内部逻辑功能实现形式)。
HDL也可以描述更高的抽象层级如算法级或者是体系结构级,但目前受限于EDA软件的发展,EDA软件还无法理解这么高的抽象层次,所以 HDL描述这样抽象层级是无法被转化为较低的抽象层级的。所以在阅读或编写HDL语言,尤其是可综合的HDL,不应该看到的是语言本身,而是要看到语言背后所对应的硬件电路结构。这种硬件描述语言看到的不应是一行行的代码而是一块一块的硬件模块。
数字电路基础
说到底,FPGA 就是一堆数字逻辑组合在一起实现特定功能而已 。所以数字电路基础知识是根本 。如果你连触发器,组合电路,时序电路,竞争,毛刺等等基本概念还莫能两可不清不楚的话,那玩转 FPGA 只能是痴人说梦的幻想了 。我们必须要好好的学好数字电路基础这门课,基本的数字电路烂熟于心 。把这些基础打牢固,再往更深的方向发展 。什么时候能够从抽象的算法中提炼算法的结构,再分解成具体的模块并通过硬件电路实现出来,这时候就算从菜鸟级别步入老鸟级别了 。
/*注释*/
*EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
*数字逻辑知识是根本,FPGA说白了是一种实现数字逻辑的方式而已。
FPGA之初认识