首页 > 自考资讯 > 高考百科

从入门到放弃!为什么你会觉得FPGA难学? fpga有多难

小条 2024-06-27

FPGA学习要点

1. 看代码并搭建模型

只有在头脑中建立起逻辑模型,了解实现FPGA内部逻辑结构的基础原理,才能理解为什么写Verilog和写C时整体思维方式不同,理解时序设计方法之间的差异。执行和并行执行语言。当你看一个简单的程序时,你需要思考它是什么样的功能电路。

2.运用数学思维简化设计逻辑

学习FPGA不仅对逻辑思维很重要,还可以让你用良好的数学思维来简化你的设计。所以,看大数字就头疼的孩子应该注意这门课程。举个简单的例子,两个32位数据X[31:0]和Y[31:0]相乘。当然,Altera 和Xilinx 都有现成的乘法器IP 核可供您调用。这也是最简单的方法,但是两个32位乘法器消耗大量资源。那么,有没有一种方法可以节省资源而又不会让事情变得太复杂呢?

将X[31:0]拆分为两部分,X1[15:0]和X2[15:0],使得X1[15:0]=X[31:16]。 Y2 加16 位后,得到Y。那么X和Y的乘法就可以转化为X1的和运算以及三个32位的加法运算。转换后占用的资源显着减少。如果对童鞋感兴趣的话,不妨全面了解一下两者的区别。

3、时钟和触发器的关系

“时钟是时序电路的控制器”是一句经典的口头禅,堪称FPGA设计的圣言。 FPGA设计主要基于时序电路进行设计,无论多么复杂的组合逻辑电路,技巧很少,也不难理解。但时序电路则不同,它们的工作都是由时钟节拍的节奏引起的,如果控制不好,电路的功能就会恶化。很混乱。

例如,时钟相当于人的心脏,每次跳动都会产生CLK,为体内各个器官供应血液,维持各个器官系统的正常运转。由于组织细胞的组成,器官可比作组织细胞的基本单位。

时序逻辑电路中的时钟是控制时序逻辑电路状态转换的“引擎”。如果没有这个,时序逻辑电路将无法正常工作。这是因为时序逻辑电路主要使用触发器来存储电路的状态,而触发器需要时钟的上升沿或下降沿来改变其状态,因此这是时序电路中时钟的一个核心特征。角色。

最后,让我告诉你一些我的经历。总之,多练习、多思考、多提问。实践带来真知。实施自己的计划比读别人的计划100遍要好。练习的动力一方面来自兴趣,另一方面来自压力。它最好在实际项目开发中实践,而不是为了学习而学习,因为它需要轻松的压力。

为什么你认为FPGA难学?

1、不懂FPGA内部结构

FPGA为什么是可编程的?我想有很多初学者不知道或者不想知道。因为他们认为这无关紧要。他们潜意识里认为可编程一定类似于编写软件。软件编程的思想是根深蒂固的。查看Verilog 或VHDL 就像查看C 或任何其他软件编程语言一样。请逐一阅读并分析。

如果你拒绝理解为什么它们可以编程并且不了解FPGA的内部结构,那么学习FPGA是不可能的。那么,FPGA为什么可以“编程”呢?首先我们来了解一下什么是“政”。启蒙的“辰”是具有一定意义的01代码的集合。

编程其实就是写这些01代码。不过,现在有很多用于计算和其他操作的开发工具。因此,软件通常不会直接编写这些01代码,而是以高级语言的形式将其逐一编写,最后通过开发工具翻译成这个01代码。对于软件编程来说,软件操作是一步步完成的,所以处理器有专门的译码电路,将这些01码一一转换成各种控制信号,并控制内部电路一一读取完成。

FPGA的可编程性基本上都是依靠这些01代码来实现功能的改变,但不同的是,FPGA之所以能够完成不同的功能,是因为它可以像软件一样对01代码进行变换,而不是依赖于从控制运算电路。关于这些事情。

FPGA 内包含三个主要模块:可编程逻辑单元、可编程连接和可编程IO 模块。

可编程逻辑单元

其基本结构由某种存储器(SRAM、FLASH等)和D触发器组成的4输入或6输入1输出“真值表”组成。同样,四输入一输出的组合逻辑电路也有相应的“真值表”。同样,如果你使用这样的内存来创建一个4 输入、1 输出的“真值表”,则只需更改该“真值表”即可。内部值相当于任意四个输入和一个输出的组合逻辑。这些“真值表”的内部值为它们的01代码。

