推广 热搜: csgo  vue  2023  angelababy  gps  信用卡  新车  htc  落地  控制 

如何零基础入门FPGA?这篇文章让你吃透

   2023-07-02 网络整理佚名2130
核心提示:也是常用的仿真工具,学会TCL/TK以编写适合自己的DO文件,使得仿真变得自动化,推荐的教材是《TCL/TK入门经典》。这部分是0基础,目的让大家对图像处理有个感性的认识,而不是一上来就各种各样的公式推导。

1 FPGA学习重点

1. 看代码并建立模型

只有在脑海中一一建立起逻辑模型,了解FPGA内部逻辑结构实现的基础,才能理解为什么写和写C的总体思路不同,才能理解时序和设计方法的区别。执行语言和并行执行语言。 当你看到一个简单的程序时,你应该想到它是什么样的功能电路。

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

学习FPGA不仅对逻辑思维很重要,良好的数学思维还可以简化你的设计,所以,那些看到高数字就头疼的童鞋需要关注这门课程。 举个简单的例子,比如有两个32bit数据X[31:0]乘以Y[31:0]。

当然,无论有现成的乘法器IP核可以调用,这也是最简单的方法,但是两个32位乘法器会消耗大量资源。 那么有没有一种既节省资源又不太复杂的方法来实现呢? 我们可以稍微修改一下:

将 X[31:0] 分成两部分 X1[15:0] 和 X2[15:0],令 X1[15:0]=X[31:16], X2[15:0]=X[15 : 0],那么X1左移16位与X2相加即可得到X; Y[31:0]也分为两部分Y1[15:0]和Y2[15:0],这样Y1[15:0]=Y[31:16],Y2[15:0]=Y [15:0],然后Y1左移16位并与Y2相加得到Y,那么X和Y的乘法就可以转化为X1和X2分别乘以Y1和Y2,这样一个32bit*32bit的乘法运算转换为四个16bit*16bit乘法运算和三个32bit加法运算。 转换后,占用的资源会减少很多。 如果有兴趣的童鞋不妨全面的看一下,看看两者到底有多大的区别。

3、时钟与触发器的关系

“时钟是时序电路的控制器”这句话如此经典,可以说是FPGA设计的圣词。 FPGA的设计主要以时序电路为主,因为组合逻辑电路再复杂,也改变不了太多花样,理解起来也不是太困难。

但时序电路不同。 它的所有动作都是由时钟的节拍节奏触发的。 可以说时钟是整个电路的控制器。 如果控制不好,电路功能就会混乱。

例如,时钟相当于人体的心脏。 它的每一次跳动都会触发一次CLK,为身体各个器官供血,维持身体的正常运转。 组织细胞的组成对于各器官系统的正常工作是不可或缺的。 器官可以比作基本单位组织细胞。

时序逻辑电路的时钟是控制时序逻辑电路状态转换的“引擎”,没有它时序逻辑电路就无法正常工作。

因为时序逻辑电路主要使用触发器来存储电路的状态,而触发器状态改变需要时钟的上升沿或下降沿,由此可见时钟在时序电路中的核心作用。

最后我简单说一下我的经历。 归根结底就是多练习、多思考、多提问。 真正的知识来自于实践。 自己实践一下,胜过读别人的计划一百遍。 实践的力量一方面来自兴趣,另一方面来自压力。 需求很容易产生压力,这意味着最好是在实际的项目开发中锻炼,而不是为了学习而学习。

2 为什么你认为FPGA难学?

不熟悉FPGA内部结构

FPGA为什么是可编程的?

恐怕很多初学者不知道,也不想知道。

因为他们觉得这无关紧要。 他们潜意识里认为编程就像编写软件。

软件编程的思想根深蒂固。 看到VHDL就像看到C语言或其他软件编程语言一样。 一一阅读,一一分析。

如果你拒绝理解FPGA为什么是可编程的,如果你不了解FPGA的内部结构,那么可能就无法学习FPGA。

那么FPGA为什么可以“编程”呢? 首先我们先来了解一下什么叫“诚”。

据了解,“程”只是一串具有一定含义的01代码。

编程其实就是写这些01代码。 只是我们现在有很多开发工具计算或者其他操作。

所以软件是一一的。 通常这些01代码并不是直接写出来的,而是以高级语言的形式写出来,最后通过开发工具转换成这个01代码。

