搞过单片机或者嵌入式开发的朋友,可能都听过Verilog这个词。它不是用来搭网站的语言,也不是写App的工具,而是专门描述硬件行为的硬件描述语言(HDL)。很多人一开始听到“设计电路”就头大,觉得那是芯片工程师的事,离自己很远。但其实,从最基础的逻辑门开始,你也能在电脑上“搭”出自己的数字电路。
从与门、或门开始:就像搭积木
想象一下你在拼乐高。每个小块代表一个功能,比如“只有两个按钮都按下灯才亮”,这就是一个与门(AND gate)的行为。在Verilog里,这种行为可以用几行代码定义出来。
module and_gate (a, b, y);
input a, b;
output y;
assign y = a && b;
endmodule
这段代码就像给一块积木贴标签:有两个输入口 a 和 b,一个输出口 y,功能是“a 和 b 都为真时,y 才为真”。虽然简单,但这已经是能被综合器识别并烧录到FPGA里的合法设计了。
试试非门和异或门
除了与门,常见的还有非门(NOT)、或门(OR)、异或门(XOR)。比如异或门的特点是“两个输入不一样,输出才为1”,常用于判断差异。
module xor_gate (a, b, y);
input a, b;
output y;
assign y = a ^ b;
endmodule
写完之后可以写个简单的测试模块(testbench)来验证输出对不对。这就像在面包板上接好线后拿万用表测电压,确保每一步都没出错。
组合起来:做个半加器
单个逻辑门用途有限,但把它们连起来就能实现更复杂的功能。比如把一个异或门和一个与门组合,就能做出一个半加器——能算0+0、0+1、1+0、1+1的最简加法器。
module half_adder (a, b, sum, carry);
input a, b;
output sum, carry;
assign sum = a ^ b; // 异或得结果
assign carry = a && b; // 与操作得进位
endmodule
别小看这个结构,它是CPU内部加法单元的基础模块之一。你现在写的这几行代码,原理上和电脑里每天运行千万次的计算是一样的。
为什么开发者该了解这些?
也许你会问,我又不造芯片,学这个干嘛?其实现在很多项目都在往“软硬结合”方向走。比如做物联网设备时,如果某些数据处理能在FPGA上用硬件逻辑完成,速度比软件循环快得多,还省功耗。而Verilog就是打开这扇门的钥匙。
哪怕只是理解基本的逻辑门设计,也能让你在看一些嵌入式文档或通信协议时更有底。比如I2C总线里的电平变化、SPI里的时序控制,背后都是逻辑门在协作。
动手才是正道
最好的学习方式就是直接写代码、仿真、看波形。网上有不少免费的Verilog仿真工具,像Icarus Verilog搭配GTKWave,装个虚拟机就能跑起来。新建一个.v文件,敲几行代码,运行一下,看到信号按时变化,那种“我让硬件听话了”的感觉,特别真实。
不需要一开始就懂时序分析、状态机、流水线这些高阶概念。从一个最简单的与门出发,一步步连成更大的模块,这才是扎实的路子。