天天看點

FPGA之道(56)狀态的編碼方式

文章目錄

  • 前言
  • 狀态的編碼方式
    • binary
    • one-hot
    • gray
    • johnson
    • auto
    • compact
    • sequential
    • user
    • speed
    • none
    • safe mode

前言

據我說知,并非在代碼設計時,狀态編碼寫成什麼樣子就會綜合成什麼樣子,還需要對綜合屬性進行操作,那具體是什麼樣子呢?一起看看《FPGA之道》對這一問題是怎麼描述的。

本文摘選自《FPGA之道》。

狀态的編碼方式

狀态編碼是使用特定數量的寄存器,通過特定形式的取值集合,将狀态集合表示出來的過程。這一工作通常是由編譯器完成的,我們可以通過修改編譯選項或者添加綜合限制的方式來影響狀态編碼的結果。下面就以相關的編譯選項為線索,對各種不同的狀态編碼方式做一些介紹。

binary選項表示采用二進制的編碼方式來進行狀态編碼,它的特點是編碼簡單,非常符合人們通常的計數規則。例如,狀态集合為{S0、S1、S2、S3},那麼若采用binary的編碼方式,結果應該為:

S0 = 00;

S1 = 01;

S2 = 10;

S3 = 11。

one-hot選項表示采用one-hot(又叫獨熱碼)的編碼方式來進行狀态編碼,它的特點是狀态寄存器在任何狀态時的取值都僅有一位有效。例如,狀态集合為{S0、S1、S2、S3},那麼若采用one-hot的編碼方式,結果應該為:

S0 = 0001;

S1 = 0010;

S2 = 0100;

S3 = 1000。

由此可見,one-hot編碼方式的結果其實就是二-四譯碼器的輸出,是以在狀态選擇時需要的譯碼電路也最簡單,譯碼速度也最快,而且還能夠避免譯碼時引起毛刺,是以對FPGA設計的速度性能和功耗非常有利,在一些大型電路中使用的較多。

不過one-hot編碼方式占用的寄存器資源較多,是以适合在寄存器富裕時使用,而且由于任意兩個狀态之間所對應的寄存器取值都有兩位不同,是以在狀态切換時會産生不穩定态,而這會對組合形式的輸出信号産生不好的影響。

gray選項表示采用格雷碼的方式來進行狀态編碼,它的特點是相鄰兩個狀态的寄存器表示僅有一位變化,更多關于格雷碼的概念和具體編碼公式請參考【本篇->程式設計思路->數字電路中的隐患->寄存器輸出的不穩定态->特定情況下去除不穩定态的方法】小節。例如,狀态集合為{S0、S1、S2、S3},那麼若采用binary的編碼方式,結果應該為:

S2 = 11;

S3 = 10。

由于兩個狀态之間僅有1位不同,是以非常有利于消除當狀态機在相鄰狀态間跳轉時所産生的毛刺,不過上述優勢的前提是必須保證狀态機的狀态遷移是順序或逆序變化的,是以gray編碼方式僅适用于分支較少的狀态機,而當狀态機的規模較為龐大時,gray碼的優勢便很難得到發揮。

johnson選項表示采用約翰遜碼的方式來進行狀态編碼,它與gray編碼方式的效果類似,僅适用于分支較少的狀态機。不過與gray編碼方式通常采用N位寄存器可表示個狀态不同,johnson編碼方式通常采用N位寄存器表示2N個不同的狀态。它碼字生成原則為:初始時N位寄存器取值均為0;然後取最高位(左邊)的寄存器,在對其值取反後将其放在最低位(右邊)的寄存器後,形成新的最低位;如此往複2N+1次,便得所有johnson碼字。例如,狀态集合為{S0、S1、S2、S3、S4、S5},共6個狀态,那麼若采用johnson的編碼方式,寄存器位寬應為3,編碼結果應該為:

S0 = 000;

S1 = 001;

S2 = 011;

S3 = 111;

S4 = 110;

S5 = 100。

通過上例可見,johnson編碼後的兩個相鄰狀态之間也僅有1位不同。

auto選項表示自動選擇的意思,它是編譯器在進行狀态編碼時的預設選項,此時編譯器将會根據它的判斷選擇它認為合适的狀态編碼方式。

compact選項表示采用最精簡、節省的方式來進行狀态編碼,即采用最少的寄存器來表示整個狀态集合。compact選項關注的是資源上面的節省,這點和one-hot恰恰相反,通過前面的介紹,binary等編碼方式都可能在compact選項下被使用。

sequential選項表示采用盡最大努力優化目前狀态到下一狀态的等式處理,使得産生次态的邏輯最簡。

user選項表示采用自定義的方式進行編碼,它沿用使用者在HDL代碼中為狀态集合所賦予的編碼方式,正如我們在【狀态機的HDL模闆->狀态集合的HDL定義->實作層級的定義】小節中所描述的那樣 。如果該選項未被使能,那麼編譯器将無視我們在HDL代碼中為狀态集合顯示賦予的那些編碼值。

繼續閱讀