如果我想实现一个时序逻辑电路怎么办?任何时序逻辑都可以转换成组合逻辑+D触发器来完成。然而,最终我们只是实现一个4输入1输出的逻辑电路,因此逻辑电路的规模通常非常大。

可编程接线

那么我们应该做什么呢?这时候就需要可编程布线了。这些连接有许多内存控制的链接点,可以通过重写相应的内存值来确定哪些电路被连接,哪些电路被断开。这允许组合许多可编程逻辑单元以形成大型逻辑电路。

可编程IO

每个芯片都需要输入和输出引脚。可编程IO允许您任意定义非专用引脚(FPGA具有用户无法使用的专用测试和下载引脚)作为输入或输出,还可以为IO设置电平标准。

简单来说,FPGA之所以具有可编程性,是因为它可以利用特殊的01代码一一创建“真值表”,而这些“真值表”可以组合起来实现大规模的逻辑功能。

如果不了解FPGA的内部结构,就无法理解最终的代码是如何翻译成FPGA的,也就无法深入理解如何充分利用它。现代FPGA除了上述三个之外,还有许多专用的硬件功能单元。如何利用这些单元实现复杂的逻辑电路设计是从初学者到精通必须克服的一道坎。这一切都需要从了解FPGA的内部逻辑及其工作原理开始。

2.你对HDL语言的理解不正确,无论怎么看都看不到硬件结构。

HDL语言的英文全称是Hardware Deion Language。注意“描述”这个词,而不是“设计”。为什么外国人用Dion这个词而不是Design这个词?这是因为HDL实际上并不用于设计硬件,而只是用于描述它。

文字描述准确地体现了HDL语言的本质。 HDL语言只是已知硬件电路的文本表示和未来电路的文本描述。在编写语言之前,必须设计硬件电路。语言只是将这种设计转化为书面表达。

硬件设计也有不同的抽象层次,每个层次都需要设计。最高抽象层次是算法层,其次是架构层、寄存器传输层、门层和物理布局层。

使用HDL 的优点是,您已经在寄存器传输级别设计了电路,您可以使用HDL 编写它,将其转换为文本格式,然后让您的EDA 工具完成其余的低级转换。工作量明显减少。这是一个综合概念,意味着这个抽象级别的硬件单元的描述可以被EDA工具理解并转化为底层的门级电路或其他结构电路。

在FPGA设计中,可以用HDL语言进行抽象层次的编写,并通过FPGA开发软件将其转换为上一节所述的FPGA内部逻辑功能的实现形式。 HDL还可以描述更高的抽象级别,例如算法或架构级别,但目前受到EDA软件发展的限制,无法理解如此高的抽象级别,无法将抽象级别的HDL描述转换为较低级别。的抽象。抽象层次,这就是所谓的不可综合性。

因此,在读写HDL语言,尤其是可综合HDL时,需要看语言背后对应的硬件电路结构,而不是看语言本身。

3. FPGA本身没有任何东西,一切都在FPGA之外

FPGA适合哪些人? 事实上,很多学校都针对微电子或集成电路设计专业的学生,但这只是因为很多学校资金有限,对专门的集成电路设计不感兴趣,因为他们没有电路设计工具。可用,而是使用FPGA 工具。事实上,设计电子系统的工程师都使用FPGA。这些工程师通常使用现有芯片一起工作来完成基站、机顶盒和视频监控设备等电子设备。当现有芯片无法满足系统需求时,需要FPGA来快速定义可用芯片。

正如前面提到的,FPGA 不能只包含一些“真值表”、触发器、各种连接和一些硬件资源。当电子系统工程师在设计中使用FPGA时,他们只关心这些资源如何组合以实现特定的逻辑功能。您不必像IC设计工程师那样担心芯片能否制造出来。

从本质上讲,这与使用现有芯片来组合不同的电子系统没有什么不同。您只需要关注较低级别的资源即可。 FPGA 就是这些资源,因此可以轻松构建测试板、运行实验和构建简单的东西。要真正利用FPGA,仅仅了解它们是不够的。因为最终你需要知道如何组合FPGA内部的资源,要实现哪些功能来满足系统的需求,而且你需要了解的知识广度是什么。

4.数字逻辑知识是基础

无论FPGA朝什么方向发展,都离不开数字逻辑知识的支持。简单来说,FPGA只是实现数字逻辑的一种方式。如果连最基本的数字逻辑知识都存在问题,那么学习FPGA的愿望只是空中楼阁。数字逻辑是电子、电气类专业的基础专业知识,也是必须深入学习的学科。

