type
slug
status
summary
icon
category
date
tags
password

3.0 概述
- 数字电路基本概念与分类
- 数字电路根据逻辑功能特点可划分为组合逻辑电路和时序逻辑电路两大类,简称组合电路和时序电路。
- 组合逻辑电路
- 在任意时刻的输出仅取决于该时刻的输入信号,而与电路原有状态无关。其结构相对简单,不包含具有存储和记忆功能的触发器。
- 时序逻辑电路
- 在任意时刻的输出不仅取决于当前输入信号,还与电路原来的状态有关。电路的“原有状态”通常由触发器(第四章内容)实现,因为触发器具有存储和记忆功能
由此可知,组合逻辑电路不包含触发器,而时序逻辑电路包含触发器。这也是两类电路在器件构成上的核心区别。
- 组合逻辑电路的特点及描述方法
- 功能特点:组合逻辑电路没有存储和记忆功能。(因为没有触发器)
- 组成特点:仅由门电路(如与门、或门、非门等,见第二章)构成,不含记忆单元(如触发器),只存在从输入到输出的通路,没有反馈回路。
- 描述方法:可采用以下任一方式描述组合逻辑电路:
- 逻辑表达式;
- 真值表;
- 卡诺图;
- 逻辑图。

3.1 组合逻辑电路的分析和设计
3.1.1 组合逻辑电路的分析
- 组合逻辑电路的基本分析思路
- 根据给定逻辑电路图,找出输出输入间的逻辑关系(逻辑表达式),化简变换得到真值表,从而确定电路的逻辑功能。(已知逻辑图,求其功能)
- 而设计则是其逆过程:根据给定的逻辑功能需求,设计出实现该功能的逻辑电路。
- 基本步骤

【例1】

- 根据逻辑图逐级推导,写出输出变量与输入变量之间的逻辑表达式,并化简。
- 通常先从各级门电路的局部输出入手(Y1,Y2,Y3,Y4),再综合得到最终输出表达式。
- 分析
- 假定与非门的输出是Y1,三个与门的输出是Y2,Y3,Y4


- 列真值表
- 注意从小到大列出,总数是2^n,不要遗漏
- 分析逻辑功能(找到Y=1的取值分析)
- 句式:当A,B,C……,输出为……,否则为…

【例2】

先观察电路特点,简化分析过程。发现左中右的逻辑是一样的,只是中间的两个输入是第一个的输出和C,右边输出Y的输入是中间的输出和D
- 逐级写出输出逻辑表达式,并化简
- 注意这里的A*A’=0,异或是AB’+A’B,同或是AB+A’B’
- 中间的电路的输入是W和C,根据规律也是异或。右边的电路输入是X和D,逻辑关系也是异或,所以表达式如下


- 列真值表
- 异或运算的规则:相同为0,不同为1.奇数个1异或为1,偶数个1异或为0
- 功能说明

【例3】

注意:同或是圈点,分析功能可以列真值表分析

【例4】

3.1.2 组合逻辑电路的设计
组合逻辑电路的分析是指:已知逻辑图,求其功能;
而设计则是其逆过程:根据给定的逻辑功能要求,设计出实现该功能的逻辑电路。
- 组合逻辑电路的设计思路
- 根据给定的逻辑功能要求,设计出实现该功能的逻辑电路。
- 设计步骤
- 逻辑抽象
- 确定输入变量和输出变量,并用字母表示(如A、B、C 表示输入,Y表示输出);
- 进行状态赋值:明确逻辑值“0”和“1”各自代表的实际含义(例如:“1”表示“赞成”,“0”表示“反对”;输出 Y=1表示“通过”)。
- 列写真值表
- 根据逻辑抽象和实际需求,列出所有(2^n)输入组合对应的输出值。
- 求最简逻辑表达式
- 利用真值表,通过代数法或卡诺图法(推荐)求出输出的最简与-或表达式;
- 若题目指定使用特定门电路(如仅用与非门),则需将表达式转换为对应形式(如与非-与非式)。
- 画出逻辑电路图:根据最终表达式,选用合适的门电路绘制逻辑图。

设计举例
【例1】:设计一个三人表决电路,并用与非门实现。
- 逻辑抽象
- 设定变量
- 状态赋值

