数字电路与系统备忘

本文最后更新于 2023年3月3日 下午

学习数字电路与系统时提炼的备忘,供大家学习

数字电路与系统备忘

绪论、数制、编码

进制转换

  • 二、六、八、十六
    • 分组对应、等指代替
  • 任意进制的转化、
    • 按权展开
  • 小数部分和整数部分(eg:整数/2取余 小数*2取整 整数自下而上 小数自上而下)

原码、反码、补码

  • 原码:
    • 最高位表示正负:0表示正,1表示负
    • 其余各位表示数的绝对值
  • 反码 :
    • 正数的反码和原码一样,负数的反码是对原码的绝对值位域取反
  • 补码:
    • 正数的补码和原码一样,负数的补码是反码+1

格雷码

  • 性质:单位距离 循环相邻 无权码 镜面对称

逻辑代数基础及逻辑门电路

逻辑运算

  • 与或非 真值表 表示符号
  • 基本公式(考察应用)分配律 DeMorgan律
  • 定理(代入、反演、对偶)
    • 代入定理:函数换变量,等式不会变
      • 反演定理: +与*互换、0与1互换、x与 aˉ\bar{a} 互换,表达式取反
      • 对偶定理: +与*互换、0与1互换,表达式变为对偶表达式。二次对偶表达式即原表达式
  • 异或、同或
    因果互换律 01律 奇偶律

逻辑表达式的表示

  • 逻辑表达式 真值表 卡诺图 逻辑图 波形图的互化

标准与或表达式和标准或与表达式

  • 标准与或表达式(最小项之和)
    • 从真值表求标准与或表达式:在真值表找到使逻辑函数Y为1的变量取值集合,然后相“或”
      eg:Y(A,B,C)=AˉBC+ABˉC+ABCˉ=m3+m5+m6=(3,5,6,7)Y(A,B,C)=\bar{A}BC+A\bar{B}C+AB\bar{C}=m_{3}+m_{5}+m_{6}=\sum(3,5,6,7)
    • 从一般与或表达式求标准与或表达式:利用 A+Aˉ=1A+\bar{A}=1
  • 标准与或表达式(最大项之积)
    • 从真值表求标准与或表达式:在真值表找到使逻辑函数Y为0的变量取值集合,然后相“与”
      注意最大项编号 / 变量取值 的对应关系(和正常的权值运算相同)
      标准与或表达式和标准与或表达式互补

卡诺图——用来化简逻辑函数

规则:不重不漏 尽可能大 每次至少应该包含新一个

  • 最小项卡诺图化简法求 最简与或表达式—圈1
  • 最大项卡诺图化简法求 最简或与表达式—圈0

逻辑函数形式的转换(从与或表达式)

注:求反就是画 Yˉ\bar{Y},反函数就是利用反演定理

  • 与非——与非
    两次求反 再使用DeMorgan公式

  • 与或非
    求反函数的最简与或表达式,再求反

  • 或非——或非

先求出反函数的最简与或表达式,然后反演得到原函数的或与表达式,在两次求反,利用DeMorgan公式

  • 化为最小项之和

(A+Aˉ)*(A+\bar{A})

- 化为最大项之积

+(AAˉ)+(A\bar{A})

CMOS逻辑门

MOS管的四种类型(增强离散,N向内)

  • N沟道增强型

    N沟道增强型

  • P沟道增强型

    P沟道增强型

  • N沟道耗尽型

    N沟道耗尽型
  • P沟道耗尽型

    P沟道耗尽型

CMOS逻辑门

非门(给箭头方向相反的电流就是导通,方向相同就是截止)

非门

组合逻辑电路分析与设计

组合逻辑电路 功能上无记忆,结构上无反馈

组合逻辑电路

组合逻辑的电路的分析

  • 分析步骤:组合逻辑电路逻辑表达式化简变换最简表达式真值表逻辑功能\text{组合逻辑电路}\rightarrow\text{逻辑表达式}\xrightarrow[] {\text{化简变换}}\text{最简表达式}\rightarrow\text{真值表}\rightarrow\text{逻辑功能}

