2012-08-13 250 views
2

關於最佳VHDL設計實踐的問題。最佳VHDL設計實踐

在設計狀態機時,我應該在體系結構內使用信號還是使用變量。我到目前爲止使用了變量,因爲它們對流程來說「有點」私有的,恕我直言,因爲它們不應該在流程之外訪問。但這是一個很好的設計實踐嗎?

type state_type is (s0,s1); 
signal state : state_type := s0; 

A : process(clk) 
begin 
    if rising_edge(clk) then 
    case state is 
..... 
    end case; 
    end if; 
end process; 

--This process uses a variable 
B : process(clk) 
    type state_type is (s0,s1); 
    variable state : state_type := s0; 
begin 
    if rising_edge(clk) then 
    case state is 
     ..... 
    end case; 
    end if; 
end process; 

回答

3

我總是使用variable s,除非我需要將某個值傳遞給另一個進程。因爲這就是signal

另一個潛在的好處的「本地化狀態變量」(或者,東西看着侵犯了您的編碼標準!)就是你可以調用兩個狀態機的typevariablestate_typestate在同一沒有他們衝突的實體...

0

如果在這種情況下,信號它並不需要爲你的程序的輸入或輸出爲更好地利用使用變量,因爲當你正在構建的架構,您將需要一個信號分配到的輸出該模塊,如果它不會被使用,則不需要創建信號並花費更多的內存用於某些您不會用於連接到架構的另一個模塊的內存。

4

我更喜歡使用信號。原因是它允許將設計分成多個進程。一個進程可能擔心狀態機如何從狀態轉移到狀態,其他進程可能包含依賴於狀態的邏輯。

這樣做意味着您可以擁有多個簡單的流程,分別執行一項任務。使用變量,一切都必須進入一個過程,這可能變得笨拙。

雖然這是一個風格的選擇。

+0

我發現多個交互過程往往會混淆代碼的意圖 - 正如你所說,這是一種風格的東西:) – 2013-09-26 13:49:28

+0

我認爲我們已經同意在此之前有所不同;-) – 2013-09-27 12:34:15

2

對於綜合,我幾乎只使用信號。

爲什麼?

  • 信號似乎更普遍地被理解。
  • 代碼清晰度。信號全部更新一次,同時。混合變量和信號可能會(可能)混淆,因爲您必須記住變量賦值立即生效,而後續信號賦值意味着優先級。信號的值在進程的相同執行過程中永遠不會改變。
  • 深層邏輯路徑的風險較低。沒有經驗的設計人員可能會試圖使用像C程序這樣的變量,這會導致不符合時間目標的邏輯。

爲什麼不呢?

  • 大型設計最終會產生非常長的信號列表,並且很難找到信號類型/尺寸等。通常這隻發生在設計中最大塊的包裝和/或設計頂層。

對於測試臺,我使用變量和信號,這取決於使用情況。