当前位置: 首页 > news >正文

FPGA:我的零基础学习路线(2022秋招已上岸)持续更新中~

可内推简历,丝我即可

前言

初次接触FPGA是在2022年3月左右,正处在研二下学期,面临着暑假找工作,周围的同学大多选择了互联网,出于对互联网的裁员形势下,我选择了FPGA,对于硬件基础知识我几乎是没有的,最初我还很担心要补的硬件知识太多了,但是慢慢发现需要的硬件知识不算多,用到哪里就学哪里,以下记录我从零开始学习FPGA的过程,以及使用的资料,下面的内容均是我尝试过的,有好的方法大家可以借鉴,也提到一些不好的方法,以帮大家避坑

正文

一开始,我先去咨询身边会FPGA的人,以及去网上搜经验贴,大家不约而同地提出数电的重要性,于是从数电开始,我开启了我一路跌跌撞撞的入门之旅

一、视频教程

1.1 数电

推荐教材:数字电子技术基础-第六版-闫石
数电重点章节:组合逻辑、触发器、时序逻辑;其中触发器这一章中可以先学最常用的D触发器,别的触发器等以后用到再学


我看过B站上好几位讲数电的老师,一开始看的是播放量最高的清华的王红老师的课程:数电 - 清华王红
但是看了几节课后发现我看不懂,也跟不上老师的上课进程,于是我又发现了另外2位老师的课程:数电 - 西电任爱锋、数电 - 苏州大学,这2位老师的课程是我觉得比较能听懂的,于是我跟着他们的课程快速过了一遍数电的组合逻辑、时序逻辑这2章最重要的内容
因此想要快速过一遍数电,推荐这两个老师的视频:

  • 数电 - 西电任爱锋
  • 数电- 苏州大学
  • 数电 - 哈工大(有好几个老师轮流上课,讲得还是很不错,可以作为补充观看)

1.2 Verilog

数电把重点章节过一篇后,我就直接开始学习Verilog了,虽然很多人推荐夏闻宇老师的Verilog书,但是我觉得不是很适合用来快速入门,我也没有选择去B站找Verilog的视频教程看,而是开始跟着小梅哥的视频,边熟悉数电知识,边学习Verilog语言
看小梅哥视频这部分应该算是入门的关键之一,看完视频后悔对Verilog和FPGA大概能做什么有一个初步的认识
下面是我看的视频:
这两个视频我是搭配着看的,如果小梅哥讲的我没听懂,我就去看看野火是怎么讲的,反之亦然

  • 零基础轻松学习FPGA - 小梅哥
  • FPGA系列教学视频,“波形图”教学法 - 野火:几乎每节课都会先带着你手绘波形图,然后对着波形图写代码

补充:
如果有同学想要系统跟着课程学一遍Verilog,推荐这个老师的课程:
Verilog硬件描述语言 西安电子科技大学 蔡觉平等主讲


当你觉得自己可以写一点Verilog的简单代码后,就可以开始刷HDLBits上的题了,题目比较多,几乎涵盖了Verilog的常用语法,强烈建议刷一遍上面的题,尽量自己做,然后再去看别人的答案;我第一遍刷是看了别人的答案再去做,感觉收获不大。你可以评估一下自己现在的Verilog编程水平,做前10道你都觉得没什么问题的话,就可以继续做下去;如果觉得很吃力的话,还是再看一段时间的小梅哥或者野火的视频再去做上面的题

  • 刷题网站
  • HDLBits答案 - 博客 - 孤独的单刀
  • HDLBits答案 - B站视频 - 荣晔

另外再推荐一个菜鸟的Verilog教程,还是比较全的

  • 菜鸟 - Verilog

注意:在看视频时,一定不要陷入一种误区,眼睛会≠手会≠脑子会,所以一定要多动手写代码,而且要把学过的东西用起来,不然很快就会忘记,比如点灯这个操作,你可以在最开始用assign led = 1'b1让灯亮起来,后面学到状态机,你可以用状态机检测一个序列,如果检测到,就点灯;再比如,学到UART串口,你可以使用串口助手往FPGA传输数据1,如果FPGA接收到了串口助手发来的数据,就点灯;最后再举例,使用赛灵思的开发板时,用PL中断给PS端传输中断信号,再通过GPIO点灯。
(后面举例这部分你可以能还不太看得明白,没关系,我刚学的时候也不明白,我想表达的含义就是要把前面学到的东西用起来,我就是吃了这个亏,不用好多东西都忘记了)


如果有同学需要system verilog的刷题网站,也推荐一个比较不错的:
System Verilog刷题网站

1.3 项目

把上面的视频看得差不多了,可以尝试做一些网上的开源项目,我师兄推荐给我的这个项目我暂时还没有做,但我后面有时间一定要把他做了,因为我在看牛客上的面试经验时发现有的公司还是会经常问SDRAM的内容

1.3.1 SDRAM

推荐项目:

  • SDRAM第一季 - 开源骚客
1.3.2 RISC-V实现单周期处理器