- 列真值表
- 三人共有2^3=8种输入组合。
- 找出Y=1的输入组合,即对应最小项m3、m5、m6、m7,用卡诺图进行化简
- 卡诺图化简
- 注意00,01,11,10(0132,4576)
- 画了卡诺圈之后要检查这个圈是否成立:每个卡诺圈中是否有单独1存在
- 转换为与非-与非形式
- 两次取反,保留上面的大非号,去掉下面的非号

- 画逻辑图
- 使用三个两输入与非门分别实现(AB)‘、(BC)’、(AC)’;
- 再用一个三输入与非门将三者输出再次与非,得到Y;
- 所有门电路均为与非门,满足题目要求。

【例2】设计一个码制变换电路,将输入的四位二进制代码变换为格雷码输出。
格雷码特点:任意两个相邻码仅有一位不同,具有高可靠性,常用于通信和编码器中。
- 逻辑抽象

- 列真值表
- B:是二进制代码,G是某一位。二进制码从0000到1111共16种组合。 格雷码可通过以下公式获得(或利用卡诺图顺序)

使用空白卡诺图:循环码顺序排列,循环码又叫格雷码(0→1→3→2→6→7→5→4→12→13→15→14→10→11→9→8)填写格雷码,速度更快。

- 求输出表达式(卡诺图)
- 多输出值的时候,单看某一个输出值进行分析(其他先屏蔽掉,即分析A3A2A1A0和Y3列)对Y3、Y2、Y1、Y0分别绘制卡诺图并化简。卡诺图左上角标写一个Y3,表示当前的卡诺图是输出Y3和输入的关系。


- 画逻辑图
- Y3直接连接A3(无需门电路);
- Y2、Y1、Y0各用一个异或门实现;
- 总共使用3个异或门,例如74LS86芯片(内含4个异或门)即可满足。

【例4】



这里注意三个异或的表达式和异或门的写法=1
【例5】
一个8421BCD码是4位表示数字0~9。定义4个输入变量A、B、C、D分别表示8421BCD码的第0位到第3位,取值分别为“0”和“1”;
在设计过程中可能会出现输出无效的情况,这个时候就需要判断这个输出不确定的原因是什么,如果是由于该输出对应的输入不可能出现的话,那么在卡诺图中d也可以被圈




【例6】注意零圈法的使用


3.2 加法器与数值比较器
在数字系统中,除了逻辑运算(如与、或、非、异或等),还需进行算术运算(加、减、乘、除)。而所有算术运算均可基于加法实现,因此加法器是数字系统中最基本的运算单元。
3.2.1 半加器
- 定义:两个一位二进制数相加,不考虑来自低位的进位,称为半加。实现该功能的电路称为半加器。(Half Adder:HA)
- 半加规则:两个1位二进制数相加,结果有2个输出半加和S(本位和)、半加进位C。

- 根据之前多输入和多输出真值表的处理思路,我们可以把输出单个单个和输入组合出新的真值表来找关系。
- 本位和S=A⊕B(异或)
- 进位C=A⋅B(与)
- 逻辑图和符号
- 用一个异或门和一个与门即可实现;
- 标准逻辑符号为一个方框(里面是Σ和co),左侧输入 A、B,右侧输出S(Σ)和C(Cout)

注:半加器仅适用于两个一位二进制数的加分,即最低位加法,因不考虑低位进位,无法用于多位加法。但半加器是有本位进位的
- 半加器Verilog代码(数据流级描述)
- 线网信号的赋值:assign
- 交:&,异或:^
3.2.2 全加器
- 定义:将本位的两个一位二进制数𝐴𝑖、Bi、与来自低位的进位Ci-1三者相加,称为全加。实现该功能的电路称为全加器。(Full Adder, FA)

- 全加真值表
- Ai,Bi表示A、B两个数中的第i位,C(i-1)表示来自低位(第i-1位)的进位,Si表示全加和,Ci表示来自第i位的进位。
- 关于Ci的逻辑表达式是通过卡诺图化简得到。



等价公式:需要把BiCi-1,添上1=A+A’,记忆就是两项异或*第三项+异或两项并

再等价,直接变成AiBi+(Ai+Bi)Ci-1

- 逻辑实现:
- Si可用两个异或门级联实现;
- Ci可通过与门和或门实现,也可优化为:Ci=(Ai⊕Bi)Ci−1+AiBi,节省一个与门。
- 逻辑符号
- 与半加器类似,但多一个输入端Ci−1。框内多了一个CI(Cin)