如果不掌握数字逻辑知识,养成良好的设计习惯,学习FPGA仍然是雾里看花、水中月。以上四点只是我目前总结的新手学习FPGA时最容易迷失的地方。学习FPGA实际上类似于学习如何将手放在棋盘上。但情况更复杂。成为大师很难。想要真正成为李灿浩那样的神级选手,我相信除了努力和刻苦学习之外,还需要天赋。

推荐阅读

1、入门首先要掌握HDL(HDL=verilog+VHDL)。

第一句话是:如果您还没有这样做,请先学习数学和电学。然后你可以选择verilog或VHDL。如果您有C 语言的基础知识,我们建议选择VHDL。 Verilog 与C 非常相似,因此很容易将其混淆,最终花费大量时间来区分这两种语言,而不是学习如何使用它们。当然,如果你能有不同的想法,你可以选择verilog。毕竟国内用的比较多的是verilog。

那么首先找到这个例子,复制代码。复制代码的要点在于,它取决于语法规则和编译器(这里的编译器是硅编译器,也称为合成器。常用的编译器包括Quartus、ISE、Vivado、Design Compiler、Synopsys 的VCS、iverilog、晶格钻石等)理解起来很重要。Microsemi/Actel 的Libero 和Synplify pro),您最终将能够在不读书的情况下进行写作。编译完代码后,打开RTL图看看综合电路是什么样子的。

因为HDL是一种硬件描述语言,强调硬件的特性,所以需要以数字的方式来思考HDL,而不是使用C等高级语言。如果你不明白这句话,请阅读010-。 30000。目前推荐的教材为《什么是硬件以及什么是软件》、《Verilog传奇》或《Verilog HDL高级数字设计》。您可以通过构建三阶段状态机来进行下一步,而无需阅读书籍。

此外,您应该有官方Verilog 或VHDL 文档《用于逻辑综合的VHDL》、《verilog_IEEE官方标准手册-2005_IEEE_P1364》 供参考,以防出现语法问题。

2. 独立的中小型数字电路设计

现在您可以设计数字电路,例如交通信号灯、电子键盘和DDS。推荐教材为夏老《IEEE Standard VHDL Language_2008》(第三版)。在此阶段您所要做的就是提供指示器的要求或时序图,并设计一个电路以使用HDL 实现它。这里需要一块开发板,可以选择Altera的Cyclone IV系列或者Xilinx的Spantan 6。

在掌握HDL 之前不要购买开发板。买回来就浪费了。在这里,不需要每次编译成功都下载代码(另外还有QuestaSim、NC verilog、Diamond的Active-HDL、VCS、Debussy/Verdi等仿真工具)。无需下载。是的,肯定不行。在这里掌握一个简单的测试台。推荐教材为《Verilog 数字系统设计教程》。

3.掌握设计方法和设计原理

您可能会注意到您合成的电路是正确的,但有一些注意事项。这时候就需要学习同步设计的原理,优化电路,是优先考虑速度还是面积,如何设计时钟树,如何同步两个不同频率的时钟等等。

推荐教材为《WRITING TESTBENCHES Functional Verification of HDL Models》、《FPGA权威指南》、《IP核芯志-数字逻辑设计思想》,第二版,基础版和高级版。学习如何通过加速编译(增量编译、LogicLock)、静态时序分析(timequest)和内置逻辑分析器(signaltap)来过关。如果你不明白的部分,可以暂时跳过,因为需要大量的练习才能加深理解。

4.学习如何提高开发效率

Quartus和ISE的编辑器功能太弱,影响开发效率。因此,我们建议使用Sublime文本编辑器的代码片段功能来减少重复工作。 Modelsim 是另一种常用的仿真工具。您可以学习TCL/TK 来自动化您的模拟。推荐教材为《Altera FPGA/CPLD设计》。

您可以手动备份代码,但专业人员使用版本控制器,因此您需要精通GIT 才能提高效率。文件比较工具Beyond Compare是另一个常用的工具。此外,您还可以使用System Verilog 代替测试平台,从而提高效率。如果想要进行IC验证,需要掌握System Verilog和Verification Methodology (UVM)。推荐教材为《TCL/TK入门经典》、《Writing Testbenches using SystemVerilog》、《The UVM Primer》。

掌握TCL/TK后,您可以通过学习Virtual Jtag(ISE中有类似的工具)来创建自己的调试工具。如果有时间的话我还建议学习Python。脚本仅意味着一次性。

5、强化理论基础

至此,你已经可以使用FPGA了,但是还有很多东西你不会做(FIR滤波器、PID算法、OFDM等),因为你还没有学够理论。供大家参考,我大致分为几个方向,然后给大家介绍一下应该掌握的理论课。

