2014-03-05 80 views
1

通過在一個體繫結構中使用具有相同靈敏度列表的幾個進程可以產生不必要的影響嗎?具有幾個具有相同靈敏度列表的進程

我在一個體繫結構中並行發生了幾個進程,一個用於從寫入輸入的主服務器讀取輸入的一個進程,一個用於在主服務器請求和一次計算時將輸出寫回主服務器。所有進程都是時鐘進程,其靈敏度列表僅包含復位和時鐘信號。

每個進程寫入自己的信號,其他進程可以讀取,即沒有兩個進程寫入同一信號的實例。

在一個單獨的大流程中實現所有功能是可能的,但是這樣做會更麻煩。

這樣的實施會有什麼不利影響嗎?

有沒有任何理由支持幾個較小的較不優雅的一個大流程?

回答

2

完全沒有。我的大部分流程都有相同的敏感列表:(reset, clock),這並不罕見。

如果一個單獨的大流程真的不那麼優雅,而且使用多個較小流程的實現真正更清晰易懂,那就繼續設計。我傾向於在我的設計中使用更少,更大的進程,但將它們放在不連續的部分中,以便更容易地在進程內分離功能,但這不是一個具體的規則:我不會實現多個獨立的狀態機例如一個進程。

我會建議對經常看到兩種風格:

  1. 2-過程(或3處理)狀態機,其中一個過程是純粹的組合,與很難得到正確的複雜敏感列表。單進程SM更簡單,更短,並且至少易於理解。
  2. 大量微小的進程,每個控制一個或兩個信號,這些信號是其他微小進程的輸入,這樣您就可以花一整天的時間從流程中追蹤信號,而無需查找實際工作情況!

如果我理解你的描述你有3塊:接收器,數據處理器,發射器;這聽起來像是我對功能的一個很好的分離。例如,您可以更輕鬆地更換接收器或發射器,或者如果它們是單獨的過程(甚至是單獨的實體),則可以將其重新用於不同的數據處理器。

+3

WRT問題1:在VHDL-2008「process(all)」中,靈敏度列表參數消失了,一個寫得很好的兩個進程狀態機與寫得很好的一個進程狀態機沒有什麼不同。每個人都有他們的詭計。例如,在一個兩進程狀態機中,注意默認所有的輸出以避免鎖存 - 這也是代碼簡化和提高可讀性的關鍵。在一個進程狀態機中,注意復位所有輸出,否則那些信號在復位期間有邏輯保留它們的值 - 通常是在復位激活時關閉的加載啓用。 –

+0

同意,我應該在2008年提到過程(全部)。在一些單進程SM中,我有一些輸出的默認值。然後對這些輸出*單獨復位*將是多餘的。 –