组合逻辑的电路设计方法

  • 设计步骤 :实际问题真值表or逻辑函数化简选定逻辑门类型最简表达式逻辑电路图\text{实际问题}\rightarrow\text{真值表}or\text{逻辑函数}\rightarrow\text{化简}\xrightarrow{\text{选定逻辑门类型}}\text{最简表达式}\rightarrow\text{逻辑电路图}

逻辑电路模块 (理解功能+典型应用+扩展方法)

编码器

  • 对于每一个有效的输入信号,产生一组二进制代码

  • 8线-3线 优先编码器74148(输入、输出使能信号和输出扩展信号)

  • 74HC148(使能输入端、片选输入端,使能输入端,扩展输入端)

  • 扩展:74148扩展为16线-4线有限编码器

译码器

  • 分为二进制全译码器和部分译码器

  • 3线-8线 译码器 74138 (S1,S2,S3S_1,S_2{}',S_3{}' 为使能端,又叫做片选,可以消除干扰,功能扩展)

  • 4线8421BCD码译码器 7442

  • 七段显示译码器 7448

数据选择器

  • 双4选1数据选择器 74LS153

  • 用具有n位地址输入的数据选择器,可以产生任何形式输入变量数不大于n+1的组合逻辑函数

数值比较器

  • 串联扩展:低位模块将比较结果馈入高位模块的级联输入端

加法器

  • 半加器、全加器

  • 超前进位加法器

触发器与存储器

  • 存储单元(触发器) 寄存器:一组触发器 存储器:存储大量数据

  • 触发器
    电路结构: 基本、同步、主从、边沿
    触发方式:电平、脉冲、脉冲边沿触发

    逻辑功能 :RS、JK、D和T触发

  • 存储器 RAM(Radom Access Memory) ROM(Read Only Memory)

  • 时序逻辑的表示方法

    • 特性表(逻辑功能表):含有状态变量的真值表,可以转换为两种形式——状态表和激励表特性表
    • 状态方程:含有状态变量的逻辑表达式,有状态方程和激励方程两种形式
    • 状态转移图
    • 波形图
  1. SR锁存器(基本RS触发器)
  2. 电平触发的触发器(同步SR)电平触发的触发器(同步D)
  3. 脉冲触发的主从触发器
    • 主从SR触发器
    • 主从JK触发器
  4. 边沿触发器 always @ ( posedge clock ) begin end ;“>” 表示边沿触发动作
    • 边沿D触发器——D-FF的特性

分类

