實際電路中有阻塞幅值和非阻塞幅值?

2021-09-27 11:22:20 字數 1707 閱讀 3037

前言

最近群內同學問到:啥是阻塞,啥是非阻塞。實際電路中有這玩意兒嗎?

個人覺得阻塞非阻塞是**電路下的描述,實際電路中是沒有這個描述的。

實際的電路中只有組合邏輯和時序邏輯,不可能存在誰阻塞了誰。只是**中需要特別注意。

按照書上的描述:阻塞相當於軟體中的順序執行,非阻塞相當於併發執行。

模擬為阻塞就是乙個人幹活,如果一條語句為乙個活,那麼先乾前面的活再幹後面的活。非阻塞就是多個人一起幹活,每一條語句都是乙個人在幹活,則為併發。

流程以下對幾種情況進行了相應的測試。

(1)時序邏輯使用非阻塞。(業界正確用法)

推斷結果:

綜合結果:

對於上述邏輯,相當於多打了一拍。

(2)時序邏輯使用阻塞。

推斷結果:

綜合結果:

可以看到,中間邏輯被打平,優化掉了。

(3)組合邏輯使用非阻塞。

推斷結果:

綜合結果:

可以看到,推斷的結果可能跟實際上是不一致的,**中置了初始值,當然對實際組合電路沒啥卵用,只是**中指定固定態而已,只供參考,實際以綜合後結果為準。可以看到就是個或門的lut。

(4)組合邏輯使用阻塞。(業界正確用法)

推斷結果:

綜合結果:

可以看到,推斷的結果可能跟實際上是不一致的,只供參考,實際以綜合後結果為準。可以看到就是個或門的lut。

結論所以,根據實際測試結果來看,時序邏輯使用阻塞,會導致中間態被優化。組合邏輯用啥都無所謂。本句話僅表示實際電路,不代表**如此。

vivado的推斷闊能是不正確的,以綜合結果為準。

寫**遵循業界規則,否則可能給自己埋坑。

寫**只需記住:時序邏輯就是資料流。組合邏輯就是物理連線。世界豁然開朗。

寫綜合**只需遵循:

(1)組合邏輯用阻塞幅值。

(2)時序邏輯用非阻塞幅值。

(3)不要在乙個塊語句中混用阻塞非阻塞。

以上。

通過RTL電路深入理解阻塞賦值和非阻塞賦值的區別

稍微接觸過verilog hdl的都對阻塞與非阻塞賦值略知一二,也是我們經常強調的重點之一,在課堂上還是有學員問什麼不一樣呢,為什麼我用阻塞賦值也能得出正確的結果呢?在編寫可綜合 的時候,建議大家不要忘了開啟rtl網表檢視器看看我們自己綜合出來的電路是不是自己想要的邏輯。我就阻塞與非阻塞賦值這個問題...

恆幅值變換和恆功率變換的matlab驗證

在matlab中驗證clark和park變換後的曲線以及幅值。關於變換的原理請參考 當恆幅值變換時 程式中 conamp 1,恆幅值輸出,iq的幅值和ia幅值相等。程式中 conamp 0,恆功率輸出,iq的幅值和ia幅值相等。電機abc模型推導dq模型過程中的公式驗證 恆功率模型,恆幅值模型只需要...

關於浮點數實際值和預設值

1.1程式如下 1.2.結果如下 預期 1.2f與1.2是相等的,顯示後面的小數應該全是0。實際 1.2f實際是1.2000000476837158 並不是精確的1.2,而1.2f也與1.2不相等。原因 1 float的有效數字只有8個,也就是1.2f輸出20個位時只能保證前8位 1.2000000...