並不是只有assign以及其他阻塞賦值才是組合邏輯,你if裡的條件運算,<=右邊的表示式全是組合邏輯。我一開始學的就是三段式狀態機,沒怎麼接觸一段和二段,有說得不對的歡迎指正。三段式狀態機:第一段只有時序跳轉,主要就是current_state <= next_state;第二段是一般是一個大case語句組成的純組合邏輯,輸入很多狀態訊號,產生next_state;其他always屬於第三段,用current_state產生其他訊號。你舉例的這段程式碼,比較短,功能比較簡單,用一段式狀態機還是能比較清楚的描述。但是真正工程上,功能要複雜的多,我甚至寫過二三十個狀態,近三千行的單個module,你怎麼可能寫進一個always。就算你天賦異稟,邏輯異常強大,寫進了一個always,那維護的代價也很高,牽一髮就可能動全身。實際工程中,每個always一般只會對一個或一組訊號(關係密切且賦值條件基本相同)進行賦值,一個訊號只會出現在一個always中。在設計每個訊號的邏輯功能時,你只要關心影響該訊號的其他訊號就行了,這樣就相當於你在一個module內部又對每個(組)訊號進行了簡單的模組化。每個訊號的always包含哪些功能則是你寫程式碼之前就想好的東西,畢竟硬體描述語言,寫程式碼只是你用程式碼來描述你設計的東西。當你把這個模組中的每一個訊號的always都寫好的時候,你模組就完成了,並且只要你在寫程式碼前設計的好,完成度一般相當高,存在的bug也容易發現。舉一個前兩段的例子,來自網路,侵刪。
並不是只有assign以及其他阻塞賦值才是組合邏輯,你if裡的條件運算,<=右邊的表示式全是組合邏輯。我一開始學的就是三段式狀態機,沒怎麼接觸一段和二段,有說得不對的歡迎指正。三段式狀態機:第一段只有時序跳轉,主要就是current_state <= next_state;第二段是一般是一個大case語句組成的純組合邏輯,輸入很多狀態訊號,產生next_state;其他always屬於第三段,用current_state產生其他訊號。你舉例的這段程式碼,比較短,功能比較簡單,用一段式狀態機還是能比較清楚的描述。但是真正工程上,功能要複雜的多,我甚至寫過二三十個狀態,近三千行的單個module,你怎麼可能寫進一個always。就算你天賦異稟,邏輯異常強大,寫進了一個always,那維護的代價也很高,牽一髮就可能動全身。實際工程中,每個always一般只會對一個或一組訊號(關係密切且賦值條件基本相同)進行賦值,一個訊號只會出現在一個always中。在設計每個訊號的邏輯功能時,你只要關心影響該訊號的其他訊號就行了,這樣就相當於你在一個module內部又對每個(組)訊號進行了簡單的模組化。每個訊號的always包含哪些功能則是你寫程式碼之前就想好的東西,畢竟硬體描述語言,寫程式碼只是你用程式碼來描述你設計的東西。當你把這個模組中的每一個訊號的always都寫好的時候,你模組就完成了,並且只要你在寫程式碼前設計的好,完成度一般相當高,存在的bug也容易發現。舉一個前兩段的例子,來自網路,侵刪。