图书前言

前言

也许你还没有意识到,人类其实一直生活在“数字”的世界里,老祖宗发明了“度、量、衡”,这本质上就是模数转换器(ADC),把世间能够感知到的一切“物”进行了量化,比如身高1米78厘米的小张同学到超市买了3斤6两苹果,中午11点30分要赶去北京的高铁。虽然我们面对的自然界的对象是“模拟”(Analog)的,是连续的量,但我们大脑里处理的信息,相互之间交流的信息,都已经转变成了量化的、不连续的数字量(Digital)。

对连续的量进行量化,大大方便了我们对信息的处理,这包括逻辑判断、数值计算等。我们常常挂在嘴边的高/矮、上/下、对/错、开/关等,其实就是非0即1的二进制,其实高多少、对几分、开多大必然存在着中间的模糊地带,但我们生活中仍然对很多事情做二值化的处理。

当然,仅有二进制是不够的。我们将一天分为12时辰或24小时,1年分为365天,1小时分为60分钟,古代的一斤分为16两,各种制式适用于不同事物的量度,而进化下来,我们生活中最常用的就是十进制方式。不同的进制方式(编码方式)之间可以进行换算。这其实就是“数字逻辑”的基础。抛开我们的信息载体“电路”,数字逻辑就是我们每个人大脑中每天盘算的事情,是我们生活的日常。

翻看一下我们正在学的“数字电路”课程,可以说整个课程中,95%的内容讲的是“数字逻辑”,这些完全可以脱离电路,仅有5%的内容讲述的是如何用“合适的电信号”来表征人类大脑认知的数字信息,并有效地处理这些数字信息。如果把数字世界看成对变化着的模拟世界进行“理想化”抽象,那么我们同时要研究的就是如何尽可能理想化(稳定、真实)地表征信息,如何处理那些非理想化的因素,表现在电路上就是使用CMOS器件、高/低电平的判断、传输时间的影响、时序电路中的延迟、组合逻辑中的竞争冒险等,这些都是在实际的电路设计中要考虑的因素。

数字逻辑,正如我们的大脑日常所做的,对应书中的关系如下: 

 各种逻辑门(Gate)——因果关系,由一个或多个输入产生的不同输出结果,为什么逻辑用“门”来表达?“门”像是因果关系的纽带,通过“门”我们把所有“因”组合到一起从而有了确定的“果”。

 组合逻辑——多个因素在一起产生的多种可能性,以及基于这些可能性做出的选择,比如学号、快递地址、从清华南门到北京火车站的道路。

 时序逻辑——我们的世界中一个重要的维度就是“时间轴”,日月星辰已经给我们设定了时钟,于是我们早上6点起床、8点半赶到公司、下午4:20和同事一起乘坐去往上海的高铁,很多行为都是在某个设定的时间点完成的,无论是个人还是集体。在时间维度运作下的这个世界不正是一个时序逻辑系统吗?

 状态机——我们个体以及接触到的任何事物时时刻刻都处在某个状态,又会由某种“因”的触发而改变状态,从而形成了运动着的世界,构成了我们的日常。描述这种关系的方式就是状态机。

当然,作为社会化的人,我们从小受到教育、接受社会的分工,从小到大的生活都受到“指令”的控制,比如父母培养你的习惯,你所处的社会环境设定的规章、制度、法律法规,在学校老师给你安排的课程、布置的作业,企业中上级领导分配你的工作,我们每个人都是被“编程”了的单片机、微处理器系统,日复一日地按照设定的程序来生活着。程序被写在了我们的存储器里面,执行程序的过程中要处理好各种外界的输入(通过眼、耳、鼻等传感器),做各种逻辑判断和计算,进而采取下一步的行动。

人本身就是一个“数字系统”,我们要设计的用电信号来表征的“数字系统”也就是要将我们日常的思维方式用电信号的方式映射出来。

所谓的“人工智能”就是将人类的思想、思维方式映射到一个个用电信号驱动的设备中,让这些设备通过电信号能够像人类一样去推理、计算、决策等。

一切源于我们自身。而“数字逻辑”就是构成“数字系统”的基础。

最后,我们来看一张关于计算机系统构成的知识结构图。

计算机系统构成的知识结构图

图中呈现出计算机系统从底层到顶层的层次结构以及它们之间的关系,通过理清这些对应关系,你将能够明确“数字电路”在整个系统中的位置,以及学习数字电路的意义和方法。

我们使用的办公软件、浏览器、绘图工具等都属于应用层软件。它们是建立在操作系统之上的。操作系统的运行需要固件层的支持,如各种硬件设备驱动,而所有的运算存储都需要运行在一定的硬件设备上,如CPU、内存、显卡,这些硬件本身则是由一个个数字电路模块组成的,构成这些数字电路的基础单元是门电路,在物理层级之上,各种数字门是通过半导体器件来实现的,构成门电路的基础是晶体管。

本书涉及的主要内容是在逻辑层和电路层,即通过数字电路的设计方法设计逻辑电路并在FPGA上实现并验证。

数字逻辑的知识在任何一本数字电路教材中都给出了详细的介绍,这里我们不做赘述,仅在第1章中对数字电路的基础知识做了回顾,方便读者在后续章节中的电路设计时查阅。

设计数字电路的方法则是利用现在流行的硬件描述语言(HDL),利用HDL可以在硬件电路建立之前模拟和验证数字系统的功能,也利于电路的自动化设计。第2章将介绍硬件描述语言及数字电路的描述方法。

FPGA是一种数字电路芯片,在芯片设计中通过FPGA验证所设计的电路功能已经是常规流程,FPGA也大量应用在接口转换、时序控制、算法处理和硬件加速等领域,尤其是现在人工智能技术的大爆发,催生了大量FPGA算法处理的应用。关于FPGA的介绍我们会在第3章阐述。

在实际的硬件电路设计中,可以使用分立器件设计出所需的应用电路,比如使用经典的74系列逻辑集成电路来搭建各种复杂的数字计算系统,而随着集成电路工艺的发展,数字电路的集成度也越来越高,现在的印制电路板上已经很少能见到大量排布的74系列逻辑芯片了,因为CMOS工艺的发展使得更多的逻辑电路可以被集成到一起,做成专用的ASIC。此外,在缩小电路板面积、提高电路集成度方面,FPGA也功不可没。第4~6章,以具体的实例来阐述如何设计常见的组合逻辑电路和时序逻辑电路并在FPGA上实现。

数字电路世界与现实世界打交道的桥梁是模数转换器和数模转换器,在第7章,将介绍FPGA有关模数转换和数模转换的应用。

最后,第8章阐述了比较经典的综合项目,每一个项目会用到组合逻辑或时序逻辑中的多个知识点,是数字电路知识的综合应用。

本书由校企合作编写,在本书完成的过程中得到了苏州思得普信息科技有限公司和加拿大EIM Technology公司的大力支持,书中实验所使用的硬件模块均由两家公司赞助,书中所涉及的FPGA实验代码均可以在小脚丫FPGA开发云平台上验证,用户无须安装庞大的EDA软件即可实现代码的编辑和编译。此外,山东职业学院铁道供电专业和乌拉尔国立交通大学电气工程系的老师协助完成了实验案例的设计,在教学过程中对书中的部分实验进行了验证,并提出了宝贵的意见和建议,在此一并表示感谢。

鉴于作者水平有限,书中难免有疏漏和错误之处,敬请读者批评指正。

作者

2025年5月