2014-10-28 62 views
7

關於如何在VHDL中對有限狀態機(FSM)進行編碼似乎有相當多的爭論。人們談論1進程,2進程或3進程FSM,好像每個人都確切地知道它的意義以及每個進程的作用。但是,我一直無法找到一個確切的定義,存在的例子似乎是相互矛盾的。1,2或3過程對於VHDL中的FSM意味着什麼?

這是一個客觀的問題:每種FSM風格(1進程,2進程,3進程)的代碼有什麼區別?我明白,有個人喜好的組成部分,但肯定可以客觀回答這個問題,並列出每種方法的優點。

感謝,

+2

來自Xilinx的XST PDF顯示了1,2和3個過程FSM的例子(奇怪的是,這個過程的兩個變體中僅有一個)。這部分是Mealy-Moore問題和大部分個人偏好或死記硬背的學習。那些有分析傾向的人可能會關注靈敏度清單中的元素的含義。 – user1155120 2014-10-28 21:55:47

+0

@DavidKoontz 2進程FSM的第二個變體是什麼?一個國家登記程序和其他所有程序的進程? – rick 2014-10-28 22:24:50

+0

XST pdf是一個很好的參考,謝謝。 @DavidKoontz – 2014-10-28 22:31:12

回答

1

我也試着來回答如果它很難,因爲每個人的代碼,他是如何喜歡和在硬件有工作條件的功能(頻率,外部路徑,...)。

在狀態機你有一些要素:

  • 輸入
  • 輸出
  • 當前狀態
  • 下一狀態

下一頁狀態取決於從當前狀態和投入。如果沒有組合循環,則需要在時鐘信號事件發生時採樣下一個狀態,以使其成爲當前狀態。所以,你需要一個VHDL過程來爲狀態創建觸發器。在這個過程中,你可以把你需要的所有邏輯計算出下一個狀態。如果你的輸出僅依賴於狀態,你不需要其他進程。

當我的邏輯不是很容易的時候,我不喜歡把相同的過程組合邏輯放在一起(我喜歡,但它不是強制性的!)所以,我通常在兩個過程中分割FSM:第一個非常簡單對下一個狀態進行採樣以獲得當前狀態的過程,以及一個組合過程,其中計算所有輸出,並根據輸入和當前狀態計算下一個狀態。

在同樣的情況下,需要對輸出進行採樣:例如,當出現頻率問題時,需要將內部路徑與外部路徑分開,或者當輸出負載很大時。在這種情況下,您可以在第一個過程中添加所有必需的觸發器,在這個過程中您可以對下一個狀態進行採樣,或創建一個或多個專用過程。

但是你也可以有許多變體作爲進程的數量:我工作在一個代碼中,每個信號都是在專用進程中計算的,因此生成的狀態機有20/30進程。