- 全加器的Verilog代码(数据流级描述)
- 集成全加器芯片
- TTL系列:74LS183(双全加器,14引脚);
- 注意1Ci-1接地,然后1Ci作为2Ci-1的输入
- 注:74LS183内含两个独立全加器。未标号引脚为“NC”(No Connection),不可使用。通用IC引脚数通常为 8、14、16、18、20、24、40 等,无12引脚标准封装。


- 串行4位加法器
- 使用4个全加器实现一个4位串行进位加法器如下
- 这里初始进位接地,就表示是没有初始进位的。此外这里是可以在做有符号运算,后面会涉及到溢出的判断。
- 串行4位加法器的Verilog代码(数据流级描述)
- 我们回忆一下
- 在数字逻辑理论中,对于第i位(从0开始计数)的加法运算:
- 输入
- 本位操作数:AiBi
- 来自低位的进位输入:Ci−1
- 输出
- 本位和:Si=Ai⊕Bi⊕Ci−1
- 本位产生的进位输出:Ci
- 这里的
c[k]表示“第 k-1 位向第 k 位传递的进位”,也就是:来自第k-1位的输入。所以C[0]是来自-1位的输入,所以默认是0。c[1]是来自第0位的进位。到后面的C[4]是来自最高有效位3的进位输入。如果是符号数,则这里是符号位产生的进位。

这里还有另一种写法,就是使用数组直接将运算整合起来:公式里面的Ci-1也就是我们所说的来自第i-1位的进位输入。取位分析,s[3]是a[3]+b[3]+ 来自第2位的进位输入即C[3]
对于C[4:1]是来自第3~0位本位产生的输入,所以代码如下
[例]利用全加器实现二进制的乘法功能,以两个2位二进制数为例。

Ci代表来自第i位的进位。C1是来自第1位的进位,所以应该加到P2里面。
这个P1结果可能产生进位,所以不能使用或门(或门)。所以+不能理解为或,这里需要使用全加器。同样的C2会由P2产生,所以这里也不能用或门,而是应该用全加器。又因为P1不需要考虑P0的进位,所以CI接地。注意线可以交叉,但是实心结点表明真正使用的信号。
所以P0=A0B0,直接使用与门然后输出一根线拉过去。然后P1三输入A1,B1,C0(这部分没有所以接地)。输出两个一个是P1,一个是进位C1,作为输入疏导P2里面。

- 超前进位加法器(并行加法器)
- 串行加法器的执行速度的主要限制条件为进位信息在全加器之间的传递速度。而并行加法器为了提高运算速度,减小或消除了由于进位逐级传递所浪费的时间。
- 实际上就跟计组里面的并行加法器处理是一样的,也就是把进位信息直接带入到逻辑表达式中,然后提前得到高位的进位信息。以四位并行加法器为例,只要给出两个四位的操作数,就可以同时得到各位的进位信息。


例3:用二进制加法器实现(1位)十进制数加法运算
- 输入:两个1位十进制数(0~9),用8421BCD码表示 → 各占4位
- 输出:它们的和(0~18),也用BCD码表示 → 占8位(个位+十位)
- 关键:二进制加法的结果 ≠ BCD 结果!需要校正!
- 8421BCD码只允许0000~1001(0~9),而二进制加法结果可能达到18(10010)
- 如果二进制和 ≤ 9 → 不需要校正,直接输出
- 如果二进制和 ≥ 10 → 需要加6(0110)来“跳过”无效的BCD码(1010~1111),并产生一个十位进位
C10
三种情况的分析



假设作加法运算的两个十进制数的8421BCD码为A8A4A2A1和B8B4B2B1,它们相加之和的个位的二进制数为S3S2S1S0,产生的进位为C3,和的个位的8421BCD码为D8D4D2D1,产生的进位(和的十位)为C10。






3.2.3 全减器(FD:Full Deductor)
减法运算实际上就是在加法器的基础上,做计组中的变补操作。
- 全减器特点
- 全减器需要考虑低位的借位
- 全减器的逻辑表达式为:(这里的公式只要记得是A’就可以了)
Aᵢ:被减数第i位Bᵢ:减数第i位Gᵢ₋₁:来自低位的借位输入Dᵢ:本位差,即Ai-Bi-G_i-1Gᵢ:本位产生的借位输出


- 全减器的Verilog代码
- 全减真值表




全减真值表的书写



