![VerilogHDL硬件描述(第二節(jié))_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-7/4/63547c50-c7f8-451a-b97f-687b037d5d50/63547c50-c7f8-451a-b97f-687b037d5d501.gif)
![VerilogHDL硬件描述(第二節(jié))_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-7/4/63547c50-c7f8-451a-b97f-687b037d5d50/63547c50-c7f8-451a-b97f-687b037d5d502.gif)
![VerilogHDL硬件描述(第二節(jié))_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-7/4/63547c50-c7f8-451a-b97f-687b037d5d50/63547c50-c7f8-451a-b97f-687b037d5d503.gif)
![VerilogHDL硬件描述(第二節(jié))_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-7/4/63547c50-c7f8-451a-b97f-687b037d5d50/63547c50-c7f8-451a-b97f-687b037d5d504.gif)
![VerilogHDL硬件描述(第二節(jié))_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-7/4/63547c50-c7f8-451a-b97f-687b037d5d50/63547c50-c7f8-451a-b97f-687b037d5d505.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、2022年7月4日1福州大學(xué)微電子系福州大學(xué)微電子系2022年7月4日2標(biāo)識(shí)符標(biāo)識(shí)符l所謂所謂標(biāo)識(shí)別符標(biāo)識(shí)別符就是用戶為程序描述中的就是用戶為程序描述中的VerilogVerilog對(duì)象所起對(duì)象所起的名字。的名字。l標(biāo)識(shí)符可以是任意一組標(biāo)識(shí)符可以是任意一組字母、數(shù)字、字母、數(shù)字、$ $符號(hào)和符號(hào)和_(_(下劃線下劃線) )符號(hào)組合,但符號(hào)組合,但標(biāo)識(shí)符第一個(gè)字符必須是字母或者下劃線標(biāo)識(shí)符第一個(gè)字符必須是字母或者下劃線。l標(biāo)識(shí)符最長(zhǎng)可以達(dá)到標(biāo)識(shí)符最長(zhǎng)可以達(dá)到10231023個(gè)字符。個(gè)字符。l模塊名、端口名和實(shí)例名都是標(biāo)識(shí)符。模塊名、端口名和實(shí)例名都是標(biāo)識(shí)符。lVerilogVerilog語(yǔ)言是大
2、小寫(xiě)敏感的,因此語(yǔ)言是大小寫(xiě)敏感的,因此selsel和和SELSEL是兩個(gè)不同是兩個(gè)不同的標(biāo)識(shí)符。的標(biāo)識(shí)符。2022年7月4日3合法和非法標(biāo)識(shí)符合法和非法標(biāo)識(shí)符 l合法的:合法的:lshift_reg_ashift_reg_a lbusa_indexbusa_index l_bu$s2_bu$s2lbus263 bus263 非法的:非法的:34net /34net /不能用數(shù)字開(kāi)頭不能用數(shù)字開(kāi)頭a a* *b_netb_net / /不能含有非字母符號(hào)不能含有非字母符號(hào)* *n n 263 /263 /不能含有非字母符號(hào)不能含有非字母符號(hào) 2022年7月4日4代碼書(shū)寫(xiě)規(guī)范代碼書(shū)寫(xiě)規(guī)范l分節(jié)書(shū)
3、寫(xiě)格式分節(jié)書(shū)寫(xiě)格式 各節(jié)之間加各節(jié)之間加1 1到多行空格。如每個(gè)到多行空格。如每個(gè)alwaysalways、initialinitial語(yǔ)句都是一節(jié),每節(jié)基本上完成一個(gè)特定的功能。在每語(yǔ)句都是一節(jié),每節(jié)基本上完成一個(gè)特定的功能。在每節(jié)之前有幾行注釋對(duì)該節(jié)代碼加以描述,至少列出本節(jié)節(jié)之前有幾行注釋對(duì)該節(jié)代碼加以描述,至少列出本節(jié)所描述信號(hào)的含義。所描述信號(hào)的含義。 行首不要用空格來(lái)對(duì)齊,而就用行首不要用空格來(lái)對(duì)齊,而就用TabTab鍵。鍵。l注釋規(guī)范注釋規(guī)范 分號(hào)結(jié)束以分號(hào)結(jié)束以/進(jìn)行行注釋;使用進(jìn)行行注釋;使用/ /* *和和* */ /各占一行,并各占一行,并且頂頭。且頂頭。l在注釋說(shuō)明要注
4、意細(xì)節(jié):在注釋說(shuō)明要注意細(xì)節(jié): 應(yīng)在注釋中詳細(xì)說(shuō)明模塊的設(shè)計(jì)思路,特別需要注明應(yīng)在注釋中詳細(xì)說(shuō)明模塊的設(shè)計(jì)思路,特別需要注明的一些想法。的一些想法。 在注釋函數(shù)時(shí)要注明函數(shù)適用方法,對(duì)輸入?yún)?shù)要求在注釋函數(shù)時(shí)要注明函數(shù)適用方法,對(duì)輸入?yún)?shù)要求以及輸出格式等。以及輸出格式等。 對(duì)日期注釋要求記錄從開(kāi)始編寫(xiě)模塊到模塊測(cè)試結(jié)束之間的日期對(duì)日期注釋要求記錄從開(kāi)始編寫(xiě)模塊到模塊測(cè)試結(jié)束之間的日期2022年7月4日5代碼書(shū)寫(xiě)規(guī)范代碼書(shū)寫(xiě)規(guī)范l空格使用空格使用 不同變量,以及變量與符號(hào)、變量與括號(hào)之間都應(yīng)不同變量,以及變量與符號(hào)、變量與括號(hào)之間都應(yīng)保留一個(gè)空格。關(guān)鍵字與其它任何字符串之間都應(yīng)保保留一個(gè)空格。
5、關(guān)鍵字與其它任何字符串之間都應(yīng)保留一個(gè)空格。例如:留一個(gè)空格。例如:always always ( ( ) ) 使用大括號(hào)和小括號(hào)時(shí),前括號(hào)的后邊與后括號(hào)的使用大括號(hào)和小括號(hào)時(shí),前括號(hào)的后邊與后括號(hào)的前邊應(yīng)當(dāng)保留一個(gè)空格。前邊應(yīng)當(dāng)保留一個(gè)空格。 邏輯運(yùn)算符、算術(shù)運(yùn)算符、比較運(yùn)算符等的兩側(cè)各邏輯運(yùn)算符、算術(shù)運(yùn)算符、比較運(yùn)算符等的兩側(cè)各留一個(gè)空格,與變量分隔開(kāi)來(lái)。單操作數(shù)運(yùn)算符例外,留一個(gè)空格,與變量分隔開(kāi)來(lái)。單操作數(shù)運(yùn)算符例外,直接位于操作數(shù)前,不使用空格。直接位于操作數(shù)前,不使用空格。 如果使用如果使用/進(jìn)行注釋,在進(jìn)行注釋,在/后應(yīng)當(dāng)有一個(gè)空格;注后應(yīng)當(dāng)有一個(gè)空格;注釋行的末尾不要有多余的空
6、格。釋行的末尾不要有多余的空格。例例:assign Div 3:0 = Div 3:0 + 4b0001; 2022年7月4日6代碼書(shū)寫(xiě)規(guī)范代碼書(shū)寫(xiě)規(guī)范lBeginBeginendend的書(shū)寫(xiě)規(guī)范的書(shū)寫(xiě)規(guī)范 同一個(gè)層次的所有語(yǔ)句左端對(duì)齊;同一個(gè)層次的所有語(yǔ)句左端對(duì)齊;initailinitail、always always 等語(yǔ)句塊的等語(yǔ)句塊的beginbegin關(guān)鍵詞與相應(yīng)的關(guān)鍵詞與相應(yīng)的endend關(guān)關(guān)鍵詞對(duì)齊,并且在鍵詞對(duì)齊,并且在endend后面添加注釋標(biāo)明結(jié)束。后面添加注釋標(biāo)明結(jié)束。 不同層次之間的語(yǔ)句使用不同層次之間的語(yǔ)句使用TABTAB進(jìn)行縮進(jìn),每加進(jìn)行縮進(jìn),每加深一層縮進(jìn)一個(gè)深
7、一層縮進(jìn)一個(gè)TABTAB; 在在endmoduleendmodule、endtaskendtask、endcaseendcase等標(biāo)記一個(gè)等標(biāo)記一個(gè)代碼塊結(jié)束的關(guān)鍵詞后面要加上一行注釋說(shuō)明代碼塊結(jié)束的關(guān)鍵詞后面要加上一行注釋說(shuō)明這個(gè)代碼塊的名稱這個(gè)代碼塊的名稱2022年7月4日7整數(shù)整數(shù) 在在VerilogVerilog中,整型常量有以下四種進(jìn)中,整型常量有以下四種進(jìn)制表示形式:制表示形式:l二進(jìn)制整數(shù)二進(jìn)制整數(shù)(b(b或或B) B) l十進(jìn)制整數(shù)十進(jìn)制整數(shù)(d(d或或D) D) l十六進(jìn)制整數(shù)十六進(jìn)制整數(shù)(h(h或或H) H) l八進(jìn)制整數(shù)八進(jìn)制整數(shù)(o(o或或O) O) VerilogVe
8、rilog中的標(biāo)識(shí)符是區(qū)分大小寫(xiě)的,中的標(biāo)識(shí)符是區(qū)分大小寫(xiě)的,但在但在表示進(jìn)制和數(shù)值表示進(jìn)制和數(shù)值a-fa-f時(shí)使用大寫(xiě)或小寫(xiě)都可以時(shí)使用大寫(xiě)或小寫(xiě)都可以,不加以區(qū)分。不加以區(qū)分。2022年7月4日8整數(shù)表達(dá)方式有以下三種:整數(shù)表達(dá)方式有以下三種:1) ,這是一種完整的描述方式。下面的,這是一種完整的描述方式。下面的描述方式都是正確的:描述方式都是正確的: 8b101000108b10100010/表示位寬為表示位寬為8 8的二進(jìn)制數(shù)。的二進(jìn)制數(shù)。11b100_1010_111011b100_1010_1110/表示位寬為表示位寬為1111的二進(jìn)制數(shù)的二進(jìn)制數(shù) “_” “_”出現(xiàn)在數(shù)字之間是合
9、法的,可提高可讀性。出現(xiàn)在數(shù)字之間是合法的,可提高可讀性。 但需要注意的是但需要注意的是“_”“_”不能出現(xiàn)在最高位數(shù)字之前,不能出現(xiàn)在最高位數(shù)字之前, 例如例如11b_100_1010_111011b_100_1010_1110就是錯(cuò)誤的。就是錯(cuò)誤的。10d3210d32/表示位寬為表示位寬為1010的十進(jìn)制數(shù)的十進(jìn)制數(shù)323216D12816D128/表示位寬為表示位寬為1616的十進(jìn)制數(shù)的十進(jìn)制數(shù)12812832haa_bb_11_9732haa_bb_11_97/表示位寬為表示位寬為3232的十六進(jìn)制數(shù)的十六進(jìn)制數(shù)aabb1197aabb11978o2348o234/表示位寬為表示位寬
10、為8 8的八進(jìn)制數(shù)的八進(jìn)制數(shù)2342342022年7月4日9整數(shù)表達(dá)方式有以下三種整數(shù)表達(dá)方式有以下三種2 2) ,在這種描述方式中位寬采用缺省位寬,在這種描述方式中位寬采用缺省位寬( (具具體數(shù)值由機(jī)器系統(tǒng)決定體數(shù)值由機(jī)器系統(tǒng)決定, ,但通常為但通常為3232位位) )。b1101=32b1101b1101=32b1101 /表示位寬為表示位寬為3232的二進(jìn)制數(shù)的二進(jìn)制數(shù)11011101B11_0001_1110 /B11_0001_1110 /表示位寬為表示位寬為3232的二進(jìn)制數(shù)的二進(jìn)制數(shù)11000111101100011110d9872 /d9872 /表示位寬為表示位寬為3232的
11、十進(jìn)制數(shù)的十進(jìn)制數(shù)98729872Hafcd_1785Hafcd_1785 / /表示位寬為表示位寬為3232的十六進(jìn)制數(shù)的十六進(jìn)制數(shù)afcd1785afcd17853 3) ,在這種描述方式中,在這種描述方式中, ,采用缺省采用缺省3232位位寬和十進(jìn)制位位寬和十進(jìn)制6464/表示位寬為表示位寬為3232的十進(jìn)制數(shù)的十進(jìn)制數(shù)6464129129/表示位寬為表示位寬為3232的十進(jìn)制數(shù)的十進(jìn)制數(shù)1291292022年7月4日10整數(shù)整數(shù)例:例:4b1111 / This is a 4-bit binary number4b1111 / This is a 4-bit binary number
12、12habc / This is a 12-bit hexadecimal number12habc / This is a 12-bit hexadecimal number16d255 / This is a 16-bit decimal number.16d255 / This is a 16-bit decimal number.(2+3)b10 /(2+3)b10 /非法非法: :位長(zhǎng)不能夠?yàn)楸磉_(dá)式位長(zhǎng)不能夠?yàn)楸磉_(dá)式hc3 / This is a 32-bit hexadecimal numberhc3 / This is a 32-bit hexadecimal numbero21
13、 / This is a 32-bit octal numbero21 / This is a 32-bit octal number276 / This is a 32-bit decimal number by default276 / This is a 32-bit decimal number by default2022年7月4日11整數(shù)整數(shù)x x和和z z值值: :x x代表不定值,代表不定值,z z代表高阻值。代表高阻值。x x(或(或z z)在十六進(jìn)制值中代表)在十六進(jìn)制值中代表4 4位位x x(或(或z z),在八進(jìn)制中),在八進(jìn)制中代表代表3 3位位x x(或(或z z)
14、,在二進(jìn)制中代表),在二進(jìn)制中代表1 1位位x x(或(或z z)。)。z z還可以寫(xiě)作還可以寫(xiě)作“?”?”。在使用。在使用casecase表達(dá)式時(shí)建議使用這種表達(dá)式時(shí)建議使用這種寫(xiě)法寫(xiě)法, ,以提高程序的可讀性。以提高程序的可讀性。 在其它計(jì)算機(jī)程序語(yǔ)言中不存在這兩種數(shù)值,但在描述在其它計(jì)算機(jī)程序語(yǔ)言中不存在這兩種數(shù)值,但在描述數(shù)字邏輯電路時(shí)這兩個(gè)數(shù)值卻有著明確的物理意義。在數(shù)字邏輯電路時(shí)這兩個(gè)數(shù)值卻有著明確的物理意義。在數(shù)字電路中的三態(tài)門正常工作時(shí)就存在一個(gè)高阻態(tài),數(shù)字電路中的三態(tài)門正常工作時(shí)就存在一個(gè)高阻態(tài),z z就就可以描述這種狀態(tài)??梢悦枋鲞@種狀態(tài)。x x表示不能明確具體的邏輯值是表
15、示不能明確具體的邏輯值是1 1、0 0還是還是z z。 值值x x和和z z以及十六進(jìn)制中的以及十六進(jìn)制中的a a到到f f不區(qū)分大小寫(xiě)不區(qū)分大小寫(xiě)。2022年7月4日12整數(shù)整數(shù)x x和和z z值值: : 例例: :4b10 x04b10 x0/位寬為位寬為4 4的二進(jìn)制數(shù),從低位數(shù)的二進(jìn)制數(shù),從低位數(shù)起第二位為不定值起第二位為不定值4b101z4b101z /位寬為位寬為4 4的二進(jìn)制數(shù)從低位數(shù)起第一位的二進(jìn)制數(shù)從低位數(shù)起第一位為高阻值為高阻值12dz12dz/位寬為位寬為1212的十進(jìn)制數(shù)其值為高阻值的十進(jìn)制數(shù)其值為高阻值( (第第一種表達(dá)方式一種表達(dá)方式) )12d?12d?/位寬為位
16、寬為1212的十進(jìn)制數(shù)其值為高阻值的十進(jìn)制數(shù)其值為高阻值( (第第二種表達(dá)方式二種表達(dá)方式) )8h4x8h4x/位寬為位寬為8 8的十六進(jìn)制數(shù)其低四位值為不的十六進(jìn)制數(shù)其低四位值為不定值定值2022年7月4日13整數(shù)整數(shù)負(fù)數(shù)負(fù)數(shù): :l一個(gè)數(shù)字可以被定義為負(fù)數(shù)一個(gè)數(shù)字可以被定義為負(fù)數(shù), ,只需在位寬表達(dá)式前只需在位寬表達(dá)式前加一個(gè)減號(hào)。加一個(gè)減號(hào)。l注意:注意: 減號(hào)必須寫(xiě)在數(shù)字定義表達(dá)式的最前面,不可減號(hào)必須寫(xiě)在數(shù)字定義表達(dá)式的最前面,不可以放在位寬和進(jìn)制之間,也不可以放在進(jìn)制和具以放在位寬和進(jìn)制之間,也不可以放在進(jìn)制和具體的數(shù)之間。體的數(shù)之間。例例: :-8d5-8d5/這個(gè)表達(dá)式代表這
17、個(gè)表達(dá)式代表5 5的補(bǔ)數(shù)(用八位二進(jìn)的補(bǔ)數(shù)(用八位二進(jìn)制數(shù)表示制數(shù)表示) )8d-58d-5/非法格式非法格式2022年7月4日14整數(shù)整數(shù)下劃線下劃線(underscore_):(underscore_):l可以用下劃線將數(shù)分隔開(kāi),以提高程序可讀性??梢杂孟聞澗€將數(shù)分隔開(kāi),以提高程序可讀性。l下劃線不可以用在位寬和進(jìn)制處下劃線不可以用在位寬和進(jìn)制處, ,只能用在具只能用在具體的數(shù)字之間。體的數(shù)字之間。例例: :1616b1010_1011_1111_1010b1010_1011_1111_1010 / /合法格式合法格式8 8b_0011_1010b_0011_1010 /非法格式非法格式2
18、022年7月4日15實(shí)數(shù)實(shí)數(shù)兩種形式定義兩種形式定義l十進(jìn)制計(jì)數(shù)法:十進(jìn)制計(jì)數(shù)法:例:例:2.0 16.56722.0 16.5672l科學(xué)計(jì)數(shù)法:科學(xué)計(jì)數(shù)法:其中其中e e和和E E相同相同例:例:23.5E2 5.2e-423.5E2 5.2e-4 根據(jù)根據(jù)VerilogVerilog HDL HDL語(yǔ)言定義,實(shí)數(shù)通過(guò)四舍語(yǔ)言定義,實(shí)數(shù)通過(guò)四舍五入隱式地轉(zhuǎn)換成最相近的整數(shù)五入隱式地轉(zhuǎn)換成最相近的整數(shù)2022年7月4日16 數(shù)據(jù)類型用來(lái)表示數(shù)字電路硬件中的數(shù)據(jù)存數(shù)據(jù)類型用來(lái)表示數(shù)字電路硬件中的數(shù)據(jù)存儲(chǔ)和傳送的元素。儲(chǔ)和傳送的元素。VerilogVerilog HDL HDL共有共有19種數(shù)據(jù)
19、類型,分種數(shù)據(jù)類型,分2 2大類數(shù)據(jù):大類數(shù)據(jù): 線網(wǎng)類型線網(wǎng)類型 表示器件之間的物理連接。表示器件之間的物理連接。 其數(shù)值由驅(qū)動(dòng)元件決定,如果沒(méi)有驅(qū)動(dòng)元件連接到其數(shù)值由驅(qū)動(dòng)元件決定,如果沒(méi)有驅(qū)動(dòng)元件連接到線網(wǎng)上,線網(wǎng)上,則其默認(rèn)值為高阻則其默認(rèn)值為高阻Z Z。 寄存器類型寄存器類型 表示數(shù)據(jù)的儲(chǔ)存單元。表示數(shù)據(jù)的儲(chǔ)存單元。 其默認(rèn)值為不定其默認(rèn)值為不定X X。 兩者最大的區(qū)別:兩者最大的區(qū)別: 寄存器類型保持最后一次的賦值,而線網(wǎng)類型則需寄存器類型保持最后一次的賦值,而線網(wǎng)類型則需要持續(xù)的驅(qū)動(dòng)。要持續(xù)的驅(qū)動(dòng)。數(shù)據(jù)類型數(shù)據(jù)類型2022年7月4日17wirewire(網(wǎng)絡(luò)連線)(網(wǎng)絡(luò)連線): 由
20、模塊或門驅(qū)動(dòng)的連線。由模塊或門驅(qū)動(dòng)的連線。 驅(qū)動(dòng)端信號(hào)的改變會(huì)立刻驅(qū)動(dòng)端信號(hào)的改變會(huì)立刻傳遞到輸出的連線上。傳遞到輸出的連線上。 例如:右圖上,例如:右圖上,selbselb的改的改變,會(huì)自動(dòng)地立刻影響或變,會(huì)自動(dòng)地立刻影響或門的輸出。門的輸出。 netsabslselbselanslout線網(wǎng)類型線網(wǎng)類型2022年7月4日18線網(wǎng)類型線網(wǎng)類型l線網(wǎng)型數(shù)據(jù)常用來(lái)表示以線網(wǎng)型數(shù)據(jù)常用來(lái)表示以assignassign關(guān)鍵字指定的組合關(guān)鍵字指定的組合邏輯信號(hào)。邏輯信號(hào)。lVerilogVerilog程序模塊中輸入輸出信號(hào)類型缺省時(shí)自動(dòng)程序模塊中輸入輸出信號(hào)類型缺省時(shí)自動(dòng)定義為定義為wirewire型
21、。型。lwirewire型信號(hào)可以用作任何方程式的輸入,也可以用型信號(hào)可以用作任何方程式的輸入,也可以用作作“assign”assign”語(yǔ)句或?qū)嵗妮敵觥UZ(yǔ)句或?qū)嵗妮敵?。l定義格式:定義格式: wire wire 位寬位寬 數(shù)據(jù)名數(shù)據(jù)名1, 1, 數(shù)據(jù)名數(shù)據(jù)名2,2, 數(shù)據(jù)名數(shù)據(jù)名n;n; wire a; / wire a; /定義了一個(gè)一位的定義了一個(gè)一位的wirewire型數(shù)據(jù)型數(shù)據(jù) wire 7:0 b;/wire 7:0 b;/定義了一個(gè)八位的定義了一個(gè)八位的wirewire型數(shù)據(jù)型數(shù)據(jù) wire 4:1 c,dwire 4:1 c,d; /; /定義了二個(gè)四位的定義了二個(gè)
22、四位的wirewire型數(shù)據(jù)型數(shù)據(jù)2022年7月4日19線網(wǎng)類型變量的種類線網(wǎng)類型變量的種類:類型 功能 wire, triwire, tri 對(duì)應(yīng)于標(biāo)準(zhǔn)的互連線(缺?。?duì)應(yīng)于標(biāo)準(zhǔn)的互連線(缺省)supply1, supply2 supply1, supply2 對(duì)應(yīng)于電源線或接地線對(duì)應(yīng)于電源線或接地線wor, triorwor, trior 對(duì)應(yīng)于有多個(gè)驅(qū)動(dòng)源的線或邏輯連接對(duì)應(yīng)于有多個(gè)驅(qū)動(dòng)源的線或邏輯連接wand, triandwand, triand 對(duì)應(yīng)于有多個(gè)驅(qū)動(dòng)源的線與邏輯連接對(duì)應(yīng)于有多個(gè)驅(qū)動(dòng)源的線與邏輯連接triregtrireg 對(duì)應(yīng)于有電容存在能暫時(shí)存儲(chǔ)電平連接對(duì)應(yīng)于有電容存在
23、能暫時(shí)存儲(chǔ)電平連接tri1, tri0 tri1, tri0 對(duì)應(yīng)于需要上拉或下拉的連接對(duì)應(yīng)于需要上拉或下拉的連接 如果不明確地說(shuō)明連接是何種類型,默認(rèn)為如果不明確地說(shuō)明連接是何種類型,默認(rèn)為wirewire類型。類型。 其中只有其中只有wire, tri , supply1, supply2wire, tri , supply1, supply2是可是可綜合的,其余只能用于仿真語(yǔ)句綜合的,其余只能用于仿真語(yǔ)句2022年7月4日20線網(wǎng)類型線網(wǎng)類型lVerilogVerilog語(yǔ)法規(guī)定可以對(duì)語(yǔ)法規(guī)定可以對(duì)wirewire型變量有多個(gè)驅(qū)動(dòng),型變量有多個(gè)驅(qū)動(dòng),但只有用于仿真,在實(shí)際電路中,對(duì)任何信
24、號(hào)但只有用于仿真,在實(shí)際電路中,對(duì)任何信號(hào)有多個(gè)驅(qū)動(dòng)源都會(huì)產(chǎn)生不確定的后果,因此綜有多個(gè)驅(qū)動(dòng)源都會(huì)產(chǎn)生不確定的后果,因此綜合是過(guò)不去的合是過(guò)不去的 wire a,b,c; assign c =a; assign c =b;l在在VerilogVerilog定義中,定義中,wirewire、tritri功能是完全一致功能是完全一致的,提供這兩種不同名稱的目的是為了與模型的,提供這兩種不同名稱的目的是為了與模型中所使用的變量實(shí)際情況相一致。中所使用的變量實(shí)際情況相一致。 WireWire通常是通常是用來(lái)表示單個(gè)門驅(qū)動(dòng)或連續(xù)賦值驅(qū)動(dòng)。用來(lái)表示單個(gè)門驅(qū)動(dòng)或連續(xù)賦值驅(qū)動(dòng)。TriTri則常則常用于來(lái)表示多
25、驅(qū)動(dòng)器驅(qū)動(dòng)用于來(lái)表示多驅(qū)動(dòng)器驅(qū)動(dòng)2022年7月4日21wire a b;ababcNAND2wire a,b,c; assign c =a & b ;線網(wǎng)類型線網(wǎng)類型2022年7月4日22寄存器類型寄存器類型 寄存器型變量具有存儲(chǔ)性,即在接受下一個(gè)寄存器型變量具有存儲(chǔ)性,即在接受下一個(gè)賦值前,將保持原值,默認(rèn)的初始狀態(tài)為賦值前,將保持原值,默認(rèn)的初始狀態(tài)為“X”X”。 寄存器數(shù)據(jù)類型包含下列寄存器數(shù)據(jù)類型包含下列5 5類數(shù)據(jù)類型:類數(shù)據(jù)類型:lregreg: : 最常用的,用于行為描述中對(duì)寄存器類的說(shuō)明最常用的,用于行為描述中對(duì)寄存器類的說(shuō)明lintegerinteger:3232位帶
26、符號(hào)整形變量位帶符號(hào)整形變量ltimetime:6464位無(wú)符號(hào)時(shí)間變量位無(wú)符號(hào)時(shí)間變量lrealreal:6464位浮點(diǎn)、雙精度、帶符號(hào)實(shí)形變量位浮點(diǎn)、雙精度、帶符號(hào)實(shí)形變量lrealtimerealtime:其特征與:其特征與realreal型變量一致型變量一致2022年7月4日23寄存器類型寄存器類型(reg(reg) )l定義寄存器數(shù)據(jù)類型的關(guān)鍵字是定義寄存器數(shù)據(jù)類型的關(guān)鍵字是regreg,可以通過(guò)賦值語(yǔ)句,可以通過(guò)賦值語(yǔ)句改變寄存器存儲(chǔ)的值。改變寄存器存儲(chǔ)的值。lregreg類型數(shù)據(jù)的缺省初始值為不定值類型數(shù)據(jù)的缺省初始值為不定值x x,這在電路仿真時(shí)這在電路仿真時(shí)需要十分注意,需要
27、十分注意,建議仿真前建議仿真前都都要明確要明確給給每一個(gè)寄存器確每一個(gè)寄存器確定初始值定初始值。l在在“always”always”塊內(nèi)被賦值每一個(gè)信號(hào)都必須定義成塊內(nèi)被賦值每一個(gè)信號(hào)都必須定義成regreg類類型型。l定義方式:定義方式:regreg 位寬位寬 數(shù)據(jù)名數(shù)據(jù)名1,1,數(shù)據(jù)名數(shù)據(jù)名2,2, 數(shù)據(jù)名數(shù)據(jù)名i;i;reg regareg rega; /; /定義了一個(gè)定義了一個(gè)1 1位位regreg型數(shù)據(jù)型數(shù)據(jù)reg 3:0 regbreg 3:0 regb; /; /定義一個(gè)定義一個(gè)4 4位的位的regreg型數(shù)據(jù)型數(shù)據(jù)reg 4:0 regc, regdreg 4:0 regc,
28、 regd; /; /定義兩個(gè)定義兩個(gè)5 5位的位的regreg型數(shù)據(jù)型數(shù)據(jù)2022年7月4日24 regreg型變量能保持其值,直到它被賦于新值。型變量能保持其值,直到它被賦于新值。 regreg型變量常用于行為建模,產(chǎn)生測(cè)試的激勵(lì)型變量常用于行為建模,產(chǎn)生測(cè)試的激勵(lì)信號(hào)。信號(hào)。 常用行為語(yǔ)句結(jié)構(gòu)來(lái)給常用行為語(yǔ)句結(jié)構(gòu)來(lái)給regreg類型的變量賦值。類型的變量賦值。abslselbselansloutreg_areg_selreg_b 寄存器(寄存器(registerregister)類型變量)類型變量2022年7月4日25wireclk,d;reg q;always ( posedge cl
29、k ) q = d; regreg型數(shù)據(jù)常用來(lái)表示型數(shù)據(jù)常用來(lái)表示“always”always”模塊內(nèi)的指定模塊內(nèi)的指定信號(hào),代表觸發(fā)器。信號(hào),代表觸發(fā)器。寄存器類型寄存器類型(reg(reg) )2022年7月4日26d dout2out2AND2i1AND2i1clkclkout1out1D D Q QDFFDFFmodule rw2( clk, d, out1, out2 ) ; input clk, d;output out1, out2; reg out1; wire out2;assign out2 = d & (out1 ); always (posedge clk) b
30、egin out1 = d ; endendmodule 用寄存器用寄存器(reg(reg) )類型變量生成觸發(fā)器例子類型變量生成觸發(fā)器例子2022年7月4日27寄存器類型寄存器類型(reg(reg) )注意:注意: regreg型只表示被定義的信號(hào)將用在型只表示被定義的信號(hào)將用在“always”always”塊內(nèi),塊內(nèi),理解這一點(diǎn)很重要。并不是說(shuō)理解這一點(diǎn)很重要。并不是說(shuō)regreg型信號(hào)一定是寄存型信號(hào)一定是寄存器或觸發(fā)器的輸出。雖然器或觸發(fā)器的輸出。雖然regreg型信號(hào)常常是寄存器或型信號(hào)常常是寄存器或觸發(fā)器的輸出,但并不一定總是這樣。觸發(fā)器的輸出,但并不一定總是這樣。 aout2BU
31、FFbINVout1module rw1( a, b, out1, out2 ) ;input a, b;output out1, out2;reg out1;wire out2; assign out2 = a ; always (b) out1 = b;endmodule 2022年7月4日28regreg和和wirewire類型變量的區(qū)別類型變量的區(qū)別lregreg類型的變量可以被直接賦予數(shù)值,向類型的變量可以被直接賦予數(shù)值,向外輸出信號(hào)外輸出信號(hào)l而而wirewire類型的變量值是由驅(qū)動(dòng)它的電路決類型的變量值是由驅(qū)動(dòng)它的電路決定的定的2022年7月4日29位選擇和部分選擇位選擇和部分選
32、擇 l位選擇從向量中抽取特定的位。形式如下:位選擇從向量中抽取特定的位。形式如下: wirewire或者或者regreg向量名向量名bit_select_exprbit_select_expr l regreg 5:0 State; 5:0 State;l wire 3:0 Prtwire 3:0 Prt;lState1 & State4 /State1 & State4 /寄存器位選擇。寄存器位選擇。lPrt0 | BbqPrt0 | Bbq / /線網(wǎng)位選擇。線網(wǎng)位選擇。2022年7月4日30位選擇和部分選擇位選擇和部分選擇l在部分選擇中,向量的連續(xù)序列被選擇。形式在部分選
33、擇中,向量的連續(xù)序列被選擇。形式如下:如下:l wirewire或者或者regreg向量名向量名 常數(shù)表達(dá)式常數(shù)表達(dá)式1:1:常數(shù)表達(dá)式常數(shù)表達(dá)式22l regreg 5:0 State; 5:0 State; wire 3:0 Prtwire 3:0 Prt; State4:1 /State4:1 /寄存器部分選擇。寄存器部分選擇。 Prt3:2 /Prt3:2 /線網(wǎng)部分選擇。線網(wǎng)部分選擇。2022年7月4日31存儲(chǔ)器存儲(chǔ)器l通過(guò)對(duì)通過(guò)對(duì)regreg型變量建立數(shù)組來(lái)對(duì)存儲(chǔ)器型變量建立數(shù)組來(lái)對(duì)存儲(chǔ)器進(jìn)行進(jìn)行建模建模。regreg n-1:0 n-1:0 存儲(chǔ)器名存儲(chǔ)器名m-1:0m-1:0;
34、lregn-1:0regn-1:0定義了存儲(chǔ)器中每一個(gè)存儲(chǔ)單元的大小,定義了存儲(chǔ)器中每一個(gè)存儲(chǔ)單元的大小,即該存儲(chǔ)單元是一個(gè)即該存儲(chǔ)單元是一個(gè)n n位的寄存器。位的寄存器。l存儲(chǔ)器名后的存儲(chǔ)器名后的m-1:0 m-1:0 則定義了該存儲(chǔ)器中有多少個(gè)則定義了該存儲(chǔ)器中有多少個(gè)這樣的寄存器這樣的寄存器( (即地址),最后用分號(hào)結(jié)束定義語(yǔ)句。即地址),最后用分號(hào)結(jié)束定義語(yǔ)句。regreg 7:0 mema255 7:0 mema255:0; /256x80; /256x8位的存儲(chǔ)器。位的存儲(chǔ)器。2022年7月4日32存儲(chǔ)器存儲(chǔ)器l一個(gè)由一個(gè)由n n個(gè)個(gè)1 1位寄存器構(gòu)成的存儲(chǔ)器組不同于一個(gè)位寄存器構(gòu)
35、成的存儲(chǔ)器組不同于一個(gè)n n位的寄存位的寄存器。器。 reg n-1:0 regareg n-1:0 rega; /; /一個(gè)一個(gè)n n位的寄存器位的寄存器 regreg meman-1:0; / meman-1:0; /一個(gè)由一個(gè)由n n個(gè)個(gè)1 1位寄存器構(gòu)成存儲(chǔ)器組位寄存器構(gòu)成存儲(chǔ)器組l一個(gè)一個(gè)n n位的寄存器可以在一條賦值語(yǔ)句里進(jìn)行賦值,而一個(gè)位的寄存器可以在一條賦值語(yǔ)句里進(jìn)行賦值,而一個(gè)完整的存儲(chǔ)器則不行。完整的存儲(chǔ)器則不行。 regarega =0; / =0; /合法賦值語(yǔ)句合法賦值語(yǔ)句 memamema =0; / =0; /非法賦值語(yǔ)句非法賦值語(yǔ)句 mema3=0;/mema3
36、=0;/正確正確. .給給memorymemory中的第中的第3 3個(gè)存儲(chǔ)單元賦值個(gè)存儲(chǔ)單元賦值0.0.2022年7月4日33 輸入口(輸入口(inputinput)可以由寄存器或網(wǎng)絡(luò)連接驅(qū)動(dòng),)可以由寄存器或網(wǎng)絡(luò)連接驅(qū)動(dòng),但它本身只能驅(qū)動(dòng)網(wǎng)絡(luò)連接。但它本身只能驅(qū)動(dòng)網(wǎng)絡(luò)連接。 輸出口輸出口 (output)(output)可以由寄存器或網(wǎng)絡(luò)連接驅(qū)動(dòng),可以由寄存器或網(wǎng)絡(luò)連接驅(qū)動(dòng),但它本身只能驅(qū)動(dòng)網(wǎng)絡(luò)連接。但它本身只能驅(qū)動(dòng)網(wǎng)絡(luò)連接。 輸入輸入/ /輸出口輸出口(inout(inout) )只可以由網(wǎng)絡(luò)連接驅(qū)動(dòng),但只可以由網(wǎng)絡(luò)連接驅(qū)動(dòng),但它本身只能驅(qū)動(dòng)網(wǎng)絡(luò)連接。它本身只能驅(qū)動(dòng)網(wǎng)絡(luò)連接。 如果信號(hào)變量
37、是在過(guò)程塊如果信號(hào)變量是在過(guò)程塊 (initial(initial塊塊 或或 alwaysalways塊塊) )中被賦值的,必須把它聲明為寄存器類型變量中被賦值的,必須把它聲明為寄存器類型變量 如何選擇數(shù)據(jù)類型如何選擇數(shù)據(jù)類型2022年7月4日34如何選擇數(shù)據(jù)類型如何選擇數(shù)據(jù)類型舉例說(shuō)明例化時(shí)數(shù)據(jù)類型舉例說(shuō)明例化時(shí)數(shù)據(jù)類型的選擇的選擇module top;wire y; reg a, b; DUT u1(y,a,b); initial begin a = 0; b = 0; #10 a =1; . endendmodule 模塊模塊DUT的邊界的邊界輸入口輸入口輸出口輸出口輸出輸出/入口入口n
38、etnetnet/registernetnet/registernetinoutmodule DUT(Y, A, B);output Y;input A,B: wire Y, A, B; and (Y, A, B);endmodule2022年7月4日35 選擇數(shù)據(jù)類型時(shí)常犯的錯(cuò)誤選擇數(shù)據(jù)類型時(shí)常犯的錯(cuò)誤 把模塊的輸入信號(hào)定義為寄存器類型了。把模塊的輸入信號(hào)定義為寄存器類型了。 把例化后的輸出連接出去時(shí),把它定義為寄存把例化后的輸出連接出去時(shí),把它定義為寄存器類型了。器類型了。 在過(guò)程塊中對(duì)變量賦值時(shí),忘了把它定義為寄在過(guò)程塊中對(duì)變量賦值時(shí),忘了把它定義為寄存器類型(存器類型(regreg)或
39、已把它定義為連接類型了)或已把它定義為連接類型了(wirewire)。)。這是經(jīng)常犯的三個(gè)錯(cuò)誤!這是經(jīng)常犯的三個(gè)錯(cuò)誤!如何選擇數(shù)據(jù)類型如何選擇數(shù)據(jù)類型2022年7月4日36參數(shù)(參數(shù)(parametersparameters)l在在VerilogVerilog 中用中用parameterparameter定義一個(gè)代表常量的標(biāo)識(shí)符定義一個(gè)代表常量的標(biāo)識(shí)符, ,稱稱為符號(hào)常量為符號(hào)常量, ,采用標(biāo)識(shí)符代表一個(gè)常量可提高程序的可讀性采用標(biāo)識(shí)符代表一個(gè)常量可提高程序的可讀性和可維護(hù)性,且在和可維護(hù)性,且在有限狀態(tài)機(jī)中經(jīng)常使用符號(hào)常量。有限狀態(tài)機(jī)中經(jīng)常使用符號(hào)常量。l參數(shù)型常數(shù)也經(jīng)常用于定義延遲時(shí)間和變
40、量寬度。參數(shù)型常數(shù)也經(jīng)常用于定義延遲時(shí)間和變量寬度。l parameter parameter 參數(shù)名參數(shù)名1 1表達(dá)式表達(dá)式1 1,, ,參數(shù)名參數(shù)名n n表達(dá)式表達(dá)式n n;parameter wordsizeparameter wordsize=16,=16, memsize memsize=256; /=256; /定義二個(gè)參數(shù);定義二個(gè)參數(shù);regreg wordsize-1:0 memmemsize-1:0; / wordsize-1:0 memmemsize-1:0; /存儲(chǔ)器聲明存儲(chǔ)器聲明l參數(shù)是本地的,其定義只在本模塊內(nèi)有效參數(shù)是本地的,其定義只在本模塊內(nèi)有效2022年7月4
41、日37參數(shù)值的改寫(xiě)參數(shù)值的改寫(xiě): : 在模塊或?qū)嵗脮r(shí)可通過(guò)參數(shù)傳遞來(lái)改變被引用在模塊或?qū)嵗脮r(shí)可通過(guò)參數(shù)傳遞來(lái)改變被引用模塊或?qū)嵗幸讯x的參數(shù)。模塊或?qū)嵗幸讯x的參數(shù)。參數(shù)(參數(shù)(parametersparameters)module adder (a, b,sum); parameter wid = 8; Input wid-1:0 a,b; output wid:0 sum; endmodulemodule TOP(ina,inb,out); input 8:0 ina,inb; output 9:0 out; . adder u1(ina,inb,out,); defparam
42、 u1.wid=9; endmodule參數(shù)值的改寫(xiě)參數(shù)值的改寫(xiě): : 方法一方法一2022年7月4日38參數(shù)(參數(shù)(parametersparameters)module adder (a, b,sum); parameter wid = 8; Input wid-1:0 a,b; output wid:0 sum; endmodulemodule TOP(ina,inb,out); input 8:0 ina,inb; output 9:0 out; . adder #(9) u1(ina,inb,out,);endmodule參數(shù)值的改寫(xiě)參數(shù)值的改寫(xiě): : 方法二方法二2022年7月4日
43、39運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式運(yùn)算符所帶的操作數(shù)個(gè)數(shù)不同,分為:運(yùn)算符所帶的操作數(shù)個(gè)數(shù)不同,分為:l單目運(yùn)算符:?jiǎn)文窟\(yùn)算符:帶帶1 1個(gè)操作數(shù),且放在運(yùn)算符右邊個(gè)操作數(shù),且放在運(yùn)算符右邊l雙目運(yùn)行符:雙目運(yùn)行符:帶帶2 2個(gè)操作數(shù),且放在運(yùn)算符兩邊個(gè)操作數(shù),且放在運(yùn)算符兩邊l三目運(yùn)行符:三目運(yùn)行符:帶帶3 3個(gè)操作數(shù),且被運(yùn)算符間隔開(kāi)個(gè)操作數(shù),且被運(yùn)算符間隔開(kāi)2022年7月4日40賦值運(yùn)算符賦值運(yùn)算符l分連續(xù)賦值和過(guò)程賦值兩種分連續(xù)賦值和過(guò)程賦值兩種l過(guò)程賦值主要用于兩種結(jié)構(gòu)模塊過(guò)程賦值主要用于兩種結(jié)構(gòu)模塊(initial(initial和和always)always),分為阻塞和非阻塞賦值
44、。,分為阻塞和非阻塞賦值。l連續(xù)賦值語(yǔ)句只能對(duì)線網(wǎng)型變量進(jìn)行賦值,連續(xù)賦值語(yǔ)句只能對(duì)線網(wǎng)型變量進(jìn)行賦值,而不能對(duì)寄存器變量進(jìn)行賦值而不能對(duì)寄存器變量進(jìn)行賦值l連續(xù)賦值語(yǔ)句的語(yǔ)法為連續(xù)賦值語(yǔ)句的語(yǔ)法為: : assign assign # #延時(shí)量延時(shí)量 線網(wǎng)型變量名線網(wǎng)型變量名= = 賦值表達(dá)式賦值表達(dá)式 只要右端表達(dá)式中任一個(gè)操作數(shù)值發(fā)生變化,只要右端表達(dá)式中任一個(gè)操作數(shù)值發(fā)生變化,就會(huì)立即觸發(fā)對(duì)被賦值變量的更新操作就會(huì)立即觸發(fā)對(duì)被賦值變量的更新操作2022年7月4日41連續(xù)賦值語(yǔ)句應(yīng)用連續(xù)賦值語(yǔ)句應(yīng)用l對(duì)標(biāo)量線網(wǎng)賦值對(duì)標(biāo)量線網(wǎng)賦值wire a,bwire a,b; ; assign a =
45、b; assign a =b;l對(duì)矢量線網(wǎng)賦值對(duì)矢量線網(wǎng)賦值wire 7:0 a,bwire 7:0 a,b; ; assign a =b; assign a =b;l對(duì)矢量線網(wǎng)某幾位賦值對(duì)矢量線網(wǎng)某幾位賦值wire 7:0 a,bwire 7:0 a,b; ; assign a3:0 =b4:1; assign a3:0 =b4:1;l對(duì)任意拼接線網(wǎng)賦值對(duì)任意拼接線網(wǎng)賦值wire a,bwire a,b; ;wire 1:0 c,dwire 1:0 c,d; ; assign c = a , b; assign a , b=d; assign c = a , b; assign a , b=
46、d;2022年7月4日42算術(shù)運(yùn)算符算術(shù)運(yùn)算符l完成加、減、乘、除等算術(shù)運(yùn)算的符號(hào)完成加、減、乘、除等算術(shù)運(yùn)算的符號(hào)算術(shù)運(yùn)算符算術(shù)運(yùn)算符運(yùn)算符運(yùn)算符完成的運(yùn)算完成的運(yùn)算+ +加法加法- -減法減法* *乘法乘法/ /除法除法% %求模求模 用算術(shù)運(yùn)算符進(jìn)行用算術(shù)運(yùn)算符進(jìn)行RTLRTL描述時(shí),最終生成的電路性能與描述時(shí),最終生成的電路性能與使用的綜合工具有關(guān)。有些工具不支持除法及求模電路。使用的綜合工具有關(guān)。有些工具不支持除法及求模電路。例:例:9%4 9%4 的值為的值為1 12022年7月4日43VerilogVerilog中的大小中的大小(size)(size)與符號(hào)與符號(hào)lVerilog
47、Verilog會(huì)根據(jù)表達(dá)式中變量長(zhǎng)度對(duì)表達(dá)式值自動(dòng)地進(jìn)行調(diào)整。會(huì)根據(jù)表達(dá)式中變量長(zhǎng)度對(duì)表達(dá)式值自動(dòng)地進(jìn)行調(diào)整。lVerilogVerilog自動(dòng)截?cái)嗷驍U(kuò)展賦值語(yǔ)句中右邊的值以適應(yīng)左邊變量自動(dòng)截?cái)嗷驍U(kuò)展賦值語(yǔ)句中右邊的值以適應(yīng)左邊變量的長(zhǎng)度。的長(zhǎng)度。module sign_size; reg 3:0 a, b; reg 15:0 c; initial begin a = -1; / a是無(wú)符號(hào)數(shù),因此其值為是無(wú)符號(hào)數(shù),因此其值為1111 b = 8; c= 8; / b = c = 1000 #10 b = b + a; / 結(jié)果結(jié)果10111截?cái)嘟財(cái)? b = 0111 #10 c = c +
48、 a; / c = 10111 endendmodule 當(dāng)一個(gè)當(dāng)一個(gè)負(fù)數(shù)賦值給負(fù)數(shù)賦值給無(wú)符號(hào)變量無(wú)符號(hào)變量如如regreg時(shí),時(shí),VerilogVerilog自自動(dòng)完成二進(jìn)動(dòng)完成二進(jìn)制補(bǔ)碼計(jì)算制補(bǔ)碼計(jì)算2022年7月4日44按位運(yùn)算符按位運(yùn)算符名稱名稱記號(hào)記號(hào)定義定義說(shuō)明或例子說(shuō)明或例子按位取反按位取反A = 5b00110&按位與按位與A&B=5b10001|按位或按位或A | B=5b11101按位異或按位異或AB=5b01100,按位同或按位同或AB=5b10011A=5b11001A=5b11001B=5b10101B=5b101012022年7月4日45按位運(yùn)算符
49、按位運(yùn)算符module bitwise (); reg 3: 0 rega, regb, regc; reg 3: 0 num; initial begin rega = 4b1001; regb = 4b1010; regc = 4b11x0; 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 n
50、um = regb | regc; / num = 1110 #60 $finish; joinendmodule 按位操作符對(duì)矢量中相對(duì)應(yīng)位運(yùn)算。按位操作符對(duì)矢量中相對(duì)應(yīng)位運(yùn)算。 regb = 4b1 0 1 0 regc = 4b1 x 1 0num = regb & regc = 1 0 1 0 ; 位值為位值為x時(shí)不一定產(chǎn)生時(shí)不一定產(chǎn)生x結(jié)果。如結(jié)果。如#50時(shí)的時(shí)的or計(jì)算。計(jì)算。 當(dāng)兩個(gè)操作數(shù)位數(shù)不同時(shí),當(dāng)兩個(gè)操作數(shù)位數(shù)不同時(shí),位數(shù)少的操作數(shù)零擴(kuò)展到相位數(shù)少的操作數(shù)零擴(kuò)展到相同位數(shù)。同位數(shù)。a = 4b1011;b = 8b01010011;c = a | b; / a零擴(kuò)
51、展零擴(kuò)展為為 8b000010112022年7月4日46邏輯運(yùn)算符邏輯運(yùn)算符&邏輯與邏輯與A和和B的與的與 為為 A&B;|邏輯或邏輯或A和和B的或的或 為為 A/B;!邏輯非邏輯非A的非的非 為為 !A;a=4b1001; b=4b0000a=4b1001; b=4b0000a=1; b=0a=1; b=0!a!a!b!ba a|b|ba&ba&b0 01 11 10 0!a!a!b!ba a|b|ba&ba&b0 01 11 10 0 這些操作符在邏輯值這些操作符在邏輯值0 0或或1 1上操作。邏輯操作的結(jié)果為上操作。邏輯操作的結(jié)果為0 0或
52、或1 1。對(duì)于向量操作對(duì)于向量操作, , 非非0 0向量當(dāng)作向量當(dāng)作“1”1”處理。處理。2022年7月4日47邏輯運(yùn)算符邏輯運(yùn)算符module logical (); parameter five = 5; reg ans; reg 3: 0 rega, regb, regc; initial begin rega = 4b0011; /邏輯值為邏輯值為“1” regb = 4b10 xz; /邏輯值為邏輯值為“1” regc = 4b0z0 x; /邏輯值為邏輯值為“x” end initial fork #10 ans = rega & 0; / ans = 0 #20 ans
53、= 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 邏輯操作符結(jié)果為一位邏輯操作符結(jié)果為一位1 1,0 0或或x x。邏輯操作符只對(duì)邏輯值運(yùn)算。邏輯操作符只對(duì)邏輯值運(yùn)算。如操作數(shù)為全如操作數(shù)為全0 0,則其邏輯值為,則其邏輯值為falsefalse如操作數(shù)如操作數(shù)有一位為有一位為1 1,則其邏輯,則其邏輯值為值為truetrue若操作數(shù)若操作數(shù)
54、只只包含包含0 0、x x、z z,則邏,則邏輯值為輯值為x x 邏輯反操作符將操作數(shù)的邏輯反操作符將操作數(shù)的邏輯值取反。例如,若操作邏輯值取反。例如,若操作數(shù)為全數(shù)為全0 0,則其邏輯值為,則其邏輯值為0 0,邏輯反操作值為邏輯反操作值為1 1。2022年7月4日48邏輯反與位反的對(duì)比邏輯反與位反的對(duì)比module negation(); reg 3: 0 rega, regb; reg 3: 0 bit; reg log; initial begin rega = 4b1011; regb = 4b0000; end initial fork #10 bit = rega; / num =
55、 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 1,0 0或或x x。按位反的結(jié)果與操作數(shù)按位反的結(jié)果與操作數(shù)的位數(shù)相同的位數(shù)相同 邏輯反操作符將操作數(shù)邏輯反操作符將操作數(shù)的邏輯值取反。例如,若的邏輯值取反。例如,若操作數(shù)為全操作數(shù)為全0 0,則其邏輯值,則其邏輯值為為0 0,邏輯反操作值為,邏
56、輯反操作值為1 1。2022年7月4日49關(guān)系運(yùn)算符關(guān)系運(yùn)算符l關(guān)系運(yùn)算符共有以下四種:關(guān)系運(yùn)算符共有以下四種:a b aa b aa b a大于大于b ba = b aa = b aa = b a大于或等于大于或等于b bl在進(jìn)行關(guān)系運(yùn)算時(shí)在進(jìn)行關(guān)系運(yùn)算時(shí),如果聲明的關(guān)系是假的,如果聲明的關(guān)系是假的(flase(flase) ),則返回值是,則返回值是0 0;如果聲明的關(guān)系是真如果聲明的關(guān)系是真的的(true)(true),則返回值是,則返回值是1 1;如果某個(gè)操作數(shù)的值如果某個(gè)操作數(shù)的值不定,則關(guān)系是模糊的,返回值是不定值不定,則關(guān)系是模糊的,返回值是不定值“X”X”2022年7月4日50
57、關(guān)系運(yùn)算符關(guān)系運(yùn)算符module relationals (); reg 3: 0 rega, regb, regc; reg val; initial begin rega = 4b0011; regb = 4b1010; 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無(wú)論無(wú)論x為何值,為何值,regbregcrega和和reg
58、c的關(guān)的關(guān)系取決于系取決于x 其結(jié)果是其結(jié)果是1b11b1、1b01b0或或1bx1bx。2022年7月4日51名稱名稱記號(hào)記號(hào)定義定義用途用途注釋注釋=等于等于電路功能描述電路功能描述等于等于!=不等于不等于電路功能描述電路功能描述不等于不等于=全等于全等于仿真仿真 X, Z也也作為比作為比較對(duì)象較對(duì)象!=不全等于不全等于仿真仿真=01XZ010XX101XXXXXXXZXXXX=01XZ0100010100X0010Z0001邏輯等邏輯等case等(等(綜合工具不支持綜合工具不支持!)等式運(yùn)算符等式運(yùn)算符2022年7月4日52等式運(yùn)算符等式運(yùn)算符l“=”“=”和和“!=”!=”又稱為邏輯等
59、式運(yùn)算符。其結(jié)又稱為邏輯等式運(yùn)算符。其結(jié)果由兩個(gè)操作數(shù)的值決定。由于操作數(shù)中某些果由兩個(gè)操作數(shù)的值決定。由于操作數(shù)中某些位可能是不定值位可能是不定值x x和高阻值和高阻值z(mì),z,結(jié)果可能為不定結(jié)果可能為不定值值x x。l而而“=”=”和和“!=”!=”運(yùn)算符則不同運(yùn)算符則不同, ,它在對(duì)操它在對(duì)操作數(shù)進(jìn)行比較時(shí)對(duì)某些位的不定值作數(shù)進(jìn)行比較時(shí)對(duì)某些位的不定值x x和高阻值和高阻值z(mì) z也進(jìn)行比較也進(jìn)行比較, ,兩個(gè)操作數(shù)必需完全一致,兩個(gè)操作數(shù)必需完全一致,其結(jié)其結(jié)果才是果才是1 1,否則為,否則為0 0。lcasecase等只能用于仿真描述,不能用于等只能用于仿真描述,不能用于RTLRTL描述
60、描述。2022年7月4日53相等操作符相等操作符 賦值操作符,將等式右邊表達(dá)式的值拷貝到左邊賦值操作符,將等式右邊表達(dá)式的值拷貝到左邊。注意邏輯等與注意邏輯等與casecase等的差別等的差別= 邏輯等邏輯等= = = 01xz010 xx101xxxxxxxzxxxx case等等= = =01xz0100010100 x0010z00012b1x=2b0 x 值為值為0,因?yàn)椴幌嗟?,因?yàn)椴幌嗟?b1x=2b1x 值為值為x,因?yàn)榭赡懿?,因?yàn)榭赡懿幌嗟龋部赡芟嗟认嗟?,也可能相?b1x=2b0 x 值為值為0,因?yàn)椴幌嗤?,因?yàn)椴幌嗤?b1x=2b1x 值為值為1,因?yàn)橄嗤?,因?yàn)橄嗤琣 = 2b1x;b = 2b1x;if (a = b) $display( a is equal to b);else $display( a is not equal b);a = 2
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度人工智能產(chǎn)業(yè)投資轉(zhuǎn)借款合作協(xié)議模板3篇
- 國(guó)防建設(shè)知識(shí)
- 二零二五年度個(gè)人知識(shí)產(chǎn)權(quán)侵權(quán)糾紛授權(quán)委托書(shū)3篇
- 二零二五年度商場(chǎng)消防安全責(zé)任協(xié)議書(shū)3篇
- 二零二五年度城市停車場(chǎng)信息化建設(shè)承包協(xié)議3篇
- 二零二五年辦公樓智能安防與保潔服務(wù)合同3篇
- 二零二五版海洋石油鉆井平臺(tái)外派海員聘用合同范本3篇
- 二零二五年度商品房團(tuán)購(gòu)項(xiàng)目合作代理協(xié)議3篇
- 二零二五年度高校研究生學(xué)術(shù)交流活動(dòng)合作協(xié)議3篇
- 藝術(shù)地坪施工方案
- 4.1中國(guó)特色社會(huì)主義進(jìn)入新時(shí)代+課件-2024-2025學(xué)年高中政治統(tǒng)編版必修一中國(guó)特色社會(huì)主義
- 班級(jí)建設(shè)方案中等職業(yè)學(xué)校班主任能力大賽
- T-TJSG 001-2024 天津市社會(huì)組織社會(huì)工作專業(yè)人員薪酬指導(dǎo)方案
- 人教版九上化學(xué)第二單元課題2氧氣課件
- 中頻治療儀的使用流程
- 梁湘潤(rùn)《子平基礎(chǔ)概要》簡(jiǎn)體版
- 圖形的位似課件
- 調(diào)料廠工作管理制度
- 人教版《道德與法治》四年級(jí)下冊(cè)教材簡(jiǎn)要分析課件
- 2023年MRI技術(shù)操作規(guī)范
- 辦公用品、易耗品供貨服務(wù)方案
評(píng)論
0/150
提交評(píng)論