改进的case语句
改進的case語句
SystemVerilog為case、casex和casez的判斷提供了專門的unique和priority修飾符。這些修飾需放在關鍵字case、casex和casez前面。
unique case(<case_expression>)...//條件選項 endcasepriority case(<case_expression>)...//條件選項 endcase1、unique case條件判斷
unique case語句指定
- 只有一個條件選項與條件表達式匹配
- 必須有一個條件選項與條件表達式匹配
unique case可以并行求值
修飾符unique允許設計者顯示指定條件選項的順序并不重要,允許并行求值。軟件工具可以優化掉推斷出的選項順序優先級。unique修飾符還指定了條件選項匹配。
unique條件檢查
一個unique case不能有重疊的條件
當case、casex和casez語句被指定為unique時,軟件工具必須在語法上進一步檢查以保證每個條件選項都是相斥的。如果在運行時有多個條件選項與條件表達式相匹配,則工具會報告發生了運行錯誤。
unique修飾符表示了設計者是否想讓條件選項同時為真。當加入了修飾符unique后,只要條件語句執行并且條件表達式與多個條件選項匹配的情況發生,所有軟件工具包括仿真器都會產生警告。
logic [2:0] request; always_combunique casez(select) //設計應該每次只產生一個grant3'b1??:slave1_gant=1;3'b?1?:slave2_gant=1;3'b??1:slave3_gant=1;endcase條件選擇表不完整檢查
unique case必須指明所有條件
當指定case、casex和casez語句為unique時,如果所有的條件選項都不能和條件表達式匹配,也沒有缺省條件時,軟件工具會報告運行期警告。
雖然unique主要是在運行期檢查有且只有一個條件選項為真,但如果條件選項都是常數表達式,軟件工具可能會在編譯期對唯一條件表達式選項的重疊發出警告。像綜合編譯器和代碼檢測器這樣沒有動態運行期的工具只能對選項重疊進行靜態檢查。
always_comb和unique case都有助于保證過程塊用組合邏輯實現。但unique case進行的檢查和always_comb進行的檢查是不一樣的,不過這兩種結構都是有助于保證復雜的過程塊能綜合為期望的邏輯。
unique case是在運行時進行檢測,保證每次出現的條件表達式的值只與一個條件選項匹配,這樣對每次出現的表達式的值都只能執行條件句的一個分支。運行期檢測的優點是只會對在仿真中出現的實際數據作錯誤檢查。缺點是錯誤檢查的質量取決于測試向量的完整性。
總結
- 上一篇: 可转债的交易规则有哪些
- 下一篇: priority case语句