3.14 习题
(+)表明更深层次的问题,(*)表明在原书配套网站上有相应的解答。
3-1 如果函数输入端值为1的个数超过值为0的个数,则这个函数的输出值为1。其他情况输出值为0。请设计这样一个三输入函数。
*3-2 设计一个函数来检测用BCD码表示的十进制数的一个错误。换句话说,也就是写出一个等式,当输入为BCD码的6个无效代码中的一个时,其值为1,其他情况下则为0。
3-3 设计一个格雷码至BCD码的转换器,当输入为无效的组合时输出码为1111。假设格雷码序列对应十进制数字0~9是0000,0001,0011,0010,0110,0111,0101,0100,1100和1101,其他所有的输入组合均被认为是无效的。
3-4 三子棋游戏(tic-tac-toe)是一个有名的简单游戏,玩这个游戏需要两个人在一个3×3的方格中进行。游戏者交替轮流,每个游戏者选择一个方格并在方格中做上记号(一个游戏者使用X,另一个游戏者使用O。)如果有某一方先将一行或一列或一对角线连接起来,则获得游戏的胜利。设计一个逻辑电路来预测游戏胜利者的产生。当游戏胜利者产生时,电路的输出W为1。没有出现时,电路的输出W为0。对于9个方格中的任一个,有两种信号,Xi和Oi,这就存在两种电路,一种是关于X,另一种是关于O。提示:对W(X1,X2,…,X9)列出一个紧凑的真值表。
(a)对于下面方格所表示的信号设计X的电路:
X1X2X3
X4X5X6
X7X8X9
(b)使用布尔代数尽可能地将关于X电路的输出W最小化。
3-5 如果游戏在一个4×4的方格中进行,重做习题3-4。假设数字像在习题3-4中一样,从左到右,从上到下按升序排序。
3-6 一个低电压的照明系统采用二进制逻辑控制器控制一盏特殊灯的照明,这盏灯用于T型走廊的交叉口。在T型走廊的三个端点各有一个控制灯的开关,这些开关的开合状态决定它们的二进制输出是0还是1,三个开关分别用X1、X2和X3表示。这盏灯由一个带缓冲驱动的可控硅控制,可控硅控制电灯电源电路的导通。当缓冲器的输入Z为1的时候,灯是开着的,当Z为0的时候,灯是熄灭的。你需要得到这样一个函数Z=F(X1, X2, X3),如果任意一个开关变化了,Z的值就会改变,从而控制电灯的开和关。
+3-7 一个简单十字路口的交通灯控制器采用二进制码计数器在输出A、B、C、D端按顺序产生如下二进制码的组合:0000,0001,0011,0010,0110,0111,0101,0100,1100,1101,1111,1110,1010,1011,1001,1000。在1000之后,又重新从0000开始循环。在下一个组合出现之前,每种组合出现的时间为5秒。这些逻辑组合对应于输出的灯RNS(红—北/南)、YNS(黄—北/南)、GNS(绿—北/南)、REW(红—东/西)、YEW(黄—东/西)、GEW(绿—东/西)。灯是由每个对应的输出值来控制,值为1则灯开启,值为0则灯熄灭。对于一个给定的方向,假设绿灯亮30秒,黄灯亮5秒,红灯亮45秒(红灯间隔重叠5秒。)将这80秒的时间按16种组合的循环划分为16个间隔时间,并按预期的驾驶员行为决定每个间隔时刻该亮什么颜色的灯。假设,对于组合0000对应的间隔,GNS=1,REW=1,其他的输出为0。使用与门、或门和反相器来设计这种6输出的逻辑电路。
3-8 设计一个组合电路,输入一个3位的数字,输出一个6位的二进制数字,且输出数字的值等于输入数字值的平方。
+3-9 设计一个组合电路,输入一个4位的数字,输出一个3位的二进制数字,且输出数字的值近似等于输入数字值的平方根。例如,如果平方根的值等于3.5或者更大的值,则四舍五入记为4。如果平方根的值小于3.5大于等于2.5,则记为3。
3-10 设计一个电路,输入端A、B、C、D为4位的BCD码,在输出端W、X、Y、Z则得到一个值等于输入值+3的二进制码。例如,9(1001)+3(0011)=12(1100)。不考虑无效的BCD码输出。
3-11 一个交通测量系统可控制从高速公路匝道上进入高速公路的车流,它的一部分控制系统的要求如下:有三个平行的测量车道,每个都有独立的交通灯,红灯停绿灯行。其中的一个车道称为合乘车辆道,它的绿灯优先级比其他两个车道要高,而其他两个行车道(左车道和右车道)的绿灯则循环起作用。设计能决定哪个灯将会变为绿灯(而不是红灯)的控制器。具体要求描述如下:
输入
PS合乘车辆车道传感器(有车—1;无车—0)
LS左行车道传感器(有车—1;无车—0)
RS右行车道传感器(有车—1;无车—0)
RR循环信号(选择左边—1;选择右边—0)
输出
PL合乘车辆车道灯(绿—1;红—0)
LL左行车道灯(绿—1;红—0)
RL右行车道灯(绿—1;红—0)
应用
1.如果在合乘车辆车道上有一辆汽车,则PL为1。
2.如果在合乘车辆车道上和右行车道上没有汽车,在左行车道上有一辆汽车,则LL为1。
3.如果在合乘车辆车道上和左行车道上没有汽车,在右行车道上有一辆汽车,则RL为1。
4.如果在合乘车辆车道上没有汽车,在左行车道和右行车道都有汽车,且RR为1时,则LL为1。
5.如果在汽车行车道上没有汽车,在左行车道和右行车道都有汽车,且RR为0时,则RL为1。
6.如果上述的PL、LL或RL均不为1,则其值为0。
(a)写出控制器的真值表。
(b)采用多级电路方式,使用与门、或门和反相器实现该电路,要求电路的门输入成本最小。
3-12 完成BCD码转换成7段码的译码器的设计,设计步骤如下:
(a)对于BCD码至7段码译码器的7个输出端,每个输出端绘制一张如表3-9所示的图。
(b)化简这7个输出函数得到积之和的形式,确定将要实现的译码器所需门输入的数量。
(c)证明这7个输出函数式是最简的,并与(b)得到的门输入的数量相比较,解释两者的不同之处。
3-13 设计一个电路实现如下所示的布尔等式:
F=A(CE+DE)+AD
G=B(CE+DE)+BC
电路基于等式中的因子分解,采用分层设计思想,得到简化的原理图。要求用两个与门、一个或门、一个反相器组成一个简单的分层部件,整个电路用3个分层部件构成。画出这个分层部件的逻辑图和整个电路的逻辑图,在整个电路的逻辑图中分层部件用一个符号来代替。
3-14 一个分层部件与反相器连接实现如下等式:
H=XY+XZ
G=ABC+ABD+ABC+ABD
整个电路可以通过使用香农展开定理得到,
F=X·F0(X)+X·F1(X)
其中F0(X)表示当X=0时F的表达式,F1(X)表示当X=1时F的表达式。设函数H中Y=F0且Z=F1,函数F即可按香农展开定理展开。F0和F1同样可继续按香农展开定理展开,每个函数中使用一个变量,特别是这个变量的取反与不取反形式在函数中同时出现,重复这个过程直到所有的Fi都是单变量或者常量为止。对于G,令X=A可以得到G0和G1,然后对于G0和G1,则可令X=B。请以H作为一个分层部件,画出G的顶层框图。
+3-15 设计一个八输入与非门。对于下面的每一种情况,要求在多层设计中使用最少数量的门电路:
(a)使用二输入与非门和非门来设计八输入与非门。
(b)使用二输入与非门和二输入或非门,如果需要还可以使用非门来设计八输入与非门。
(c)比较(a)方案和(b)方案的门数量。
3-16 对如图3-54所示的电路用与非门进行工艺映射。可以选用的器件如下:反相器(n=1),2与非门,3与非门,4与非门,它们与3.2节开头定义的一样。
3-17 重复习题3-16的要求,使用如下的或非门单元:反相器(n=1),2或非门,3或非门,4或非门,这些和4个与非门单元一样在3.2节开头也定义了。
3-18 (a)重复习题3-16的要求,写出例3-18中BCD码至7段码译码器中的a段和c段的布尔等式,尽可能共享公共项。
(b)仅使用反相器(n=1)和2与非门单元类型重复(a)。
3-19 (a)用习题3-17中的或非门单元,重做习题3-18,尽可能共享公共项。
(b)仅使用反相器(n=1)和2与非门单元类型重复(a)。
3-20 使用人工的方法,验证图3-55中电路的表达式是否为异或非函数。
3-21 如图3-56所示的是74HC138 MSI CMOS电路的逻辑原理图。写出每个输出端的布尔函数,详细地描述电路的功能。
3-22 对习题3-21,使用逻辑模拟得到电路的输出波形或者部分真值表。
3-23 (a)使用逻辑模拟验证例3-18描述的电路正确实现了BCD码至7段码的转换。
(b)设计这个转换器,假定未使用的输入组合(最小项10-15)是无关项而不是0。对设计进行模拟,并与(a)的模拟结果相比较。
*3-24 (a)使用如图3-7b所示的地线和电源符号,画出一个能实现常数向量函数F=(F7,F6,F5,F4,F3,F2,F1,F0)=(1,0,0,1,0,1,1,0)的图。
(b)使用输入1、0、A、A,画出一个能实现基本向量函数G=(G7,G6,G5,G4,G3,G2,G1,G0)=(A,A,0,1,A,A,1,1)的图。
3-25 (a)使用如图3-7b所示的地线和电源符号,以及图3-7c和图3-7d所示的传输线和反相器,画出一个能实现基本向量函数F=(F7,F6,F5,F4,F3,F2,F1,F0)=(A,A,1,A,A,0,1,A)的图。
(b)使用地线、电源符号和向量F的组成部分,画出一个能实现基本向量函数G=(G7,G6,G5,G4,G3,G2,G1,G0)=(F0,F1,F3,F2,1,0,0,1)的图。
3-26 (a)画出一个能实现向量G=(G5,G4,G3,G2,G1,G0)=(F13,F8,F5,F3,F2,F1)的图。
(b)画出一个能实现基本向量函数H=(H7,H6,H5,H4,H3,H2,H1,H0)=(F3,F2,F1,F0,G3,G2,G1,G0)的图。
3-27 一个家庭安全系统使用一个主控开关来控制警报、照明、视频监视、电话报警系统,当6个传感器中的一个或多个检测到入侵事件就向当地警察局电话报警。另外,还有单独的开关控制警报、照明和电话报警系统的开启和关闭。输入、输出和使能逻辑的功能描述如下:
输入
Si:i=0,1,2,3,4,5:六组传感器信号(0=检测到入侵者,1=没有检测到入侵者)
M:主开关(0=安全系统开启,1=安全系统关闭)
A:警报开关(0=警报解除,1=警报开启)
L:照明开关(0=照明关闭,1=照明开启)
P:报警开关(0=报警系统关闭,1=报警系统开启)
输出
A:警报(0=警报开启,1=警报解除)
L:照明(0=照明开启,1=照明关闭)
V:视频监视(0=视频监视关闭,1=视频监视开启)
C:报警(0=报警系统关闭,1=报警系统开启)
应用
如果一个或多个传感器检测到入侵者,并且安全系统为开启,则输出取决于其他开关的输出状态。否则,所有的输出都无效。
使用与门、或门和反相器构造这样一个门输入开销最少的报警电路。
3-28 使用2个3-8译码器和16个二输入与门构造一个4-16译码器。
3-29 使用如图3-16所示的5个带使能的2-4译码器来构造一个带使能的4-16译码器。
*3-30 使用1个3-8译码器、一个2-4译码器和32个二输入与门来构造一个5-32译码器。
3-31 设计一个特殊的4-6译码器。输入码的范围从000至101。对于一个给定的输入码,对应的输出Di为1,其他输出为0,其中i的值等于输入码的等效十进制数值。使用1个2-4译码器、1个1-2译码器和6个二输入与门设计这个特殊的译码器,使所有译码器的输出至少使用一次。
3-32 一个电子游戏使用7段数码管(发光二极管)阵列来显示骰子的随机结果。设计一个译码器来点亮适当的二极管,分别用于骰子的6个面。需要显示的图形如图3-57所示。
(a)使用1个3-8译码器和几个或门把输入X2、X1和X0的3位组合1~6。映射到对应的输出a~g,输入组合000和111是无关项。
(b)注意表示骰子的6个面只需要点阵图案集合的一部分即可表示。例如,点阵图案A={d}和点阵图案B={a,g}可以被用来表示输入值1、2、3,其中点阵图案{A}表示1,点阵图案{B}表示2,点阵图案{A,B}表示3。定义4个点组合A、B、C、D,即可组成所有6个输出图案。设计一个最小化的译码器,输入端为X2、X1、X0,输出端为A、B、C、D。并与(a)部分使用3-8译码器和或门的门输入成本进行比较。
3-33 只使用或非门和非门,画出有使能端的3-8译码器的详细逻辑图。
3-34 为了提高上坡跑步和步行的功能,跑步机可以进行坡度等级设定,设定范围在0.0%~15.0%,递增量为0.1%。(百分比形式的等级就是用百分比表示坡度。例如,坡度0.10就是等级10%。)这个跑步机有一个10厘米高、20厘米宽的液晶显示点阵屏,可显示坡度随时间变化的曲线。我们这里只关心纵坐标数据的显示。
为了用液晶点阵屏的垂直位置上的圆点来表示当前的等级,需要将151种的等级值(0.0~15.0)转换为点阵屏上的10个不同的点位置:P0~P9。输入值区间到输出点的对应关系如下:[(0.0,1.4),0], [(1.5,2.9),1], [(3.0,4.4),2], [(4.5,5.9),3], [(6.0,7.4),4], [(7.5,8.9),5], [(9.0,10.4),6], [(10.5,11.9),7], [(12.0,13.4),8], [(13.5,15.0),9]。等级值用一对数值来表示,一个是用4位二进制码表示的值,范围是0~15;另一个是用4位BCD码表示的值,范围是0~9。例如,10.6表示形式就是(10,6)[1010,0110]。设计一个8输入10输出的特殊译码器来实现这个转换。提示:使用两个子电路,一个是4-16译码器,二进制码作为其输入,D0~D15作为输出。另一个电路判断BCD输入值是大于还是等于5(0101),GE5作为其输出值。另外还需要一个电路将D0~D15和GE5结合构成P0~P9。例如:
P4=D6+D7·
P5=D7·GE5+D8
*3-35 设计一个四输入优先级编码器,其输入和输出如表3-6所示。但是真值表中输入D0的优先级最高,D3的优先级最低。
3-36 写出十-二进制优先级编码器的真值表:输入端从I1到I9,输出端从A3到A0以及V。输入I9的优先级最高。
3-37 (a)使用1个3-8译码器和1个8×2与或门设计一个8-1多路复用器。
(b)使用2个4-1多路复用器和1个2-1多路复用器重做(a)。
3-38 使用1个4-16译码器和1个16×2与或门,设计一个16-1多路复用器。
3-39 使用1个3-8译码器和2个8×2与或门,设计一个双8-1多路复用器。
3-40 使用1个3-8译码器、1个1-2译码器、1个12×3与或门来构造1个12-1多路复用器。选择码0000至1011必须直接用于译码器的输入端,并且不带任何附加逻辑。
3-41 使用4个单独的8-1多路复用器和2个四重的2-1多路复用器来构造1个四重10-1多路复用器。这些多路复用器必须相互连接,这样选择码0000至1001就可以直接用于多路复用器的选择输入端,而且无需任何附加逻辑。
*3-42 使用2个8-1多路复用器来构造1个15-1多路复用器。两个多路复用器应该相互连接,这样用于产生选择码0000至1110上的附加逻辑就最少。
3-43 重新整理图3-16所示电路的紧凑真值表,证明这个电路可以作为多路分配器。
3-44 一个组合电路的功能由如下所示的3个布尔函数表示:
F1=+XYZ
F2=+XYZ
F3=XYZ+
使用1个译码器和或门来设计这个电路。
3-45 用逻辑电路控制汽车的尾灯。在每一个尾灯中都有一个独立的灯泡。
输入:
LT左转弯开关—使得左边的灯闪烁
RT右转弯开关—使得右边的灯闪烁
EM紧急情况开关—使得两边的灯都闪烁
BR紧急刹车开关—使得两边的灯都亮
BL频率为1 Hz的闪烁信号
输出:
LR控制左边灯亮
RR控制右边灯亮
(a)写出关于LR和RR的等式。假设BR比EM优先,LT和RT比BR优先。
(b)使用1个4-16译码器和或门实现函数LR(BL,BR,EM,LT)和函数RR(BL,BR,EM,RT)。
3-46 使用1个8-1多路复用器和1个输入端变量为D的反相器来实现下面的布尔函数:
F(A, B, C, D)=m(1, 3, 4, 11, 12, 13, 14, 15)
*3-47 使用1个4-1多路复用器和其他的门来实现布尔函数:
F(A, B, C, D)=m(1, 3, 4, 11, 12, 13, 14, 15)
将输入A和B作为选择端,4条输入线的信号作为变量C和D的函数。通过将AB分别设为00、01、10、11,并将函数表达式F看作C和D的函数,这样可确定输入变量的值。这些函数需要增加其他的门来实现。
3-48 使用2个带使能的3-8译码器、1个反相器和最大扇入为4的或门来完成习题3-47。
3-49 设计一个组合电路以实现两个2位数A1A0和B1B0与进位输入C0相加,产生2位和S1S0和进位输出C2。采用二级电路和反相器实现整个电路产生三个输出。对于加法器的每个输出采用以下表达式实现:
Si=AiBiCi+AiBiCi+AiBiCi+AiBiCi
Ci+1=AiBi+AiCi+BiCi
*3-50 图3-58给出了四位加法器最低位运算的逻辑图,这与集成电路74283内部的实现相同。试验证该电路的全加器功能。
*3-51 写出下列无符号二进制数的反码和补码:
10011100,10011101,10101000,00000000,10000000
3-52 求下列无符号二进制数相减的结果,其中减数采用二进制补码表示:
(a) 11010―10001 (b) 11110―1110 (c) 1111110―1111110 (d) 101001―101
3-53 重做习题3-52,假设这些数字采用有符号二进制补码表示。使用扩展使操作数位长相等。试指出对所有给定的减数取补是否发生溢出,减法运算结果是否产生溢出。当没有发生溢出时,试用最少的位数重新计算,并保证不发生溢出。
*3-54 对负数采用有符号的二进制补码表示,计算以下等式:
(+36)+(-24) (-35)―(-24)
3-55 以下二进制数是有符号数,最左边的位为符号位,负数采用二进制补码表示。计算下式,并验证结果:
(a) 100111+111001 (b) 001011+100110 (c) 110001-010010 (d) 101110-110111
指出每种运算是否发生溢出。
+3-56 设计两种组合电路实现对4位的输入求补,即输出为输入的二进制补码。以下两种设计均可采用与门、或门和非门实现:
(a)电路采用简化的二级实现,并根据输入变量的需要增加反相器。
(b)电路由4个相同的2输入,2输出单元组成,每个单元完成1位的处理。这些单元以级联方式连接,单元之间通过进位位相连,最右端的进位值为1。
(c)分别计算(a)和(b)设计中的门输入成本,并根据门的输入成本判断哪个设计较佳。
3-57 采用压缩技术,用带进位输出的4位加法器设计一个递增2的4位递增器,这个递增器在4位输入上加一个二进制数0010,实现的功能是:S=A+0010。
3-58 采用压缩技术,用不带进位输出的8位加减法器设计一个不带进位输出的8位电路,这电路当S=0时递增输入000000101,S=1时递减输入00000101。设计不同的1位单元来完成上述功能,并分别指出其在8个比特位处的类型。
3-59 设计一个比较两个4位无符号数A和B的组合电路,验证是否B大于A。该电路仅有一个输出X,当A<B时X=1,A≥B时X=0。
+3-60 采用四个3输入、1输出的电路重做习题3-59,每个单元电路处理1位。四个电路通过进位信号级联起来,每个单元的一个输入是进位输入,输出信号为进位输出。
3-61 重做习题3-59,对4位减法器使用压缩技术,X作为借位输出。
3-62 设计一个组合电路来比较两个4位无符号数A和B,判断是否A=B或A>B。使用如习题3-60的迭代电路来实现。
+3-63 设计一个5位的符号-数值的加减法器。电路分以下三块实现:
(1)符号生成和加法-减法控制逻辑。
(2)减法中被减数使用二进制补码的无符号数的加减法器。
(3)可选的补码结果纠正逻辑。
*3-64 对图3-45中的加减法电路,下面是其输入选择端S和数据输入A与B的值:
S A B
(a) 0 0111 0111
(b) 1 0100 0111
(c) 1 1101 1010
(d) 0 0111 1010
(e) 1 0001 1000
求出每种情况下输出S3、S2、S1、S0和C4的值。
3-65 参考图3-28的设计,写出图3-58全加器电路的VHDL结构化描述。编译并仿真该描述,加载所有的8种输入组合验证描述的正确性。
3-66 编译并仿真图3-47和图3-48中的4位加法器。用所有8种输入组合检查最右端的全加器,用同样的组合检测其他的全加器。另外,使用一些输入组合验证C0处的0和1能否传递到C4,以便检查所有全加器之间的进位链连接。
*3-67 编译并仿真图3-49中4位加法器的行为描述。假设使用行波进位实现,用所有8种输入组合检查最右端的全加器。同样,加载一些输入组合验证C0处的0和1能否传递到C4,以便检查所有全加器之间的进位链连接。
+3-68 参考图3-49的设计及图3-29中对S使用“when-else”判定,写出图3-46加减法器电路(详情参见图3-45)的VHDL高层行为描述,编译并仿真该描述。假设使用行波进位实现,使用16种输入组合检验全加减法器的某一级。同样,使用一些输入组合验证C0处的0和1能否传递到C4,以便检查全加器之间的进位链连接,同时检查溢出信号。
3-69 参考图3-31的描述,写出图3-58中全加器电路的Verilog结构描述。编译并仿真该描述。用所有8种输入组合验证描述的正确性。
3-70 编译并仿真图3-50中的4位加法器。使用所有8种输入组合检验最右端的全加器,并用同样的组合检查其他的全加器。另外,使用一些输入组合验证C0处的0和1能否传递到C4,以便检查所有全加器之间的进位链连接。
*3-71 编译并模拟图3-51中4位加法器。假设使用行波进位实现,用所有8种输入组合检查最右端的全加器。同样,加载一些输入组合验证C0处的0和1能否传递到C4,以便检查所有全加器之间的进位链连接。
3-72 参考图3-51的描述和图3-34中S使用“二进制判定”的方法,写出图3-46加减法器的Verilog高层行为描述。编译并仿真该描述。假设使用行波进位实现,对该设计加载输入(1)使所有可能的16种组合出现在全加减法器的第2位。(2)同时使第2位的进位输出出现到某个输出上。另外,使用一些输入组合验证C0处的0和1能否传递到C4,以便检查所有全加器之间的进位链连接。