对于软件编程来说,处理器会有专门的译码电路,将这些01码一一翻译成各种控制信号,然后控制其内部电路一一完成读取,因为软件操作是一步步完成的。

可编程FPGA的本质就是依靠这些01代码来实现其功能的改变,但不同的是,FPGA之所以能够完成不同的功能,并不是依靠软件来翻译01代码,然后控制某个运算电路。 这些都没有。

FPGA内部主要分为三个模块:可编程逻辑单元、可编程布线和可编程IO模块。

3 个可编程逻辑单元

其基本结构由某种存储器(SRAM、FLASH等)制成的4输入或6输入1输出“真值表”加上D触发器组成。

任何4输入1输出的组合逻辑电路都有相应的“真值表”。 同样,如果使用这样的存储器制成的4输入1输出的“真值表”,则只需修改其“真值表”即可。 “内部值可以等价于4个输入和1个输出的任意组合逻辑,而这些“真值表”的内部值就是那些01代码。

如果要实现时序逻辑电路怎么办? 任何时序逻辑都可以转换为组合逻辑+D触发器来完成。 但毕竟这只是实现了4个输入1个输出的逻辑电路,而且逻辑电路的规模通常都比较大。

3.1 可编程接线

那我们该怎么办呢? 这时候就需要使用可编程连接。 这些连接上有很多由存储器控制的链接点,通过重写相应存储器的值可以确定哪些线连接、哪些线断开。 这允许组合许多可编程逻辑单元以形成大型逻辑电路。

3.2 可编程IO

任何芯片都必须有输入引脚和输出引脚。 有可编程IO,可以任意定义一个非专用引脚(FPGA中有专门的非用户可用的测试和下载引脚)作为输入或输出,并且还可以设置IO的电平标准。

总之,FPGA之所以可编程,是因为它可以通过特殊的01代码做成“真值表”,这些“真值表”可以组合起来实现大规模的逻辑功能。

如果不了解FPGA的内部结构,就无法理解最终的代码是如何变成FPGA的,也就无法理解如何充分利用FPGA。 目前的FPGA不仅具有上述三个块,还具有许多专用的硬件功能单元。 如何利用好这些单元来实现复杂的逻辑电路设计,是一个菜鸟到高手路上必须克服的障碍。 而这一切都必须从了解FPGA的内部逻辑及其工作原理开始。

3.3 HDL语言理解错误,无论怎么看都看不到硬件结构

HDL语言的英文全称是:Deion,注意Deion这个词,不是。 为什么外国人用Deion这个词来代替? 因为HDL确实不是用来设计硬件的,而只是用来描述硬件的。

文字描述准确地体现了HDL语言的本质。 HDL语言只是已知硬件电路的文本表示,并且它仅以文本的形式描述未来的电路。 在编写语言之前,应该设计好硬件电路。 语言无非是将这种设计转化为书面表达。

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

使用HDL的好处是,我们已经设计好了寄存器传输级电路,然后用HDL来描述它,然后将其转换为文本形式,剩下的到较低级别的转换可以通过EDA工具来完成,大大改善。 减少工作量。 这就是综合的概念,意味着这个抽象层次上的硬件单元的描述可以被EDA工具理解,并转化为底层的门级电路或者其他结构的电路。

在FPGA设计中,就是将这种抽象层次描述为HDL语言,通过FPGA开发软件可以将其转化为前一点提到的FPGA内部逻辑功能的实现形式。

HDL还可以描述算法层或者架构层等更高的抽象层次,但是目前受限于EDA软件的发展,EDA软件无法理解这么高的抽象层次,因此HDL描述的抽象层次无法转化为在较低的抽象层次上,这称为不可综合的。

因此,在阅读或编写HDL语言,尤其是可综合HDL时,应该看到的不是语言本身,而是语言背后相应的硬件电路结构。

3.4 FPGA本身什么都不是,一切都在FPGA之外

FPGA 适合谁? 许多学校都是为微电子或集成电路设计专业的学生开设的。 事实上,只是很多学校受资金限制,买不起专业的集成电路设计工具,转而使用FPGA工具。 事实上,设计电子系统的工程师都使用 FPGA。

这些工程师通常使用现有的芯片来完成一个电子设备,例如基站、机顶盒和视频监控设备。 当现有的芯片不能满足系统的要求时,就需要利用FPGA来快速定义可用的芯片。

