数字电路与系统大纲

本文最后更新于:2021年3月22日 晚上

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

数字电路与系统大纲

绪论、数制、编码

  1. 进制转换
    • 二、六、八、十六
      分组对应、等指代替

    • 任意进制的转化、
      按权展开

    • 小数部分和整数部分(eg:整数/2取余 小数*2取整 整数自下而上 小数自上而下)

  2. 原码、反码、补码
    • 原码:
      • 最高位表示正负:0表示正,1表示负
      • 其余各位表示数的绝对值
    • 反码 :
      • 正数的反码和原码一样,负数的反码是对原码的绝对值位域取反
    • 补码:
      • 正数的补码和原码一样,负数的补码是反码+1
  3. 格雷码
    性质:单位距离 循环相邻 无权码 镜面对称

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

  1. 逻辑运算

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

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

    • 标准与或表达式(最小项之和)
      • 从真值表求标准与或表达式:在真值表找到使逻辑函数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的变量取值集合,然后相“与”
        注意最大项编号 / 变量取值 的对应关系(和正常的权值运算相同)
        标准与或表达式和标准与或表达式互补
  4. 卡诺图——用来化简逻辑函数

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

    • 最小项卡诺图化简法求 最简与或表达式—圈1
    • 最大项卡诺图化简法求 最简或与表达式—圈0
  5. 逻辑函数形式的转换(从与或表达式)

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

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

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

    • 或非——或非

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

    • 化为最小项之和

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

    • 化为最大项之积

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

CMOS逻辑门

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

    • N沟道增强型

      N沟道增强型

    • P沟道增强型

      P沟道增强型

    • N沟道耗尽型

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

      P沟道耗尽型
  2. CMOS逻辑门
    非门(给箭头方向相反的电流就是导通,方向相同就是截止)

    非门

组合逻辑电路分析与设计

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

组合逻辑电路

  1. 组合逻辑的电路的分析
    分析步骤:组合逻辑电路\rightarrow逻辑表达式\xrightarrow[] {化简变换}最简表达式\rightarrow真值表\rightarrow逻辑功能
  2. 组合逻辑的电路设计方法
    设计步骤 :or实际问题\rightarrow真值表or逻辑函数\rightarrow化简\xrightarrow{选定逻辑门类型}最简表达式\rightarrow逻辑电路图

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

  1. 编码器

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

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

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

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

  2. 译码器

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

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

    4线8421BCD码译码器 7442

    七段显示译码器 7448

  3. 数据选择器

    双4选1数据选择器 74LS153

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

  4. 数值比较器

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

  5. 加法器

    半加器、全加器

    超前进位加法器

触发器与存储器

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

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

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

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

  • 时序逻辑的表示方法

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

表格:

  1. 按逻辑功能分
  • SR触发器
    • [SR1010100011]\begin{bmatrix} S&R&\rightarrow & \\ 1 &0 & \rightarrow &置1 \\ 0 & 1 & \rightarrow & 置0\\ 0 &0 & \rightarrow &保持 \\ 1 & 1 & \rightarrow & 不定\end{bmatrix}
    • {Q=S+RQRS=0()\left\{\begin{matrix}Q^{*}=S+R{}'Q \\\\ RS=0(约束)\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 &置1 \\\\ 0 & 1 & \rightarrow & 置0\\\\ 0 &0 & \rightarrow &保持 \\\\ 1 & 1 & \rightarrow & 反向\end{bmatrix}
    • Q=JQ+KQQ^{*}=JQ{}'+K{}'Q
    • JK触发器状态转换图
    • 主从、边沿
  • T触发器
    • [Tamp;amp;0amp;amp;1amp;amp;]\begin{bmatrix} T&\rightarrow & \\ 0 & \rightarrow & 时钟到达后保持\\ 1 & \rightarrow &每来一个时钟信号就翻转一次\end{bmatrix}
    • Q=TQ+TQQ^{*}=TQ{}'+T{}'Q
    • T触发器状态转换图
  • D触发器
    • [Damp;amp;0amp;amp;01amp;amp;1]\begin{bmatrix} D&\rightarrow & \\\\ 0 & \rightarrow & 置0\\ 1 & \rightarrow &置1\end{bmatrix}
    • Q=DQ^{*}=D
    • D触发器状态转换图
    • 边沿、电平触发
  1. 按触发方式分
Excel To HTML using codebeautify.org
无触发 只有输入决定保持什么状态,无需触发 SR锁存
电平触发(增加触发) 1.触发信号CLK有效时,才能够接受输入信号 2.CLK=1期间可能有多次翻转 同步SR触发器 电平触发D触发器
脉冲触发(主从触发)(克服反转多次) 利用主从触发便有每个CLK周期输出(从)只改变一次,CLK回到低电平输出状态才改变 主从SR触发器 主从JK触发器
边沿触发(克服只取决于下降时刻问题) 输出的状态仅取决于CLK上升沿或者下降沿到达时刻输入信号的状态 边沿D触发器 下降边沿JK触发器

时序逻辑电路分析与设计

时序逻辑电路

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

    分析步骤:

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

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

    时序电路设计

Verilog

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

  2. Verilog描述级别 可综合性

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

  • RTL级(可综合)

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

  • 开关级/物理级

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

  1. 模块填空
  • 基本语法:

    1. wire和reg

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

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

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

      • always时序逻辑电路:
        只有时钟信号和复位信号可以放在敏感列表里,并且必须附带posedge和negedge
        利用非阻塞赋值
        对于未描述的分支,变量将保持原值

    4. FSM的设计方法

1 一段式状态机 (单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块描述。输出时为寄存器输出,所以无毛刺。但是这种方式会产生多余的触发器(因为把组合逻辑也放在时序逻辑中实现),而且代码难以修改调试。对于那些简单的状态机,一段式方便理解。但是对于复杂状态机,代码难于更改,条件复杂带来电路开销大,工作性能(电路最高频率)亦受限,因此实际中这种结构很少使用。
2 两段式状态机 (双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块采用同步时序描述状态转移;另一个采用组合逻辑判断转移条件,以及描述输出。二段式便于阅读,理解和维护,有利于综合出更少的资源。但是由于采用的是组合逻辑输出,容易产生毛刺,且不利于约束,也不利于布局布线。

3 三式状态机 (三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块用于描述状态转移条件。虽然使用的硬件资源较多,但输出采用寄存器结构,无毛刺,而且代码更清晰易读,对于复杂的状态机来说逻辑清晰,是一种比较流行的状态机结构。

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

高层次设计

  • 数据流图

    数据流图

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

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

    • 受限调度

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

  • 资源绑定

  • 数据路径

    数据路径

其他

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


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!