30.数电设计步骤与FPGA设计的区别
数电的真值表→逻辑函数→化简→电路图,是FPGA实现的「逻辑设计层」,LUT是FPGA底层「物理实现层」的载体。
数电设计流程和FPGA的实际工作方式对比:
一、先回顾数电的经典设计流程(以2输入与非门为例)
- 设计真值表:定义输入(A/B)和输出(Y)的逻辑关系
A | B | Y |
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
- 写逻辑函数:
- 化简:这个函数已经最简,无需化简
- 画电路图:用与门+非门拼接出与非门电路
二、FPGA实现同一功能的流程(LUT的角色)
- 保留核心步骤:真值表/逻辑函数设计
你依然需要先明确「输入输出的逻辑关系」(比如状态机的跳转条件、CS/RD的控制逻辑),这是数电设计的核心,FPGA无法替你思考逻辑。 - FPGA自动完成「化简+电路映射到LUT」
你不需要手动化简逻辑函数、手动画电路图——FPGA的综合工具(比如Vivado、Quartus)会帮你做这两件事:- 工具会把你写的Verilog代码(本质是逻辑函数)自动化简(比如消去冗余项、合并逻辑);
- 工具会把化简后的逻辑函数直接「烧写」到LUT的存储单元中(把真值表对应的输出值写入LUT的RAM)。
- LUT最终承载逻辑(替代了「数字电路图」的物理实现)
数电里的「与门/或门/非门拼接电路」,在FPGA里变成了「LUT的查表逻辑」:- FPGA实现:把A/B作为LUT的输入地址,LUT存储单元中写入真值表的输出值(00→1、01→1、10→1、11→0),输入A/B直接查表得到Y。
数电电路:

三、关键对比:数电步骤 vs FPGA LUT
数电设计步骤 | FPGA中的对应操作 | LUT的角色 |
设计真值表 | 你写Verilog定义逻辑(if/else/assign) | 无(这是你的设计工作) |
写逻辑函数 | Verilog代码本质就是逻辑函数的硬件描述 | 无(工具基于此解析逻辑) |
逻辑函数化简 | 综合工具自动化简(无需你手动卡诺图化简) | 无(工具输出最简逻辑给LUT) |
画数字电路图 | 综合工具自动将最简逻辑映射到LUT | 承载逻辑(替代门电路拼接) |
四、举例(AD7616的CS控制逻辑)
数电设计思路:
- 真值表(简化版):
状态 | CS |
IDLE | 1 |
WAIT_CONVERT | 1 |
READ_DATA | 0 |
其他 | 1 |
- 逻辑函数:
- 化简:已最简
- 电路图:状态判断电路 + 非门
FPGA实现思路:
- 写Verilog:
ad7616_cs <= (current_state == READ_DATA) ? 1'b0 : 1'b1;(本质是定义真值表/逻辑函数); - 综合工具自动识别这个逻辑,化简后(无冗余);
- 工具将这个逻辑映射到一个LUT:把
current_state的编码作为LUT输入,LUT存储单元中写入对应CS的输出值; - 最终FPGA运行时,LUT通过查表直接输出CS的高低电平,替代了数电里的「状态判断电路+非门」。
五、总结
- 核心步骤不能省:真值表/逻辑函数的设计是逻辑功能的核心,必须由你完成(FPGA/LUT无法替你定义「要实现什么逻辑」);
- 繁琐步骤被替代:手动化简逻辑、手动画门电路的步骤,由FPGA综合工具自动完成,LUT则是这些逻辑的「物理载体」;
- 本质区别:数电是「用分立门电路拼接逻辑」,FPGA是「用LUT查表实现逻辑」,但逻辑设计的核心(真值表/逻辑函数)完全一致。
对你的实际开发来说,你只需要专注于用Verilog正确描述逻辑(即定义真值表/逻辑函数),剩下的化简和映射到LUT的工作,交给FPGA工具即可——这也是FPGA比传统数字电路设计高效的核心原因。