还有一个我做了的项目,是用riscv写一个CPU,做了这个项目后对我的帮助是,提升了Verilog的代码编写能力,熟悉了CPU的大致结构和工作原理,算是位以后学习计算机体系结构开了一个头吧

  • tinyriscv技术手册
  • tinyriscv - gitee仓库
  • tinyriscv - B站分析教程 - 荣晔
  • riscv - 设计 - 荣晔
1.3.3 基于ov7725、ov5640摄像头的图像处理、数字识别

这个摄像头的项目涉及的知识点稍微多了一点,可以把之前学的SDRAM、I2C协议、HDMI显示、VGA显示等知识点都用上,还有其他关于显示数据的内容。做了这个项目我是写到简历上的,推荐的课程如下:
正点原子 : ov7725摄像头
:也可以把每个模块需要的知识点拆分开,去野火FPGA那里找对应的知识点


摄像头这部分我做了图像显示、简单的图像处理、数字识别这几个功能,实现效果如下:

在这里插入图片描述

在这里插入图片描述
经过很长一段时间调试,需要工程的朋友后台私信我,一杯奶茶钱带走它哈~

1.3.4 卷积神经网络的手写数字识别

这个是找到工作后打算做的,还在进行中…

二、博客教程

学习FPGA的过程中,能遇到一个领路人是一件无比重要的事,在这个过程中有幸发现一位这样的领路人,他的CSDN上的内容从结构来看,就是一本FPGA书!!从入门到进阶,结构十分清晰,内容也很丰富,博主本人也非常热心,这一波,墙裂推荐啊~

  • 推荐博主 - 孤独的单刀

三、基础课程

3.1 计算机体系结构

最好不要一上来就看书,我反正是看不进去的,对于这样的专业性很强的课程,推荐找到对应的考研视频,考研视频会把知识点讲的很细,跟着过一遍就好。
我在做RISCV那个项目时,发现一位研究院的工程师到高校讲课的视频,其中对计算机结构做了很清晰的讲解,十分推荐:
RISCV - 汪辰

四、推荐论坛

论坛太多了,找个时间整理一下

五、补充

1、需要资料的后台私信我
2、我在2022年期间担任声光电校园大使,收到过很多求职简历,可提供修改简历以及项目PPT
3、创作不易,给个三连啦~
4、另外还有我整理的面试常问的问题,面试前我手里就拿着这个看一看
在这里插入图片描述

相关文章:

FPGA:我的零基础学习路线(2022秋招已上岸)持续更新中~

可内推简历,丝我即可 前言 初次接触FPGA是在2022年3月左右,正处在研二下学期,面临着暑假找工作,周围的同学大多选择了互联网,出于对互联网的裁员形势下,我选择了FPGA,对于硬件基础知识我几乎是…...

阿里云游戏服务器多少钱一个月?

阿里云游戏服务器租用价格表:4核16G服务器26元1个月、146元半年,游戏专业服务器8核32G配置90元一个月、271元3个月,阿里云服务器网aliyunfuwuqi.com分享阿里云游戏专用服务器详细配置和精准报价: 阿里云游戏服务器租用价格表 阿…...

Win32 SDK Gui编程系列之--ListView自绘OwnerDraw(续)

通过所有者绘制的列表视图(2) 所有者绘制列表视图的基础已在前一页中说明。本页将展示如何在所有者绘制列表视图中显示数据库表数据。 1、访问日志 正如在另一个页面中所述,本网站的访问日志目前是通过SQLite3数据库管理的。 以下是上述程序执行的结果。为…...

Android 应用添加系统签名权限的几种方式实现介绍

Android 应用添加系统签名权限的几种方式实现介绍 文章目录 Android 应用添加系统签名权限的几种方式实现介绍一、前言二、Android 应用添加系统签名权限的几种方式介绍1、在Android Studio添加系统签名文件2、源码编译apk添加系统签名Android.mkAndroid.bp 3、源码编译app代码…...

麒麟V10+飞腾处理器源码编译qt

