购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

前言

由于工作的需要,笔者自己也偶尔会用MCU(Microcontroller Unit,微控制单元)进行项目开发。即使在FPGA方面已有很多年的应用和设计经验,但在面对MCU开发时,笔者依然有种无从下手的感觉。有些项目是硬件设计人员已经设计好了硬件,只需要进行软件代码的设计开发;而有些项目则需要从芯片选型开始,此时,第一个问题就是,在众多的MCU芯片中,应该选择哪一个器件呢?

MCU的发展,可以追溯到英特尔推出的4004。经过几十年的发展,MCU架构经历了多次飞跃,除了传统的8051、MIPS架构,ARM、RISV-V以及一些厂家自研的架构也得到了广泛应用。在MCU的发展过程中,参与这一行业的企业数不胜数,现在可以使用的MCU器件用浩如烟海来形容也不为过。选择一个适合自己应用的MCU,并不是一件简单的事情。

熟悉FPGA的人都知道,不同厂家的FPGA必须在各自指定的集成开发环境(Integrated Development Environment,IDE)中进行设计开发。MCU的开发情况类似,后来才出现了Keil这样的第三方集成开发环境。复杂的开发环境让初学者对MCU开发过程难以理解,不像在课堂上学习C语言那样,通过计算机的编译环境就能看到“Hello World”的直观输出结果。不管是MCU厂家提供的专用集成开发环境,还是像Keil这样的第三方集成开发环境,对初学者来说都是一个不小的挑战。

近年来,MCU的发展似乎比FPGA更快。许多人都有一个共识,就是FPGA虽功能强大,但价格昂贵;MCU亲民,价格便宜。FPGA的高成本是FPGA的器件架构所决定的。FPGA最初是为了满足不同场景的应用需要,把各种功能以查找表为基本功能单元放在芯片内部,在不同的应用中改变各个查找表的功能以及全部查找表之间的电气连接。这种灵活性必然会带来底层硬件单元的冗余,从而造成成本的提高。某一个行业使用FPGA的器件数量达到一定程度后,将被ASIC(Application Specific Integrated Circuit,专用集成电路)所取代,其本质就是去掉器件中被浪费掉的底层冗余硬件。目前,构建ASIC最快的方式是采用SoC(System on Chip,单片系统)架构,用一个MCU作为主控器件,控制一系列的硬件功能单元。我国台湾省的电子产业发展表明这种方式十分成功。现在台式计算机、笔记本电脑中几乎都少不了这样一类器件:SuperIO。其本质就是用一个MCU控制CPU(Central Processing Unit,中央处理器)的一些外设,例如串口、并口、键盘、鼠标、风扇等,还可以检测芯片、主板的电压、工作温度等。还有其他很多行业使用与SuperIO类似的方案,进一步推动了MCU的快速发展。

在集成硬核方面,FPGA与MCU都向着集成越来越多硬核的方向发展。FPGA内集成的几乎都是针对接口需要很高速度的硬核,比如几乎成为中高端FPGA标配的SERDES以及GE、PCIe、HDMI等硬核。而在MCU中,常见的是I 2 C、SPI、串口等这些低速应用的硬核。尽管这些硬核看似简单,但它们都是各种应用中更常用的功能模块。对于这些硬核,MCU厂家通常做好了相应的底层驱动设计。使用这些硬核,就像调用系统函数一样简单。

那么,能不能借鉴MCU的发展方式,把FPGA能实现的一些基本功能固化,从而让FPGA的入门变得更加容易?当笔者与小脚丫的团队进行交流时,发现他们也有类似的想法,并且已经进行了实践,比如他们的官方网站提供了很多开源的FPGA项目。一些项目不仅将设计源代码进行开源,还把对应的硬件平台进行了开源。

因此,我们希望结合小脚丫的FPGA核心板,向初学者提供一些FPGA设计中常用的功能模块设计。通过对这些简单功能的设计进行介绍,让初学者得到“FPGA到底能帮我做什么”这个问题的答案:用FPGA能够驱动LED实现各种显示效果,能够驱动喇叭播放一段乐曲,能从一个温度传感器读取温度值并把相关信息显示到LCD显示模组上等。这些底层模块与具体的FPGA器件无关,可以方便地移植到各种平台,便于在后续实际的项目开发中直接使用。

