概述
在譯碼器基礎和譯碼器應用中分別對譯碼器的真值表、電路圖、邏輯符號等進行了較為詳細的講解。編碼可以看成是譯碼的逆過程。通常,編碼是將計算機無法直接識別的數據,翻譯成二進制碼。
大家學習C語言時,一定對ASCII碼有所了解,它用8位二進制串表示26個字母大小寫、數字以及一些常見的控制符等;coding較多的童鞋肯定也對UTF-8,UTF-16等概念比較熟悉,這些編碼將全球所有的字符(特別是中日韓、阿拉伯等國家字符)進行了統一的編碼,感興趣的童鞋可以查看相關的國際標準。
編碼的原理較為直接簡單,本文余下部分主要介紹編碼器的基本原理和優先權編碼器。
基本編碼器
最基本的編碼器,莫過于十進制數用二進制表示,這是我們學習數字邏輯第一章的內容,即0~9這十個數字用二進制串表示,其真值表如下圖所示:
根據真值表,輸出與輸入之間的關系為:
除了我們熟悉的二-十進制編碼器,還有典型的n位二進制編碼器,即用n位二進制串對m(m <= 2n)個數字進行編碼,這個比較容易理解。
在基本編碼器中,要求編碼器在任意時刻,輸入端的m個輸入,只能有一個有效;若兩個輸入(如I1和I2)同時有效,則基本編碼器就會犯暈了。于是就有了下面的優先權編碼器。
優先權編碼器
在講解優先權編碼器原理之前,先介紹一下它的背景。基本編碼器的局限在于其一個時刻只能有一個輸入有效,然而,這種要求太過苛刻。在現實世界中,很多事情往往是一起來的,并且通常當你越忙的時候,外來的任務會越多(個人感受)。這個時候,我通常會給事情分一個優先級,孰輕孰重評估一下,列一個清單,先做什么,后做什么,這是一個正常人干活的邏輯。
對于計算機而言,上面這個邏輯照樣成立。計算機分為CPU、存儲器、IO幾大部件,IO上面掛的外設如鍵盤、鼠標、usb等等,它們與計算機之間的通訊是通過中斷來響應的。最簡單的例子,當我們敲擊鍵盤的時候,鍵盤電路會向操作系統發起一個中斷請求(每一個中斷請求都對應一個中斷號(整數)),操作系統會暫停當前工作,調用相應的中斷處理程序,將我們敲擊的字符顯示在屏幕上。我們的計算機上有很多外設,包括網絡上的通訊。在很多情況下,操作系統可能同時接收到多個中斷請求,這個時候,操作系統只能根據中斷請求的優先級別從高到低來處理。這正是優先權編碼器做的事情。
我們以8-3優先權編碼器進行說明,其邏輯功能圖如下所示:
如圖所示,8-3優先權編碼器由兩部分組成:優先權處理邏輯和基本的8-3編碼器。其中,優先權處理邏輯中的輸入與輸出之間的關系為:
H7 = I7
H6 = I6 * !I7 (*表示邏輯與,!表示邏輯非,下同)
H5 = I5 * !I6* !I7
...
H0 = I0 * !I1* !I2...*I7
上面的關系表達的意思是:I7的優先級最高,I0的優先級最低。當I7輸入有效時,不管其它輸入是否有效,優先處理邏輯將其轉變為H7;當I7無效,且I6輸入有效,不管其它輸入是否有效,轉換為H6...
回歸到中斷,假設操作系統處理8個中斷,依次命名為I0, I1, ..., I7,,其優先級如上所述,A0,A1,A2指示中斷響應程序的地址,當同時有多個中斷請求時,你應該能解釋清楚了。