1. 数字电路基础回顾:二进制与逻辑门、组合逻辑与时序逻辑、触发器与寄存器、同步与异步概念
各位同学,欢迎来到《Verilog入门到串口收发实战》的第一章。
说实话,每次带新人,我都要先问一句:「你懂二进制吗?」
别笑。我见过不少写Verilog代码很溜的人,一遇到跨时钟域就翻车,根本原因就是数字电路基础不牢。所以这一章,咱们把地基打扎实。
1.1 二进制:数字电路的「母语」
数字电路只认两种状态:0和1。说白了,就是电压高一点(比如3.3V)算1,电压低一点(比如0V)算0。这就是二进制。
你想想看,我们平时用的十进制,逢十进一。二进制呢?逢二进一。就这么简单。
二进制与十进制的对应关系(4位为例):
| 二进制 | 十进制 | 说明 |
|---|---|---|
| 0000 | 0 | 全0 |
| 0001 | 1 | 最低位为1 |
| 0010 | 2 | 第二位为1 |
| 0100 | 4 | 第三位为1 |
| 1000 | 8 | 最高位为1 |
| 1111 | 15 | 全1,最大值 |
我在项目中遇到过一位同事,写状态机时直接用十进制数赋值,结果综合出来的电路面积大了三倍。嗯,这就是不懂二进制的代价。
1.2 逻辑门:搭建数字世界的「积木」
逻辑门是数字电路最基本的元件。与门、或门、非门,就这三样,能搭出任何复杂的数字系统。
- 与门(AND):两个输入都是1,输出才是1。我常跟新人说:「与门很严格,一个都不能少。」
- 或门(OR):只要有一个输入是1,输出就是1。说白了就是「有1则1」。
- 非门(NOT):把输入取反。0变1,1变0。最简单的门,但最常用。
还有几个组合门:与非门(NAND)、或非门(NOR)、异或门(XOR)。这些在Verilog里直接用运算符表示,比如 & 是与,| 是或,~ 是非,^ 是异或。
我的小技巧:写Verilog时,尽量用括号明确运算优先级。别问我为什么——我曾经因为少写一个括号,仿真结果和实际电路对不上,查了整整两天。
1.3 组合逻辑与时序逻辑:两种「思维模式」
这是数字电路里最重要的两个概念。我换个说法你就能记住:
- 组合逻辑:输出只取决于当前输入。就像开关控制灯泡,一按就亮,一松就灭。没有记忆能力。
- 时序逻辑:输出不仅取决于当前输入,还取决于之前的状态。说白了就是「有记忆」的电路。
举个例子:一个加法器是组合逻辑,输入两个数,马上输出和。但一个计数器就是时序逻辑,它需要记住「我数到几了」。
组合逻辑 vs 时序逻辑(核心区别):
| 特性 | 组合逻辑 | 时序逻辑 |
|---|---|---|
| 记忆能力 | 无 | 有 |
| 输出依赖 | 仅当前输入 | 当前输入 + 历史状态 |
| 时钟 | 不需要 | 需要时钟驱动 |
| 典型电路 | 加法器、多路选择器 | 计数器、状态机 |
我个人习惯,在设计初期先分清哪些是组合逻辑、哪些是时序逻辑。这样写代码时思路特别清晰。
1.4 触发器与寄存器:数字电路的「记忆细胞」
触发器(Flip-Flop)是时序逻辑的基本单元。最常见的叫D触发器,它有一个数据输入D、一个时钟CLK、一个输出Q。
工作原理很简单:每个时钟上升沿(或下降沿),D触发器把D端的值「拍」到Q端。其他时间,Q保持不变。
寄存器呢?说白了就是多个D触发器并排放在一起。比如一个8位寄存器,就是8个D触发器,同时受同一个时钟控制。
避坑指南:我曾经犯过一个低级错误——在组合逻辑里用寄存器。结果综合出来的电路里多了一堆不必要的触发器,功耗和面积都超标。记住:只有需要「记住」数据的地方才用寄存器。
在Verilog里,寄存器用 reg 类型声明,但要注意:reg 不一定综合成寄存器,它也可能只是组合逻辑中的一个变量。这个坑我后面会细讲。
1.5 同步与异步:时钟的「纪律」
同步设计,就是所有寄存器都受同一个时钟控制。就像军队里所有人听同一个口令,步调一致。
异步设计呢?不同模块用不同的时钟,或者同一个模块里有些信号不受时钟控制。这就像两个乐队各打各的鼓点,容易乱套。
在实际项目中,90%以上的设计都是同步设计。为什么?因为同步设计容易分析、容易验证、不容易出bug。
我的经验:除非万不得已(比如必须处理两个不同频率的接口),否则一律用同步设计。异步设计里的亚稳态问题,处理起来真的很头疼。我见过一个项目,因为异步复位没处理好,芯片在某些温度下会随机复位——查了三个月才找到原因。
同步设计还有一个好处:时序约束容易写。你只需要告诉工具「时钟频率是多少」,工具就能自动检查所有路径是否满足时序要求。
本章知识体系
下面这张图,是我自己总结的数字电路基础知识框架。你把它记在脑子里,后面学Verilog会轻松很多。
这张图把本章的核心内容串起来了。你从「二进制」出发,理解「逻辑门」如何搭建组合逻辑,再理解「组合逻辑 vs 时序逻辑」的区别,最后掌握「触发器与寄存器」以及「同步与异步」的概念。这就是数字电路的全部基础。
好了,第一章就到这里。记住:基础不牢,地动山摇。后面我们写Verilog代码时,这些概念会反复出现。到时候你回头看这一章,会发现——原来就这么点东西。