前面说过,FPGA不能包含一些“真值表”、触发器、各种连接以及一些硬件资源。 当电子系统工程师使用FPGA进行设计时,他们只是考虑如何组合这些未来的资源来实现某些逻辑功能。 就是这样,而不用像IC设计工程师那样去关注最终的芯片能否制造出来。

本质上,这和利用现有的芯片组合成不同的电子系统没有什么区别,只不过需要关注更底层的资源。

使用FPGA很容易,因为它无非就是那些资源。 了解了前面两点之后,就可以搭建一个测试板,运行实验,做一些简单的事情了。

但要真正用好FPGA,仅仅了解一些FPGA知识是远远不够的。 因为最终如何组合FPGA中的资源,实现哪些功能才能满足系统的需求,需要越来越广泛的知识。

3.5 数字逻辑知识是基础

FPGA无论朝哪个方向发展,都离不开数字逻辑知识的支持。 说白了,FPGA只是实现数字逻辑的一种方式。 如果连最基本的数字逻辑知识都出现问题,那么学习FPGA的愿望只是空中楼阁。 数字逻辑是任何电气电子专业的专业基础知识,也是必须学好的课程。

如果不能掌握数字逻辑知识,养成良好的设计习惯,学完FPGA最终还是雾里看花、雾里看月,永远都是空的。

以上几条只是我目前总结的菜鸟学习FPGA最容易误入歧途的地方。 学习FPGA其实就像学习Go一样。 学会如何在棋盘上摆棋很容易,但成为高手就更难了。 。 想要真正成为李昌镐这样的神级选手,除了努力和专精之外,恐怕还真的需要一点天赋。

4 推荐阅读

4.1 入门首先要掌握HDL(HDL=+VHDL)

第一句话是:没学过数学,就先学数学。 然后你可以选择VHDL或者VHDL。 如果有C语言基础,建议选择VHDL。 因为它太像 C 了,所以很容易混淆,最终你会花很多时间试图区分这两种语言,而不是学习如何使用它。 当然,如果你能换个思路,也可以选择,毕竟国内用的比较多。

接下来首先找到这个例子复制代码。

复制代码的意义在于熟悉语法规则和编译器(这里的编译器是硅编译器,也称为合成器,常用的编译器有:

、ISE、、、VCS、、、/Actel、pro),然后模仿写,最后不看书就写出来了。

编译完代码后,打开RTL图,看看合成了什么样的电路。

HDL是一种硬件描述语言,它突出了硬件的特性,所以应该用数字思维来思考HDL,而不是C语言或其他高级语言。 如果你看不懂这句话,可以阅读《什么是硬件,什么是软件》。

现阶段推荐的教材有《》、《HDL高级数字设计》或《VHDL for Logic 》。 如果你不用看书就能写出三阶段状态机,就可以进入下一阶段。

另外,一定要准备好VHDL的官方文档,《官方标准手册-》、《IEEE VHDL》,以便遇到一些语法问题时可以查阅。

4.2 独立完成中小型数字电路设计

现在,你可以设计一些数字电路了,比如交通信号灯、电子琴、DDS等。推荐的教材是夏老的《数字系统设计教程》(第三版)。 这个阶段,你要做的就是:给你一个指标要求或者时序图,你可以用HDL设计电路来实现。 这里需要一个开发板,可以选择IV系列,也可以选择6系列。

没有掌握HDL之前不要买开发板,因为买回来就没啥用了。 这里不需要每次编译通过都下载代码,我们使用的是仿真(另外还有NC、-HDL、VCS、/Verdi等仿真工具),如果仿真失败,那么就不需要下载它,肯定不行。

这里只要掌握简单的就可以了。 推荐教材是《HDL》。

4.3 掌握设计方法和设计原则

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

推荐教材有《FPGA权威指南》、《IP核编年史-数字逻辑设计思想》、《FPGA/CPLD设计》第二版基础和高级。 学会了加速编译(增量编译)、静态时序分析()、嵌入式逻辑分析器()才算是通过了。 如果有不明白的地方可以暂时跳过,因为这部分还需要足够的练习才能有更深入的理解。

4.4 学习提高开发效率

