FPGA认识-什么是FPGA(1)

说在前面

本人也是一个学习FPGA的小白,在学习FPGA走了不少弯路,想分享给大家一些学习FPGA的心得,大家一起交流学习嘛。
本文是很白话的文章,不要嫌弃。


1. FPGA是什么?

FPGA的全称是(Field Programmable Gate Array),中文翻译过来是现场可编程逻辑门阵列。这里名称很好的诠释了FPGA的定义。

  1. 首先最最重要的,它是可编程逻辑门阵列,它是一个数字电路,它不是模拟电路,它不能处理模拟信号。它可以被用来完成某些数字电路完成的事情。
  2. 它是可编程的,就说明它的逻辑电路可以改变,它是可擦写的,不是一次性的,同时它是现场可编程的,说明它的擦写条件不苛刻。
    FPGA的灵活性和高速性,使它在数字信号处理的应用中有得天独厚的优势。

国内目前常用的是国际大厂Xilinx和inter的,国内有国科微和复旦微的FPGA,不过都是用的Xilinx的内核,开发工具可以直接使用Vivado进行开发,但是工艺真不能恭维。
XILINX FPGA芯片
ALTERA FPGA 芯片


2. FPGA的五大优势

  • 性能

    利用硬件并行的优势,FPGA打破了顺序执行的模式,在每个时钟周期内完成更多的处理任务,超越了数字信号处理器(DSP)的运算能力

  • 上市时间

    尽管上市的限制条件越来越多,FPGA技术仍提供了灵活性和快速原型的能力。 用户可以测试一个想法或概念,并在硬件中完成验证,而无需经过自定制ASIC设计漫长的制造过程。

  • 成本

    自定制ASIC设计的非经常性工程(NRE)费用远远超过基于FPGA的硬件解决方案所产生的费用。
    (ASIC即专用集成电路,是指应特定用户要求和特定电子系统的需要而设计、制造的集成电路。)

  • 稳定性

    软件工具提供了编程环境,FPGA电路是真正的编程“硬”执行过程。 基于处理器的系统往往包含了多个抽象层,可在多个进程之间计划任务、共享资源。 驱动层控制着硬件资源,而操作系统管理内存和处理器的带宽。对于任何给定的处理器内核,一次只能执行一个指令,且基于处理器的系统时刻面临着严格限时的任务相互取占的风险。 而FPGA不使用操作系统,拥有真正的并行执行和专注于每一项任务的确定性硬件,可减少稳定性方面出现问题的可能。

  • 长期维护

    FPGA芯片是现场可升级的,无需重新设计ASIC所涉及的时间与费用投入。 举例来说,数字通信协议包含了可随时间改变的规范,而基于ASIC的接口可能会造成维护和向前兼容方面的困难。可重新配置的FPGA芯片能够适应未来需要作出的修改。 随着产品或系统成熟起来,用户无需花费时间重新设计硬件或修改电路板布局就能增强功能。
    前期学习的时候,你可以无需理解这些优势,埋头学习即可,反正FPGA就是很好,前景很好。


3. FPGA与单片机的区别

单片机大部分电子专业的人都有学习过,从单片机和FPGA的对比角度讲能够更加理解FPGA的不同。

单片机,全称为单片微型计算机(Single-Chip Microcomputer),又称微控制器(Microcontroller),是把中央处理器、存储器、定时/计数器(Timer/Counter)、各种输入输出接口等都集成在一块集成电路芯片上的微型计算机。
ARM芯片
学习FPGA的人基本上都或多或少对单片机有所了解,在这里,我来说说FPGA和单片机的区别,相信大家可以更加理解FPGA。

  1. 结构上的区别

单片机是一种微处理器,类似于电脑CPU的,它一般采用的是哈佛总线结构,或者冯诺依曼结构,对单片机的编程很大程度上要考虑到它的结构和各个寄存器的作用,单片机用途比较广,一般用在控制流水线上,还有日常你看得到的东西上!
  FPGA 是基于查找表结构。
  单片机是一个微控制器,通过加载模块软件来实现某种功能,单片机是成型的芯片;一块设计好的FPGA,它是专门执行特定操作的逻辑电路,FPGA的结构是固定的,我们是通过改变FPGA的内部连线,实现了特定电路才能实现的功能。
  FPGA是数据流结构的,它所有的内部模块是同时工作的,是并行执行的,我们将设计FPGA可以类比于设计一套房屋供水系统,而单片机是顺序执行软件程序的(在固定的硬件结构上)。

  1. 速度上的区别

FPGA由于是硬件电路,运行速度直接取决于晶振速度,系统稳定,特别适合高速接口电路。并行执行的特点决定了FPGA在数字信号处理上得天独厚的优势。
  单片机由于是单线程,哪怕是常用的M3系列流水线也是单线程执行,程序语句需要等待单片机周期才能执行。

  1. 本质区别

