初次接觸譯碼器的童鞋可能會問,譯碼器是什么?
首先,我們需要明確,電腦和人類溝通,需要轉換。因為人類對于抽象語言比較擅長,而當前的計算機本質上只能識別0、1二進制串。因此,人類所表達的知識要被電腦接受,需要將其轉換編碼成二進制數,這一過程可以理解為編碼;而人類要理解計算機給我們計算的結果,則需要將結果解釋成我們能理解的對象(如七段顯示譯碼器中顯示的數據),這一個過程,其實就是譯碼。
另外,譯碼器不是客觀存在的,是根據我們人類的意志制造的,也就是說譯碼器長什么樣子是由人類決定的。我們現在常見的2-4譯碼器、3-8譯碼器等是硬件工程師和研發人員積累多年的經驗,抽象出的常用MSI基本元件,為硬件工程師進行電路設計提供基本功能單元。(有點類似于我們學習C語言時,C語言的標準函數庫)
常見的譯碼器包括2-4譯碼器、3-8譯碼器,這些都是典型的譯碼器,常見的2-4譯碼器,其真值表、邏輯電路功能如下圖所示:
2-4譯碼器的真值表中的功能是人類規定的,更直接點說,是一幫搞硬件研發的人規定,根據這個規定,可以直接寫出:
Yi = EN * mi
常見的2-4譯碼器74LS139如下圖所示:
74LS139片上有兩個2-4譯碼器,每個譯碼器上有一個低有效的使能端,四個輸出均為低有效。
在簡單介紹2-4譯碼器之后,那么問題來了,如何利用74LS139做一個4-16譯碼器?顯然,4-16譯碼器對應的功能應該是有4個高有效數據輸入端(不包括使能端),16個低有效的輸出端,從輸出的角度,我們至少需要兩個74LS139,那具體怎么做呢?首先,我們給輸出進行編號,如下圖所示:
在圖中,我們對輸出端進行了編號。我們希望第一個2-4譯碼器(從上向下看)的輸出對應/Y0/Y<sub>3</sub>,第二個譯碼器的輸出對應/Y<sub>4</sub>/Y7,第三個譯碼器對應/Y8/Y<sub>11</sub>,第四個譯碼器對應/Y<sub>12</sub>/Y15。
接下來該如何處理呢?顯然,對于每一個2-4譯碼器,只有兩位輸入,另外還有兩個輸入可以控制選擇哪一個2-4譯碼器。假設我們的4-16譯碼器的輸入是I3I2I1I0,其中低兩位I1I0直接接每個2-4譯碼器的A、B端,則我們可以控制高兩位I3I2的取值,如果我們選擇:
I3I2 = 00,取第一個2-4譯碼器,則I3I2I1I0的取值范圍為[0000,0011],I3I2I1I0對應的最小項為m0,m1,m2,m3,其輸出對應/Y0~/Y3
I3I2 = 01,取第二個2-4譯碼器,則I3I2I1I0的取值范圍為[0100,0111],I3I2I1I0對應的最小項為m4,m5,m6,m7,其輸出對應/Y4~/Y7
I3I2 = 10,取第三個2-4譯碼器,則I3I2I1I0的取值范圍為[1000,1011],I3I2I1I0對應的最小項為m8,m9,m10,m11,其輸出對應/Y8~/Y11
I3I2 = 11,取第四個2-4譯碼器,則I3I2I1I0的取值范圍為[1100,1111],I3I2I1I0對應的最小項為m12,m13,m14,m15,其輸出對應/Y12~/Y15
(上面這個結果,大家如果不怕麻煩,也可以畫出4-16譯碼器的真值表看)
到這一步,基本上與預想的差不多了,剩下的是實現如何根據高兩位來在4個譯碼器中選擇合適的2-4譯碼器。顯然,這又需要一個2-4譯碼器來實現,因此,最終的4-16譯碼器如下圖所示:
根據這個圖,大家可以順便進行驗證,并對這個過程進行總結,包括:思路、一般步驟、低位共享時高位如何控制等等。
童鞋們如有問題,可以直接在簡書上提問,或者我寫的地方有錯,咱們一起探討,共同進步!