第 6章 组合逻辑电路设计实例数字逻辑设计及应用桶式移位器简单浮点编码器双优先级编码器级联比较器关模比较器桶式移位器
具有 n个 数据输入 和 n个 数据输出
控制输入,指定输入输出之间如何移动数据
(移位方向、移位类型、移动的位数)
设计一个简单 16位桶式移位器(向左移位)
16个数据输入和 16个数据输出若输入,0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
则输出,5 6 7 8 9 10 11 12 13 14 15 0 1 2 3 4
用 4位控制输入 S[3:0]指定移动位数,例,S=0101,
思路:输出的每一位都是从 16个输入中选出的
—— 多路复用器(数据选择器 )
需要解决的问题:
( 1)需要多少个 16选 1的多路复用器?
( 2)如何控制输出移位?
方案一:利用 74x151
1、如何扩展路复用器?
16个输入端; 4个地址选择端;
EN
CBA Y
D7~D0
EN
CBA Y
D7~D0D[7:0]
D[15:8]
S3
YY
EN
A
B Y
C Y
D0
D7
74x151
当 S=0101时
Y=D5
S[2:0]
S[2:0]
S[3:0]
D[15:0]
2、如何产生移位??
EN
CBA
D0
D1
D2
D3
D4
D5
D6
D7
74x151
Y
Y
DI0
DI1
DI2
DI3
DI4
DI5
DI6
DI7
EN
CBA
D0
D1
D2
D3
D4
D5
D6
D7
74x151
Y
Y
S[2:0]
Y0
DI1
DI2
DI3
DI4
DI5
DI6
DI7
DI0
S[2:0]
Y1
2
3
4
5
6
7
0
1
Y2
通过控制数据输入端的连接产生移位
EN
A
B Y
C Y
D0
D7
74x151
2、如何产生移位??
通过控制数据输入端的连接产生移位
EN
CBA Y
D7~D0
EN
CBA Y
D7~D0DIN[7:0]
DIN[15:8]
Y0
S[2:0]
S[2:0]
S3
8 1
DIN[0,1 9
Y1
74x151
74x151
绿色表示高位红色表示低位
P334
图 6-1
DIN[14:7]
DIN[6:0,15]
DIN[13:6]
DIN[5:0,15,14]
DIN[0,15:9]
DIN[8:1]
DIN[15:8]
DIN[7:0]
DIN[15:0]
S[3:0]
DOUT15
DOUT14
DOUT1
DOUT0
DOUT[15:0]
S[2:0]S3
74x151
74x151
74x151
74x151
74x151
74x151
74x151
74x151
P334
图 6-1
DIN[14:7]
DIN[6:0,15]
DIN[13:6]
DIN[5:0,15,14]
DIN[0,15:9]
DIN[8:1]
DIN[15:8]
DIN[7:0]
DIN[15:0]
S[3:0]
S[2:0]S3
74x251
74x251
74x251
74x251
74x251
74x251
74x251
74x251
利用三态输出
74x251
DOUT[15:0]
基本原理:
利用多路复用器,
通过控制数据输入端的连接使输出产生移位。
并行处理负载太大方案二:利用 74x157
G
S
A4~A0
B4~B0 Y4~Y0
74x157
DIN[3:0]
DIN[2:0,3]
如何利用 2输入 4位多路复用控制移位?
基本原理:
利用多路复用器,
通过控制数据输入端的连接使输出产生移位。当 S=0时,Y=A,不移位当 S=1时,Y=B,相当于移动一位改变 A端输入数据的连接顺序可以使输出:左 /右移动一或多位
74x157
A4~A0
B4~B0
G S
Y4~Y0
YO[3:0]
YO[7:4]
YO[11:8]
YO[15:12]
DI[3:0]
DI[7:4]
DI[11:8]
DI[15:12]
DI[2:0,15]
DI[6:3]
DI[10:7]
DI[14:11]
S0DI[15:0] YO[15:0]
A4~A0
B4~B0
G S
Y4~Y0
A4~A0
B4~B0
G S
Y4~Y0
A4~A0
B4~B0
G S
Y4~Y0
S = 0
Y = A
不移位
S = 1
Y = B
移动 1位注意移位方向
DI[15:0]
74x157
74x157
74x157
74x157
S0
74x157
74x157
74x157
74x157
S1
74x157
74x157
74x157
74x157
S2
74x157
74x157
74x157
74x157
S3
DO[15:0]
S[3:0]
Si=1,移动 1位 移动 2位 移动 4位 移动 8位
Si=0,不移动 串行方式,节省器件,延迟大,P335 图 6-2
首先解决的几个问题:
⑴ 如何确定第一个,1” 的位置?
⑵ 如何确定 3位指数?
⑶ 如何从第一个,1” 开始选出 4位?
浮点编码器
11010110100 = 1101× 27 + 0110100
00100101111 = 1001× 25 + 01111
00000000010 = 0010× 20 + 0
111
101
000
从第一个,1” 开始取 4位由第一个,1” 的位置决定
3位指数浮点数的表示,B = M × 2E + T
截位误差
—— 优先编码器
—— 优先编码器的输出
—— 数据选择器
( 1) 如何确定第一个,1” 的位置?
A2
A1
A0
GS
EO
EI
I7
I1
I0
74x148
—— 优先编码器
B10_L
B4_L
B3_L
11010110100
00100101111
00000000010
B = M× 2E+ T
E2_L
E1_L
E0_L
通常 M3=1
只有 B10_L~ B3_L都无效
M3=0
( 3) 如何从第一个,1” 开始选出 4位 M3M2M1M0?
( 2) 如何确定 3位指数?
(由 GS端获得)
( 1) 如何确定第一个,1” 的位置?
—— 多路复用器只需要选出 M2 M1 M0
( 3) 如何从第一个,1” 开始选出 4位 M3M2M1M0?
( 2) 如何确定 3位指数?
M2
E2
E1
E0
B2
B3
B9
EN
Y
Y
A
B
C
D0
D1
D7
74x151
同样的,通过改变数据输入端的连接可以得到 M2M1M0
通常 M3=1
只有 B10_L~ B3_L都无效
M3=0(由 GS端获得)
P337 图 6-3
M2_L
E0_L
E1_L
E2_L
B9_L
B8_L
B2_L
注意有效电平双优先级编码器
A2~A0
GS
EO
EI
74x148
I7~I0
利用 74x148
找出最高优先级如何找第二高优先级?
先,排除,最高优先输入再用 74x148找一次其他输入不变强制最高优先输入无效
—— 利用译码器和“与门”实现
(注意有效电平)
可以找出最高和第二高优先级的编码器需要 2个优先编码器
1个译码器、若干“与门”
R_L[7:0]
A2~A0
GS
EO
EI
74x148
I7~I0 Y7~Y0
GI
74x138
CBA
G2A,B
A[2:0]
AVALID
最高优先输入为 0,其余输入为 1
A2~A0
GS
EO
EI
74x148
I7
I0
B[2:0]
BVALID
级联比较器
3片 74x682构成 24位比较器
P0~P7 P=Q
Q0~Q7 P>Q
P0~P7 P=Q
Q0~Q7 P>Q
P0~P7 P=Q
Q0~Q7 P>Q
[7:0]
[15:8]
[23:16]
P[23:0]Q[23:0]
PEQQ
PGTQ
P338 6.1.4
P340 图 6-7
关模比较器
输入:两个 8位无符号二进制整数 X 和 Y
一个控制信号 M
输出,8位无符号二进制整数 Z
逻辑功能,M = 1,Z = min(X,Y)
M = 0,Z = max(X,Y)
思路:(核心问题)
( 1)比较 X,Y的大小
( 2)使 Z为 X,Y之一
( 3)控制逻辑
—— 比较器( 8位)
—— 多路复用器(二选一)
—— 根据 M和 X,Y大小控制多路复用器的地址选择端。
G
S
1A~4A
1B~4B
74x157
1Y~4Y
控制逻辑
M
多路复用器
Z
比较器XY X>Y
思路:(核心问题)
( 1)比较 X,Y的大小
( 2)使 Z为 X,Y之一
( 3)控制逻辑
—— 比较器( 8位)
—— 多路复用器(二选一)
—— 根据 M和 X,Y大小控制多路复用器的地址选择端。
关模比较器原理框图控制逻辑
M
多路复用器 Z
比较器XY X>Y
G
S
1A~4A
1B~4B
74x157
1Y~4Y
G
S
1A~4A
1B~4B
74x157
1Y~4Y
P7~0
Q7~0
74x682
P=Q
P>Q
X[7:0]
Y[7:0] Z[7:0]
S=0? Y=A
S=1? Y=B
M
M
M P>Q_L S
0 0
0 1
1 0
1 1
S=0? Y=A
S=1? Y=B
0
1
1
0
G
S
1A~4A
1B~4B
74x157
1Y~4Y
G
S
1A~4A
1B~4B
74x157
1Y~4Y
P7~0
Q7~0
74x682
P=Q
P>Q
X[7:0]
Y[7:0] Z[7:0]
P341图 6-8
M=1,min(X,Y)
M=0,max(X,Y)