Verilog 零基础入门:最核心的基本语法大全(新手必藏)

📅 2026/7/4 3:17:01 ✍️ 编辑团队 👁️ 阅读次数
Verilog 零基础入门:最核心的基本语法大全(新手必藏)
很多刚入门FPGA/IC设计的同学最开始的困惑不是“写复杂代码”而是分不清Verilog的语法规则、不会区分硬件与软件编程逻辑。和C语言纯软件顺序执行不同Verilog是硬件描述语言核心是描述电路结构、并行逻辑这也是新手最容易踩坑的地方。今天这篇文章我把Verilog最核心、最常用、面试必问的基础语法一次性讲清楚零基础也能看懂适合收藏入门、复习巩固一、Verilog 核心认知和C语言最大的区别1.C语言串行执行一行跑完再跑下一行用于软件运算2.Verilog并行执行所有模块、逻辑同时工作用于搭建硬件电路3. Verilog 所有代码最终都会被综合成真实硬件电路不是单纯的程序运行。新手口诀Verilog写的不是程序是电路二、最基础模块结构所有代码的框架模块module是Verilog的最小单元所有代码都必须包在模块里相当于电路的“外壳”。1. 标准模块格式verilogmodule 模块名(输入输出端口);// 内部信号定义// 逻辑代码endmodule2. 最简示例二输入与门verilogmodule and_gate(input a,input b,output y);assign y a b;endmodule3. 端口类型详解•input输入端口接收外部信号•output输出端口向外输出信号•inout双向端口既可输入也可输出常用在I2C、SPI等总线三、数据类型新手重中之重Verilog 核心只有两种数据类型对应两种硬件电路绝对不能混用。1. wire 线型组合逻辑专用•代表硬件导线、连线•数值随时变化无记忆功能•必须用assign持续赋值•常用于组合逻辑电路与或非门、加法器、多路选择器2. reg 寄存器型时序逻辑专用•代表硬件触发器DFF•有记忆功能时钟触发才更新数值•只能在always块内部赋值•常用于时序逻辑电路计数器、状态机、寄存器缓存核心规则assign 赋值 → 用 wirealways 块赋值 → 用 reg四、两大核心逻辑块组合逻辑 时序逻辑Verilog 99%的代码都是由这两种逻辑组成吃透就掌握大半语法。1. 组合逻辑无时钟、无记忆特点输入变输出立刻变不需要时钟无延迟。两种写法① assign 连续赋值简单逻辑首选verilogwire y;assign y a | b; // 或门逻辑② always (*) 通用组合逻辑verilogreg y;always (*) beginy a b;end注意组合逻辑必须用 (*)不能写时钟否则会生成锁存器BUG源头。2. 时序逻辑有时钟、有记忆特点时钟边沿触发只有时钟到来才更新数据保持数据稳定。最常用上升沿触发verilogreg cnt;always (posedge clk) begin// 时钟上升沿执行逻辑cnt cnt 1b1;end边沿关键词•posedge上升沿•negedge下降沿五、赋值语句阻塞 vs 非阻塞最高频考点这是新手最容易出错、面试必问的语法点1. 非阻塞赋值 时序逻辑专用•用于 always 时钟块时序逻辑•并行赋值不会阻塞后续代码•不会产生竞争冒险电路稳定标准用法verilogalways (posedge clk) begina b;c d;end2. 阻塞赋值 组合逻辑专用•用于 always (*) 组合逻辑块•顺序执行写完一句再写下一句•时序逻辑乱用会导致时序错乱、仿真报错标准用法verilogalways (*) begina b;c d;end终极口诀时序用 组合用 永不混用杜绝BUG六、常用运算符日常编码全覆盖1. 逻辑运算判断条件• 逻辑与•|| 逻辑或•! 逻辑非2. 位运算硬件电路核心• 按位与•| 按位或•^ 按位异或•~ 按位取反3. 移位运算高频使用• 左移等价乘2• 右移等价除24. 三目运算符精简组合逻辑verilogassign y en ? a : b;释义en为真取a否则取b替代简单if-else代码更简洁。七、流程语句if / else case1. if-else 语句条件判断多用于简单分支逻辑支持多级嵌套verilogalways (*) beginif(en) beginy 1b1;end else beginy 1b0;endend避坑组合逻辑if必须写全else否则生成锁存器2. case 语句多分支首选状态机专用多条件判断比if-else层级清晰不易出错verilogalways (*) begincase(op)2b00: y a b;2b01: y a - b;2b10: y a b;default: y 1b0; // 必须加default避免锁存器endcaseend八、位宽定义Verilog必备规范Verilog所有信号必须指定位宽默认32位极易出错标准格式verilog[高位:低位] 信号名示例verilogwire [3:0] data; // 4位数据reg [7:0] cnt; // 8位计数器1b0; // 1位二进制04hF; // 4位十六进制F九、新手必须遵守的编码规范1.组合逻辑用assign或always(*)、阻塞赋值、分支写全不缺项2.时序逻辑用always(posedge clk)、非阻塞赋值3.wire只用于连线reg只用于时序寄存器4.所有多分支逻辑必须加default/else杜绝锁存器5.所有常量明确位宽不使用默认位宽十、总结Verilog入门核心不在于记复杂语法而在于建立硬件思维分清wire/reg、区分阻塞/非阻塞、拆分组合/时序逻辑掌握这三点你就搞定了80%的基础语法。后续的计数器、移位寄存器、状态机、接口逻辑都是以上基础语法的组合复用。需要完整Verilog入门案例、新手练习代码包可以持续关注后续更新