我是机械专业研一学生,C语言有点基础,数电模电基本忘光了。最近刷到好多FPGA就业帖,说缺口大薪资高,动了自学转行的念头。每天能挤出3小时,打算用三个月打基础。不想一直跑流水灯和按键消抖这种例程,想直接奔着能写进简历的项目去。求过来人给一份循序渐进的练手项目清单,最好标注每个项目对应要掌握的知识点,比如串口、FIFO、时序约束这些,让我心里有个底。
2026年了,FPGA零基础自学三个月能做出什么项目?求一份不靠开发板厂商例程的练手清单
8 个回答

机械研一、每天三小时、C语言有点底子,这个起点其实不算差,但三个月想直接够到简历项目,得先接受一个现实:你大概率做不出能上生产的东西,但能做出能讲清楚的东西。我给你的清单和网上常见的区别是,每个项目都逼你离开例程。第一个月别碰按键消抖和流水灯,直接做UART发送加接收,接收用状态机自己写,别调现成IP。难点在于你一边写一边要把波特率时钟分频搞明白,这比消抖有用多了。第二个月做SPI读ADC,比如AD7680这类简单片子,数据手册就几页,逼你学会看时序图,然后接一个DDS查表生成正弦波,用同一个SPI总线把数据发出去。第三个月做Sobel边缘检测,用OV7670或直接存一张灰度图到RAM,重点练FIFO和跨时钟域,最后把结果通过串口发到PC上显示。三个项目各对应一个简历亮点:UART体现状态机能力,SPI体现接口时序能力,Sobel体现跨时钟域和FIFO设计。但你要有个心理准备,这三个项目做完,你大概率还是过不了多数FPGA岗位的笔试,因为算法题和时序分析还没练,所以简历上写的时候,一定要强调架构设计思路和遇到的问题,而不是功能完成。另外,你数电忘光了是个隐患,建议每天挤半小时补一下触发器和时序逻辑,不然跨时钟域那关你会卡得很痛苦。你现在用的板子是什么型号?如果是Xilinx的7系,后面学Vivado的时序约束会稍微顺一点,但如果是Altera的,Quartus的界面又不一样,这会直接影响你第三个月能不能按时做完。

我直接给你一条主线,其他都不重要。三个月,你只需要做一件事:把一张图片从摄像头读进来,经过处理,再从串口送出去。围绕这条线,所有知识点都会自然长出来。第一个月,你先把这条链路的第一个环节打通:UART发送。别做接收,发送就够了。因为接收要处理异步时钟和毛刺,对新手是额外负担。你写一个模块,把一串数据发到PC串口助手,然后写一个简单的FIFO,把数据存进去再发出来。这一步你在练三件事:状态机怎么写、时序仿真的波形怎么对、FIFO的读写指针怎么处理。第二个月,把摄像头换成SPI接口的ADC,或者直接用一个SPI口的SD卡读一个小的RAW文件,总之让数据源变成SPI。这一步练的是你读数据手册的能力,你要自己画出时序图,然后写代码去满足它。很多新手死在这一步,因为例程里都是现成的IP,你一旦脱离例程,就会发现自己连片选的拉高拉低时机都搞不对。第三个月,把处理环节加上,做Sobel边缘检测。你不需要真的用摄像头,可以提前把一张灰度图转成COE文件存进Block RAM,然后写一个卷积模块去读它,再把结果通过UART发出去。这一步的核心是跨时钟域:你的RAM读时钟和处理时钟不一样,你必须用异步FIFO或者双口RAM来桥接。做完这个,你就有了一个完整的信号链路概念,简历上可以写「独立完成图像采集、存储、处理、传输的完整FPGA设计」。但我要提醒你,这个项目最大的风险是时间失控。很多人卡在Sobel的卷积计算上,因为你要处理边界像素,还要考虑流水线延迟。我的建议是,第三个月的前两周只做仿真,不碰板子,把卷积模块在testbench里调通,最后一周再上板。如果你发现第三个月过半还没开始写Sobel,果断砍掉它,改成做一个简单的FIFO深度检测模块,然后重点把前两个项目的时序报告截图存好,面试时讲清楚你做了哪些优化,比一个没做完的Sobel更有说服力。你现在的C语言基础其实能帮你在写testbench时更快上手,但别花太多时间在SystemVerilog上,三个月内用Verilog把RTL和testbench分开写就够了。你打算用什么仿真工具?Modelsim还是Vivado自带的?这会影响你第一个月的学习曲线,因为Modelsim的手动加激励和Vivado的xsim差别挺大的。

