狀態機編碼風格(二)之Two-Always狀態機

2021-12-28 數字晶片實驗室
可綜合的狀態機有多種編碼方式。最常見的是two-always狀態機one-always狀態機

 

在two-always狀態機中,輸出邏輯在組合always邏輯,或者單獨的assign語句中實現,即two-always狀態機包含present-state時序邏輯next-state組合邏輯輸出生成組合邏輯

 

present-state時序邏輯

指南:在時序邏輯中僅使用非阻塞賦值

 

Verilog非阻塞賦值用來建模實際硬體的流水線寄存器行為,消除了許多潛在的Verilog競爭冒險

always @(posedge clkor posedge rst)if (rst) state <= 4'b0;else state <= next;

next-state組合邏輯

指南:在組合邏輯中僅使用Verilog阻塞賦值來更新next-state值。next-state組合邏輯通過敏感列表來觸發組合always語句。敏感列表為present-state時序邏輯的輸出和狀態機的輸入。

 

在always語句塊後面是一個默認的next-state賦值,將next-state賦值為全x或者IDLE。通過對next-state進行默認賦值,如果有些情況沒有明確狀態轉換,next-state將是默認狀態。

always @(state or i1 or i2 or i3 or i4) beginnext = IDLE;case (state)IDLE: beginnext = ERROR;if (!i1) next = IDLE;if (i1 & i2) next = S1;if (i1 & !i2 & i3) next = S2;endS1: ...

輸出生成組合邏輯

狀態機的輸出可以在組合always邏輯或者單獨的assign語句中生成。

 

對於Mealy狀態機來說,其輸出同樣也可以在組合always邏輯或者單獨的assign語句中生成

assign rd_out = (state == READ) & !rd_strobe_n;

 或者

case (state)...READ: if (!rd_strobe_n) rd_out = 1'b1;

在該狀態機中,還可以通過添加一個時序邏輯always語句來實現寄存器輸出


往期精彩

