转载《留守在家,如何提升和精进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://url.cn/57pFUkB,免费收看。

参考书推荐:

《轻松成为设计高手: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的源码)

http://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》。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值