别做流水灯,直接买块带摄像头和音频编解码器的板子,第一个月抄UART,第二个月抄SPI,第三个月抄Sobel,全抄通,能对着波形图讲清楚每个信号为什么拉高拉低,面试就够了。关键不是代码多原创,是你能把架构图画出来。三个月抄三个,比自创一个半成品强。

三个月能不能出项目,关键不在语法,在于你把第一个项目选成什么。你机械背景、C语言有底子,最大的优势是逻辑思维不差,最大的劣势是没见过波形、没调过时序。所以我的建议是:第一个月别碰摄像头也别碰DDS,就死磕UART收发加一个自己写的FIFO。很多人觉得UART太简单,但你注意,我要求的是发送和接收都用状态机手写,不用厂商IP,而且FIFO也要自己写读写指针和空满标志。这一步练的不是UART本身,是让你第一次感受到时序仿真的重要性——你写完代码,在ModelSim里拉出波形,看到起始位、数据位、停止位按你设想的波特率出现,这个正反馈比任何教程都强。第二个月做SPI读ADC,选AD7680这种几页手册的片子,逼自己看时序图,把SCLK、CS、SDO的相位关系搞对。这里你会踩一个坑:SPI的四种模式,CPOL和CPHA搞反了数据全是错的。但恰恰是这个坑,让你学会怎么用逻辑分析仪或示波器去查问题,这是面试时最值钱的经历。第三个月回头做Sobel边缘检测,但不要接摄像头,直接把一张灰度图用$readmemh存进RAM,然后做3×3窗口的移位寄存器,重点练两个东西:一是FIFO做行缓存,二是跨时钟域——图像处理时钟和串口发送时钟肯定不一样,你要学会用异步FIFO或者握手信号去对接。三个项目做下来,简历上写UART体现状态机,SPI体现读手册能力,Sobel体现存储架构和跨时钟域,每个都有深度。最后提醒一句:三个月每天三小时,时间很紧,别贪多,每个项目留一周专门画架构图写文档,讲不清楚的项目等于没做。你目前打算先做UART还是直接上SPI?

我建议你把顺序改成:第一个月UART收发加FIFO,第二个月SPI读ADC,第三个月用FPGA做一个简易的PWM呼吸灯加按键控制,但要求按键做消抖且PWM的频率可调。很多人觉得呼吸灯太基础,但你要是能把消抖状态机和PWM占空比累加器讲清楚,再配合一个计数器溢出中断来改变频率,这个项目其实比Sobel更容易在面试中展开,因为面试官问到底层时序时你能答得上来。而且它不需要外部器件,纯板载就能跑,省去你调摄像头的痛苦。等这个做完,如果还有时间,再考虑把图像数据通过串口发到PC显示,这样链路就完整了。核心思路是用最少的资源把状态机、时序、分频这三个基本功练透,而不是追求项目名听起来高大上。你手头是什么芯片型号?不同厂家的工具链差别挺大,这个会影响你第一周怎么上手。

你这个问题问得挺实在的,机械背景转FPGA,三个月每天三小时,我的建议是别贪多,就按一条主线走:UART收发 -> SPI读ADC -> Sobel边缘检测。第一个月你可能会觉得UART太简单,但关键不在UART本身,在于你要手写接收状态机,别用厂商IP,然后自己写一个FIFO来处理跨时钟域的数据缓冲。这一步练的是三个基本功:状态机设计、时序仿真的波形对比、读写指针的边界处理。很多人在这里会卡住,因为一写FIFO就发现空满标志在仿真里总是不对,这恰恰是好事——你提前踩了面试必问的坑。第二个月做SPI读ADC,选AD7680这种几页手册的片子,逼自己看时序图,把CPOL和CPHA搞清楚,然后接一个DDS查表生成正弦波,用同一个SPI总线把数据发出去。这里你要注意,DDS的相位累加器宽度和查表地址截断是面试官爱问的细节,你得能讲清楚为什么高位做地址、低位做插值。第三个月做Sobel,但别一上来就接摄像头,先存一张灰度图到RAM里,然后做3×3窗口滑动,重点练行缓存和FIFO的配合,最后把结果通过串口发到PC显示。这个项目的核心不是算法本身,而是你要能画出架构图,讲清楚数据从RAM读出来怎么经过三行缓存、怎么同步卷积窗口、输出怎么跨时钟域。三个月做完这三个,你的简历上就能写'独立完成UART/SPI接口设计、FIFO跨时钟域处理、Sobel边缘检测',每个都能展开讲半小时。最后提醒一句,工具链别纠结,Vivado和Quartus都行,关键是每天坚持跑仿真看波形,别只看综合报告。你手头有板子吗?还是打算先纯仿真?