3.2.4 数值比较器
用于比较两个数的大小或是否相等的电路,称为数值比较器(Digital Comparator)。
3.2.4.1 一位数值比较器
- 一位比较器的特点
- 一位比较器有三个输出,分别表示(输入信号为a、b):a>b、a<b、a=b
- 分析设计要求,列出功能表
- 设输入的两个1位二进制数为A、B,输出比较的结果有三种情况:Y(A>B)有输出时为1 Y(A=B),Y(A<B),有时输出为1,否则为0

- 根据功能表写出输出逻辑函数表达式
- 没有同或门,一般是异或非

- 画逻辑图


- 一位比较器Verilog代码(数据流级描述)
- ppt中在这里第一次涉及到了模块的调用:
- 什么是顶层调用
- 就是在一个大的Verilog文件(通常是系统顶层)中,调用(实例化)已经写好的子模块。类似C语言中的函数调用,但这里是“硬件模块”的连接。
- 模块调用的方式:
- 首先需要先写出模块的名称,在这里是comp1bit(也就是函数名)
- 接下来需要为该模块命名,在这里将comp1bit命名为了U1(实例化模块)
- 然后为模块传参。这里可以使用”.”制定模块的参数,然后在后面使用”()”指明需要传入的参数。
- 如.a (sw[1]) 就表示需要将sw[1]作为参数传递给模块的形式参数a。

3.2.4.2 四位数值比较器
- 比较原理:从最高位开始逐位向低位进行比较


- 级联段:扩展段,当比较位数大于4位,则需要级联
- 可以把这个看作I更低位


- 使用说明
- 只比较两个4位二进制数时,或不使用扩展端时,将扩展端I(A=B)接1,I(A<B)和I(A>B)接0。
- 当比较两个4位以上8位以下的二进制数时,应先比较两个高4位的二进制数,在高位相等时,才能比较低4位数。只有在两个4位二进制数相等时,输出才由扩展端I(A>B)、I(A<B)、I(A=B)决定
- 低位比较结果:因为没有更低位了,所以I(A<B)I(A>B)接0(GND),I(A=B)接1,将低位的比较结果做完高位比较I的输入,最终结果由高位芯片输出。

- 这里虽然给出了逻辑表达式,但是由于这个逻辑表达式比较复杂,因此如果需要使用Verilog来描述四位比较器的话,就会使用行为级进行描述。
- 使用行为级描述:使用always块。敏感于A和B的变化,always @(A, B).输出类型都是reg类型,因为在always块中赋值必须用reg。


3.2.4.3 集成比较器

集成比较器实际上就是将若干个四位比较器级联起来。级联比较器仍然是优先比较高位的。从电路图上看,高位和低位是同时输入到电路中的,并且实际上右侧四位比较器的输出结果优先将由该比较器的输入决定,只有当四位比较器的两个本级输入相等时,才会直接将低位比较的结果传递到高位。因此仍然是高位优先比较的逻辑。

另外需要注意的是,最低位的四位比较器的级联输入端应该输入“010“,以便保证最低位的比较结果是正确的。

- 设用二进制数00表示O型血;01表示A型血;10表示AB型血;11表示B型血。
- 这样对应输血和受血就需要4个输入变量,设用XY代表输送血型,CD代表接受血型。用F=1表示可输血,F=0表示不能输血。
- 列出真值表,化简得到逻辑表达式

但是这里使用了比较器,会更省门

输血的最小项:m0,1,2,3,5,6,10,14,15


XY == CD → 这可以用7485的A=B输出但注意:7485是4 比较器,而我们只有 2 位输入(X,Y 和 C,D),所以我们只用它的 高2位(A3,A2 和 B3,B2),低2位(A1,A0,B1,B0)需要固定。所以黑点表示物理连接,然后接地。3.3 编码器
- 编码:是指用文字、符号和数码来表示某种信息的过程。在数字系统中,由于采用二进制运算处理数据,因此通常将信息编成若干位二进制代码。在逻辑电路中,信号都是以高、低电平的形式给出。
- 编码器:实现编码功能的组合逻辑电路。把输入的每个高低电平信号编成一组对应的二进制代码。