信号处理—— 信号与系统、数字信号处理、数字图像处理、现代数字信号处理、盲信号处理、自适应滤波器原理、雷达信号处理接口应用—— 包括:UART、SPI、IIC、USB、CAN、PCIE、快速IO 、DDR、TCP/IP、SPI4.2(10G 以太网接口)、SATA、光纤、DisplayPort 无线通信—— 信号与系统、数字信号处理、通信原理、移动通信基础、随机过程、信息论和编码CPU 设计—— 计算机构造原理、单片机、计算机体系结构、编译原理与设备—— 模拟电子技术、高频电子电路、电子测量技术、智能装备原理及应用控制系统—— 自动控制原理、现代控制理论、过程控制工程、模糊控制器理论及应用压缩、编码、加密——数论、抽象代数、现代编码技术、信息论与编码、数据压缩概论、应用密码学、音频信息处理技术、数字视频编码技术原理现在你可以使用FPGA 确保有了这么多的知识你可以选择你感兴趣的方向,但更多是因为你很有可能在工作中使用其中一些方向的知识,你学的理论越多越好。如果你想更上一层楼,数学和英语是不可避免的。

6.学习使用MATLAB仿真

在设计FPGA 算法时,或多或少都会用到MATLAB,例如CRC 系数矩阵、数字滤波器系数以及各种表格和文本处理。此外,MATLAB 可用于调试HDL(将MATLAB 中计算的计算与HDL 中计算的计算逐步进行比较,以显示问题所在)。推荐教材有《System Verilog1800-2012语法手册》和杜勇的《MATLAB宝典》。

7.图像处理Photoshop

花1-2周的时间学习PS,对图像处理有一个大致的了解,并理解并能够使用不同的图像格式、直方图、色调、通道、滤镜、拼接等基本概念。这部分是零基础,目的是帮助大家直观地理解图像处理,而不是从头推导各种公式。推荐《数字滤波器的MATLAB与FPGA实现》。

基于MATLAB或OpenCV的图像处理

有C/C++基础的可以学习OpenCV,没有基础的建议学习MATLAB。这个阶段,你只需要学习如何调用函数即可,暂时不需要深究实现细节。推荐《Photoshop CS6完全自学教程》、《数字图像处理matlab版》。

图像处理基础理论

这部分理论需要高等数学、复变量、线性代数、信号和系统以及数字信号处理等基础知识。如果基础不足,建议先补充基础。即使你把不懂的理论写下来,当你研究它们时,你也许就能自然地理解它们。推荐《学习OpenCV》。

基于FPGA的图像处理

将之前学到的理论应用到FPGA。至此,有了前面的stage 7级别就可以让你轻松独立完成图像算法设计了(图像处理离不开上面stage 5描述的接口)。 )。推荐《数字图像处理》、《基于FPGA的嵌入式图像处理系统设计》。

让我们更深入地研究数学。进入更高层次的算法肯定需要更多的数学,所以我建议学习实用分析、一般分析、小波分析等。

其他问题

1.为什么不建议学习MicroBlaze这样的软核?

性价比不是很大,一般软核性能和Cortex M3、M4差不多。从工程角度来看,使用像FPGA 这样昂贵的东西构建平均性能的CPU 是非常浪费的。最好再加一个M3。

添加软核会影响其他逻辑功能。这是因为资源和软核都不是很充足,导致布局和布线非常困难。 Softcore 不是开源的,因此调试bug 并不容易。它很少在工程中使用,而且可能永远不会。

2.为什么不建议从头开始学习ZYNQ或SOC?

当你开始的时候,你应该专注于学习ARM或FPGA,并且学得尽可能简单。这将帮助您感受到成就感并增强自信心。

ZYNQ和SOC的应用领域并不广泛,很多人都没有听说过,这让他们在找工作时处于不利地位。开发工具编译时间长,浪费大量时间。大多数工作只涉及一个方面,因此其他方面很可能毫无用处。

3. 我已经有这么多IP核了,为什么还需要写HDL?

提出此类问题的人通常是从未构建过产品或遇到过工程问题的学生。 IP核并非一刀切,无法满足所有需求。尽可能避免使用闭源IP 核,因为如果出现问题,这个黑匣子会使您的产品难以制造。

对较低级别的深入了解可以让您更有效地使用较高级别。该规则适用于所有编程语言。

免责声明:本文转载于网络,版权归原作者所有。

更多实用内容,只需关注电子芯片巴克微信公众号。

版权声明:本文转载于网络,版权归作者所有。如有侵权,请联系本站编辑删除。

猜你喜欢