我给你个反常识的建议:别一上来就碰按键消抖和流水灯,那玩意儿练不出东西。直接做UART发送,一个月内把发送状态机写对,然后加接收,再自己写个FIFO把收发串起来。这一步走通了你就有底气了。第二个月做SPI读ADC,但你别用现成IP,自己根据手册画时序图,然后写代码去满足它。第三个月做Sobel,但别用摄像头,用串口把一张小图传进FPGA,存到RAM里,然后做边缘检测,再串口传回PC。这套链路的好处是每个环节都在练真实接口,而且你随时能验证。面试时你能把这三个模块的时序图画出来,比你说做过什么复杂项目都管用。别贪多,三个吃透就够了。你C语言有底子,Verilog语法两周就能上手,难的是时序思维,这个只能靠仿真波形喂出来。建议你每天至少花半小时看波形,别只盯着代码改。

实话实说,三个月每天三小时,想做出能写进简历的项目,时间确实紧,但不是没可能,关键看你把劲使在哪。你C语言有底子,这是好事,Verilog语法本质上就是另一种描述逻辑的方式,两周就能上手,真正难的是时序思维——就是你能不能在脑子里把信号随时间变化的波形画出来。所以我给你的主线不是按项目走,是按能力走:第一个月练状态机和仿真,第二个月练接口和时序,第三个月练跨时钟域和整体架构。
第一个月,别碰按键消抖和流水灯,那玩意儿练不出东西。直接做UART发送,把数据从FPGA发到PC串口助手。这里有个很多人忽略的点:UART发送看着简单,但你一旦手写状态机,就会遇到波特率时钟怎么分频、起始位停止位怎么对齐、空闲时总线保持高电平这些细节。写完发送,再加接收,接收比发送难,因为你要处理异步时钟下的采样和毛刺,这时候你自然就会想用一个FIFO来缓冲收发两端的数据。自己写FIFO,别用IP核,读写指针、空满标志、格雷码跨时钟域,这三个坑踩一遍,你第一个月就值了。
第二个月,做SPI驱动ADC采集。选个数据手册只有几页的片子,比如AD7680这类,逼自己看时序图,把SCLK、CS、SDO的相位关系搞清楚。这里你会遇到CPOL和CPHA,也就是SPI四种模式的区分,这是面试必问的。同时配一个DDS查表生成正弦波,用同一个SPI总线把数据发出去。DDS的相位累加器宽度和查表地址截断,这两个概念能让你理解精度和资源怎么权衡。这个月练的是你读手册的能力和时序约束的初步感觉。
第三个月,做Sobel边缘检测,但别用摄像头,用串口把一张小图传进FPGA,存到RAM里,然后做边缘检测,再串口传回PC。这一步的核心是跨时钟域和FIFO的配合——图像数据进来是一个时钟域,处理模块可能是另一个时钟域,数据缓存和握手信号怎么设计。做完这个,你简历上就能写三个模块:UART、SPI、图像处理,每个都能画出时序图,讲清楚架构和优化点。面试官问到底层细节你能答上来,比你说做过什么复杂项目都管用。
最后提醒一句:三个月别贪多,这三个吃透就够了。每天至少花半小时看仿真波形,别只盯着代码改,波形能告诉你问题出在哪。你手头准备用哪家的板子?不同厂商工具链差别挺大,这会影响你第一周怎么上手。
发表回答
登录后可在本页底部提交回答