按逻辑功能分

  • SR触发器

    • [SR10101000保持11不定]\begin{bmatrix} S&R&\rightarrow & \\ 1 &0 & \rightarrow &\text{置}1 \\ 0 & 1 & \rightarrow & \text{置}0\\ 0 &0 & \rightarrow &\text{保持} \\ 1 & 1 & \rightarrow & \text{不定}\end{bmatrix}
    • {Q=S+RQRS=0(约束)\left\{\begin{matrix}Q^{*}=S+R{}'Q \\\\ RS=0(\text{约束})\end{matrix}\right.
    • SR锁存器、同步、主从
    SR触发器状态转换图
  • SR触发器

    • [Jamp;Kamp;amp;1amp;0amp;amp;10amp;1amp;amp;00amp;0amp;amp;保持1amp;1amp;amp;反向]\begin{bmatrix} J&K&\rightarrow & \\\\ 1 &0 & \rightarrow &\text{置}1 \\\\ 0 & 1 & \rightarrow & \text{置}0\\\\ 0 &0 & \rightarrow &\text{保持} \\\\ 1 & 1 & \rightarrow & \text{反向}\end{bmatrix}
    • Q=JQ+KQQ^{*}=JQ{}'+K{}'Q
    • 主从、边沿
    JK触发器状态转换图
  • T触发器

    • [Tamp;amp;0amp;amp;时钟到达后保持1amp;amp;每来一个时钟信号就翻转一次]\begin{bmatrix} T&\rightarrow & \\ 0 & \rightarrow & \text{时钟到达后保持}\\ 1 & \rightarrow &\text{每来一个时钟信号就翻转一次}\end{bmatrix}
    • Q=TQ+TQQ^{*}=TQ{}'+T{}'Q
    T触发器状态转换图
  • D触发器

    • [Damp;amp;0amp;amp;01amp;amp;1]\begin{bmatrix} D&\rightarrow & \\\\ 0 & \rightarrow & \text{置}0\\ 1 & \rightarrow &\text{置}1\end{bmatrix}
    • Q=DQ^{*}=D
    • 边沿、电平触发
    D触发器状态转换图

按触发方式分

Excel To HTML using codebeautify.org
无触发 只有输入决定保持什么状态,无需触发 SR锁存
电平触发(增加触发) 1.触发信号CLK有效时,才能够接受输入信号 2.CLK=1期间可能有多次翻转 同步SR触发器 电平触发D触发器
脉冲触发(主从触发)(克服反转多次) 利用主从触发便有每个CLK周期输出(从)只改变一次,CLK回到低电平输出状态才改变 主从SR触发器 主从JK触发器
边沿触发(克服只取决于下降时刻问题) 输出的状态仅取决于CLK上升沿或者下降沿到达时刻输入信号的状态 边沿D触发器 下降边沿JK触发器

时序逻辑电路分析与设计

时序逻辑电路

  1. 同步时序逻辑电路的分析

    分析步骤:

    根据给定的时序电路图写出个逻辑方程式:驱动方程、状态方程(将驱动方程代入到触发器的特性方程)、输出方程→根据状态方程和输出方程,列出时序电路的状态转换表,画出住状态转换图或时序图→根据电路的状态转换图或时序图,说明给定时序逻辑电路的逻辑功能

  2. 同步时序逻辑电路的设计(能否自启动)

    时序电路设计

Verilog

  • 什么是FPGA(现场可编程门阵列)

  • Verilog描述级别 可综合性

    • 行为级/算法级(不一定可综合)

    • RTL级(可综合)

    • 门级/结构级(可综合)

    • 开关级/物理级

  • 综合:即通过特定的软件将Verilog代码转换成门级描述,并能下载到硬件平台里。

模块填空

  • 基本语法:
  1. wire和reg

    • 所有的输入信号都需要定义成wire型,或者不定义(使用缺省类型)
    • 对于内部信号,如果使用assign进行赋值则定义成wire型,如果使用always块进行赋值则必须定义成reg型
    • 寄存器的输出必须定义成reg型
  2. 赋值

    • 非阻塞赋值<=:(时序逻辑电路中使用!!
      • 在时序逻辑中,一个非阻塞赋值代表一个D触发器。
      • 块结束后,赋值动作才能完成,因此上面语句所赋的变量值不能立刻为下面语句使用。
      • 在时序逻辑中,块语句中的各个赋值语句之间没有先后顺序
    • 阻塞赋值=:(组合逻辑电路)
      • 赋值动作立刻完成
      • 组合逻辑电路中,块语句中的各个赋值语句之间没有先后顺序
  3. assign always 敏感变量

    • always组合逻辑电路:

      • 将所有有敏感变量列在敏感变量列表中(各敏感变量之间用or或者“,”隔开。可用“*”代替所有敏感变量)
      • 用阻塞赋值
      • 条件语句的完全描述(即每一个if均需要else与之对应,每一个case分支都需要有描述)
    • always时序逻辑电路:

      • 只有时钟信号和复位信号可以放在敏感列表里,并且必须附带posedge和negedge
      • 利用非阻塞赋值
      • 对于未描述的分支,变量将保持原值
  4. FSM的设计方法

  5. 数字系统的工作时钟

    • D触发器的动态特性(建立时间 保持时间 传输时间)T>=传输时间+建立时间
      • 时间延迟 # 组合逻辑的延迟T >=传输时间 + 建立时间 + 组合逻辑延迟
      • 提高系统工作时间的方法—— 流水线 总处理数据的吞吐量增加

FSM的设计方法

一段式状态机 (单always块结构)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
always @(posedge clk or posedge rst) begin
if(rst)
FSM <= S0
else begin
case(FSM)
S0:begin
Out_0; //输出
if(condition1) FSM<= S1;//状态转移
else if (condition2) FSM<= S2;//状态转移

end
S1:begin
Out_1; //输出
if(condition3) FSM<= S3;//状态转移
else if (condition4) FSM <=S4;

end
……
default: begin
Out_0; //输出
if(condition0) FSM<= S0;//状态转移
end
endcase
end
end
  • 单 always 块把组合逻辑和时序逻辑放在一个时序 always 块描述。输出时为寄存器输出,所以无毛刺。但是这种方式会产生多余的触发器(因为把组合逻辑也放在时序逻辑中实现),而且代码难以修改调试。对于那些简单的状态机,一段式方便理解。但是对于复杂状态机,代码难于更改,条件复杂带来电路开销大,工作性能(电路最高频率)亦受限,因此实际中这种结构很少使用。

两段式状态机 (双always块结构)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//时序逻辑,这段一般是不变的,描述从现态转移到次态
always @ (posedge clk or posedge rst ) begin
if(rst)
current_state <= S0;
else
current_state<=next_state;
end

//组合逻辑,包括转移条件以及输出
always @ (current_state) begin
case(current_state)
S0:begin
Out_0; //输出
if(condition1) next_state <= S1;//状态转移
else if (condition2) next_state <= S2;//状态转移
else next_state <= S0;
end
S1:begin
Out_1; //输出
if(condition3) next_state <= S3;//状态转移
else if (condition4) next_state <=S4;

end
……
default: begin
Out_0; //输出
if(condition0) next_state <= S0;//状态转移
end
endcase
end

二段式中,一个always块采用同步时序描述状态转移;另一个采用组合逻辑判断转移条件,以及描述输出。二段式便于阅读,理解和维护,有利于综合出更少的资源。但是由于采用的是组合逻辑输出,容易产生毛刺,且不利于约束,也不利于布局布线。

三式状态机 (三always块结构)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//第一个always块,时序逻辑,描述现态转移到次态
always @ (posedge clk or negedge rst) begin
if(rst_n)
current_state<=S0;
else
current_state<=next_state;
end

//第二个always块,组合逻辑,描述状态转移的条件
always @ (current_state) begin
case(current_state)
S0:begin
if(condition1) next_state <= S1;//状态转移
else if (condition2) next_state <= S2;//状态转移
else next_state <= S0;
end
S1:begin
if(condition3) next_state <= S3;//状态转移
else if (condition4) next_state <=S4;

end
……
default: begin
if(condition0) next_state <= S0;//状态转移
end
endcase
end
//第三个always块,时序逻辑,描述输出
always @ (posedge clk or negedge rst) begin
if(rst)
out0;
else
case(current_state)
S0: out0;
S1: out1;
….
default:Out0;
endcase
end
  • 三段式结构中,2个时序always块分别用来描述状态跳转和输出。组合always块用于描述状态转移条件。虽然使用的硬件资源较多,但输出采用寄存器结构,无毛刺,而且代码更清晰易读,对于复杂的状态机来说逻辑清晰,是一种比较流行的状态机结构。

高层次设计

  • 数据流图

    数据流图

    • 构建步骤 :取出核心代码→算法拆分为标准2输入表达式→根据标准2输入表达式构建数据流图

      标准输入表达式
    • 简单算子调度(Schedule)复用的代价:选择器更复杂

    • 受限调度

    • 左边缘算法——间隔图、间隔表 着色

  • 资源绑定

  • 数据路径

    数据路径

其他

兰特规则:N=KGβN=KG^{\beta},NN 针脚数,GG 门数量


数字电路与系统备忘
https://justloseit.top/数字电路与系统备忘/
作者
Mobilis In Mobili
发布于
2020年1月14日
更新于
2023年3月3日
许可协议