回覆列表
  • 1 # 使用者253724974083

    這不是很明顯嘛。格雷碼:相鄰之間只變1bit,編碼密度高。獨熱碼:任何狀態只有1bit為1,其餘皆為0,編碼密度低。比如說,表示4個狀態,那麼狀態機暫存器採用格雷碼編碼只需要2bit:00(S0),01(S1),11(S2),10(S3);採用獨熱碼需要4bit:0001(S0),0010(S1),0100(S2),1000(S3)。所以很明顯採用格雷碼可以省2bit暫存器。難理解的是,為什麼獨熱碼更節省組合邏輯:其實很簡單,例一:假如我們要在程式碼中判斷狀態機是否處於某狀態S1,對於格雷碼的狀態機來說,程式碼是這樣的:assign S1 = (STATUS==2"b01); 對於獨熱碼來說,程式碼是這樣的就行:assign S1=STATUS[1]; 所以獨熱碼的譯碼非常簡單。例二:考慮最簡單的跳變,當A為1時,狀態機會從S0跳到S1:。採用格雷碼寫:STATUS[1:0] <= (STATUS==2"h00) & A ? 2"h01 : 2"h00;採用獨熱碼寫:STATUS[1] <= STATUS[0] & A;有人懷疑這裡的邏輯,認為只check獨熱碼的一個bit有問題。當然是沒問題的,0110,0011等編碼屬於不care的編碼,在卡諾圖化簡中,不care的編碼可以與其餘的有效編碼合併化簡。實際上綜合器也會這麼做,所以獨熱碼非常容易化簡。假如說S0跳到S1條件為A;S1跳到S2條件為B;S2跳到S3條件為C;S3跳到S0條件為D;那麼整個狀態機化簡之後程式碼就是:STATUS[0] <= STATUS[3] & D;STATUS[1] <= STATUS[0] & A;STATUS[2] <= STATUS[1] & B;STATUS[3] <= STATUS[2] & C;總結一下:獨熱碼適合寫條件複雜但是狀態少的狀態機;格雷碼適合寫條件不復雜但是狀態多的狀態機。

  • 中秋節和大豐收的關聯?
  • 當你失去你最喜歡的女朋友了,你心裡如何是好呢?