- 分类
- 二进制编码器:将2^n个输入信号编码为n位二进制码(全编码);
- 二-十进制编码器(BCD编码器):将10个十进制数字(0–9)编码为4位BCD 码(部分编码,因 24=16>10);
- 优先编码器:允许多个输入有效,但仅对优先级最高者编码。
- 输入/输出关系:若输入信号数为N,输出位数为n,则需满足2^n≥N。
- 如果我有8个信号,那么我至少3位二进制码才能表示8个信号(全编码:所有的二进制编码全使用)
- 如果我有6个信号,也是需要3位二进制码,但不会完全使用

3.3.1 二进制编码器(全编码)

二进制编码器:又被称为二进制编码器(2^n线-n线编码器),二进制编码的组合电路。
- 二进制编码器注意点
- 输入信号可以是低电平有效或高电平有效的形式
- 编码器的输出码可以是原码形式也可以是反码形式。
- 与十进制数数值对应的二进制码为原码。把原码各位取反得到的码为反码。

[例]设计一个能将I0、I1…I7这8个输入信号编成二进制代码输出的编码器,用与非门实现。
设计:确定输入输出变量,状态赋值,真值表,逻辑表达式,画图

功能表也就是真值表。普通二进制编码器是一种多输入、多输出的组合电路,在某一时刻只能对一个输入信号进行编码,不允许有两个或两个以上信号同时有效,具相互排斥性。即每一时刻只有一个1(有效),输出也就是把下标转化为三位二进制数

分别求Y0,Y1,Y2的逻辑表达式,我们回忆前面所学的求多输出的逻辑表达式子,也就是单独看一列和前面的输入组合
为什么是直接求和:假设前两个Y2是1后面都是0,那么Y2=I0+I0’I1=I0+I1,所有可以得出规律是直接求和
这里的规范推到如下


当Y2Y1Y0都无效的时候,输出I0

- 例1——4线-2线编码器(输入输出均为高电平有效)
- 4线-2线编码器Verilog代码
功能表也就是真值表。普通二进制编码器是一种多输入、多输出的组合电路,在某一时刻只能对一个输入信号进行编码,不允许有两个或两个以上信号同时有效,具相互排斥性。即每一时刻只有一个1(有效),输出也就是把下标转化为三位二进制数

数据流级描述:
行为级描述:
同样的,可以在顶层文件中调用该模块:
- 例2——8线-3线编码器(输入为低电平有效,输出为高电平有效)
- 输入:低电平有效,即有效输入信号为0,无效为1
- 输出:原码形式,即有效位下标换成后面的Y




这里有点混乱,但和前面高电平有效输出源码类似,直接记作原来的Y和In相加,然后化成与非门,列真值表的时候还是按照编码器的形式来写。低电平有效是与非门,高电平有效是或门。输入是没有~

3.3.2 二-十进制编码器(全编码)
[例]设计一个二-十进制编码器,它能将I0~I910个输入信号编成8421BCD码输出,用与非门实现。

结果是把下标变成四位8421BCD码

同样的I0也是隐含的,当I1~I9都失效的时候,使用I0

3.4 译码器
- 译码是编码的逆过程:将具有特定意义的二进制代码,转换为对应的输出信号(通常为高/低电平)。实现该功能的电路称为译码器(Decoder)。

- 译码器分类
- 二进制译码器(全译码器):输入n位二进制码,输出2^n路信号。例如3线-8线译码器(74LS138)。
- 二十进制译码器(部分译码器):输入4位BCD码(0000~1001),输出10路信号(对应十进制 0~9),如74LS42。
- 显示译码器:专门驱动七段数码管,将BCD码转换为对应段码(A~G),如74LS48、CD4511。
- 二进制译码器通常情况下有一个使能端E
- 使能段的作用为:控制译码器的状态
- 当E=1时,译码器处于工作状态;
- 当E=0时,译码器处于非工作状态。
- 用于译码器的扩展:可以理解为是将使能端作为了片选信号
- 例:用两片2线-4线译码器扩展成3线-8线译码器。3线-8线译码器的输入为A2、A1、A0,由A2控制两个2线-4线译码器的使能端E。
- 没有使能的时候,在真值表中的体现为:输入为d,输出全为1。这个可以理解为,没有使能的时候,输入信号被切断了,导致输入到译码器中的信号不确定,而在输出上也自然不能输出有效信号(即在输出反码的情况下,所有的输出信号都为1)