随着技术的发展和集成度的提高,FPGA在通信系统、视频图像处理、高速接口信号处理、人工智能等领域都得到了很广泛的应用。越来越多的人进入FPGA开发、应用领域,现在已经有很多对FPGA进行系统介绍的图书,不仅对FPGA的发展历史进行介绍,还对FPGA中的一些关键技术进行深入说明,并对特定FPGA器件的结构、开发环境、开发流程、应用场景等进行探讨。然而,对初学者来说,其中很多不一定适用。

本书旨在让FPGA初学者用尽量少的时间对FPGA的应用场景产生直观的理解,并用尽量简洁的语言说明如何使用FPGA满足设计需求。希望读者在读完本书后的想法是“原来FPGA这么简单”。

本书以小脚丫的MAX10核心板为基础,向FPGA初学者介绍FPGA设计的基本概念。本书共8章,各章内容简要介绍如下。

● 第1章介绍Verilog HDL的基础语法,并对一些常用的功能模块进行建模,这些模块可以用在实际的项目开发中。

● 第2章介绍用MAX10核心板上的LED实现各种显示效果,包括点亮LED,让LED闪烁,实现流水灯、呼吸灯效果等。LED灯的驱动可以归为PWM信号的产生,因此本章提供一个简单的任意占空比PWM信号发生器的设计。

● 第3章介绍如何用MAX10核心板驱动底板上的蜂鸣器,并通过解决蜂鸣器循环播放过程中的故障来说明FPGA设计过程中功能仿真的重要性。蜂鸣器的驱动也可归为PWM信号的产生,本章将用状态机的方式设计实现一个应用更广泛的PWM信号发生器,并说明模块规格的定义对模块设计的重要性。

● 第4章介绍如何让MAX10核心板上的2位七段数码管显示指定内容,并介绍字库、BCD码的基本概念,以及如何通过左移加3法将二进制数转换为8421BCD码。

● 第5章介绍如何利用FPGA从温度传感器DS18B20读取温度值,并用七段数码管显示,让FPGA初学者掌握层次化的设计思想,并了解把芯片手册的内容转化为模块设计规格的基本技巧。

● 第6章介绍串口的概念与UART,以及如何利用MAX10核心板实现与PC(Personal Computer,个人计算机)端串口调试软件的数据传输,让读者更加了解如何在实际项目中进行层次化设计和模块化设计。

● 第7章介绍如何使用MAX10核心板点亮一个OLED显示模组以及一个SPI发送模块的设计。

● 第8章简要介绍FPGA与ADC、DAC相关的应用,用FPGA从ADS7868读取电位计的电压,并用七段数码管、OLED屏显示,实现一个简单的电压计的应用。此外,本章还介绍如何设计SPI的接收模块,与第7章共同完成一个SPI收发模块的设计。

当然,FPGA的应用远不止这些。比如可以用MAX10核心板实现一个任意波形发生器,并用OLED显示模组显示获得的波形,从而实现一个简易示波器的设计。在FPGA的应用中经常会遇到一些复杂的问题,比如需要考虑严格的时序约束、需要进行面积优化(资源利用率优化)、需要考虑异步系统间的同步等,由于本书是针对初学者的,因此并没有对这些问题进行介绍。FPGA初学者可以把本书当作入门FPGA的教程,如果把书中的各个案例在对应的FPGA开发板上都操作一遍,一定能够掌握FPGA入门所必需的知识与设计技巧。已经有一定FPGA基础的读者可以把本书当作FPGA项目的参考资料,本书使用的层次化、模块化的设计方法,也是笔者多年在FPGA应用和项目开发中坚持使用的。

希望本书能对希望学习FPGA开发的人有所帮助。由于笔者水平有限,书中难免出现疏漏,希望读者批评斧正。

赵延宾
2025年1月 yfVx/YZFkDfDbr6/3E2KBaLYYU9nQVFAIR5/veNqDt4MVysg7XI9VWc9bsxzkgrQ

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开