1.下载qt源码 2.百度解压命令,进行解压 3.cd进文件目录 4.使用./configure命令进行配置(重点:记得看说明) Usage: configure [-h] [-prefix <dir>] [-prefix-install] [-bindir <dir>] [-libdir <dir>][-docdir <dir>] [-headerdir <dir&g…...

MacOS 查AirPods 电量技巧:可实现低电量提醒、自动弹窗

要怎么透过macOS 来查询AirPods 电量呢&#xff1f;当AirPods 和Mac 配对后&#xff0c;有的朋友想通过Mac来查询AirPods有多少电量&#xff0c;这个里有几个技巧&#xff0c;下面我们来介绍一下。 透过Mac 查AirPods 电量技巧 技巧1. 利用状态列上音量功能查询 如要使用此功能…...

python介绍,安装Cpython解释器,IDE工具pycharm的使用

python介绍 官方的Python解释器本质是基于C语言开发的一个软件&#xff0c;该软件的功能就是读取以py.结尾的文件内容&#xff0c;然后按照Guido定义好的语法和规则去翻译并执行相应的代码。这种C实现的解释器被称为Cpython。 python解释器的种类&#xff1a;Jython IPyth…...

服务器安装Docker (centOS)

1. 卸载旧版本的Docker&#xff08;如果有&#xff09; 首先&#xff0c;如果您的系统上安装了旧版本的Docker&#xff0c;需要将其卸载。Docker的旧版本称为docker或docker-engine。使用以下命令来卸载旧版本&#xff1a; sudo yum remove docker \ docker-client \ docker-…...

解析spritf和sscanf与模拟常用字符串函数strchr,strtok(二)

今天又来继续我们的字符串函数的文章&#xff0c;这也是最后一篇了。希望这两篇文章能让各位理解透字符串函数。 目录 strchr strtok sprintf和sscanf strchr strchr 是一个用于在字符串中查找特定字符首次出现位置的函数。以下是解析和模拟实现 strchr 函数的示例&…...

备战蓝桥杯---搜索(进阶4)

话不多说&#xff0c;直接看题&#xff1a; 下面是分析&#xff1a; (ab)%c(a%cb%c)%c; (a*b)%c(a%c*b%c)%c; 因此&#xff0c;如果两个长度不一样的值%m为相同值&#xff0c;那就舍弃长的&#xff08;因为再加1位只不过是原来值*10那位值&#xff0c;因此他们得出的%m还是同…...

51单片机基础(C语言):定时器时钟

1.使用定时器 1 和LCD1602设计一个简易数字时钟。 main.c #include <REGX52.H> #include "Delay.h" #include "LCD1602.h" #include "Timer0.h"unsigned char Sec55,Min59,Hour23;void main() {LCD_Init();Timer0Init();LCD_ShowString(…...

单片机无线发射的原理剖析

目录 一、EV1527编码格式 二、OOK&ASK的简单了解 三、433MHZ 四、单片机的地址ID 五、基于STC15W104单片机实现无线通信 无线发射主要运用到了三个知识点&#xff1a;EV1527格式&#xff1b;OOk&#xff1b;433MHZ。下面我们来分别阐述&#xff1a; EV1527是数据的编…...

Redis的过期键的删除策略

我们都知道&#xff0c;Redis是key-value数据库&#xff0c;我们可以设置Redis中缓存的key的过期时间。Redis的过期策略就是指当Redis中缓存的key过期了&#xff0c;Redis如何处理。 过期策略通常有以下三种&#xff1a; 定时过期&#xff1a;每个设置过期时间的key都需要创建…...

放假--寒假自学版 day1(补2.5)

fread 函数&#xff1a; 今日练习 C语言面试题5道~ 1. static 有什么用途&#xff1f;&#xff08;请至少说明两种&#xff09; 1) 限制变量的作用域 2) 设置变量的存储域 2. 引用与指针有什么区别&#xff1f; 1) 引用必须被初始化&#xff0c;指针不必。 2) 引用初始…...

LLM(5) | Encoder 和 Decoder 架构

LLM(5) | Encoder 和 Decoder 架构 文章目录 LLM(5) | Encoder 和 Decoder 架构0. 目的1. 概要2. encoder 和 decoder 风格的 transformer (Encoder- And Decoder-Style Transformers)原始的 transformer (The original transformer)编码器 (Encoders)解码器 (Decoders)编码器和…...

CV | Medical-SAM-Adapter论文详解及项目实现

******************************* &#x1f469;‍⚕️ 医学影像相关直达&#x1f468;‍⚕️******************************* CV | SAM在医学影像上的模型调研【20240207更新版】-CSDN博客 CV | Segment Anything论文详解及代码实现 本文主要讲解Medical-SAM-Adapter论文及项…...

C++初阶:容器(Containers)vector常用接口详解

介绍完了string类的相关内容后&#xff1a;C初阶&#xff1a;适合新手的手撕string类&#xff08;模拟实现string类&#xff09; 接下来进入新的篇章&#xff0c;容器vector介绍&#xff1a; 文章目录 1.vector的初步介绍2.vector的定义&#xff08;constructor&#xff09;3.v…...

flink写入es的参数解析

ElasticsearchSink内部使用BulkProcessor一次将一批动作(ActionRequest)发送到ES集群。在发送批量动作前&#xff0c;BulkProcessor先缓存&#xff0c;再刷新。缓存刷新的间隔&#xff0c;支持基于Action数量、基于Action大小、基于时间间隔3种策略。BulkProcessor支持在同一次…...

逆向工程:揭开科技神秘面纱的艺术

在当今这个科技飞速发展的时代&#xff0c;我们每天都在与各种电子产品、软件应用打交道。然而&#xff0c;你是否想过&#xff0c;这些看似复杂的高科技产品是如何被创造出来的&#xff1f;今天&#xff0c;我们就来探讨一下逆向工程这一神秘而又令人着迷的领域。 一、什么是…...

决策树的相关知识点

&#x1f4d5;参考&#xff1a;ysu老师课件西瓜书 1.决策树的基本概念 【决策树】&#xff1a;决策树是一种描述对样本数据进行分类的树形结构模型&#xff0c;由节点和有向边组成。其中每个内部节点表示一个属性上的判断&#xff0c;每个分支代表一个判断结果的输出&#xff…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...