## 数字电路教程 ### 1 我们身处数字逻辑的世界 - [[why2learndigitalcircuits|我们身处的“数字逻辑”世界]] - 数字逻辑世界的信息表征 - 数制及编码 * 学习要点: * 了解数制、[[code_system|码制]]的基本概念; * 掌握常用数制(二进制、八进制、十进制、十六进制)及其转换方法; * 了解常用的二进制码(自然二进制码、循环码、奇偶校验码)及BCD码(8421BCD码、5421BCD码、余3BCD码) * 内容: - [[how2digital|认知世界从识数开始]] - [[https://www.electronicshub.org/digital-number-system/|数字编码系统]] - [[https://www.electronicshub.org/binary-codes/|二进制编码]] - [[https://www.electronicshub.org/signed-binary-numbers/|有符号的二进制数]] - [[https://www.electronicshub.org/binary-to-decimal-conversion/|二进制到十进制的转换]] - [[https://www.electronicshub.org/hexa-decimal-number-system/|16进制]] - [[https://www.electronicshub.org/octal-number-system/|8进制系统]] - [[https://www.electronicshub.org/error-correction-and-detection-codes/|纠错和检测代码]] ### 2 逻辑代数及基本数字电路单元 学习要点:: * 掌握逻辑代数的基本概念、基本公司和基本规则 * 掌握逻辑函数的描述方式(真值表、表达式、电路图、卡诺图)及其相互转换方法 * 了解逻辑函数最简与或式的公式化简法,掌握逻辑函数(4变量及以下)最简与或式的卡诺图化简法 * 掌握MOS场效应管的开关特性和有关参数 * 掌握CMOS反相器的功能和主要外部电气特性 * 了解CMOS与非门、或非门、OD门、三态门的工作原理 内容: - [[https://www.electronicshub.org/introduction-to-logic-gates/|数字门介绍]] - [[not_gate/|逻辑非门]] - [[or_gate/|逻辑或门]] - [[and_gate/|逻辑与门]] - [[nand_gate/|与非门]] - [[nor_gate/|或非门]] - [[xor_gate/|异或门]] - [[https://www.electronicshub.org/exclusive-nor-gate/|异非或门]] - 逻辑门和数字抽象 - 布尔代数 - 逻辑关系描述 - 逻辑函数的化简与变换 - [[https://www.electronicshub.org/boolean-algebra/|布尔代数基础]] - [[https://www.electronicshub.org/boolean-algebra-laws-and-theorems/|布尔代数的定律和理论]] - [[https://www.electronicshub.org/boolean-logic-sop-form-pos-form/|布尔函数或开关函数]] - [[https://www.electronicshub.org/implementation-of-boolean-functions-using-logic-gates/|使用逻辑门实现布尔函数]] - [[https://www.electronicshub.org/k-map-karnaugh-map/|卡诺图]] ### 3. HDL和FPGA - [[learn2usefpga|如何使用FPGA]] - [[led|与LED相关的项目]],在后面的学习中通过不同的案例来实现不同的LED功能 * 点亮LED - LED的控制及开关、按键的使用 * [[leds_on_stepboard|小脚丫FPGA板上的led及控制资源]] * [[[one_led_on|点亮一颗LED]] * [[multi_leds_on|点亮多颗LED]] * [[leds_on_sw|用开关、按键控制多颗LED]] * [[rgb_led_on_sw|用开关控制三色灯]] * [[led_comblogic|用LED体会组合逻辑]] - 通过不同按键的输入控制不同LED的输出来体会组合逻辑的基本构成 * [[7-seg_disp_verilog|7段数码管显示控制]] - 7段数码管的显示控制原理及支持的组合逻辑功能 * [[hb_led|心跳灯]] - 时序逻辑、计数器 * [[waterfall_led|流水灯]] - 时序逻辑、计数器 * [[breath_led|呼吸灯]] - PWM * [[rgb_led|三色灯]] - PWM * [[traffic_led_verilog|交通灯]] - 状态机 * [[matrix_led|LED阵列]] - FPGA来控制8*8灯板显示字符和图案 ### 4 组合逻辑及电路实现 知识要点: * 掌握SSI组合电路的分析方法及双轨输入条件下的设计方法 * 了解MSI组合电路编码器、译码器、数据选择器、数据比较器、加法器的功能 * 账务用MSI组合电路数据选择器、数据比较器、加法器实现组合逻辑设计的方法 * 了解组合电路中的竞争冒险现象 * 掌握增加多余项消除逻辑冒险的方法 * 了解取样法消除冒险的方法 #### 组合逻辑介绍 组合逻辑 - 当前的2个或多个逻辑输入通过**某种特定的功能**得到需要的逻辑输出,而这个输出只依赖于当前的输出。逻辑门是构成组合逻辑的基础。 组合逻辑包括了: * 输入变量,二进制,要么是0,要么是1,n个输入变量相当于在输入端有2n种可能的“位”组合 * 逻辑门构成的布尔逻辑 * 输出变量 组合逻辑电路的设计流程: - 确定输入变量和输出变量的个数 - 将输入和输出变量都用字母表示 - 将输入和输出变量的关系描述出来 - 构建能够表达上述输入输出关系的真值表 - 获取针对每一个输出变量与输入变量之间关系的布尔表达式 - 简化针对不同输出变量的布尔表达式 - 基于简化的波尔表达式构建逻辑框图 可以采用多种不同的简化技巧以最小化布尔表达式,目的是减少门数,进而降低成本。这些技巧包括布尔算数理论、卡诺图化简,从硬件实现的角度,实现如下的目标: * 尽可能少的门数,最少数量的输入 * 门和门之间的连接要尽可能少,传输时间尽可能短 以上的方法对于小规模的电路是简单、有效的,也是比较通用的方式,但如果电路变得再复杂,门数增加,门和门之间的连接关系更多,基于这种方法的设计就变得不可靠而且耗时,因此厂家提供一些定制化好的集成电路,有小规模、中规模、大规模和超大规模的IC。在数字系统中比较常用的一些中规模的集成电路: * 用于运算和逻辑 * [[digital_logic_adder|加法器]] - 半加器、全加器、半减器、全减器、加法-减法器、比较器 * [[binary_multiplication|乘法器]] * [[data_comparator|数据比较器]] * [[ALU_FPGA|ALU]] * 码制转换 * [[logic_encoder|编码器]] * [[logic_decoder|译码器]] * 二进制到格雷码 * [[binary2bcd|二进制到BCD码变换]] * [[7-seg_disp_verilog|7段数码管显示]] * [[parity_generator_and_check|奇偶校验生成器和奇偶校验]] * 用于数据通信 * [[logic_mux|多路选择器/复用器]] * [[logic_demux|解复用器]] 它们被广泛用于计算、数字测量、计算机、数字信号处理、自动控制、工业进程处理、数字通信等。 {{drawio>comblogic_block.png}} * 典型组合逻辑部件设计 * 组合逻辑的时序分析 * [[https://www.electronicshub.org/introduction-to-combinational-logic-circuits/|组合逻辑电路介绍]] * 项目 - 按键控制的7段数码管显示 ### 5. 时序逻辑及电路实现 - 时序逻辑介绍 - 时序逻辑电路概述 - 锁存器和触发器 - 同步时序逻辑设计 - 典型时序逻辑部件设计 - [[https://www.electronicshub.org/sequential-circuits-basics/|时序电路基础]] - [[latches|锁存器]] - [[flip-flops|触发器]] - [[sr_ff|SR触发器]] - [[jk_ff|JK触发器]] - [[d_ff|D触发器]] - [[t_ff|T触发器]] - [[shift_reg|移位寄存器]] - [[counters|计数器]] - [[https://www.electronicshub.org/flip-flop-conversions/|触发器转换]] - [[https://www.electronicshub.org/flip-flop-applications/|触发器应用]] ### 6. 脉冲产生、定时、计数 * 脉冲/时钟产生 * LC震荡 * 555定时器 * 晶体/晶振 * 计数器/定时器 * 分频器 * 2分频 * 奇数分频 * 任意频率 * 项目 - 用12MHz时钟产生一个可调频率( - 100KHz)、可调占空比(精度为1%)的PWM信号 * 参考资料 * [[https://www.electronicshub.org/introduction-to-counters/|Introduction to Digital Counters]] * [[https://www.electronicshub.org/synchronous-counter/|Synchronous Counters]] * [[https://www.electronicshub.org/asynchronous-counter/|Asynchronous counters or Ripple counters]] * [[https://www.electronicshub.org/decade-counterbcd-counter/|BCD or Decade Counter]] * [[https://www.electronicshub.org/ring-counters-johnson-ring-counter/|Johnson Ring counter]] * [[https://www.electronicshub.org/ic-4017-decade-counter/|4017 Decade Counter and LED Sequencer]] ### 7. 状态机和控制 ### 8. 总线 * 为什么要总线? * 并行总线 * 优点/局限 * 8位/16位/32位 * 串行总线 * 优点/局限 * 同步/异步、单工/双工 * 常用总线 * SPI * I2C * UART * 项目 - 编写同PC通信的UART逻辑 ### 8. 存储器的应用 * 概述 * ROM * RAM * 双端口RAM * FIFO * 项目 - 制作一个简单的高速逻辑分析仪,通过UART来显示在电脑屏幕上 ### 9. 数字逻辑和模拟世界的连接 * 概述 * 参考基准 * 量化精度 * 转换速率 * DAC * 并行 * 权电阻 * R-2R * 串行 - PWM * 项目 - 结合PWM+权电阻实现一个高精度/高频率DAC * ADC * 并行 * 串行 - Sigma Delta * 项目 - 利用比较器+PWM实现ADC功能 ## 数字系统设计部分 ### 10. 运算方法和运算部件 * 基本运算部件 * 定点数运算 * 浮点数运算 * FPGA功能块 ### 11. 指令系统 在机器语言程序所运行的计算机硬件和上层软件之间的一座桥梁,是软件和硬件之间接口的完整定义 * 指令系统概述 * 指令系统设计 * 指令系统实例 - RISC-V架构 ### 12. 中央处理器 * CPU概述 * 单周期CPU设计 * 多周期CPU设计 * 流水线CPU设计 * 流水线冒险及处理 * 高级流水线技术 ### 13. 存储器层次结构 * 存储器概述 * 主存储器的基本结构 * 高速缓存存储器 * 虚拟存储器 ### 14. 系统互连与输入、输出 * 外设与CPU和主存的互连 * I/O接口和I/O端口 * 输入、输出控制方式 * I/O子系统中的I/O软件 * 传感器和换能器 * 位置感知 * 温度感知 * 光感知 * 红外传感(障碍物检测) * 触摸感知 * 继电器 * 直流电机 * 声音换能 ### 12. 控制与通信 * GCD算法 * 整数平方根算法 * FIR滤波器 * FFT * 数字正交解调DDC * WIFI_ESP8266通信系统设计 #### 控制系统 * 开环系统或无反馈系统 * 闭环系统或反馈系统 * 负反馈系统 * 电子系统 * 负反馈电路 #### 通信系统 ### 13. 555定时器芯片 * 555 timer theory * Monostable multivibrator using 555 timer * Astable Multivibrator using 555 timer * Bistable multivibrator using 555 timer * 555 timer as schmitt trigger