前言
笔者本人是一名工科博一选手,本科是电子信息的,当时主要是上手一些STM嵌入式相关的内容,读研后,主要是硬件加速器设计相关的。
前一阵组里老师叫我整合一下资料,推荐一些学习资料组里的研0师弟师妹,让他们能够稍微后续有个学习的方向,因此也就基于自己的一些学习认知写了如下的一篇分享,也算是自己这几年来的一些小心得,希望能帮到有需要的人。也是自己第一次写博客,也深入自己认知有限,如果有不足的地方,也欢迎各位大佬批评指正呀。下面就开始这次的内容分享吧,嘿嘿!
我的介绍主要分成两个部分,
分别是AI理论基础和数字IC设计(硬件加速器设计、处理器设计、SoC设计);
下面将按照这两个部分进行展开。
一、AI理论基础
AI是一个比较大的概念,包括计算机视觉、自然语言处理、语音识别等,如果每个部分细讲可能篇幅有点大,因此主要介绍一些比较通用的理论,后续如果对某个方向感兴趣,可以再通过读论文等具体深入了解。(由于我们主要还是基于已有架构先行设计硬件加速器,所以对于AI相关的理论可能了解不是很深,但是主打一个上手快,啊哈哈哈哈,但是如果想走的更远,肯定是对于基础了解更深更好啦!)。
1. 理论基础
主要推荐3个博主:李沐老师、吴恩达老师以及李宏毅老师。
学习思路:
- 掌握机器学习相关的理论(回归、决策等)
- 深度学习关于神经网络模型构建的内容
- 过程穿插相关论文的阅读
- 神经网络部署相关
- 机器学习相关:
主要推荐吴恩达老师(斯坦福大学)的课程,课程在介绍一些相关理论中也会穿插一些代码,而且吴老师也是公认的大牛。
吴恩达老师: 课程链接为(超爽中英!) 2025公认最好的【吴恩达机器学习】教程!附课件代码 Machine Learning Specialization_哔哩哔哩_bilibili
- 深度学习相关:
主要推荐李沐老师(亚马逊大牛)的课程,课程也主要是介绍相关理论,而后会教你手把手撕代码,可以跟着手敲,提升自己的coding能力
李沐老师:课程链接为-> 00 预告【动手学深度学习v2】_哔哩哔哩_bilibili
课程网站:https://courses.d2l.ai/zh-v2/
还有一个就是李宏毅老师的课程,他课程比较风趣,主要是根据项目具体写代码。
李宏毅老师:【(强推)李宏毅2021/2022春机器学习课程】 (强推)李宏毅2021/2022春机器学习课程_哔哩哔哩_bilibili
2. 论文阅读
学习相关理论的过程中,肯定也少不了相关论文的阅读,才能扎实自己的理论基础,并且了解相关前沿的方向。但是对于我们做硬件部署来说,不一定要阅读全部,阅读一些经典的论文,了解背景和相关理论却是必要的,比如手写数字识别、Alexnet鼻祖、Resnet减少梯度消失、YOLO系列、attention、Bert、Transformer、mobilenet(轻量化神经网络)等。也可以跟着李沐老师的精读论文系列一起学习:【9年后重读深度学习奠基作之一:AlexNet【论文精读·2】】 9年后重读深度学习奠基作之一:AlexNet【论文精读·2】_哔哩哔哩_bilibili
3. 神经网络部署
通过上面的相关资料学习,你应该已经在AI路上能独当一面了,那么接下来就开启另一条分支,硬件加速器设计,把你上面的神经网络搓成硬件电路,在FPGA甚至芯片上跑,将AI赋能到边缘端,边缘计算!
-
一个是在具体GPU板卡上部署
这个需要考虑不同公司的框架,比如Pytorch、TensorFlow、onnx(主要是部署上的)、百度的PaddlePaddle、caffe等框架。
比如:Nvidia的Jeston系列,或者树莓派、以及Xilinx的DPU系列
-
FPGA部署
这个也有两种思路。
可以大概看看这两个视频:
【使用PYNQ加速神经网络流程】 使用PYNQ加速神经网络流程_哔哩哔哩_bilibili
【使用PYNQ加速神经网络流程(一):创建模型并读取参数】 使用PYNQ加速神经网络流程(一):创建模型并读取参数_哔哩哔哩_bilibili
【使用PYNQ加速神经网络流程(一):创建模型并读取参数】 使用PYNQ加速神经网络流程(一):创建模型并读取参数_哔哩哔哩_bilibili
https://github.com/adamgallas/fpga_accelerator_yolov3tinyhttps://github.com/adamgallas/fpga_accelerator_yolov3tiny 这个是一个在FPGA实现yolov3tiny神经网络的各个算子,场景是口罩识别,比较老了,但是对于神经网络上,场景不同,很大程度取决于数据集和权重,神经网络搭建好后,通过迁移学习便能赋能不同场景了。
通过上面的相关资料学习,你应该已经在AI路上能独当一面了,那么接下来就开启另一条分支,硬件加速器设计,把你上面的神经网络搓成硬件电路,在FPGA甚至芯片上跑,将AI赋能到边缘端,边缘计算!
二、数字IC之路
对于数字IC来说,有分成3部分,设计、后端、验证三条修仙之路,当然,也有神人能够集本领于一身的(会不会是下一个你呢?)下面是基于我目前的一些认知所给出的一些小分享。
-
基础理论
数字IC的基础是数字电路设计,所以如果之前没有数电的基础,需要先补上;如果已有这个基础,可以跳过这一步,直接开启修炼之路。
如果是数字电路设计的基础:我推荐阎石老师的资料
喜欢看课程的:【【数字电子技术基础】阎石第六版】 【数字电子技术基础】阎石第六版_哔哩哔哩_bilibili
也可以自己找阎石老师的书去啃。看个人选择
-
语言学习
在数字IC设计中,主要用到的编程语言是verilog,下面是verilog的学习课程。
通过这部分的修炼之后,理论上,你应该能够在自己脑海中,构建一组自己的时序波形了吧。
-
语法学习:【6小时掌握Verilog语法】 6小时掌握Verilog语法_哔哩哔哩_bilibili
看完这个相关课程后,可以去这个网站练习相关语法(有仿真)。
-
代码练习:HDLBits
答案的话,网上也有,解决不了的时候,可以去查看答案,学习学习别人的解决思路。
-
-
开发板测试
开发板有很多系列,国产国外都有,包括Xilinx黑金系列、紫光同创系列、高云开发板等,整体的思路,其实就是在对应公司的IDE软件进行代码编写,代码仿真、引脚约束、上板验证。开发板也是一个很好的软件代码实体化的具象表达方式,也能有一些正反馈。
开发板的教程有很多,前期入手的话,可以看看正点原子的教程系列(算是讲的比较清晰的,即便手上的板子不太对应,但是可以学习其思想,而且芯片如果用的一致的话,可能都是在Vivado开发的):
对于FPGA来说,有两种系列,一种是纯组合逻辑的开发板(比如Xilinx的A7103系列),还有一种是搭配硬核的SoC开发板(比如Xilinx的A7021板子、ZCU系列等)
组合逻辑板可以看如下课程:
这个主要是学习整体的FPGA开发流程吧,从代码编写、仿真、IO约束、上板验证;相关外设学习(LED、KEY、UART、HDMI等等)
【手把手教你学达芬奇&达芬奇Pro之FPGA开发篇【真人出镜】FPGA教学视频教程】 手把手教你学达芬奇&达芬奇Pro之FPGA开发篇【真人出镜】FPGA教学视频教程_哔哩哔哩_bilibili
-
处理器设计相关
这个我是找组里另外大佬推荐的,处理器设计的基础是需要有verilog基础的。
Risc-v处理器学习:
-
Tiny-riscv三级流水线处理器
文档详细:liangkangnan/tinyriscv: A very simple and easy to understand RISC-V core.
-
蜂鸟203
组内很多工作基于该开源处理器进行:riscv-mcu/e203_hbirdv2: The Ultra-Low Power RISC-V Core
-
一生一芯项目
可以系统的学习处理器设计,从处理器建模到hdl实现,不过流程较长,且前期软件层次偏多,需要坚持:一生一芯
-
参考书籍
计算机组成与设计:硬件/软件接口(RISC-V版)
计算机体系结构:量化研究方法
-
-
SoC设计
这部分其实我也还在系统的学习。
推荐如下课程吧:是在ZYNQ开发板上进行开发的。
【野火】FPGA ZYNQ-7000系列嵌入式系统开发教学视频,硬件基于野火皓月系列开发板_哔哩哔哩_bilibili
好了,整体的分享就是这样啦,感觉整体的内容是偏工程和打好技术栈相关的内容,因此更多的是介绍一些相关的课程,而没有“创新点”,啊哈哈哈哈。可能因为自己平时打比赛做项目比较多,更多是关注相关的“技术栈”,能够快速上手看代码了解里面的架构和设计思路。