本人电子信息大三,自学FPGA三个月了,Verilog语法书看了两遍,B站网课也刷了不少,但一上板还是只会流水灯和按键消抖。感觉一直卡在语法层面,看别人的项目代码又觉得好多模块看不懂。是应该继续把语法啃透再开始做项目,还是硬着头皮直接做个小项目(比如串口收发或者PWM电机控制),边做边查边学?求过来人指点一下,怎么才能突破这个瓶颈期?
2026年了,FPGA自学三个月还停留在流水灯,是继续啃语法还是直接上手做个小项目逼自己一把?
4 个回答

三个月卡在流水灯,问题不在语法,在于你一直用「学完再练」的思路在学一个「练了才会」的学科。Verilog 和 C 语言不一样,C 你背会语法能写点逻辑,Verilog 光看语法书你连 always 块里什么时候该用阻塞赋值都感觉不到,因为那本质上是硬件思维,得靠电路跑起来才能内化。你现在的状态很像游泳看了三个月教学视频,下水还是只会憋气——不是你不努力,是路径错了。
直接上手串口收发吧,别做 PWM 电机,那个偏控制逻辑,对你的瓶颈帮助不大。串口收发天然逼着你处理三件事:第一,波特率时钟怎么从系统时钟分频出来,这让你理解时序和计数器;第二,发送和接收的状态机怎么设计,这会逼你画出状态转移图再写代码,而不是对着语法书发呆;第三,仿真和上板调试的配合——你会发现 Modelsim 里波形对了不代表上板就对,还得处理亚稳态、按键消抖这类真实问题。做完这一个项目,你再看别人代码里那些 `always @(posedge clk)` 和 `case` 嵌套,基本就能猜出模块在干什么了。
给你个具体节奏:先别管复杂的,找一份串口发送的参考代码,别复制,照着画状态图,然后自己敲一遍。敲完别急着上板,先写 testbench 仿真,把发送一个字节的时序在波形上盯明白,比如起始位、8 个数据位、停止位各占几个时钟周期。仿真通过了再上板,用 USB 转串口接电脑,串口助手收数据。第一次收到自己发的 0x55 时你就通了。之后再加接收功能,把收到的字节用 LED 显示出来。整个过程两到三周,比你再看一遍语法书效率高十倍。
另外提个醒:别陷入「把代码背下来」的误区。你看到别人的代码觉得模块看不懂,是因为还没有建立「模块就是黑盒子,输入输出对了就行」的思维。做串口项目时你会发现,自己写的发送模块对上层来说也只是一个有使能信号和数据输入的盒子,这才是硬件设计的常态。做完这个再回头看语法书,你会觉得那些阻塞非阻塞赋值、task 和 function 的区别突然都活起来了。你现在最缺的不是知识量,是第一次完整闭环的成就感——那个东西能推着你走完后面所有项目。你打算用哪块开发板做串口实验?如果是正点原子或野火的,注意看下原理图里 USB 转串口芯片是哪个型号,调试时更容易排查问题。

别啃语法了,直接开串口项目。语法书是字典,不是教材,你查了三个月字典,该不会造句还是不会。给你个笨办法:找一份串口发送的参考代码,先别管懂不懂,用 Quartus 或 Vivado 建工程跑通,然后改波特率、改发送内容,看现象变化。跑通第一个「不是我写的但我改了能动的」代码,比你自己憋一个月强得多。改的过程中遇到不懂的语法再去查书,查完回来继续改,两三次循环你就记住那些关键语法了。你这阶段卡住,说白了是缺一个「不得不写状态机」的场合,串口收发正好给你这个场合。加油,两周内跑通串口,你会回来感谢自己的。

三个月流水灯挺正常的,我当年四个月还在点亮 LED 呢。直接做串口吧,别问行不行,问就是做。代码看不懂就抄,抄完仿真,仿真完上板,跑通了再回头看语法,你会发现之前纠结的那些概念突然都顺了。快点动手,暑假前还能做完两个小项目,秋招简历上也能写点东西。

我给你说个更扎心的现实吧。你现在不是语法不够,是缺一个「不得不把代码跑在板子上、还得让它出错给你看」的场合。流水灯和按键消抖太仁慈了,错了顶多灯不亮,你改两行就过去了。串口不一样,你发一个字节出去,用串口助手收不到或者收成一堆乱码,你就得去查波特率有没有算错、时钟分频是不是整除、状态机是不是漏了某个跳转条件——这些全是语法书里不会教你的东西。我当年比你还惨,三个月的时候连状态机是什么都说不清,后来硬着头皮抄了一份串口发送的代码,抄完上板发现发出来的全是乱码,那一下午我就在查分频系数,最后发现是计数器少减了一个1。从那以后我再也没忘过那个公式。你问我是继续啃语法还是直接做项目,我的答案是:别把这两个选项对立起来。你语法书都看两遍了,该有的概念你脑子里都有,只是没跟实际电路挂上钩。直接开串口项目吧,给自己定个两周的期限,别贪多,先只做发送,接收都先放下。跑通发送之后你会发现,原来那些模块看不懂的代码,拆开看也就是几个 always 块加几个计数器的事。顺便问一句,你用的开发板主时钟是多少兆的?这个直接决定你分频系数怎么算,算错了可别怪我没提醒你。
发表回答
登录后可在本页底部提交回答