2013-02-05 91 views
0

這裏是場景:註冊啓用

我有一個註冊與啓用(稱之爲RegA)。 RegA的投入被永久拉高。

同時,RegA的使能線通過一些簡單的組合邏輯連接到RegB的輸出。

現在,在下一個時鐘脈衝的情況下,RegB的輸出將會變高只需一個時鐘週期

我的問題是,我會看到RegA的輸出在RegB變高的同一個時鐘週期內變爲高電平,或者RegA會在下一個時鐘週期變爲高電平,或者它有可能永遠不會變高競賽條件?

從經驗來看,我覺得RegA會在RegB高漲的同一個時鐘週期內走高,不過,我想知道這是不好的做法和不可靠的。我認爲在啓用線路的信號和時鐘邊緣之間可能會出現競爭狀態,以至於RegA變得越來越高。由於使能線經過一些組合邏輯,因此每次看起來它都會失去競爭,因此RegA不會在RegB變高的同一時鐘週期內識別出使能線是高電平的。

回答

2

我假設您所說的使能是時鐘使能?在這種情況下,如果我理解正確,您將在RegA變高之前獲得一個時鐘週期延遲。說明:

如果RegA的使能輸入在時鐘到達時有效,RegA只對時鐘週期做出反應。然而,由於RegB有一些內部延遲,並且由於在輸出達到RegA使能之前甚至會有一些額外的組合延遲,所以在RegA已經忽略了時鐘週期之前,激活的信號不會使其成爲RegA。

雖然這兩種方式都起作用,所以當第二個時鐘週期到來時,活動使能信號也會而不是消失,從而使RegA看到時鐘週期並對其作出反應。在下一個時鐘週期中,使能將再次失效。

請記住,禁用的時鐘使能只會導致時鐘輸入被忽略,並且當時鍾使能輸入無效時,寄存器將保持其值。

這不是一個競爭條件(除非你有一個設計不佳的系統,例如很多時鐘偏差,但是你也有很多其他問題),並且可以可靠地使用 - 否則很多FPGA設計師認爲理所當然的東西是不可能的。

0

只要你的時鐘分配正常(例如,在FPGA中,這將由你的工具管理),那麼你將得到明確的行爲。

在第一個時鐘脈衝上,RegB的輸出在時鐘沿之後會變高。因此,RegA在時鐘轉換點將「看到」低電平使能,因此不會改變。

在下一個時鐘週期,RegB的輸出會在時鐘沿之後變低。然而,對於RegA來說,這已經太遲了,因爲它已經「查看」了使能信號(當時鍾沿出現時) - 它將看到它的使能信號爲高電平,並且將高電平輸入傳送到輸出端(在很短的時間後延遲)。

所以,是的,你會得到一個額外的週期延遲。