- 译码器的典型特征是
- 输入:n位二进制代码;
- 输出:最多2^n路信号;
- 工作规则:任一时刻仅有一个输出有效(其余无效),有效电平可以是高电平或低电平。
3.4.1 二进制译码器(全译码器)
译码器:将输入二进制代码的各种组合按其原意转换成对应信号输出的逻辑电路。
- 例1——3线-8线译码器(输入为高电平有效,输出为原码表示)

习惯将这三位二进制代码变成十进制数,所以对应的是Y的下标,定义为有效电平。根据我们的规定是高电平有效,而且任一时刻仅有一个输出有效(其余无效),有效电平可以是高电平或低电平。
可见,译码器每个输出均为输入变量的一个最小项。(包含所有的输入变量,并且仅出现一次原/反)。将最小项做组合,就可以得到任意的逻辑函数



- 3线-8线译码器的Verilog代码
- 数据流级描述
- 行为级描述:
- 同样可以在顶层文件中调用:
- 2-4译码器(输出为低电平有效)
- 即选中的那一位的信号是0,其他位信号都是1
- 这里的Z0’:代表的是Z0引脚低电平选中





总结一下
- 输入为高有效,输出原码(高有效):直接I相加,Y=

- 输入为低有效,输出为原码(高有效)
- 还是原来的I相加,因为输出为原码,所以也是正常的Y=,但是这里要符合我们的设计为I’,所以进行与非与非转换。写表格的时候上面的表示引脚名,下面正常按题意填写。低有效输入,就是写0.

- 输入为高有效,输出为反码(低有效)

这里我建议直接情况与,然后看和输出结果的差距,记住初始大写为1
上面都有个大横线表示,负输出有效
3.4.2 二-十译码器
二-十进制译码器的功能是将8421BCD码翻译成十个不同点位的指定电平。
如果指定为低电平有效,那么使能端E为“1”时,译码器处于工作状态;使能端E为“0”时,译码器被封锁,输出全为“1” 。





回忆我们这种情况,输入高,输出低→2-4,我们采用的做法是直接与,然后发现取反,初始大写字母为1
- 2-4译码器的作用——数据分配器


3.4.2 数字显示译码器
二进制译码器和二-十进制译码器,即当处于译码的时候,只有一个输出信号是有效电平。
要求用与非门设计一个8421BCD码~七段数字显示译码器。


- 七段数码管原理
- 结构:由7段发光二极管(LED)组成,标记为abcdefg
- 类型
- 共阳极:所有LED阳极接VCC,需低电平点亮(需要形成电流才能点亮)
- 共阴极:所有LED阴极接地,需高电平点亮
- 显示1,即bc亮,其他不亮,由于共阳极,所有b从,为0,其他都是1

- 显示2,即abdeg亮,其他不亮,由于共阳极,所有abdeg为0,其他都是1

数字显示译码器实际上有两个部分组成:一是七段译码器,负责将8421BCD码转换为七段信号;二是数字显示单元,其可以根据输入的七段信号点亮对应的数码管。因此不难发现,实际上只有第一部分是一个译码器。



- 数字显示译码器的Verilog代码
- 数据流级描述:注意真值表的顺序
- 四位BCD码,对应顺序是abcdefg
- 行为级描述:
- 这里学到一点,就是case语句的各个case条件不仅仅能使用基数形式,也可以直接使用十进制形式。
- 顶层调用


这里分共阳和共阴极,看显示器外接VCC还是GND
3.4.3 译码器的应用
3线—8线译码器74LS138(T4138)的引脚图如下:即74LS138输入高电平有效,输出反码:我们回忆一下我们总结的东西,和2-4译码器一样,那么就直接相与,然后看结果


因此输出低电平有效的译码器又被称为最大项发生器(因为每一个输出对应了一个最大项)
相反,输出高电平有效的译码器又被称为
而所有的逻辑表达式都可以使用最大项与式或最小项和式进行表示,因此实际上所有的逻辑表达式都可以使用对应的译码器进行表示。




例2:试用译码器和门电路实现全减器的功能。


例3:在总线传送中利用译码器实现片选。每个时刻,只有一个地址有效,即一个设备访问CPU

3.5 数据选择器
- 基本概念
- 功能:根据地址选择码,从多路输入中选择一路输出的逻辑电路
- 别名:多路选择器(Multiplexer,MUX)、多路开关、复用器
- 特点:多输入、单输出


数据选择器的输入信号个数N与地址码个数n的关系为N=2^n常用2选1、4选1、8选1和16选1等数据选择器
3.5.1 二选一数据选择器