FPGA和单片机的区别,本质上是软件和硬件的区别,FPGA更偏向于硬件电路,而单片机更偏于软件。
  单片机设计属软件范畴,它的硬件(单片机芯片)是固定的,通过软件编程语言描述软件指令在硬件芯片上的执行;
  FPGA设计属硬件范畴,它的硬件(FPGA)是可编程的,是一个通过硬件描述语言在FPGA芯片上自定义集成电路的过程;


4. 学习FPGA之前的知识储备

  • 数电
    FPGA是可编程逻辑门电路,我们在进行FPGA设计的时候当然需要对数电有一定的理解。

    学习资料推荐:数电在电子信息专业开设的课程中算十分容易的一门学科,本人直接自学学校发放的教材。

  • Verilog HDL语言
    设计FPGA我们常用的是两种语言,Verilog HDL and VHDL,Verilog和VHDL各有优势
    Verilog语法简单,编 写更加灵活,更接近C语言,对学习过C语言的同学十分友好,最最重要的是,网上参考资源多。
    VHDL语法严格,适合大型系统级的设计。虽然现在高校本科阶段的教学常采用VHDL,研究生阶段才开设Verilog,但是本人认为作为本科生学习Verilog是完全没问题的,反倒有优势。

    本人先自学了Verilog,然后学校开设了VHDL,对于同时接触过两种语言的的我来说,Verilog是真的好用。如果大家想详细了解Verilog和VHDL的异同和优势,我推荐大家看下这篇博客VHDL和Verilog的区别

    学习资料推荐:<Verilog数字系统设计教程(第2版) 夏宇间 北京航空航天大学出版社 (2008-06出版)>

简单展示一下分别用Verilog和VHDL实现四位全加器的代码。
Verilog

  module add_4
    (
    	input[3:0] a,b,
    	output[3:0] sum,
    	output cout,
    	input cin
    );
    assign{cout,sum} = a+b+cin;
    endmodule

VHDL

library ieee; 
use ieee.std_logic_1164.all; 

entity sequenadder is  
port( 
    A:IN BIT_VECTOR(3 DOWNTO 0); 
    B:IN BIT_VECTOR(3 DOWNTO 0); 
    Cin:IN BIT; 
    S:OUT BIT_VECTOR(4 DOWNTO 0) 
    ); 
END; 

ARCHITECTURE SEQUENFUNC OF sequenadder IS  
	SIGNAL SIN1:BIT; 
	SIGNAL SIN2:BIT; 
	SIGNAL SIN3:BIT; 
COMPONENT alladder IS 
PORT( 
    A,B,Cin:IN BIT; 
    S,Cout:OUT BIT 
    ); 
END COMPONENT; 
BEGIN  
    G1:alladder port map(A=>A(0),B=>B(0),Cin=>Cin,S=>S(0),Cout=>SIN1); 
    G2:alladder port map(A=>A(1),B=>B(1),Cin=>SIN1,S=>S(1),Cout=>SIN2); 
    G3:alladder port map(A=>A(2),B=>B(2),Cin=>SIN2,S=>S(2),Cout=>SIN3); 
    G4:alladder port map(A=>A(3),B=>B(3),Cin=>SIN3,S=>S(3),Cout=>S(4)); 
END;

  • 信号处理相关知识
    学习FPGA的人有两种人,一种是项目需要使用到FPGA,那么这种人已经有了信号处理相关的知识储备,第二种人就是像我这样的小白,先知道FPGA好,然后就一股脑的要学习FPGA,对于这种人其实是难度比较大的。但是既然决定要学习FPGA,那你就得学习《信号与系统》《数字信号处理》这两门课程。

    学校开设了信号与系统的课程,加上老师功力了得,我就没有自学别的书籍了。对于需要自学的同学,根据网上的资料我推荐《信号与系统(第二版)奥本海姆》下载链接

    数字信号处理这么课学校开设得比较晚,我稍微自学了一下项目需要使用到的部分,我使用的书籍是《数字信号处理/.(美) Richard G. Lyons著/.张建华, 许晓东, 孙松林等译》

    对于才进入大学的小白,信号处理相关的书籍可以选择先学习数电和verilog。


5. 学习资料

相对于STM32和其他语言的学习,FPGA是比较少的,但是近年来网上的学习资料还是多了起来。
1.非官方平台
CSDN博客,博客园平台,电子发烧友
电子专业的学习当然离不开博客和社区。网上有很多大佬分享自己的学习心得,很多人甚至分享了自己工程的完整代码。

推荐一个大佬的csdn博客,点进去看看,你会被惊艳到的。FPGADesigner博客

