详解嵌入式软件开发到FPGA开发

时间:2025-07-25  作者:Diven  阅读:0

写在最前面:

详解嵌入式软件开发到FPGA开发

没错,我就是一名普普通通的工程师,有那么一两项能养活自己的技术。技术这个东西,如果只是用在工作岗位上的话,就是一个“搬砖”的工具,如果把分享出来,没准还能碰撞出有意思的东西来,你们说是吧?

好了,这一系列博文教程叫做“FPGA软硬件加速入门”,顾名思义,就是利用FPGA本身的特点,在软硬件进行不同的系统分工,加速系统输出的速度(主要是计算),我会尽量从入门者的角度讲解相关内容,如果你觉得还行,挺受用,动一动手指,帮忙转发一下,不胜感激啦~

一、 从嵌入式软件开发到FPGA开发

1.1 单片机开发流程浅析

在开始介绍FPGA之前,让我们来回顾一下简单的嵌入式软件开发吧,相信大家或多或少都接触过单片机(MICro Control Unit)的设计流程。作为一个简单的控制器,单片机的工作流程无非如下:

1、 单片机上电,程序从存储器中加载到MCU内部;

2、 根据单片机的输入(如键盘输入、传感器数据的读取等)、以及程序内部的逻辑,计算得到控制结果;

3、 将结果输出,控制单片机的外部设备(如LED的亮灭、控制电机转速的PWM波形等);

也就是说,一个简单的单片机工作系统的构成如下:

而为了搭建上面的这样一个系统,我们在软件方面需要做的事情包括下面这几部分:

1、 代码编辑,这里主要包括输入输出设备驱动和内部的控制逻辑;

2、 代码编译,将源文件(.c或.cpp)转化为指定单片机可执行的二进制文件;

3、 可执行文件烧写,将二进制文件固话到单片机(内部或外部)的存储器中;

上面三个步骤,我们一般是在各种IDE(Integrated Development Environment)开发环境下实现的,也就是说在一个软件里面实现编辑、编译、烧写的功能,常见的IDE软件如下:

1.2 从单片机开发到FPGA开发

1.2.1 FPGA的基本工作原理

在进行FPGA开发之前,我们必须得了解为什么要使用FPGA,也就必须得知道FPGA的工作原理。我们知道,对于一个简单单片机系统来说,工作原理和上文描述一样,也就是说,对于一个简单的让LED闪烁的功能,单片机要做的事情如下:

1、 从(内部或外部)的程序存储器中,取出一条让LED点亮的指令;

2、 将该指令输入到CPU的指令译码器中,根据译码器的结果(此处是将控制LED的GPIO的输出寄存器的bit位拉高)控制相应寄存器

3、 加载下一条延时指令,输入到译码器中,进行空操作处理;

4、 继续加载下一条让LED灭的指令,译码后,控制GPIO总线上的指定bit位拉低,从而熄灭LED;

5、 循环上述操作达到闪烁LED的目的;

通过上面闪烁LED的例子,我们可以知道,对于单片机来说,核心有2点:

指令的加载、译码——其实也就是对指令集的解析,知道这一条语言到底进行了什么硬件上的操作,后面章节会详细的解释;

外设的控制——可以通过写寄存器控制单片机的外设,如GPIO、uart、spi、IIC等;

那么对于FPGA而言呢?

无论是FPGA、单片机,又或是ARM系统、我们的PC,其实本质上就是一个计算平台,是一个信息处理系统。作为一个系统,输入、计算、输出的构成是永远不会变的。那变的是什么?变得是计算的原理。

对于单片机而言,取指、译码、输出是原理,那么对于FPGA而言,原理又是什么?在介绍之前,我们先回顾一下《数字电路》这门课里面的基础内容——组合逻辑和时序逻辑电路。

D触发器是时许逻辑电路的基本组件,与、或、非们是组合逻辑电路的基本组建。利用这些组建我们可以实现很多小的功能。

比如,通过D触发器我们可以设计一个计数器:

比如,我们可以通过简单的组合逻辑来实现一个比较器

讲到这里,大家可能已经知道了,这两个简单的逻辑电路其实能够构成一个让LED闪烁的简单系统。我们只需要将计数器的输出作为比较器的X输入,而另外一个固定的电平值(比如说8)作为Y输入,那么每当X=Y的时候,比较器的X=Y都会输出一个高电平。而将X=Y的输出作为另一个1位计数器的输入的时候,便会产生这么一个效果——每过8个时钟周期后,最后输出的电平就会反转一次,达到LED闪烁的效果,整个电路的构成如下:

为什么在这里要讲LED闪烁的数字电路构成呢?因为这正是FPGA的工作原理!FPGA全程Field Programmable Gate Array(现场可编程门阵列),这个“门”指的就是FPGA内部芯片的主要组成部分——庞大数量的寄存器和门电路(详细的构成后面章节会介绍)。

至此,我们可以对比出单片机开发和FPGA工作原理了。异同点如下表:

