数字逻辑设计

数字逻辑设计

第一课

人工智能复兴的原因是因为硬件基础的提升,从硬件上达成了算力的巨大增幅,谷歌在设计Alphago的时候,研发出了TPU加速器。现在硬件进入到了新的黄金时代,计算机从业人员需要同时掌握软件和硬件技能,在硬件不够用的时候,把算法做成集成式硬件。

为什么要学习逻辑设计?数字逻辑设计是计算机科学的核心课程,课程内容涉及到数据流并行计算,帮助理解计算 Computation

先修课程:ICS,高中的物理⚛️、电路💡
参考书《数字设计和计算机体系结构》
平时成绩:书面作业5%,点名5%
期中:20%,4月23日
FPGA设计大作业:20%,RISC-V单周期处理器
期末考试:50%,6月18日

课程大纲:

  1. 概述
  2. 基础理论知识
    • 数字系统和编码
    • 布尔代数基础
    • 逻辑门和数字电路基础
  3. 数字电路分析与设计

    • 组合电路分析与设计
    • 同步时序电路分析与设计
  4. 可编程逻辑器件和设计软件实践

    • 原理图、SystemVerilog设计、RISC-V单周期处理器
    • Xilinx BASYS3开发板

概述

人如何计算?

1943年,神经生理学家 Warren McCulloch和Walter Pitts提出了:把周围的神经元连接在一起,当其他神经元发送信号给门,门就打开了,然后信号按照比重发送到其他的神经元。 根据《思考快与慢》,人有两个思考系统:

计算机领域有两派,符号派 (逻辑实证主义) 和 模拟派 (连接主义)。符号派着重数理逻辑,用数学公理研究人的思维过程和规律,e.g. 布尔代数、布尔逻辑、图灵机、存储程序模型,是计算机科学过去多年的主流,和SYSTEM 2的理性思考一样。而模拟派则通过模拟神经元网络,利用机器学习,通过不停训练来达到效果,如同SYSTEM 1的直接系统。

复杂系统如何设计

因为计算机是十分复杂的设计,抽象化是很重要的,只有隐藏掉不重要的细节,例如底层的电路设计,进行多层面的抽象,才能设计出微处理器。设计一个计算机太复杂了,而人的时间是有限的,在做操作系统就不用管处理器的实现,而在做指令系统体系结构的时候,就别管上层的内容,想把所有层级的内容兼顾。

三“化”原则:

  • 层次化 Hierarchy:将系统划分成若干模块,然后继续划分每个模块,直到每个模块可以很容易理解和实现。
  • 模块化 Modularity:所有模块有定义好的功能和接口(输入、输出),以便很容易的连接在一起,不会产生意想不到的副作用。
  • 规整化 Regularity:在模块之间寻求一致性,以便通过模块的空间上或时间上重复使用,降低模块设计数量

基础理论知识

数字系统

模拟和数字 Analog vs Digital

模拟量在时间上和量上连续。缺点是很难度量,容易受噪声的干扰,难以保存。优点是用精确的值表示事物。 数字量时间上和量上离散(非连续),优点是更多的灵活性,更快、更精确、更复杂的计算,容易实现存储设备,误差监测和修正,容易最小化,避免噪声累积干扰。数字量使用二进制编码。

抽象和实现 0|1

计算的基本单元:

  • 表示:0|1
  • 赋值:x = y
  • 数据操作:x + y - 5
  • 控制
    • 顺序结构:A; B; C
    • 条件结构:if x==1 then y
    • 循环结构:for ( i = 1 ; i <= 10 , i++)
    • 过程结构:A; proc(...); B;

信息通过二进制表述,n位r进制数共有N=r的n次方个不同的数。物理上,二进制的材料最常见。应用上有数字编码、字符编码。除了计算机领域,还有盲文 Braille、电报、航海信号灯🚥。 在设计编码时,应该让二进制的操作尽量贴合物理⚛️含义,例如颜色编码 A+1=B。 布尔 George Boole,希望将人判断逻辑的方法以数学系统的方式体现,将逻辑表述映射到符号,采用数学的方法处理逻辑推理。

香农 Shannon,在硕士论文 《A Symbolic Analysis of Relay and Switching Circuits(1938)》 讲述了如何将继电器开关实现布尔代数,打通了数学——实现的道路。 真值表:将一个开关函数 f 对于其变量每种可能取值的结果用表的形式表示,用数学代替人的逻辑判断。

逻辑设计

电路是相互连接的开关集合。而我们在这课更关心的是逻辑电路。逻辑电路是相互连接的逻辑门和存储元件的集合。

  • 逻辑门🚪:与门、或门、非门等
  • 存储元件(时序元件):锁存器、触发器、存储器等
  • 设计约束:速度、成本、功耗、尺寸等

现代逻辑设计用高级语言,e.g. Verilog语言,去设计逻辑电路,用编译器和电子设计自动化去实现。

  • 系统复杂、开发周期、成本控制
  • 逻辑编译器、自动综合软件
  • 电子设计自动化
  • 高层次综合
  • 最新研究:敏捷硬件开发

AND门和OR门通过分别用串联和并联的开关实现,与非门 (反相器)的实现方法采用CMOS逻辑和TTL逻辑,也可以通过NMOS逻辑、PMOS逻辑等来实现。

电路功耗 = 动态功耗 + 静态功耗

组合电路和时序电路

组合电路里(类比:数据流、系统1),输出值是输入值的逻辑函数,输入值变化后一段时间后出现新的输出值,例如:处理器中的加法器、组合乘法器。

例子:

  1. 像我们算乘法,我们通过九九表以及循环利用加法,得出答案。
  2. 日历子系统,在显示器上计算并显示每个月的天数,可以用组合电路去实现,因为12<=2的四次方,所以有四个输出线。

时序电路里(类比:控制流、系统2) ,输出值是输入值和电路状态的函数,输入变化后新的输出出现在下一个时钟事件或者其他事件发生,电路有循环反馈,存在存储元件,时序电路由组合电路和存储元件组成。数据通路 Datapath,可以类比成SYSTEM 1 直觉系统,以相同的方式处理输入数据。例如比较器、多选器。控制器 Controller,可以类比成SYSTEM 2 推理系统,负责控制电路的工作序列。

以上的系统是不可编程的,所以我们在采用相同硬件下,通过可变有序状态机,做出可编程的数字系统

冯诺依曼计算机

用指令来操作电脑,类似有限状态机,不过可以重新编程。

  • 指令:操作码、操作数地址
  • 程序:指令序列(类比:有限状态机)
  • 存储程序概念:数据和程序以相同的二进制的形式存储在可通过地址访问的存储器中。

程序执行过程:

  1. 程序计数器(Program Counter, PC)
  2. 取指令、指令译码、读操作数、执行操作、写操作数
  3. 计算下一个PC(类比:有限状态机的下一个状态)

计算的历史

计数Count => 计算Calculate -> 计算器Calculator -> 计算机Computer
数字独立地在各个古代文明中出现,大多以十进制为基础,因为人熟知的数量。
计算的出现源于计算的需求,最早的计算机是算盘🧮,按位记数。后来,Pascal在17世纪发明了加法器;Babbage 巴贝奇发明了世界第一台计算机;然后穿孔卡片的出现,标志着概念性的程序、指令存储的出现......太多字了,所以用了js-sequence总结出一张图出来:

diagram.svg

P.S. 感谢Typlog的作者加入了SVG支持。

Some rights reserved
Except where otherwise noted, content on this page is licensed under a Creative Commons Attribution-ShareAlike 4.0 International license