2.官方社区
FPGA芯片的生产商目前最大的是Xilinx和Altera,每个公司都有自己开发平台,开发平台使用的时候可能会遇到各种各样的error,遇到一些非官方平台博客没有解答的问题可以去浏览Xilinx和Altera的官方论坛。
赛灵思中文社区
Altera中文社区

3.大学生MOOC和B站
里面有很多视频课程。

4.知网
在完成一些很专业的项目的时候,我们可以站在前人的肩膀上。

5.老师学长学姐
身边有学习过的学长学姐和老师还是最好的,有些问题在你看来很难,但是学长学姐碰到过,可以直接问他们。


6. 说在最后

写文章主要目的是最近问我怎么学习FPGA的人有点多,那我就干脆写博客,就不用每次和别人讲还要准备了。顺便把学习FPGA同学的队伍越拉越大。

7. 参考文献

《什么是FPGA?FPGA具有哪五大优势》 --电子发烧友网工程师

百度百科

  • 108
    点赞
  • 780
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论
### 回答1: FPGA学习流程通常包括以下几个步骤: 1. 了解FPGA的基本概念和工作原理:包括FPGA的组成、功能和技术特点。 2. 学习FPGA设计流程:包括需求分析、系统设计、设计实现、验证和综合等步骤。 3. 学习FPGA设计工具:通常包括硬件描述语言(如Verilog或VHDL)、综合工具、仿真工具等。 4. 学习FPGA实际应用:包括数字信号处理、图像处理、通信系统等。 5. 实践:通过实际项目实践来加深对FPGA的理解和掌握。 以上是FPGA学习的大致流程,不同的学习者可以根据自己的兴趣和需求来调整学习的步骤和方式。 ### 回答2: FPGA学习流程主要包括以下几个步骤。 首先,了解FPGA的基本概念和原理。了解FPGA是什么,它的构造和工作原理,以及与传统的硬件电路和软件的区别。 其次,学习FPGA的编程语言和工具。学习硬件描述语言(HDL)如VHDL或Verilog,了解FPGA设计的基本语法和规范。熟悉FPGA开发工具,如Quartus II、Vivado等,学习如何使用这些工具进行FPGA设计和仿真。 然后,进行FPGA设计的实践。选择一个合适的FPGA开发板或开发套件,通过实际项目来锻炼自己的FPGA设计能力。可以从简单的设计开始,逐渐增加复杂度,逐步改进和优化设计。 接下来,进行FPGA设计的测试和调试。学习如何使用仿真工具对设计进行验证,通过仿真结果来检查和调试设计中的错误。学习如何使用芯片仿真工具对设计进行验证,进一步保证设计的正确性。 最后,不断学习和提升。了解FPGA行业的最新动态和技术发展,参与相关的技术交流和研讨会。与其他FPGA开发者交流经验,共同探讨和解决问题,不断提升自己的FPGA设计能力。 总的来说,FPGA学习流程包括了对基本概念和原理的学习、编程语言和工具的学习、实践项目的设计和优化、测试和调试设计的能力提升,以及与其他从业者的交流与学习。通过不断实践和学习,最终能够掌握FPGA的设计与开发。 ### 回答3: FPGA学习流程包括以下几个步骤。 首先,了解FPGA的基本概念和原理。FPGA(Field Programmable Gate Array,现场可编程门阵列)是一种可重构的半导体芯片,可以根据设计者的需求进行灵活编程和配置。学习者应该了解FPGA的内部结构、逻辑单元和连接方式等基本知识。 其次,学习HDL(Hardware Description Language,硬件描述语言)。HDL是一种可以用来描述硬件电路的高级语言,常用的有VHDL和Verilog。学习者需要熟悉HDL的语法和使用方法,学会使用HDL描述FPGA的行为和结构。 接着,学习FPGA开发工具。FPGA开发工具如Xilinx ISE、Altera Quartus等,提供了设计、仿真、综合和下载等功能。学习者需要掌握这些工具的使用方法,能够完成基本的FPGA设计流程。 然后,进行FPGA设计实践。通过完成一些简单的FPGA设计项目,如LED灯控制、数码管显示等,可以加深对FPGA的理解和应用。在实践中,学习者可以尝试调试和优化设计,提高自己的设计能力。 最后,不断深入学习和实践。FPGA是一个庞杂而复杂的领域,学习者需要不断更新知识,学习新的技术和工具,通过更高级的项目挑战自己。可以通过参加培训课程、阅读相关书籍和参与开源项目等方式继续学习和提升。 总之,FPGA学习流程需要通过学习基本概念和原理、掌握HDL语言、熟悉FPGA开发工具、进行设计实践和不断深入学习来逐步提高自己的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bigbeea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值