本文授权转载自:网络交换FPGA,作者西南交通大学研究生导师邸志雄博士。

工欲善其事,必先利其器,代码可综合设计能力、电路设计方法学、领域特定架构和算法理论,是提升和精进FPGA技能的必要基础。不需要FPGA开发板实物,也能够在家学习和夯实这些基础知识(ps:注意,如果长期学习FPGA,有一块FPGA开发板是非常必要的。本文章重点针对短期留守在家的同学。)。

0、FPGA入门基础

具备基本数字逻辑基础、基本VerilogHDL编写能力。

此处推荐东南大学汤勇明老师编写的《搭建你的数字积木——数字电路与逻辑设计》。这本书将Xilinx Vivado集成设计开发环境在第1章中就呈现给读者,让读者从一开始就能利用该开发工具学习具体逻辑设计。这本书的优点是采用了电路设计加VerilogHDL编写的方法,重点突出模块化编程思想并详细介绍了IP设计、封装和调用方法,并在书中给出了VGA控制器、数字图像处理设计等实际案例。

如果已经具备了“数字电路+FPGA”基础,可从如下内容开始学习。

1、VerilogHDL和电路设计能力提升

经常碰到学生问类似“VerilogHDL不会编,如何提升编程能力”等等的问题,其实这个问题一开始就是错误的。VerilogHDL是硬件编程语言,与C语言等软件编程语言有着非常大的差异,如果使用C语言的书写思维去学习Verilog,那就完全错了。Verilog HDL语言是对已知硬件电路的文本描述,因此必须理解其可综合特性。

编写Verilog HDL前:

  • 应对所需实现的硬件电路“胸有成竹”;

  • 牢记可综合Verilog HDL与电路结构一一对应的关系;

  • 确认电路指标是什么:性能?面积?

  • 硬件思维方式,代码不再是一行行的代码而是一块一块的硬件模块;

真正理解以上几点,才可以理解电路设计的思想,写出行云流水般的高质量代码。关于如何实现高质量的VerilogHDL代码书写的内容、如何理解数字电路的设计思想,可以在家学习我在“中国大学MOOC”网站的慕课《芯动力——硬件加速设计方法》第二章和第三章。目前该课程在线学习人数已经超过1200人。第四章和第五章重点讲数字芯片的逻辑综合和静态时序分析方法,但是与FPGA的综合和时序约束很接近,也可以学习。

在“中国大学MOOC”搜索课程名称即可参与,或者访问链接:

https://www.icourse163.org/course/SWJTU-1207492806?tid=1207824209

免费收看。

参考书推荐:

  • 《轻松成为设计高手:Verilog HDL实用精解》。EDA先锋工作室编写,目前市面上的中文书籍里,少有的几本能够从VerilogHDL硬件本质来阐述的书。(ps:该书的前一版书名为:设计与验证。两版内容基本上一样,看哪个都可以)

  • 《Altera FPGA/CPLD设计(高级篇)》。EDA先锋工作室编写,人民邮电出版社. (ps:一定要注意是“高级篇”。该系列还有一本“基础篇”,不建议阅读)

  • 《SoC设计方法与实现(第3版)》,郭炜 等编写. 电子工业出版社。

  • 《FPGA深度解析》,樊继明,陆锦宏 著. 北京航空航天大学出版社. 2015年。(ps:以上两本对电路设计的相关知识点做了详细阐释)

2、选择好的FPGA案例,提升设计能力

FPAG的优势是硬件加速,其“能效比”远高于传统的CPU和GPU。因此,FPGA在对算力有极致需求的领域有着非常广泛的应用,如人工智能、图像视频处理、密码安全、数据中心、航天航空、高频量化交易等。

那么,什么案例适用于FPGA教学?这是一个很有意思,也值得思考的问题。是流水灯?I2C串口传输?我认为不是,这些案例完全没有体现出FPGA应用的特点,反而因为FPGA上手和调试较难的原因,劝退了一部分本来有兴趣学习FPGA的学生。这些案例的特点是系统更关注“控制”而不是“计算”,且I/O、存储数量要求非常小。一方面,无法体现FPGA带来的硬件加速效果;另一方面,用单片机、MCU来实现流水灯、串口等系统,上手简单,又快又好,为什么要用FPGA来做这些?