相關焦點

  • Verilog HDL設計進階:有限狀態機的設計原理及其代碼風格
    由於寄存器傳輸級(RTL)描述是以時序邏輯抽象所得到的有限狀態機為依據的,所以把一個時序邏輯抽象成一個同步有限狀態機是設計可綜合風格的Verilog HDL模塊的關鍵。在本章中我們將通過各種實例由淺入深地來介紹各種可綜合風格的Verilog HDL模塊,並把重點放在時序邏輯的可綜合有限狀態機的Verilog HDL設計要點。
  • 面試經典問題系列--狀態機
    常見的I2C,APB協議中也有狀態機的影子,可以說是完完全全逃不掉,今天筆者就以自己的理解好好理一下狀態機的知識點。Moore 狀態機:組合邏輯的輸出只取決於當前狀態。Mealy 狀態機:組合邏輯的輸出不僅取決於當前狀態,還取決於輸入狀態。通常Moore 狀態機的狀態會比Mealy 狀態機多一個。
  • SNUG論文巡禮系列二:State Machine Coding styles for Synthesis
    本文詳細介紹了可綜合有限狀態機的Verilog coding styles,以及one-always
  • FPGA工程師:如何在FPGA中實現狀態機?
    定義狀態機  當需要定義一個狀態機時,首先要繪製一張狀態圖。狀態圖可用來顯示狀態、狀態間的轉換和狀態機的輸出。圖1顯示了Moore狀態機的狀態圖(左)和Mealy狀態機的狀態圖(右)。    實現Moore狀態機還是Mealy狀態機,取決於狀態機需要實現的功能,以及特定的反應次數要求。兩種狀態機之間的最大差別在於狀態機如何對輸入做出反應。在輸入和設置的適當輸出之間,Moore狀態機一般有一個時鐘周期的延遲。這就意味著 Moore狀態機無法對輸入變化立即做出反應,這點在圖3中可以清楚地看到。
  • JavaScript狀態模式及狀態機模型
    有限狀態機 Finite-state machine就是狀態模式的一個模型,在日常開發中很多具有多種狀態的對象,都可以用有限狀態機模型來模擬,一般都具有以下特點:事物擁有多種狀態,任一時間只會處於一種狀態不會處於多種狀態;動作可以改變事物狀態,一個動作可以通過條件判斷,改變事物到不同的狀態,但是不能同時指向多個狀態,一個時間,就一個狀態,就,一個。
  • 三段式狀態機的思維陷阱
    endcaseend狀態機二看似代碼好像沒有什麼問題,但從輸出波形可以看出,q沒有正確輸出。將這個問題延展開,目前網站書籍中講解狀態 機的例子都以"狀態多,輸出少"為主,這種類型的狀態機,不用太多考慮狀態劃分問題,直接用moor型就ok了,不過,現實工作中我們還會遇到很多"狀態 少,輸出多"的情況,那該如何劃分狀態呢?
  • 單片機之狀態機淺談
    說到單片機編程,不得不說到狀態機,狀態機做為軟體編程的主要架構已經在各種語言中應用,當然包括C語言,在一個思路清晰而且高效的程序中,必然有狀態機的身影浮現。靈活的應用狀態機不僅是程序更高效,而且可讀性和擴展性也很好。
  • 簡單的狀態機入門!
    大家晚上好,今天給大家分享一個篇關於狀態機的學習。所以今天的文章只是帶大家入門和了解一下狀態機,等你真正在工作當中有遇到這個狀態機作為開發需要的話,你再去深入研究。一、什麼是狀態機?1、有限狀態機:常說的狀態機是有限狀態機FSM(Finite State Machine)。
  • 簡單的狀態機入門! - OFweek電子工程網
    大家晚上好,今天給大家分享一個篇關於狀態機的學習。為啥突然會寫這個話題,因為今天要看文章和視頻學習的時候,突然看到了「狀態機」三個字,也突然讓我想起了,在剛入職一家公司的時候,看產品的原始碼畫出整個軟體框架流程圖來,現在我還清晰的記得當時公司產品裡面就有用到這個狀態機的用法,但是當時我剛接觸到這個東西,看了老半天那個源碼嗎,沒看懂,因為那時候第一次看那麼大的工程量代碼,說實話腦袋有點暈暈的,不是很習慣。
  • 簡單了解狀態機
    2、兩種狀態機:moore、Mealy3、狀態機的主要用途4、C 語言實現簡單的狀態機1、有限狀態機(1)常說的狀態機是指有限狀態機 FSM(Finite State Machine(3)狀態機的3個關鍵點:當前狀態、外部輸入、下一個狀態。2、兩種狀態機Moore 型狀態機相對簡單,輸出只與當前的狀態有關(與輸入信號狀態無關)此時輸入信號也不是完全沒用,他的作用是用作 激勵作用。
  • switch之狀態機愛你如初戀
    (1)——萬物之始的語言》中,我們介紹了狀態機在整個計算機科學中宛如「世界基石」般的地位,同時介紹了一種「面向嵌入式環境」「高度簡化」了的實用型狀態圖繪製方法——這裡的「簡化」是相對UML狀態圖的「繁雜」而言、且更接近課本上所使用的狀態機圖例;而這裡的「實用」體現在:基於這套方法繪製的狀態圖是可以「無腦」而「嚴格」的翻譯成
  • 淺談狀態機
    而在建模仿真的領域中,狀態機又是逃不開的一個話題。狀態機(State Machine)是有限狀態自動機的簡稱,是現實事物運行規則抽象而成的一個數學模型。簡單來說,狀態機主要是用來描述事物或者事物間的狀態以及轉換的,舉個例子,現實的事物燈泡,一般來說只有兩個狀態:亮起和熄滅,燈泡的亮起和熄滅取決於開關這個事件,所以這個燈泡抽象成狀態機應該是如下圖所示:這就引出了狀態機中幾個比較重要的概念:狀態、事件、動作、轉換。
  • 如何在Swift中實現狀態機?
    簡言之:我們通常稱作的狀態機是有限狀態機的簡稱,它是一種數學計算模型。它也是最簡單的一種狀態機模型,下文中我們簡稱為狀態機的都是確定性有限狀態自動機。❝註:分類本身是有各種分類方式的,這裡採取是以是否有輸出作為分類的前提,Wikipedia上的分類方式和此種分類不太一致,大家可以參考對比一下。那麼確定性有限狀態自動機有哪些特點呢?
  • 利用74LS161實現複雜狀態機
    狀態機的寫法 有限狀態機FSM思想廣泛應用於硬體控制電路設計,也是軟體上常用的一種處理方法(軟體上稱為FMM有限消息機)。 圖  有限狀態機工作原理 下圖為一個狀態機實例的狀態轉移圖,它的含義是: 在s0狀態,如果發生e0事件,那麼就執行a0動作,並保持狀態不變; 如果發生e1事件,那麼就執行a1動作
  • 運用狀態機提高嵌入式軟體效率
    當輸入符號串時,模型隨即進入起始狀態。要讓狀態機改變到新的狀態,依賴於系統的轉換函數。有限狀態機中有許多變量,例如,與動作(actions)轉換(Mealy機)或狀態(摩爾機)關聯的動作,多重起始狀態,基於沒有輸入符號的轉換或指定符號和狀態(非定有限狀態機)的多個轉換、指派給接收狀態(識別者)的一個或多個狀態。有限狀態機多應用於硬體時序電路設計。
  • 狀態機的三種騷操作,值得你了解
    要知道,壓縮表格驅動法的驅動表格是一個以狀態值為下標的一維數組, 數組元素裡面最重要的部分就是一個個動作封裝函數的地址。函數地址在單片機看來無非就是一段二進位數據, 和內存中其它的二進位數據沒什麼兩樣,不管程序往單片機 PC 寄存器裡塞什麼值,單片機都沒意見。
  • C語言狀態機編程思想
    有限狀態機是一種概念思想,把複雜的控制邏輯分解成有限個穩定狀態,組成閉環系統,通過事件觸發,讓狀態機按設定的順序處理事務。
  • 初學者對有限狀態機(FSM)的設計的認識
    有限狀態機(FSM)是一種常見的電路,由時序電路和組合電路組成。設計有限狀態機的第一步是確定採用Moore狀態機還是採用Mealy狀態機。(Mealy型:狀態的轉變不僅和當前狀態有關,而且跟各輸入信號有關;Moore型:狀態的轉變只和當前狀態有關)。
  • 用STATECAD快速設計有限狀態機
    控制單元的實現方式有: 有限狀態機、控制寄存器和微代碼控制器等。有限狀態機在時間尺度上對其控制信號進行離散化控制, 利用狀態轉移使控制信號在有限狀態機的狀態節拍控制下變化, 以實現對被控對象的控制。傳統上在系統級和寄存器傳輸級完成VHDL 的描述主要分以下幾步:(1) 分析控制器設計指標, 建立系統算法模型圖;(2) 分析被控對象的時序狀態, 確定控制器有限狀態機的各個狀態及輸入.輸出條件;(3) 應用VHDL 語言完成描述。使用XILINX的ISE6.1軟體包能加速有限狀態機設計,大大簡化狀態機的設計過程,實現狀態機設計的自動化。
  • 圖靈機
    「圖靈機」想像使用一條無限長度的紙帶子,帶子上劃分成許多格子。如果格裡畫條線,就代表「1」;空白的格子,則代表「0」。