版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、Verilog操作符操作符學習內(nèi)容:學習內(nèi)容:熟悉熟悉Verilog語言的操作符語言的操作符操作符類型操作符類型下表以優(yōu)先級順序列出了下表以優(yōu)先級順序列出了Verilog操作符。注意操作符。注意“與與”操作符的優(yōu)先級總是比相操作符的優(yōu)先級總是比相同類型的同類型的“或或”操作符高。本章將對每個操作符用一個例子作出解釋。操作符高。本章將對每個操作符用一個例子作出解釋。 操作符類型操作符類型符號符號連接及復制操作符一元操作符算術(shù)操作符邏輯移位操作符關(guān)系操作符相等操作符按位操作符邏輯操作符條件操作符 ! & | * / %+ - = = = = = = != != =& | &
2、|?:最高最高最低最低優(yōu)先級優(yōu)先級Verilog中的大小中的大小(size)與符號與符號Verilog根據(jù)表達式中變量的長度對表達式的值自動地進行調(diào)整。根據(jù)表達式中變量的長度對表達式的值自動地進行調(diào)整。Verilog自動截斷或擴展賦值語句中右邊的值以適應左邊變量的長度。自動截斷或擴展賦值語句中右邊的值以適應左邊變量的長度。當一個負數(shù)賦值給無符號變量如當一個負數(shù)賦值給無符號變量如reg時,時,Verilog自動完成二進制補碼計算自動完成二進制補碼計算module sign_size; reg 3:0 a, b; reg 15:0 c; initial begin a = -1; / a是無符號數(shù)
3、,因此其值為是無符號數(shù),因此其值為1111 b = 8; c= 8; / b = c = 1000 #10 b = b + a; / 結(jié)果結(jié)果10111截斷截斷, b = 0111 #10 c = c + a; / c = 10111 endendmodule算術(shù)操作符算術(shù)操作符module arithops (); parameter five = 5; integer ans, int; reg 3: 0 rega, regb; reg 3: 0 num; initial begin rega = 3; regb = 4b1010; int = -3; /int = 11111111_11
4、01 end initial fork #10 ans = five * int; / ans = -15 #20 ans = (int + 5)/ 2; / ans = 1 #30 ans = five/ int; / ans = -1 #40 num = rega + regb; / num = 1101 #50 num = rega + 1; / num = 0100 #60 num = int; / num = 1101 #70 num = regb % rega; / num = 1 #80 $finish;joinendmodule+加加-減減*乘乘/除除%模模 將負數(shù)賦值給將負數(shù)
5、賦值給reg或其它無符號變量或其它無符號變量使用使用2的補碼算術(shù)。的補碼算術(shù)。 如果操作數(shù)的某一位是如果操作數(shù)的某一位是x或或z,則結(jié),則結(jié)果為果為x 在整數(shù)除法中,余數(shù)舍棄在整數(shù)除法中,余數(shù)舍棄 模運算中使用第一個操作數(shù)的符號模運算中使用第一個操作數(shù)的符號注意integer和reg類型在算術(shù)運算時的差別。integer是有符號數(shù),而reg是無符號數(shù)。按位操作符按位操作符module bitwise (); reg 3: 0 rega, regb, regc; reg 3: 0 num; initial begin rega = 4b1001; regb = 4b1010; regc = 4b
6、11x0; end initial fork #10 num = rega & 0; / num = 0000 #20 num = rega & regb; / num = 1000 #30 num = rega | regb; / num = 1011 #40 num = regb & regc; / num = 10 x0 #50 num = regb | regc; / num = 1110 #60 $finish; joinendmodulenot&and|orxor xnor xnor 按位操作符對矢量中相對應位運算。按位操作符對矢量中相對應位運算。
7、regb = 4b1 0 1 0 regc = 4b1 x 1 0num = regb & regc = 1 0 1 0 ; 位值為位值為x時不一定產(chǎn)生時不一定產(chǎn)生x結(jié)果。如結(jié)果。如#50時時的的or計算。計算。當兩個操作數(shù)位數(shù)不同時,位數(shù)少的操作數(shù)零擴展到相同位數(shù)。a = 4b1011;b = 8b01010011;c = a | b; / a零擴展為零擴展為 8b00001011邏輯操作符邏輯操作符module logical (); parameter five = 5; reg ans; reg 3: 0 rega, regb, regc; initial begin rega
8、 = 4b0011; /邏輯值邏輯值為為“1” regb = 4b10 xz; /邏輯值為邏輯值為“1” regc = 4b0z0 x; /邏輯值為邏輯值為“x” end initial fork #10 ans = rega & 0; / ans = 0 #20 ans = rega | 0; / ans = 1 #30 ans = rega & five; / ans = 1 #40 ans = regb & rega; / ans = 1 #50 ans = regc | 0; / ans = x #60 $finish; joinendmodule!not&am
9、p;and|or 邏輯操作符的結(jié)果為一位邏輯操作符的結(jié)果為一位1,0或或x。邏輯操作符只對邏輯值運算。邏輯操作符只對邏輯值運算。如操作數(shù)為全如操作數(shù)為全0,則其邏輯值為,則其邏輯值為false如操作數(shù)有一位為如操作數(shù)有一位為1,則其邏輯值為,則其邏輯值為true若操作數(shù)若操作數(shù)只只包含包含0、x、z,則邏輯值為,則邏輯值為x邏輯反操作符將操作數(shù)的邏輯值取邏輯反操作符將操作數(shù)的邏輯值取反。例如,若操作數(shù)為全反。例如,若操作數(shù)為全0,則其邏,則其邏輯值為輯值為0,邏輯反操作值為,邏輯反操作值為1。邏輯反與位反的對比邏輯反與位反的對比module negation(); reg 3: 0 rega,
10、 regb; reg 3: 0 bit; reg log; initial begin rega = 4b1011; regb = 4b0000; end initial fork #10 bit = rega; / num = 0100 #20 bit = regb; / num = 1111 #30 log = !rega; / num = 0 #40 log = !regb; / num = 1 #50 $finish; joinendmodule! logical not 邏輯反邏輯反 bit-wise not 位反位反 邏輯反的結(jié)果為一位邏輯反的結(jié)果為一位1,0或或x。位反的結(jié)果與操
11、作數(shù)的位數(shù)相同位反的結(jié)果與操作數(shù)的位數(shù)相同邏輯反操作符將操作數(shù)的邏輯值取邏輯反操作符將操作數(shù)的邏輯值取反。例如,若操作數(shù)為全反。例如,若操作數(shù)為全0,則其邏,則其邏輯值為輯值為0,邏輯反操作值為,邏輯反操作值為1。一元歸約操作符一元歸約操作符module reduction(); reg val; reg 3: 0 rega, regb; initial begin rega = 4b0100; regb = 4b1111; end initial fork #10 val = & rega ; / val = 0 #20 val = | rega ; / val = 1 #30 va
12、l = & regb ; / val = 1 #40 val = | regb ; / val = 1 #50 val = rega ; / val = 1 #60 val = regb ; / val = 0 #70 val = | rega; / (nor) val = 0 #80 val = & rega; / (nand) val = 1 #90 val = rega & ®b; / val = 1 $finish; joinendmodule&and|orxor xnor xnor 歸約操作符的操作數(shù)只有一個。歸約操作符的操作數(shù)只有一個。
13、對操作數(shù)的所有位進行位操作。對操作數(shù)的所有位進行位操作。結(jié)果只有一位,可以是結(jié)果只有一位,可以是0, 1, X。移位操作符移位操作符module shift (); reg 9: 0 num, num1; reg 7: 0 rega, regb; initial rega = 8b00001100; initial fork #10 num = rega 5 ; / num = 01_1000_0000 #10 regb = rega 5 ; / regb = 1000_0000 #20 num 3; / num = 00_0000_0001 #20 regb 3 ; / regb = 000
14、0_0001 #30 num = 10b11_1111_0000; #40 rega = num 2; /rega = 1100_0000 #40 num1 = num 2;/num1=11_1100_0000 #50 rega 2; /rega = 1111_1100 #50 num1 2;/num1=00_1111_1100 #60 $finish; joinendmodule邏輯右移邏輯左移 移位操作符對其左邊的操作數(shù)進行移位操作符對其左邊的操作數(shù)進行向左或向右的位移位操作。向左或向右的位移位操作。第二個操作數(shù)(移位位數(shù))是無符第二個操作數(shù)(移位位數(shù))是無符號數(shù)號數(shù)若第二個操作數(shù)是若第二
15、個操作數(shù)是x或或z則結(jié)果為則結(jié)果為x在賦值語句中,如果右邊在賦值語句中,如果右邊(RHS)的結(jié)果的結(jié)果:位寬大于左邊,則把最高位截去位寬大于左邊,則把最高位截去位寬小于左邊,則零擴展位寬小于左邊,則零擴展 將左邊的操作數(shù)右移右邊操將左邊的操作數(shù)右移右邊操作數(shù)指定的位數(shù)作數(shù)指定的位數(shù)左移先補后移左移先補后移右移先移后補右移先移后補建議:表達式左右位數(shù)一致建議:表達式左右位數(shù)一致關(guān)系操作符關(guān)系操作符module relationals (); reg 3: 0 rega, regb, regc; reg val; initial begin rega = 4b0011; regb = 4b1010
16、; regc = 4b0 x10; end initial fork #10 val = regc rega ; / val = x #20 val = regb = rega ; / val = 1 #40 val = regb regc ; / val = 1 #50 $finish; joinendmodule大于=大于等于大于等于regcrega和和regc的的關(guān)系取決于關(guān)系取決于x相等操作符相等操作符 賦值操作符,將等式右邊表達式的值拷貝到左邊。賦值操作符,將等式右邊表達式的值拷貝到左邊。注意邏輯等與注意邏輯等與case等的差別等的差別= 邏輯等邏輯等= = = 01xz010 xx
17、101xxxxxxxzxxxx case等等= = = = 01xz0100010100 x0010z00012b1x=2b0 x 值為值為0,因為不相等,因為不相等2b1x=2b1x 值為值為x,因為可能不,因為可能不相等,也可能相等相等,也可能相等2b1x=2b0 x 值為值為0,因為不相同,因為不相同2b1x=2b1x 值為值為1,因為相同,因為相同a = 2b1x;b = 2b1x;if (a = b) $display( a is equal to b);else $display( a is not equal to b);a = 2b1x;b = 2b1x;if (a = b)
18、$display( a is identical to b);else $display( a is not identical to b);Case等只能用于行為描述,不能用于RTL描述。相等操作符相等操作符 邏輯等邏輯等 邏輯不等邏輯不等=! =module equalities1(); reg 3: 0 rega, regb, regc; reg val; initial begin rega = 4b0011; regb = 4b1010; regc = 4b1x10; end initial fork #10 val = rega = regb ; / val = 0 #20 val
19、 = rega != regc; / val = 1 #30 val = regb != regc; / val = x #40 val = regc = regc; / val = x #50 $finish; joinendmodule 其結(jié)果是其結(jié)果是1b1、1b0或或1bx。 如果左邊及右邊為確定值并且如果左邊及右邊為確定值并且相等,則結(jié)果為相等,則結(jié)果為1。 如果左邊及右邊為確定值并且如果左邊及右邊為確定值并且不相等,則結(jié)果為不相等,則結(jié)果為0。 如果左邊及右邊有值不能確定如果左邊及右邊有值不能確定的位,但值確定的位相等,則結(jié)的位,但值確定的位相等,則結(jié)果為果為x。!=的結(jié)果與的結(jié)果
20、與= =相反相反值確定是指所有的位為值確定是指所有的位為0或或1。不確定值是有值為不確定值是有值為x或或z的位。的位。相等操作符相等操作符 相同相同(case等等) 不相同不相同(case不等不等)=! =module equalities2(); reg 3: 0 rega, regb, regc; reg val; initial begin rega = 4b0011; regb = 4b1010; regc = 4b1x10; end initial fork #10 val = rega = regb ; / val = 0 #20 val = rega != regc; / val
21、 = 1 #30 val = regb = regc; / val = 0 #40 val = regc = regc; / val = 1 #50 $finish; joinendmodule 其結(jié)果是其結(jié)果是1b1、1b0或或1bx。 如果左邊及右邊的值相同(包如果左邊及右邊的值相同(包括括x、z),則結(jié)果為,則結(jié)果為1。如果左邊及右邊的值不相同,如果左邊及右邊的值不相同,則結(jié)果為則結(jié)果為0。!=的結(jié)果與的結(jié)果與 = 相反相反綜合工具不支持綜合工具不支持條件操作符條件操作符 條件條件?:module likebufif( in, en, out); input in; input en;
22、output out; assign out = (en = 1) ? in : bz;endmodulemodule like4to1( a, b, c, d, sel, out); input a, b, c, d; input 1: 0 sel; output out; assign out = sel = 2b00 ? a : sel = 2b01 ? b : sel = 2b10 ? c : d;endmodule如果條件值為如果條件值為x或或z,則結(jié)果可能為,則結(jié)果可能為x或或z條件操作符條件操作符條件操作符的語法為:條件操作符的語法為: = ? :registger = cond
23、ition ? true_value:false_value;其意思是:其意思是:if condition is TRUE, then LHS=true_expression, else LHS = false_expression每個條件操作符必須有三個參數(shù),缺少任何一個都會產(chǎn)生錯誤。每個條件操作符必須有三個參數(shù),缺少任何一個都會產(chǎn)生錯誤。最后一個操作數(shù)作為缺省值。最后一個操作數(shù)作為缺省值。上式中,若上式中,若condition為真則為真則register等于等于true_value;若;若condition為假則為假則register等等于于false_value。一個很有意思的地方是,如
24、果條件值不確定,且。一個很有意思的地方是,如果條件值不確定,且true_value和和false_value不相等,則輸出不確定值。不相等,則輸出不確定值。例如:例如:assign out = (sel = 0) ? a : b;若若sel為為0則則out =a;若;若sel為為1則則out = b。如果。如果sel為為x或或z,若,若a = b =0,則,則out = 0;若;若ab,則,則out值不確定。值不確定。級聯(lián)操作符級聯(lián)操作符 級聯(lián)級聯(lián) 可以從不同的矢量中選擇位并用可以從不同的矢量中選擇位并用它們組成一個新的矢量。它們組成一個新的矢量。用于位的重組和矢量構(gòu)造用于位的重組和矢量構(gòu)造m
25、odule concatenation; reg 7: 0 rega, regb, regc, regd; reg 7: 0 new; initial begin rega = 8b0000_0011; regb = 8b0000_0100; regc = 8b0001_1000; regd = 8b1110_0000; end initial fork #10 new = regc 4: 3, regd 7: 5, regb 2, rega 1: 0; / new = 8b11111111 #20 $finish; joinendmodule在級聯(lián)和復制時,必須指定位數(shù),在級聯(lián)和復制時,必須指定位數(shù),否則將產(chǎn)生錯誤。否則將產(chǎn)生錯誤。下面是類似錯誤的例子:下面是類似錯誤的例子: a7:0 = 4 b10; b7:0 = 2 5; c3:0 = 3 b011, b0;級聯(lián)時不限定操作數(shù)的數(shù)目。在級聯(lián)時不限定操作數(shù)的數(shù)目。在操作符符號操作符符號 中,用逗號將操中,用逗號將操作數(shù)分開。例如作數(shù)分開。例如: A, B, C, D復制復制 復制復制 復制一個變量或在復制一個變量或在 中的值中的值mo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度油罐租賃與環(huán)保監(jiān)測服務合同2篇
- 2025年度文物藝術(shù)品儲藏室安全防護合同4篇
- 二零二五年度漁業(yè)水域使用權(quán)租賃合同3篇
- 二零二五年度餐廳特色飲品制作技術(shù)授權(quán)合同3篇
- 2025方供貨合同協(xié)議書正規(guī)版樣書
- 二零二五年度成都高空廣告安裝公司高空廣告設施施工合同4篇
- 二零二五年度材料墊資工程結(jié)算合同2篇
- 二零二五年度高端不銹鋼門定制采購合同細則1500字3篇
- 2025年度水電工程節(jié)能改造安裝合同4篇
- 主播合同范本(2024版)
- 完整版秸稈炭化成型綜合利用項目可行性研究報告
- 油氣行業(yè)人才需求預測-洞察分析
- 《數(shù)據(jù)采集技術(shù)》課件-Scrapy 框架的基本操作
- (2024)河南省公務員考試《行測》真題及答案解析
- 圍城讀書分享課件
- 2025年河北省單招語文模擬測試二(原卷版)
- 工作計劃 2025年度醫(yī)院工作計劃
- 高一化學《活潑的金屬單質(zhì)-鈉》分層練習含答案解析
- DB34∕T 4010-2021 水利工程外觀質(zhì)量評定規(guī)程
- 2024年內(nèi)蒙古中考英語試卷五套合卷附答案
- 2024年電工(高級)證考試題庫及答案
評論
0/150
提交評論