个人认为最适合学习FPGA的案例有以下几种:

  • 处理器原型设计与实现。例如,在FPGA上完成一颗小型RISC CPU的设计,如果手上开发板,还可以进一步完成操作系统的移植和应用程序编写。也可以在FPAG上完成AI处理器的设计,最终在开发板上实现诸如图像检测、人脸识别等系统功能。

  • 高性能算法加速。例如,在FPAG上完成数字信号处理算法、图像视频处理算法等单片机无法实现的系统。

同学们可以充分利用参考书、公众号、B站、github等各种网络资源,从应用领域的架构、算法等基础学起。如果没有开发板,可以完成电路设计、代码编写、FPGA的验证和实现流程。

参考书与案例推荐:

  • 《搭建你的数字积木——数字电路与逻辑设计》。汤勇明等编著,清华大学出版社,2017年。(ps:书中最后几章有很多FPGA案例)

  • 《手把手教你设计CPU——RISC-V处理器篇 》。胡振波编著,人民邮电出版社,2018年。(ps:github上面有该CPU的源码)

  • pynq.io (http://www.pynq.io/),这是一个网站。Xilinx PYNQ开发板的开源的开发者社区,有很多使用PYNQ的开发案例,如AI处理器、视频图像处理等等。

  • Parallel Programming for FPGAs。本书有中文版和英文版,书和案例都可以在github下载。网址为:https://xupsh.github.io/pp4fpgas-cn/。(ps:本书中所有案例都采用HLS C编写完成,如果对使用C++/C语言开发FPGA感兴趣,可以学习这本书)

  • 《VLSI数字信号处理系统设计与实现》(作者:Keshab K.Parhi)与《数字信号处理的FPGA实现》(作者:Uwe Meyer-Baese)。(ps:这两本仅限有数字信号处理基础的同学学习。不建议初学者学习)

  • 斯坦福开设的一门机器学习硬件加速器的课程,“Hardware Accelerators for Machine Learning (CS 217)”(ps:仅限有机器学习和FPGA开发能力的同学学习。不建议初学者学习)

另外,如果有同学对FPGA芯片本身感兴趣,可以阅读这本书:《FPGA原理和结构》,[日] 天野英晴 著,赵谦 译,人民邮电出版社。尽管已经有很多书籍和课程来讲授如何应用FPGA来搭建电子系统、实现硬件加速,但是几乎没有一本中文入门教材来讲授FPGA内部的设计原理和结构。

《FPGA原理和结构》一书集结了日本FPGA和可重构计算领域的多位权威和专家,译者老师也长期从事FPGA和可重构计算研究,在FPL等FPGA顶级学术会议发表多篇论文。本书不仅对FPGA内部结构做了引人入胜的分析和讲解,而且对FPGA CAD工具和算法也进行了详细深入的阐述。

更惊喜的是,本书还介绍了FPGA在超算、基因科学、金融、人工智能、高频交易等方面的应用,可以让读者看到一个当下和未来更大的FPGA世界。本书写作风格浅显易懂,严谨求实,非常适合本科生和研究生作为FPGA结构与原理的入门教材,本书日文原作在日本可重构领域几乎人手一本。

如果有同学在阅读《FPGA原理和结构》一书后对FPGA开发工具的设计原理感兴趣,可以研究下学术界经常用的FPGA开源工具VTR:

https://vtr.readthedocs.io/en/latest/。

3、开发工具推荐

Xilinx vivado 2018.3。注意版本号2018.3,版本号要正确,不建议下载比2018.3更早的版本。官网就可以完成下载,由于该工具体积很大(约18G),所以要耐心等待。

使用Xilinx vivado 或者Intel Qurtus Ⅱ都可以完成FPGA开发全流程。如果觉得其中内嵌的工具不好用,还可以使用如下工具代替:

  • VS code编辑器(要安装Verilog插件),完成代码编辑;编辑器还有notepad++、Ultraedit、Vim等,看个人编程习惯。Vim学习曲线比较陡峭,熟练之后效率非常高。

  • Modelsim,完成代码仿真。

4、开发板推荐

目前情况看,网购基本上还不影响。如果有同学确实觉得需要一个实体开发板来落实系统设计,推荐以下几款,都可以在淘宝购入:

  • Spartan Edge Accelerator(SEA)。Seeed出品,采用了Xilinx Spartan7器件,价格<300元,适合入门的初学者完成一些轻量级的系统加速。SEA可以支持外插arduino作为其扩展板,如果熟悉arduino,可以采用这款开发板入门。

  • Arty A7(Artix-7)。Digilent出品,硬件逻辑资源和接口相对丰富,开源的案例比较多,有利于入门的时候做一些较为复杂的案例。

  • Xilinx PYNQ Z2。依元素出品,该系列FPGA中嵌入了一颗双核ARM,既能发挥FPGA的定制特性,也能发挥处理器的通用特性,而且两个部分之间接口丰富、官方文档齐全,可玩性极高。用户可以使用Python语言编程开发ARM端,并且代码可直接在PYNQ-Z2上进行开发和测试。当引入Python后,就可以使用一些Python中强大的第三方库,例如Numpy、Matplotlib等。注意:PYNQ的FPGA端仍需使用VerilogHDL或者HLS进行编程实现。

5、扩展知识

以上是FPAG的必备知识。但是,随着FPAG技术的快速发展,当下的FPGA已经与传统的FPGA硬件开发有了天壤之别。尤其是集成SoC的FPGA推出之后,更加注重软、硬结合的复合能力。从两大厂商FPGA推陈出新的技术来看,软件开发能力已经被提到前所未有的高度。如果同学们学有余力,可以学习如下扩展知识和技能:

  • Python。PYNQ就是一个非常好的例子。从最近三年“全国大学生FPGA创新竞赛”的获奖作品可以看出,使用Python可以快速完成一个复杂FPGA系统的搭建。但是,请务必分清楚PL和PS。

  • HLS C。C++/C非常适用于将复杂算法放到FPGA上,开发效率远胜VerilogHDL好几倍,如果同学们感兴趣的话,可以参考上述第2部分推荐的参考书《Parallel Programming for FPGAs》。

图书推荐:

一本书了解FPGA技术及应用基本原理

《FPGA原理和结构》

作者:天野英晴 等
译者:赵谦

本书由日本可重构领域专家团队撰写,是一本讲解FPGA原理的书。前5章从FPGA的相关概念入手,简明又严谨地阐述了FPGA硬件构成和CAD工具的内部原理等理论基础,有助于读者快速入门,也有助于读者了解如何优化自己的电路代码,获得更高的性能。第6章分析了FPGA的优势,系统地介绍适用于FPGA开发的“硬件算法”,有助于读者利用FPGA更高效、更有针对性地解决问题。第7章和第8章则讲解了FPGA的技术动态和应用案例。

留守在家,如何提升和精进FPGA设计能力?相关推荐

  1. 转载《留守在家,如何提升和精进FPGA设计能力?》

    工欲善其事,必先利其器,代码可综合设计能力.电路设计方法学.领域特定架构和算法理论,是提升和精进FPGA技能的必要基础.不需要FPGA开发板实物,也能够在家学习和夯实这些基础知识(ps:注意,如果长期 ...

  2. UI培训分享:如何提升自己的UI设计能力

    相信很多UI设计师在工作中经常会遇到瓶颈,那么如何提升自己的UI设计能力?是我们要思考的一个问题,下面小编就为大家分享-些建议. UI培训分享:如何提升自己的UI设计能力 1.多看 国内知名的设计网站 ...

  3. (36)FPGA面试技能提升篇(FPGA行业产品)

    1.1 FPGA面试技能提升篇36(FPGA行业产品) 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试技能提升篇36(FPGA行业产品): 5)结束语. 1 ...

  4. 设计模式(一)认识UML图提升代码阅读与设计能力

    目的   几乎是程序员就都知道或者了解设计模式,但大部分小伙伴写代码总是习惯于一把梭. 无论多少业务逻辑就一个类几千行,这样的开发也可以归纳为三步:定义属性.创建方法.调用展示,Done!只不过开发一 ...

  5. Lattice并购案我国FPGA发展路径

    FPGA作为通信.航天.军工等领域的关键核心器件,是保障国家战略安全的重要支撑基础.近年来,随着数字化.网络化和智能化的发展,FPGA的应用领域得到快速扩张.美国在FPGA领域拥有绝对的垄断优势,已成 ...

  6. FPGA图像工程师的六脉神剑——“选扫掌仿习练”

    图像工程师的六脉神剑--"选扫掌仿习练" --不是每个人都能成为一代宗师,因为在一个时代宗师只有少数人,成不了宗师,可以选择成为门派高手,立足武林的六合一之路无外乎秘密武器.江湖规 ...

  7. Intel发布FPGA

    Intel发布FPGA FPGA概述 FPGA(Field Programmable Gate Array)是在PAL (可编程阵列逻辑).GAL(通用阵列逻辑)等可编程器件的基础上进一步发展的产物. ...

  8. FPGA中的Logic Cells, Logic Slices, Configurable Logic Blocks and Gates 的定义

    一个逻辑单元(logic cell) 包含了一个查找表,一个触发器和与附近单元的连接电路.查找表使用组合逻辑实现了一个4输入的逻辑表达式(与,或,与非,加等). 一个逻辑片(logic slice)  ...

  9. 430亿晶体管,1020万逻辑单元,英特尔发布全球最大容量FPGA,用全新硬件加速AI开发...

    晓查 发自 望京 量子位 报道 | 公众号 QbitAI 11月,英特尔将在全球各地举办FPGA技术日,北京是第一站.在第一站的活动中,英特尔发布了全球最大容量的全新FPGA:Stratix 10 G ...

最新文章

  1. iOS plist文件
  2. 创新技术重塑未来物联网
  3. 经常使用计算机的孩子,常玩电脑对孩子负面影响大,家长们不容小觑!
  4. PHP全栈学习笔记27
  5. 算子基本思想_2.2 量子力学基本假设 Part 2
  6. Ubuntu安装Docker引擎和支持HTTPS的docker-registry服务
  7. ios Image裁剪成圆形的方法
  8. 我是程序员,我在小区“收垃圾”
  9. VMWare虚拟机最新版的下载与安装(详细教程)
  10. win7虚拟机详细搭建过程
  11. UVA 12304 /// 圆的综合题 圆的模板
  12. web前端基础——实现动画效果
  13. 大数据开发薪资水平怎么样?
  14. 2021年中国驴行业存栏量延续下降走势,存栏基数降低使得驴肉供应减少,价格持续走强[图]
  15. 论文的正确打开方式—如何细读一篇论文分享
  16. React 模拟点击事件
  17. Python 短文本自动识别个体是否有自杀倾向
  18. c语言程序π,C语言求圆周率π(三种方法)
  19. 自然数学-反函数的求导法则
  20. python+uiautomator2 UI自动化

热门文章

  1. 一起来看流星雨剧情简介/剧情介绍/剧情分集介绍第十八集
  2. C# PropertyGrid 简单使用
  3. p1口输入 输出实验C语言,单片机P1口输入输出实验单片机P1口输入输出实验.ppt
  4. CV:计算机视觉技术之图像基础知识(二)—图像内核的九种卷积核可视化解释(blur/bottom sobel /emboss/identity /sobel /outline/sharpen)
  5. html 定位 精灵技术 过度 2d变形 动画
  6. 【MicroPython ESP32】1.8“tft ST7735带中文驱动显示示例
  7. rime切换全角标点和半角标点
  8. 兰州烧饼(南阳oj779)
  9. 线和面的方程区别_[平面与圆柱面交线方程]平面与圆柱面的交线有哪三种情况...
  10. 与内在功能连接个体变异性相关的基因表达