1.2.2 为什么要用FPGA

前面我们说到一个简单的控制LED的例子,知道了整个流程是取指、译码、控制外设的流程。对于一个LED电频翻转来说,MCU当然是足够的,我们思考一下以下几个问题:

1. 如果我要输出高清的60帧/s的1080P视频信号给显示器怎么办?用GPIO控制?

2. 如果我要进行运算量非常大的程序,比如现在非常火的AI网络训练,涉及到大量的乘法、加法,用MCU?PC?

回答了上述几个问题也就解释了为什么要用FPGA了。我们来挨个解释一下:

1. 用GPIO翻转输出一个指定的电平需要几十个时钟周期(MCU的clock频率),如果我要输出一个60帧、1080P的视频信号的话(其实也是电平的控制),那么翻转的频率可能要达到百兆的速度了,如果使用MCU这种方式的话,MCU要达到几GHz的主频了,这显然是不现实的。而根据上面FPGA的电平翻转的原理,D触发器的时钟频率只需要百兆就可以了;

2. 计算机基础告诉我们,无论是MCU还是PC的CPU,内部都有相应的乘法器和加法器。如果设计到大量的计算的话,单个乘法/加法器哪怕主频再高,计算速度也跟不上。而对于FPGA来说,可以仿照上面计数器、比较器的方式,设计几十个、几百个甚至几千个计算单元,哪怕主频比CPU低很多,计算速度也远高于CPU。二者的关系可以用下图形象地表示:

FPGA开发流程

二、FPGA开发流程

FPGA的开发有一个特点,即开发环境和使用的芯片有非常强的关联性。不像单片机开发的IDE,一个开发套件可以适配几十上百家不同的单片机(各种51、PIC、stm32等)。但目前主流的FPGA芯片只有2家——Xilinx(赛灵思)和Altera(后被Intel收购,我们姑且称之为英特尔的FPGA吧)。

这系列博文主要集中在Xilinx的FPGA芯片及其相应的开发套件Vivado上。

以比较常见的stm32系列单片机和集成开发环境Keil为例,我们来对比一下单片机开发和FPGA开发的流程。

可以看到,相对于单片机(更不用说普通的PC软件开发了),FPGA的开发流程复杂了许多。工程么,不就是各种tradeoff,开发便利和计算性取舍,就是后话了~

猜您喜欢

压线钳是应用于电气工程和电子设备中的重要工具。主要功能是将电线的端部压接成型,以确保良好的电气连接和稳定的信号传输。压线钳通常由高强度钢材制成,具备良好的耐用性...
2016-01-30 00:00:00

电流传感器作为一种关键的电子元件,广泛应用于电力系统、工业自动化、电子设备等领域,用于实时监测电路中的电流,确保电路的安全稳定运行。本文将深入探讨几种主流的电流...
2025-01-22 16:37:00

现代电子设备中,快恢复二极管(Fast Recovery Diode)作为重要的半导体器件,应用于电源转换、电机驱动和开关电源等领域。由于其快速的反向恢复特性,...
2025-04-04 16:31:07

FPGA要取代ASIC了,这是FPGA厂商喊了十多年的口号。可是,FPGA地盘占了不少,ASIC也依旧玩得愉快。这两位仁兄到底有啥不一样呢?一、介绍FPGA...
2022-08-08 11:03:00

瞬干胶因其快速固化和强力粘接的特性,应用于多个领域。在工业制造中,瞬干胶被用于电子产品的组装,如手机、电脑等,能有效提高生产效率。在汽车行业,瞬干胶用于粘接内饰...
2008-06-19 00:00:00

光敏电阻,又称为光电阻,是对光线敏感的电阻器件,其电阻值会光强的变化而改变。光敏电阻应用于光控开关、自动灯光、光传感器等设备中。了解光敏电阻与光强之间的关系,对...
2025-04-15 02:30:04

贴片电阻是电子电路中不可或缺的元件,选择合适的瓦数至关重要,它决定了电阻能否安全稳定地工作。瓦数过低,电阻容易过热甚至烧毁;瓦数过高则会增加成本和体积。为了方便...
2024-11-26 11:29:45

传统的模拟锁相环(APLL)有较短的锁定时间,可以保证参考时钟源和输出时钟的稳态相差。但其中心频点受VCO的限制而范围较小,环路带宽较宽;当参考源出现瞬断或者参...
2020-08-03 17:40:00

电阻器作为电子元件中的重要组成部分,其性能和品质直接影响着电子设备的稳定性和寿命。华润电阻作为国内知名的电阻制造企业,很好的技术和丰富的产品线,赢得了广大客户的...
2020-01-07 00:47:30

保险丝作为重要的保护元件,其性能参数直接影响设备的安全性和稳定性。Littelfuse(力特)作为全球知名的保险丝品牌,很好的品质和丰富的产品线赢得了市场的高度...
2023-05-22 21:18:30