數(shù)字硬件建模SystemVerilog-邏輯運算符
經(jīng)過幾周的更新,SV核心部分用戶自定義類型和包內(nèi)容已更新完畢,接下來就是RTL表達(dá)式和運算符。
邏輯運算符
邏輯運算符對其操作數(shù)求值,并返回一個值,該值指示求值結(jié)果是真還是假(true or false)。例如,運算a && b測試a和b是否都為真,如果兩個操作數(shù)都為真,則運算符返回真。否則,運算符返回false。
邏輯運算符返回值。SystemVerilog沒有內(nèi)置的true或false布爾值。相反,邏輯運算符的返回使用邏輯值1’b1(一個一位寬的邏輯l)表示真,1’b0表示假。邏輯運算符還可以返回1’bx,指示仿真無法確定實際邏輯門的評估結(jié)果是否為真或假的模糊條件。
判斷一個表達(dá)式是真是假。要確定操作數(shù)是真是假,SystemVerilog使用以下規(guī)則:
如果所有位均為0,則操作數(shù)為假
如果所有位均為1,則操作數(shù)為真
如果所有位均為X或Z,且沒有位為1,則操作數(shù)未知X
表5-1列出了RTL綜合編譯器普遍支持的邏輯運算符。
表5-11:RTL建模的邏輯運算符
邏輯求反運算符通常被稱為“not運算符”,它是“not true”的縮寫。
邏輯運算符通過對每個操作數(shù)進(jìn)行歸約OR來執(zhí)行其運算,從而產(chǎn)生一個1位結(jié)果。然后對該結(jié)果進(jìn)行求值,以確定其為真還是假。對于not運算符,1位的結(jié)果首先被反轉(zhuǎn),然后求值為真或假。
表5-12和5-13顯示了這些邏輯運算符對幾個示例值的結(jié)果。
表5-12:邏輯AND and OR運算的示例結(jié)果 表5-13:邏輯求反運算的示例結(jié)果
邏輯求反運算符(?。┖桶次环崔D(zhuǎn)運算符(~)之間的區(qū)別
練習(xí)題目《HDLBits: 在線學(xué)習(xí) SystemVerilog(一)-Problem 2-6》Problem 4
應(yīng)注意不要混淆邏輯求反運算符(!)以及按位反轉(zhuǎn)運算符(~)。求反運算符對其操作數(shù)執(zhí)行真/假求值,并返回表示真、假或未知結(jié)果的1位值。按位反轉(zhuǎn)運算符對操作數(shù)的每一位(補碼)執(zhí)行邏輯反轉(zhuǎn),并返回與操作數(shù)相同位寬的值。
在某些操作中,這些操作的結(jié)果恰好相同,但在其他操作中,它們返回的值非常不同。當(dāng)運算符與決策語句一起被錯誤使用時,這種差異可能導(dǎo)致錯誤代碼??紤]下面的例子:
前面代碼片段的最后兩行之所以不同,是因為這兩個運算符的工作方式不同——邏輯求反運算符(?。┩ㄟ^將兩位相加或相減,對2位選擇執(zhí)行真/假計算,然后反轉(zhuǎn)1位結(jié)果,按位反轉(zhuǎn)運算符(~)只反轉(zhuǎn)2位選擇向量的每一位的值,并返回2位結(jié)果。if語句然后對2位向量進(jìn)行真/假測試,該向量的計算結(jié)果為真,因為反轉(zhuǎn)后的值仍有一位設(shè)置為1。
最佳實踐指南5-1 |
---|
使用按位反轉(zhuǎn)運算符反轉(zhuǎn)值的位,不要使用按位反轉(zhuǎn)運算符對邏輯求反運算符求反。相反,使用邏輯求反運算符來否定真/假測試的結(jié)果。不要使用邏輯求反運算符反轉(zhuǎn)值。 |
最佳實踐指南5-2 |
---|
僅使用邏輯求反運算符求反來測試標(biāo)量(1位)值,而不是 對向量執(zhí)行真/假測試。 |
如果向量的任何位為1,邏輯運算將返回true,這可能會導(dǎo)致在測試特定位時出現(xiàn)設(shè)計錯誤。計算向量值時,使用等式或關(guān)系運算符測試可接受的值。
示例5-7說明了一個小型RTL模型,該模型使用邏輯NOT、邏輯AND和邏輯OR運算符。該設(shè)計是一個邏輯比較器,如果兩個數(shù)據(jù)值中的任何一個在可配置的值范圍內(nèi),則設(shè)置一個flag。
示例5-7:使用邏輯運算符:當(dāng)值在某個范圍內(nèi)時設(shè)置flag
圖5-7顯示了示例5-7中的RTL模型綜合結(jié)果
圖5-7:示例5-7的綜合結(jié)果:邏輯運算符(范圍內(nèi)比較)
不可綜合的邏輯運算符
SV-2009增加了兩個額外的邏輯運算符,它們是蘊涵和等價運算符,在本文編寫時RTL綜合編譯器通常不支持這些運算符。表5-14列出了這兩個運算符的標(biāo)記和描述。
表5-14:不可綜合邏輯運算符
-
硬件
+關(guān)注
關(guān)注
11文章
3328瀏覽量
66228 -
RTL
+關(guān)注
關(guān)注
1文章
385瀏覽量
59797 -
編譯器
+關(guān)注
關(guān)注
1文章
1634瀏覽量
49134
原文標(biāo)題:SystemVerilog-邏輯運算符
文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論