- 二选一数据选择器逻辑表达式(当选路引脚s为0时,输出a;为1时,输出b)
- 二选一数据选择器Verilog代码
- 门级描述
- 一个非门两个与门一个或门
- 数据流级描述:
- 行为级描述:
这里学到一点:“?”表达式也算是行为级描述方式。
3.5.2 四选一数据选择器


- 四选一数据选择器Verilog代码
- 门级描述
- 在门级描述中,内置门电路可以有多个输入(比如与门并不一定是二输入与门)。这里是三输入与门
- 数据流级描述:
- 行为级描述:

【例】使用与或门设计一个4选1数据选择器。具有使能控制端,控制信号为1时,不工作,控制信号为0时,处于工作状态。

X:D1,D2,D3可0,可1,并不影响(回忆那个图,开关打到D0)
- 输入:数据端 D0∼D3,地址端A1,A0,使能端(ST)’
- (1)分析设计要求,列出功能表

- (2)根据功能表写出输出逻辑函数表达式
怎么记忆:选择D0,那么D0那两位00在计算时候要变成1(A1’A0’),选择D1,则是A1’A0,选择D2,则是A1A0’,选择D3则是A1A0.然后(ST)’=0的时候有效,所以公式再取反

举例子

- (3)画出逻辑图


4.3.5.3 四位二选一多路选择器
- 跟二选一数据选择器相比只是输入输出变成了四位,其他都没啥变化。

- 四位二选一多路选择器
- 数据流级描述:
- assign y={4{~s}}&a|{4{s}}& b;
- {n{表达式}}:把
表达式重复n次,并拼接成一个n位的向量。 {4{~s}}表示:把~s这个1位信号,复制4次,组成一个4位的向量- “?”表达式也可以算是数据流级描述。因此无论题目说是用数据流级描述还是用行为级描述,都可以使用“?”表达式。
- 行为级描述:
- 首先被赋值的变量:即输出变量,不需要出现在敏感列表中
- always @(*):自动敏感列表,自动包含所有在always块中被读取的量
- 被读取的变量有:
s,a,b - 被赋值的变量是:
y - 所有在这里always @(*)等价于 always @(s or a or b)
- 注意:是使用or连接!!!
- 设计顶层文件



3.6 组合逻辑电路的险象
组合逻辑电路的“险象”,本质上是由信号竞争引起的瞬时错误输出。它不是电路功能上的永久性错误,而是在输入信号变化过程中,由于不同路径的传播延迟不同,导致输出在短暂时间内出现不符合预期逻辑的脉冲或毛刺。

3.6.1 竞争
- 竞争的概念:由于电路中各个信号通过的路径不同,可能加到某个门电路的两个信号同时向相反方向变化。这一现象这就是组合逻辑电路的竞争现象。(当两个或多个信号几乎同时到达一个门电路,并且它们的变化方向相反时,就会发生竞争。)
- 在现实中指的是两个信号在非常短的时间窗口内发生相反方向的变化

- 原因
- 输入信号数字化边缘平缓,变化速率不同
- 时间延迟:即使理想情况下信号应同时变化,实际电路中信号的上升沿或下降沿到达的时间总会存在微小差异。



3.6.2 冒险(险象)
这是竞争导致的不良后果。
- 定义:由于竞争的存在,使得电路的输出在瞬间出现了与稳态逻辑值不符的错误脉冲,这种现象称为“险象”。在工程实践中,常被称为“毛刺”。
- 本质:一个短暂的、非预期的电压脉冲。


- 示例分析 (例1: A & B = F):
- 理想情况:如图所示,当A和B都为高电平时,F应为高电平;当任一为低时,F为低电平。如果A和B同时从“1,1”变为“0,0”,理想输出F应直接从“1”变为“0”,中间不应有其他状态。
- 实际情况:由于竞争,A和B的下降沿不可能完全同步。假设B比A稍晚一点变低。
- 在A先变低后、B还未变低的极短时间内,输入是“A=0, B=1”,此时输出F会短暂地变为“0”。【注意这个图最开始的时候,A是低电平,而B是高电平!而不是通过两个靠的近这样,用笔标出】
- 当B也变低后,输出F保持“0”。没有产生额外的脉冲,这属于“有竞争无险”的情况。后面B突然变高,此时A是高电平,出现高电平的异常脉冲,这里出现有竞争有险