由于ISE的编辑器功能太弱,影响了开发效率。 因此,建议使用文本编辑器中的代码片段功能,以减少重复劳动。 它也是一种常用的模拟工具。 学习TCL/TK编写自己的DO文件,使仿真自动化。 推荐教材是《TCL/TK入门经典》。

你可能会手动备份代码,但是专业人员使用版本控制器,所以为了提高工作效率,你必须掌握GIT。

文件比较器也是比较常用的工具。 另外,你也可以用它来代替,这样会更有效率。 如果做IC验证,必须掌握和验证方法论(UVM)。 推荐教材有《using》、《The UVM》、《-2012语法手册》。

掌握了TCL/TK之后,就可以学习虚拟Jtag(ISE也有类似的工具)来制作自己的调试工具。 另外,如果有时间,最好再学一门。 脚本,意味着设置然后忘记。

4.5 加强理论基础

这时候你已经知道如何使用FPGA了,但是还有很多东西你不会做(例如FIR滤波器、PID算法、OFDM等),因为你还没有把理论学好。 我大致分为几个方向供大家参考,其次是要掌握的理论课程。

现在你发现FPGA涉及到的知识那么多,你可以选择一个你感兴趣的方向,但是很有可能你会在工作中用到几个方向的知识,所以理论学得越多越好。 如果你想更上一层楼,数学和英语是不可避免的。

4.6 学习使用模拟

在设计FPGA算法时,或多或少都会用到,比如CRC系数矩阵、数字滤波器系数、各种表格和文本处理等。

另外,它还可以用来调试HDL(使用的计算结果与使用HDL一步步计算的结果进行比较,这样就可以知道问题出在哪里)。 推荐教材是杜勇的《全集》和《数字滤波器与FPGA实现》。

4.7 图像处理

花一两周的时间学习PS,对图像处理有一个大概的了解,知道各种图像格式、直方图、色调、通道、滤镜、拼接等基本概念,并能够使用。 这部分是0基础,目的是让大家对图像处理有一个感性的认识,而不是一开始就推导各种公式。 推荐《CS6完整自学教程》。

基于或的图像处理

有C/C++基础的可以学习,否则建议学习。 这个阶段你只需要学会简单的调用函数即可,暂时不需要深究实现细节。 推荐《数字图像处理版》和《学习》。

图像处理基础理论

这部分理论需要高级数字、复变量、线性代数、信号和系统以及数字信号处理等基础知识。 如果基础不好,建议先补基础。 不懂的理论你可以暂时放下,也许学了之后自然就开悟了。 推荐《数字图像处理》。

基于 FPGA 的图像处理

将之前学到的理论应用到FPGA上,如果你有第七阶段的水平,你将轻松独立完成图像算法设计(图像处理离不开接口,上面第五阶段)。 推荐《基于FPGA的嵌入式图像处理系统设计》、《基于FPGA的数字图像处理原理及应用》。

进一步深入研究数学。 想要在算法上更上一层楼,必然需要更多的数学知识,所以这里建议学习实数分析、一般内容分析、小波分析等。

5 其他问题

5.1 为什么不建议学习软核?

性价比不高,一般软核性能与M3或M4差不多。 用FPGA那么贵的东西来制作性能一般的CPU,在工程上是非常不经济的。 最好再加一个M3。

添加软核可能会影响其他逻辑功能。 这是在资源不是很充足的情况下,再加上软核,使得布局布线变得相当困难。 软核不开源,当出现bug时,不容易调试。 在工程中很少使用,很可能没用。

5.2 为什么不建议0基础学习ZYNQ或SOC?

入门应该学的东西越简单越好,要么专心学ARM,要么专心学FPGA。 这样更容易有成就感,增强信心。

ZYNQ和SOC的应用领域并不广泛,很多人都没有听说过这种东西,这就导致在找工作时处于劣势。 开发工具编译时间长,浪费大量时间。 大多数工作只负责一个方面,这意味着其他方面很可能毫无用处。

5.3 已经有这么多IP核了,为什么还要写HDL?

问这种问题的人一般都是学生。 他们从来没有制造过产品,也没有遇到过工程问题。 IP核并不是万能的,并不能满足所有需求。 尽量减少闭源 IP 核的使用。 一旦出现问题,这种黑匣子很可能导致产品难以生产。

深入了解底层才能更好地利用更高的层次。 该定律适用于所有编程语言。

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON