桶式移位器是一种
组合逻辑电路,通常作为
微处理器CPU的一部分。它具有n个数据输入和n个
数据输出,以及指定如何移动数据的控制输入,指定移位方向、移位类型(循环、算术还是逻辑移位)及移动的位数等等。
设计任务
设计一个简单16位桶式移位器,只能向左循环移位,所以控制输入仅需指明移动的位数。
系统框图为
例如,已知16个数据输入及左移位数S=0101(5位)则16个数据输出分别为
设计思路
从上面的例子可以看出,对单个输出DOUT[15]来说,当输入S=0000(左移0位)时,DOUT[15]= DIN[15];若S=0001(左移1位),则DOUT[15]= DIN[14];以此类推。可以看出,输出DOUT[15]的值在16个输入中选择一个,具体选哪一个由输入S决定。可以使用一个十六选一的
多路复用器,以完成该功能。有下面的电路框图:
同样,对输出DOUT[14],也可以使用一个十六选一的多路复用器实现。只是当输入S=0000(左移0位)时,DOUT[14]= DIN[14];若S=0001,则DOUT[14]= DIN[13];以此类推,而S=1111,则DOUT[14]= DIN[15]。所以在输入的具体连接时,要保证上述功能实现,DIN的连接顺序略有变化。
同理可知,每一位输出要使用一个十六选一的多路复用器,整个电路需要16个。整个电路框图位:由上图也可以看出,循环左移位是通过不同多路复用器的输入端的连接实现,每个十六选一的多路复用器,其十六个输入根据移位的方向设置。
问题:1、假设要实现的功能变为循环右移位,电路应如何变化?
2、若将循环左移位变为逻辑左移位,又该如何变化?
3、如果有一个控制端M,控制是循环左移还是右移,电路中又该增加什么?
具体电路设计
利用MSI器件实现电路。
对每个十六选一的多路复用器,可以用2片74X151实现。扩展方法类似图5-66。四位选择端中的低三位S[2..0]连至C、B、A,最高位S[3]作为片选,为0时选上面的芯片,为1时选下面的。因为74X151的使能端EN
低电平有效,所以连接时S[3]直接接上面芯片的EN端,取非后接下面芯片。对一位输出,具体电路图为:
可简化画为:总的实现电路图为
讨论1)所需芯片:74X151 16′2=32片;
74X00(与非门) 16/4=4片;
74X04(非门) 1/6片;(每片上有6个门)
前面的设计方案,每一位输出可以根据输入S,选择一次移位0~15位。其实,移位可以分几步移,比如S=0101,则可以先移1位,再移4位,表示在电路上,就是串联结构。移位位数:S=(S3S2S1S0)2=(8′S3+4′S2+2′S1+1′S0)10,其中SI有0和1两种取值,若SI=0,不移位,SI=1,移位1,2,4或8,具体数由I的值决定。可以选择74X157实现,两输入多路复用器。具体电路如下:
其中,中间信号X、Y、Z为由S0、S1、S2决定的移位结果。比如S=1101,则输入DIN左移位1位送入X,X左移位0位送入Y,Y左移位4位送入Z,Z左移位8位送入DOUT,从输入到输出一共移位1+4+8=13位。
同样地,如果将移位位数S表示为:
S=(S3S2S1S0)2=(8′S3+4′S2+2′S1+1′S0)10=((2′S3+1′S2)′4+(2′S1+1′S0))10,分两级结构,S3S2决定移动0位、4位、8位或12位,再由S1S0决定移动0位、1位、2位或3位,用四选一得多路复用器74X153实现,移动可以通过输入在多路复用器的输入端的连接实现,连接示意图如下。