獨熱碼,在英文文獻中稱做 one-hot code, 直觀來說就是有多少個狀態就有多少比特,而且只有一個比特為1,其他全為0的一種碼制。通常,在通信網路協定棧中,使用八位或者十六位狀態的獨熱碼,且系統占用其中一個狀態碼,餘下的可以供用戶使用。
基本介紹
- 中文名:獨熱碼
- 外文名:one-hot code
- 名詞解釋:有多少個狀態就有多少比特
- 舉例:有6個狀態的獨熱碼狀態編碼
舉例,相關概念,
舉例
例如,有6個狀態的獨熱碼狀態編碼為:000001,000010,000100,001000,010000,100000。
再如,有十六個狀態的獨熱碼狀態編碼應該是:0000000000000001,0000000000000010,0000000000000100,0000000000001000,0000000000010000,0000000000100000 ,……,10000000000000000。但是通常我們為了方便書寫,將二進制簡化為十六進制表示(從右往左每四位二進制位用一位十六進制數表示),那么,以上十六狀態的獨熱碼可以表示成0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, ……, 0x8000(其中的0x是十六進制的前綴表示,在諸如PLC等程式中也有其他表示方法)。
相關概念
介紹
碼制和數制不一樣。制,是表示“方法”:碼制就是編碼方法;數制,就是計數方法。
編碼可以表示任何人為賦予的含義,可以是邏輯的,也可以是非邏輯的,編碼沒有大小之分,也可稱作代碼。 編碼沒有位權,或者說每位是平等的,每個位上數字比較大小是沒有意義的。數碼(編碼)就是利用數字或字母來做記號的一串編碼或者指其中某位編碼數。這裡應該注意,編碼對應的數字其值也可以是有大小的數或者其他量。
數制,也稱計數制度,計數方法(注意這裡計數不是記數),數有大小之分,每一位有權重。常見的數制有:二進制,十進制,十六進制,六十進制等。
利用某種特定數制形式來編碼,稱作某進制編碼,但是這個編碼並不一定等同於該進制的數(計數)。二進制編碼也可稱連續編碼,也就是碼元值的大小是連續變化的,逢二進一。比如000,001,010,011,100,101。
數和碼也有聯繫,通常用在數字邏輯中的碼制有,格雷碼(就是兩個碼之間只差1位不同,000,001,011,010,110,100)、BCD碼、8421BCD碼、餘三碼、ASCII碼等。
二進制編和格雷碼利弊
二進制編碼、格雷碼編碼使用最少的觸發器,消耗較多的組合邏輯,而獨熱碼編碼反之。獨熱碼編碼的最大優勢在於狀態比較時僅僅需要比較一個位,從而一定程度上簡化了解碼邏輯。雖然在需要表示同樣的狀態數時,獨熱編碼占用較多的位,也就是消耗較多的觸發器,但這些額外觸發器占用的面積可與解碼電路省下來的面積相抵消。
Binary(二進制編碼)、gray-code(格雷碼)編碼使用最少的觸發器,較多的組合邏輯,而one-hot(獨熱碼)編碼反之。one-hot 編碼的最大優勢在於狀態比較時僅僅需要比較一個bit,一定程度上從而簡化了比較邏輯,減少了毛刺產生的機率。由於CPLD更多地提供組合邏輯資源,而FPGA更多地提供觸發器資源,所以CPLD多使用gray-code,而FPGA多使用one-hot編碼。另一方面,對於小型設計使用gray-code和binary編碼更有效,而大型狀態機使用one-hot更高效。