複製鏈接
請複製以下鏈接發送給好友

桶形移位器

鎖定
桶式移位器是一種組合邏輯電路,通常作為微處理器CPU的一部分。它具有n個數據輸入和n個數據輸出,以及指定如何移動數據的控制輸入,指定移位方向、移位類型(循環、算術還是邏輯移位)及移動的位數等等。
中文名
桶形移位器
外文名
Barrel shifter

桶形移位器設計任務

設計一個簡單16位桶式移位器,只能向左循環移位,所以控制輸入僅需指明移動的位數。
系統框圖為 [1] 
例如,已知16個數據輸入及左移位數S=0101(5位)則16個數據輸出分別為 [1] 

桶形移位器設計思路

從上面的例子可以看出,對單個輸出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實現,移動可以通過輸入在多路複用器的輸入端的連接實現,連接示意圖如下。 [2] 
參考資料