FPGA学习的一些误区
FPGA 难学的几大原因。
不熟悉 FPGA 的内部结构,不了解可编程 逻辑器件的基本原理。
FPGA 为什么是可以编程的?恐怕很多菜鸟不知道,他们也不想知道。
因为他们觉得这是无关紧要的。他们潜意识的认为可编程嘛,肯定就是像写软件一样啦。
2026年世界杯预选赛 软件编程的思想根深蒂固,看到 Verilog 或者 VHDL 就 像看到 C 语言或者其它软件编程语言一样。
一条条的读,一条条的分析。如果 这些菜鸟们始终拒绝去了解为什么 FPGA 是可以编程的,不去了解 FPGA 的内 部结构,要想学会 FPGA 恐怕是天方夜谭。
虽然现在 EDA 软件已经非常先进,像写软件那样照猫画虎也能综合出点东西,但也许只有天知道 EDA 软件最后综合出来的到底是什么。
也许点个灯,跑个马还行。那么 FPGA 为什么是可以“编程”的呢?首先 来了解一下什么叫“程”。启示“程”只不过是一堆具有一定含义的 01 编码而已。
编程,其实就是编写这些 01 编码。只不过我们现在有了很多开发工具,通常都 不是直接编写这些 01 编码,而是以高级语言的形式来编写,最后由开发工具转 换为这种 01 编码而已。
对于软件编程而言,处理器会有一个专门的译码电路逐到 FPGA 里面去的。也就无法深入的了解如何能够充分运用 FPGA。
现在的FPGA,不单单是有前面讲的那三块,还有很多专用的硬件功能单元,如何利用好这些单元实现复杂的逻辑电路设计,是从菜鸟迈向高手的路上必须要克服的障碍。而这一切,还是必须先从了解 FPGA 内部逻辑及其工作原理做起。 2、错误 理解 HDL 语言,怎么看都看不出硬件结构。
HDL 语言的英语全称是:Hardware Description Language,注意这个单词 Description,而不是 Design。老外为什么要 用 Description 这个词而不是 Design 呢?因为 HDL 确实不是用用来设计硬件的,而仅仅是用来描述硬件的。描述这个词精确地反映了 HDL 语言的本质,HDL 语言不过是已知硬件电路的文本表现形式而已,只是将以后的电路用文本的形式描述出来而已。
而在编写语言之前,硬件电路应该已经被设计出来了。语言只不过 是将这种设计转化为文字表达形式而已。但是很多人就不理解了,既然硬件都已 经被设计出来了,直接拿去制作部就完了,为什么还要转化为文字表达形式再通过 EDA 工具这些麻烦的流程呢?
其实这就是很多菜鸟没有了解设计的抽象层次的问题,任何设计包括什么服装、机械、广告设计都有一个抽象层次的问题。就拿广告设计来说吧,最初的设计也许就是一个概念,设计出这个概念也是就是一 个点子而已,离最终拍成广告还差得很远。
硬件设计也是有不同的抽象层次,每一个层次都需要设计。最高的抽象层次为算法级、然后依次是体系结构级、寄 存器传输级、门级、物理版图级。使用 HDL 的好处在于我们已经设计好了一个寄存器传输级的电路,那么用 HDL 描述以后转化为文本的形式,剩下的向更低层次的转换就可以让 EDA 工具去做了,这就大大的降低了工作量。
这就是可综合的概念,也就是说在对这一抽象层次上硬件单元进行描述可以被 EDA 工具理解并转化为底层的门级电路或其他结构的电路。在 FPGA 设计中,就是在将这以条把这些 01 编码翻译为各种控制信号,然后控制其内部的电路完成一个个的运算或者是其它操作。所以软件是一条一条的读,因为软件的操作是一步一步完成的。
而 FPGA 的可编程,本质也是依靠这些 01 编码实现其功能的改变,但不同的是 FPGA 之所以可以完成不同的功能,不是依靠像软件那样将 01 编码翻译出来再去控制一个运算电路,FPGA 里面没有这些东西。FPGA 内部主要三块:可编程的逻辑单元、可编程的连线和可编程的 IO 模块。
可编程的逻辑单元是什么?其基本结构某种存储器(SRAM、FLASH 等)制成的 4 输入或 6 输入 1 输出地 “真值表”加上一个 D 触发器构成。任何一个 4 输入 1 输出组合逻辑电路,都有一张 对应的“真值表”,同样的如果用这么一个存储器制成的 4 输入 1 输出地“真值表”,只需要修改其“真值表”内部值就可以等效出任意 4 输入 1 输出的组合逻辑。这些“真值表”内部值是什么?就是那些 01 编码而已。如果要实现时序逻辑电路怎么办?这不又 D 触发器嘛,任何的时序逻辑都可以转换为组合逻辑+D 触发器来完成。
但这毕竟只实现了 4 输入 1 输出的逻辑电路而已,通常逻辑电路的规模那是 相当的大哦。那怎么办呢?这个时候就需要用到可编程连线了。
在这些连线上有 2026年世界杯预选赛 很多用存储器控制的链接点,通过改写对应存储器的值就可以确定哪些线是连上 的而哪些线是断开的。这就可以把很多可编程逻辑单元组合起来形成大型的逻辑电路。
最后就是可编程的 IO,这其实是 FPGA 作为芯片级使用必须要注意的。任何芯片都必然有输入引脚和输出引脚。有可编程的 IO 可以任意的定义某个专专用引脚(FPGA 中有专门的非用户可使用的测试、下载用引脚)为输入还是输出,还可以对 IO 的电平标准进行设置。总归一句话,FPGA 之所以可编程是因为可以通过特殊的 01 代码制作成一张张“真值表”,并将这些“真值表”组合起来以实现大规模的逻辑功能。不了解 FPGA 内部结构,就不能明白最终代码如何变。