第7章 系統函式和任務

2021-08-19 15:12:00 字數 2040 閱讀 2178

圖7.1 $ onehot和$ onehot0

$ onehot和$ onehot0相當自我解釋,在圖7.1中進行了解釋。請注意,如果表示式為'z'或'x',$ onehot或$ onehot0將失敗。圖7.1描述了乙個簡單的應用。對於任何乙個匯流排grant的確認,只能有乙個匯流排grant。如圖所示,這很容易通過$ onehot完成。

圖7.2 $ isunknown

如果表示式未知('x'或'z'),$ isuncnown則通過。換句話說,如果表示式不是未知的,那麼屬性將失敗!因此,如果您確實希望檢測到未知('x'或'z')失敗,則必須否定$isunknown的結果。簡單但容易錯過。

圖7.2中的**日誌闡明了這個概念。屬性'ucheck'指出,如果'bgack'是'真實','busgnt'是未知的。什麼?這只是為了展示如果使用$ isunknown而不是'not'會發生什麼。

圖7.3 $ isunknown應用

圖7.3顯示了兩個簡單的應用。首先與我們剛討論過的一樣,但是有乙個「not」。

@(posedge clk) bgack |-> not ($isunknown(busgnt));
它說,如果bgack是真的(高),那麼busgnt一定不會處於未知狀態。 再次注意,$ isunknown在檢測未知時返回true。 所以,如果你想要失敗,你必須否定結果。 這在上面的**日誌中顯示。 第二個應用(圖7.3的底部)說,如果'adrstrobe'為高電平,那麼控制訊號不可能是未知的。

圖7.4 $ countones-基礎和應用

$countones非常簡單但功能強大。請注意,系統函式可用於過程塊以及併發屬性/斷言中。

圖7.4顯示了乙個應用程式,該應用程式宣告,如果匯流排授權確認(bgack)在匯流排上只能啟用1個匯流排授權(busgnt)。請注意,在本例中我們在程式塊中使用$ countones。還要注意,如果整個'busgnt'未知('x')或三態('z'),斷言將失敗。圖7.5顯示了檢查格雷碼合法性的一種非常簡單的方法。

圖7.5 $countones應用

圖7.6 $countones作為布林值

在許多情況下,如果您希望實現在模組和例項級別的斷言的全域性控制。回想一下,'disable iff'直接在斷言的源頭提供本地控制。如圖7.7所示,$ assertoff暫時關閉所有斷言的執行。請注意,如果在執行$ assertoff時斷言正在執行,斷言不會被終止。在隨後的$ asserton呼叫中重新啟動斷言執行。 $ assertkill將會終止你設計中的所有斷言,包括已經執行的斷言。當下乙個斷言開始執行時它不會自動啟動。它只會在隨後的$ asserton中開始執行。 $ asserton:這是預設值。需要在$ assertoff或$ assertkill之後重新啟動斷言。

圖7.7$ assertoff,$ asserton,$assertkill-基礎

以下是專案部署的典型應用程式,用於在復位期間或異常期間控制斷言的執行(如果需要)(圖7.8)。

圖7.8斷言控制應用程式

第7章 函式 7

7.7 類的成員函式 函式原型必須在類中定義。但是,函式體則既可以在類中也可以在類外定義。7.7.1 定義成員函式的函式體 類的所有成員都必須在類定義的花括號裡面宣告,此後,就不能再為類增加任何成員。類的成員函式必須加宣告的一般定義。類的成員函式既可以在類的定義內也可以在類的定義外定義。編譯器隱式地...

第4章 裸機系統和多工系統

在真正動手寫rtos之前,我們先來講解下微控制器程式設計中的裸機系統和多工系統的區別。4.1 裸機系統 裸機系統通常分為輪詢系統和前後臺系統,有關這兩者的具體實現方式請看下面的講解。4.1.1 輪詢系統 輪詢系統即是在裸機程式設計的時候,先初始化好相關的硬體,然後讓主程式在乙個死迴圈裡面不斷迴圈,順...

第7章 函式 4

7.2.5 傳遞給函式的陣列的處理 非引用陣列形參的型別檢查只是確保實參是和陣列元素具有同樣型別的指標,而不會檢查實參實際上是否指向指定大小的陣列。任何處理陣列的程式都要確保程式停留在陣列的邊界內。第一種方法是在陣列本身放置乙個標記來檢測陣列的結束,c風格字串是一種字元陣列,並且以空字元null作為...