2015-08-31 173 views
0

在下面的問題,Verilog和ASM實施

的ASM圖表顯示的q_next值與0進行到下一個狀態,但q_next比較之前,q的值已經與q_next更新,因此如果我們將q的值與0進行比較,那麼結果在時序和其他參數方面是否相同?

另外應該是什麼類型的q_next and q?他們應該是reg還是wire?

我附上了ASM圖表和Verilog代碼的屏幕截圖。我也不明白條件框的時間影響(一般來說,我們不能將條件框的輸出置於不依賴於條件框的輸出的單獨狀態)嗎?,

就像處於wait1狀態時一樣,我們檢查sw的值,如果爲true,我們遞減計數器,然後檢查計數器是否已達到零,然後檢查asser db_tick。我想了解從wait1和increment計數器並斷言db_tick時的時間流程。這些階段之間是否存在任何時鐘週期,即從一個狀態轉移到一個條件框?

同樣在Verilog代碼中,我們使用q_loadq_tick來控制計數器。當我們可以簡單地控制狀態中的計數器時,爲什麼使用這些信號?

這樣做是爲了確保FSM(控制路徑)控制計數器(數據路徑)?請解釋。提前致謝。

enter image description here

enter image description here

回答

0

在下面的問題,ASM圖表顯示q_next的值 相比0進行到下一個狀態,但之前q_next相比, 第q的值已經用q_next更新了,所以如果我們將q值的 與0進行比較,那麼結果在時間和 其他參數方面是否相同?

No.當q_next具有0的值,q仍然包含的值爲1,直到它的更新的下一個正時鐘邊沿。如果您檢查q==0,您將在每個等待狀態中花費額外的時鐘週期。

也應該是什麼類型的q_next和q?他們應該是reg還是 電線?

要麼。 reg類型(如q_reg)表示它們在always塊中分配值,而wire類型(如q_next)使用assign語句或作爲子模塊的輸出進行分配。

我也不懂條件框的時間影響(在 一般情況下,我們不能把有條件盒的輸出在不依賴於條件的輸出單獨 狀態框)?, 就像在wait1狀態時一樣,我們檢查sw的值,如果爲真,我們 遞減計數器,然後檢查計數器是否已達到零 ,然後是asser db_tick。我想了解當我們從等待1和增量計數器移動 並斷言db_tick時的時間流程。

下面是操作的單個時鐘週期的流動,同時在wait1狀態:

  • SW==1?如果沒有,請不要做其他事情,然後轉到狀態zero。這些行動將在下一個週期完成。
  • 如果SW==1,計算q_next,並將該值分配給q爲下一個週期。
  • q_next==0?如果不是,則保留在wait1下一個週期並重復。
  • 否則,在此時鐘週期中斷言db_tick=1,並轉至狀態one

如果將兩個條件拆分爲兩個單獨的狀態,倒計時到0將需要兩倍的時間。

這些階段之間是否有任何時鐘週期,即 從狀態轉移到條件框?

基於在圖上,所有的操作給定的狀態中(比較sw,從q減去,等) - 也就是說,的虛線框之一 - 在單個時鐘週期中執行。

同樣在verilog代碼中,我們使用q_load和q_tick來控制 計數器。當我們可以簡單地控制狀態中的 計數器時,爲什麼使用這些信號?這樣做是爲了確保FSM(控制 路徑)控制計數器(數據路徑)?

你也可以這樣做。請確保在default的情況下爲q_next分配一個值以防止鎖定。儘管如此,將數據路徑和控制路徑拆分爲單獨的always塊/ assign語句會提高可讀性。