首先需要知道有竞争不一定有险象,但是有险象一定有竞争。
3.6.3 险象的分类
按输出是否变化,可以将险象分为:
- 静态险象:若在输入变化而输出不应发生变化的情况下,输出产生的瞬间的错误输出,称为静态险象。
- 动态险象:若在输入变化而输出应该发生变化的情况下,输出在变化过程中产生了瞬间的错误输出,称为动态险象。
因此主要是看输出变量是否应该变化。另外,险象只有可能在输入信号变化的时候出现。需要指出的是,组合电路中的动态险象一般都是由静态险象引起的。所以,消除了静态险象也就消除了动态险象。
按错误输出信号的极性分类,可将险象分为:
- “0”型险象:若错误输出为负脉冲称“0”型险象。
- “1”型险象:若错误输出为正脉冲称“1”型险象。

区分静态和动态险象


3.6.4 险象的判定
3.6.4.1 代数法
在逻辑表达式中,当某个变量A同时以原变量和反变量的形式出现在逻辑函数的表达式中,令除了某个逻辑变量(如变量A)及该变量的非(如~A)以外的其它变量为某个恒定值(0或1)后,若出现AA’ 或者 A+A’,则必然存在险象。
若出现AA’,则存在“1”型险象;若出现A+A’,则存在“0”型险象。


分析:
理论是完美的,但现实是残酷的。在实际电路中,信号从
A变化到A'需要经过一个非门,这会产生一个传播延迟。让我们追踪当A发生变化时的情况:

3.6.4.2 卡诺图法
在一个逻辑表达式的卡诺图中,如果两个不同的卡诺圈相切,且相切部分又未被其他卡诺圈圈住,则该电路必然存在险象。


我们发现相切的两个格子是A=0,C=D=1所以说当B变化的时候会出现险象。
注意!!!这里的A’B’D和AB’C’也是相切的,第一行和最后一行也相邻
切在B=0,C=0,D=1,A=0/1这两个格子。所以后者相邻的情况下,在B=0,C=0,D=1时,若A变化,则会出现险象。
3.6.5 险象的消除或减弱
险象的消除/减弱有三种方式:
- 引入封锁脉冲(由于同步问题不易实现)
- 增加冗余项
- 我们不能随便加一个项,因为这可能会改变电路的稳态功能。
- 我们需要加一个项,使得它在稳态下不影响结果,但在瞬态下能“堵住”漏洞。
- 需要使得原电路稳态不变
这个方法比较重要,当出现“1”型险象时,需要通过其余变量(与险象产生无关的变量)构造出一个冗余项,使逻辑输出一定为“0”,反之同理。

我们合理推断一下,这里是0型险象,即当B=C=1时出现0这个错误脉冲,所以增加的冗余项目,需要代入B=C=1后,使得F恒唯一,所以增加BC.这里+可能是,根据前面来确定的?
我们要在这个表达式上“增加”一个冗余项。但请注意:

- 输出加低通滤波电路
- 增加了一个R和一个电容

相当于是只允许通过变化频率较低的信号。而毛刺的变化频率通常较快,因此就会被低通滤波电路滤除。

寻找产生条件的时候,就看A=B取1/0的时候会出现CC’/C+C’这样的形式,发现是A=B=1时。,产生”1“型险象。消除险象:增加冗余项目
我们要在这个表达式上“增加”一个冗余项。但请注意:
- 我们不能随便加一个项,因为这可能会改变电路的稳态功能。
- 我们需要加一个项,使得它在稳态下不影响结果,但在瞬态下能“堵住”漏洞。
我们合理推断一下,这里是1型险象,即当A=B=1时出现1这个错误脉冲,所以增加的冗余项目,需要代入A=B=1后使得F恒唯为0,且稳态下,F=F功能不变,所以AB=00/01/10的时候都是1,然后求出AB。
3.7 习题





这一题主要是因为输出信号有d。这里由于题目说了是一个8421BCD码,所以这里输出为d是由输入信号不可能出现导致的,因此在卡诺图中d也被正常圈了。




这一题主要是因为题目要求是“或非门”,第一个“或”就表示逻辑变量之间应该是“或”的关系,因此应该使用最大项与的形式,即在卡诺图上圈0
二进制加法器实现1位十进制数加法运算
输血电路
- 作者:Sparkle_Yuyu
- 链接:https://imyuyu.top/article/DigLogic/Chapter3
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
