2014-01-17 76 views
-1

誰能告訴我非阻塞的區別開始,結束在程序塊的fork-join。我的一個朋友告訴我,後者是不可綜合的,只能在測試平臺中使用。這是真的嗎?還有其他的區別嗎?非阻塞語句和叉加入Verilog和/或系統的Verilog

+0

你可以給出一個你正在考慮使用fork-join意味着什麼硬件的例子,它可以幫助指導答案。 – Morgan

+2

事先準備好交叉發佈是一種很好的做法。 [Electronics SE](http://electronics.stackexchange.com/q/96742/13513)。 – Morgan

回答

4

有沒有這樣的事情了Verilog/SystemVerilog的非阻塞開始/結束構建體。開始/結束塊以串行順序執行每個語句,阻止下一個語句的執行,直到前一個語句完成。 最後聲明完成後,該塊結束。 fork/join同時執行每條語句,並且塊的連接在全部語句完成之後到達。

如果只有一個在每種塊的聲明中,有兩個之間沒有行爲差異,但基本的綜合工具將不接受叉/加入結構。還有很多其他方式可以使用分叉/加入,您可以編寫的行爲等同於只寫開始/結束內部的多個總是塊,但不被視爲可合成。這是因爲綜合工具依賴於識別編碼風格的模板,並且具有有限的資源來支持多種風格的編寫代碼。

+0

但然後當我寫 總是@(posedge時鐘)開始 一個<= 5; b <= 6; 結束 我相信2條語句將同時執行@posedge和不順序 – RoyOneMillion

+0

現在,您已經將非阻塞賦值(NBA)語句的操作與Ben/End塊的執行方式混淆了。 NBA報表仍然按順序執行,即按順序評估右側(RHS)表達式,但LHS的更新將在稍後安排。請注意,模擬語義(代碼如何執行)和合成語義(如何生成硬件)之間存在差異。 –