Verilog HDL數(shù)字集成電路設(shè)計(jì)原理與應(yīng)用(第三版)課件 第2章 Verilog HDL基礎(chǔ)知識(shí)_第1頁
Verilog HDL數(shù)字集成電路設(shè)計(jì)原理與應(yīng)用(第三版)課件 第2章 Verilog HDL基礎(chǔ)知識(shí)_第2頁
Verilog HDL數(shù)字集成電路設(shè)計(jì)原理與應(yīng)用(第三版)課件 第2章 Verilog HDL基礎(chǔ)知識(shí)_第3頁
Verilog HDL數(shù)字集成電路設(shè)計(jì)原理與應(yīng)用(第三版)課件 第2章 Verilog HDL基礎(chǔ)知識(shí)_第4頁
Verilog HDL數(shù)字集成電路設(shè)計(jì)原理與應(yīng)用(第三版)課件 第2章 Verilog HDL基礎(chǔ)知識(shí)_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

2.1VerilogHDL的語言要素

2.2模塊

2.3端口2.1VerilogHDL的語言要素2.1.1符號(hào)1.空白符空白符包括空格符(\b)、制表符(\t)、換行符和換頁符。空白符使代碼看起來結(jié)構(gòu)清晰,閱讀起來更方便。在編譯和綜合時(shí),空白符被忽略。VerilogHDL程序可以不分行,也可以加入空白符采用多行編寫。2.注釋符VerilogHDL中允許插入注釋,表明程序代碼功能、修改、版本等信息,以增強(qiáng)程序的可讀性和幫助管理文檔。VerilogHDL中有以下兩種形式的注釋:(1)單行注釋。單行注釋以“//”開始,VerilogHDL忽略從此處到行尾的內(nèi)容。(2)多行注釋。多行注釋以“/*”開始,到“*/”結(jié)束,VerilogHDL忽略其中的注釋內(nèi)容。需要注意的是,多行注釋不允許嵌套,但是單行注釋可以嵌套在多行注釋中。3.標(biāo)識(shí)符和轉(zhuǎn)義標(biāo)識(shí)符在VerilogHDL中,標(biāo)識(shí)符(Identifier)被用來命名信號(hào)、模塊、參數(shù)等,它可以是任意一組字母、數(shù)字、$符號(hào)和_(下畫線)符號(hào)的組合。應(yīng)該注意的是,標(biāo)識(shí)符的字母區(qū)分大小寫,并且第一個(gè)字符必須是字母或者下畫線。為了使用標(biāo)識(shí)符集合以外的字符或標(biāo)號(hào),VerilogHDL規(guī)定了轉(zhuǎn)義標(biāo)識(shí)符(EscapedIdentifier)。采用轉(zhuǎn)義標(biāo)識(shí)符,可以在一條標(biāo)識(shí)符中包含任何可打印的字符。轉(zhuǎn)義標(biāo)識(shí)符以“\”(反斜線)符號(hào)開頭,以空白結(jié)尾(空白可以是一個(gè)空格、一個(gè)制表字符或換行符)。4.關(guān)鍵字VerilogHDL內(nèi)部已經(jīng)使用的詞稱為關(guān)鍵字或保留字,它是VerilogHDL內(nèi)部的專用詞,是事先定義好的確認(rèn)符,用來組織語言結(jié)構(gòu)。用戶不能隨便使用這些關(guān)鍵字。需注意的是,所有關(guān)鍵字都是小寫的。例如,ALWAYS不是關(guān)鍵字,它只是標(biāo)識(shí)符,與always(關(guān)鍵字)是不同的。表2.1-1所示為VerilogHDL中的常用關(guān)鍵字。5.數(shù)值VerilogHDL中有四種基本的邏輯數(shù)值狀態(tài)[0、1、x(X)、z(Z)],用數(shù)字或字符表達(dá)數(shù)字電路中傳送的邏輯狀態(tài)和存儲(chǔ)信息。其中,x和z都不區(qū)分大小寫,也就是說,0x1z與0X1Z是等同的。VerilogHDL中的四值電平邏輯如表2.1-2所示。在數(shù)值中,下畫線符號(hào)“_”除了不能放于數(shù)值的首位外,可以隨意用在整型數(shù)與實(shí)型數(shù)中,它們對(duì)數(shù)值大小沒有任何改變,只是為了提高可讀性。例如,16'b1011000110001100和16'b1011_0001_1000_1100的數(shù)值大小是相同的,只是后一種表達(dá)方式的可讀性更強(qiáng)。1)整數(shù)及其表示VerilogHDL中的整數(shù)可以是二進(jìn)制(b或B)、八進(jìn)制(o或O)、十進(jìn)制(d或D)、十六進(jìn)制(h或H),其基數(shù)符號(hào)與可以采用的數(shù)字字符集如表2.1-3所示。整數(shù)的表示形式如下:+/-<size>'<base_format><number>其中:“+/-”是正數(shù)和負(fù)數(shù)標(biāo)識(shí);size指換算后的二進(jìn)制數(shù)的寬度;“?'?”為基數(shù)格式表示的固有字符,該字符不能缺省,否則為非法表示形式;base_format是其基數(shù)符號(hào);number是可以使用的數(shù)字字符集,形式上是相應(yīng)進(jìn)制格式下的一串?dāng)?shù)值。使用整數(shù)時(shí)需要注意的是:(1)較長的數(shù)之間可以用下畫線來分開,目的是提高可讀性,下畫線本身沒有意義,如16'b1110_1011_0011_1010,但下畫線符號(hào)不能用作首字符。(2)當(dāng)數(shù)字沒有說明位寬時(shí),默認(rèn)為32位。(3)?x或z在二進(jìn)制中代表1位x或z,在八進(jìn)制中代表3位x或z,在十六進(jìn)制中代表4位x或z,其代表的寬度取決于所用的進(jìn)制。(4)若沒有定義一個(gè)整數(shù)的位寬,其寬度為相應(yīng)值中定義的位數(shù)。(5)若定義的位寬比實(shí)際數(shù)的位數(shù)大,則在左邊用0補(bǔ)齊。但如果數(shù)的最左邊一位為x或z,就相應(yīng)地用x或z在左邊補(bǔ)齊。如果定義的位寬比實(shí)際數(shù)的位寬小,那么最左邊的位被截?cái)唷?6)?“?”是高阻態(tài)z的另一種表示符號(hào)。在數(shù)字的表示中,字符“?”和Z或z是等價(jià)的,可互相替代。(7)整數(shù)可以帶正、負(fù)號(hào),并且正、負(fù)號(hào)應(yīng)寫在最左邊。負(fù)數(shù)表示為二進(jìn)制的補(bǔ)碼形式。(8)如果位寬和進(jìn)制都缺省,則代表十進(jìn)制數(shù)。例如:-15代表十進(jìn)制數(shù)?-15。(9)數(shù)字中不能有空格,但在表示進(jìn)制的字母兩側(cè)可以有空格。2)實(shí)數(shù)及其表示實(shí)數(shù)有以下兩種表示方法:(1)十進(jìn)制表示法。采用十進(jìn)制格式,小數(shù)點(diǎn)兩邊必須都有數(shù)字,否則為非法的表示形式。(2)科學(xué)記數(shù)法。VerilogHDL還定義了實(shí)數(shù)轉(zhuǎn)換為整數(shù)的方法,實(shí)數(shù)通過四舍五入轉(zhuǎn)換為最相近的整數(shù)。3)字符串及其表示字符串是指用雙引號(hào)括起來的字符序列,它必須包含在同一行中,不能分行書寫。若字符串用作VerilogHDL表達(dá)式或賦值語句中的操作數(shù),則字符串被看作8位的ASCII值序列,即一個(gè)字符對(duì)應(yīng)8位的ASCII值。2.1.2數(shù)據(jù)類型在VerilogHDL中,常見的數(shù)據(jù)類型有wire、tri、tri0、tri1、wand、triand、trireg、trior、wor、supply0、supply1、reg、integer、time、real、parameter。按照抽象程度,VerilogHDL的數(shù)據(jù)類型又可劃分為兩大類:物理數(shù)據(jù)類型(主要包括連線型及寄存器型)和抽象數(shù)據(jù)類型(主要包括整型、時(shí)間型、實(shí)型及參數(shù)型)。物理數(shù)據(jù)類型的抽象程度比較低,與實(shí)際硬件電路的映射關(guān)系比較明顯;抽象數(shù)據(jù)類型則是進(jìn)行輔助設(shè)計(jì)和驗(yàn)證的數(shù)據(jù)類型。1.物理數(shù)據(jù)類型VerilogHDL中最主要的物理數(shù)據(jù)類型是連線型、寄存器型和存儲(chǔ)器型,并使用四種邏輯電平和八種信號(hào)強(qiáng)度對(duì)實(shí)際的硬件電路建模。四值邏輯電平是對(duì)信號(hào)的抽象表示(見表2.1-2)。信號(hào)強(qiáng)度表示數(shù)字電路中不同強(qiáng)度的驅(qū)動(dòng)源,用來解決不同驅(qū)動(dòng)強(qiáng)度下的賦值沖突;對(duì)邏輯0和1可以用表2.1-4中列出的信號(hào)強(qiáng)度值表示,驅(qū)動(dòng)強(qiáng)度從supply到highz依次遞減,例如(supply0,strong1)表示邏輯0的驅(qū)動(dòng)程度是supply,邏輯1的驅(qū)動(dòng)程度是strong。1)連線型連線型變量包含多種類型,表2.1-5給出了各種連線型數(shù)據(jù)類型及其功能說明。連線表示邏輯單元的物理連接,可以對(duì)應(yīng)為電路中的物理信號(hào)連線,這種變量類型不能保持電荷(除trireg之外)。連線型變量必須有驅(qū)動(dòng)源,一種是連接到一個(gè)門或者模塊的輸出端,另一種是用assign連續(xù)賦值語句對(duì)它進(jìn)行賦值。若沒有驅(qū)動(dòng)源,將保持高阻態(tài)z。(1)?wire和tri。在眾多的連線型數(shù)據(jù)類型中,最常見的是wire(連線)和tri(三態(tài)線)兩種,它們的語法和語義一致。不同之處在于:wire型變量通常用來表示單個(gè)門驅(qū)動(dòng)或連續(xù)賦值語句驅(qū)動(dòng)的連線型數(shù)據(jù),tri型變量則用來表示多驅(qū)動(dòng)器驅(qū)動(dòng)的連線型數(shù)據(jù),主要用于定義三態(tài)的線網(wǎng)。wire/tri的真值表如表2.1-6所示。上述真值表可以理解為,同時(shí)有兩個(gè)驅(qū)動(dòng)強(qiáng)度相同的驅(qū)動(dòng)源來驅(qū)動(dòng)wire或tri變量時(shí)的輸出結(jié)果。(2)?wor和trior。當(dāng)有多個(gè)驅(qū)動(dòng)源驅(qū)動(dòng)wor和trior型數(shù)據(jù)時(shí),將產(chǎn)生線或結(jié)構(gòu),其真值表如表2.1-7所示。(3)?wand和triand。當(dāng)有多個(gè)驅(qū)動(dòng)源驅(qū)動(dòng)wand和triand型數(shù)據(jù)時(shí),將產(chǎn)生線與結(jié)構(gòu),其真值表如表2.1-8所示。(4)?tri0和tri1。tri0(tri1)的特征是:若無驅(qū)動(dòng)源驅(qū)動(dòng),則其值為0(tri1的值為1)。在有多個(gè)驅(qū)動(dòng)源的情況下,tri0/tri1的真值表如表2.1-9所示。(5)?supply0和supply1。supply0用于對(duì)“地”建模,即低電平0;supply1用于對(duì)電源建模,即高電平1。例如:supply0表示Gnd,supply1表示Vcc。(6)?trireg。trireg能存儲(chǔ)數(shù)值(類似于寄存器型數(shù)據(jù)類型),并且用于電容節(jié)點(diǎn)的建模。當(dāng)三態(tài)寄存器(trireg)的所有驅(qū)動(dòng)源都處于高阻態(tài)z時(shí),三態(tài)寄存器連線將保存作用在線網(wǎng)上的最后一個(gè)邏輯值。三態(tài)寄存器連線的缺省初始值為x。trireg連線型數(shù)據(jù)用于模擬電荷存儲(chǔ)。電荷量強(qiáng)度可由small、medium、large三個(gè)關(guān)鍵字來控制。默認(rèn)的電荷強(qiáng)度為medium。一個(gè)trireg連線型數(shù)據(jù)能夠模擬一個(gè)電荷存儲(chǔ)節(jié)點(diǎn),該節(jié)點(diǎn)的電荷量將隨時(shí)間而逐漸衰減。對(duì)于一個(gè)trireg連線型數(shù)據(jù),電荷衰減時(shí)間就是定義的仿真延遲時(shí)間。2)寄存器型reg型變量是最常見也是最重要的寄存器型數(shù)據(jù)類型,它是數(shù)據(jù)存儲(chǔ)單元的抽象類型,其對(duì)應(yīng)的硬件電路元件具有狀態(tài)保持作用,能夠存儲(chǔ)數(shù)據(jù),如觸發(fā)器、鎖存器等。reg型變量常用于行為級(jí)描述中,由過程賦值語句對(duì)其進(jìn)行賦值。reg型數(shù)據(jù)與wire型數(shù)據(jù)的區(qū)別在于,reg型數(shù)據(jù)保持最后一次的賦值,而wire型數(shù)據(jù)需要有持續(xù)的驅(qū)動(dòng)。一般情況下,reg型數(shù)據(jù)的默認(rèn)初始值為不定值x,缺省時(shí)的位寬為1位。reg型變量一般為無符號(hào)數(shù),若將一個(gè)負(fù)數(shù)賦給reg型變量,則自動(dòng)轉(zhuǎn)換成其二進(jìn)制補(bǔ)碼形式。在過程塊內(nèi)被賦值的每一個(gè)信號(hào)都必須定義成reg型,并且只能在always或initial過程塊中賦值,大多數(shù)reg型信號(hào)常常是寄存器或觸發(fā)器的輸出。2.連線型和寄存器型數(shù)據(jù)類型的聲明1)連線型數(shù)據(jù)類型的聲明缺省的連線型數(shù)據(jù)的默認(rèn)類型為1位(標(biāo)量)wire類型。VerilogHDL中禁止對(duì)已經(jīng)聲明過的網(wǎng)絡(luò)、變量或參數(shù)再次聲明。連線型數(shù)據(jù)類型聲明的一般語法格式如下:

<net_declaration><drive_strength><range><delay>[list_of_variables];其中,drive_strength、range、delay為可選項(xiàng),而list_of_variables為必選項(xiàng)。

說明:(1)?net_declaration:連線型數(shù)據(jù)類型,可以是wire、tri、tri0、tri1、wand、triand、trior、wor、trireg、supply1、supply0中的任意一種。(2)?drive_strength:連線型變量的驅(qū)動(dòng)強(qiáng)度。對(duì)于trireg類型,聲明的是charge_strength(電荷強(qiáng)度)。(3)?range:指定數(shù)據(jù)為標(biāo)量或矢量。若該項(xiàng)默認(rèn),則表示數(shù)據(jù)類型為1位的標(biāo)量;若超過1位,則為矢量形式。

(4)?delay:指定仿真延遲時(shí)間。

(5)?list_of_variables:變量名稱,一次可定義多個(gè)名稱,之間用逗號(hào)分開。除了邏輯值外,VerilogHDL還用強(qiáng)度值來解決數(shù)字電路中不同強(qiáng)度的驅(qū)動(dòng)源之間的賦值沖突,強(qiáng)度等級(jí)說明見表2.2-1。如果兩個(gè)具有不同強(qiáng)度的信號(hào)驅(qū)動(dòng)同一個(gè)線網(wǎng),則競(jìng)爭(zhēng)結(jié)果為高強(qiáng)度信號(hào)的值;如果兩個(gè)強(qiáng)度相同的信號(hào)之間發(fā)生競(jìng)爭(zhēng),則結(jié)果為不確定值。2)寄存器型數(shù)據(jù)類型的聲明reg型數(shù)據(jù)類型聲明的一般語法格式如下:reg<range><list_of_register_variables>;其中,range為可選項(xiàng),它指定了reg型變量的位寬,缺省時(shí)為1位。

說明:list_of_register_variables:變量名稱列表,一次可以定義多個(gè)名稱,之間用逗號(hào)分開。3)物理數(shù)據(jù)類型聲明示例前面已經(jīng)了解了連線型數(shù)據(jù)和寄存器型數(shù)據(jù)這兩種物理數(shù)據(jù)類型的聲明格式,下面舉例來說明這兩種聲明格式的用法。3.存儲(chǔ)器型存儲(chǔ)器型(memory)本質(zhì)上還是寄存器型變量陣列,只是VerilogHDL中沒有多維數(shù)組,所以就用reg型變量建立寄存器組(數(shù)組)來實(shí)現(xiàn)存儲(chǔ)器的功能,也就是擴(kuò)展的reg型數(shù)據(jù)地址范圍。存儲(chǔ)器型變量可以描述RAM型、ROM型存儲(chǔ)器以及reg文件。數(shù)組中的每一個(gè)單元通過一個(gè)數(shù)組索引進(jìn)行尋址。

存儲(chǔ)器型變量的一般聲明格式如下:reg<range1><name_of_register><range2>;其中,range1和range2都是可選項(xiàng),缺省時(shí)都為1。

說明:(1)?range1:存儲(chǔ)器中寄存器的位寬,格式為[msb:lsb]。(2)?range2:寄存器的個(gè)數(shù),格式為[msb:lsb],即有msb-lsb+1個(gè)。(3)?name_of_register:變量名稱列表,一次可以定義多個(gè)名稱,之間用逗號(hào)分開。4.抽象數(shù)據(jù)類型除了物理數(shù)據(jù)類型外,VerilogHDL還提供了整型(integer)、時(shí)間型(time)、實(shí)型(real)及參數(shù)型(parameter)等幾種抽象數(shù)據(jù)類型。它們只是純數(shù)學(xué)的抽象描述,不能與實(shí)際的硬件電路相映射。1)整型整型數(shù)據(jù)常用于對(duì)循環(huán)控制變量的說明,在算術(shù)運(yùn)算中被視為二進(jìn)制補(bǔ)碼形式的有符號(hào)數(shù)。除了寄存器型數(shù)據(jù)被當(dāng)作無符號(hào)數(shù)來處理之外,整型數(shù)據(jù)與32位寄存器型數(shù)據(jù)在實(shí)際意義上相同。整型數(shù)據(jù)的聲明格式如下:integer<list_of_register_variables>;2)時(shí)間型時(shí)間型數(shù)據(jù)與整型數(shù)據(jù)類似,只是它是64位的無符號(hào)數(shù)。時(shí)間型數(shù)據(jù)主要用于處理模擬時(shí)間的存儲(chǔ)與計(jì)算,常與系統(tǒng)函數(shù)$time一起使用。時(shí)間型數(shù)據(jù)的聲明格式如下:time<list_of_register_variables>;3)實(shí)型VerilogHDL支持實(shí)型常量與變量。實(shí)型數(shù)據(jù)在機(jī)器碼表示法中是浮點(diǎn)型數(shù)值,可用于對(duì)延遲時(shí)間的計(jì)算。實(shí)型數(shù)據(jù)的聲明格式如下:real<list_of_variables>;4)參數(shù)型在VerilogHDL中,參數(shù)是一個(gè)非常重要的數(shù)據(jù)類型,屬于常量,在仿真開始之前就被賦值,在仿真過程中保持不變。采用參數(shù)定義方法,可以提高程序的可讀性和可維護(hù)性。參數(shù)常用來定義延遲時(shí)間和變量的位寬。參數(shù)型數(shù)據(jù)的定義格式如下:parameter參數(shù)名1?=?表達(dá)式1,參數(shù)名2?=?表達(dá)式2,…,參數(shù)名n?=?表達(dá)式n;其中,表達(dá)式既可以是常數(shù),也可以是常量表達(dá)式,即表達(dá)式中是常數(shù)或之前定義過的參數(shù)。參數(shù)定義完后,程序中出現(xiàn)的所有的參數(shù)名都將被替換為相對(duì)應(yīng)的表達(dá)式。對(duì)于同一個(gè)模塊來說,參數(shù)一旦被定義,就不能夠通過其他語句對(duì)它重新賦值。下例是錯(cuò)誤的,因?yàn)閍被重復(fù)賦值。2.1.3運(yùn)算符VerilogHDL的運(yùn)算符主要針對(duì)數(shù)字邏輯電路制定,覆蓋范圍廣泛。VerilogHDL中的運(yùn)算符及其運(yùn)算優(yōu)先級(jí)如表2.1-10所示。不同的綜合開發(fā)工具在執(zhí)行這些優(yōu)先級(jí)時(shí)可能有微小的差別,因此在書寫程序時(shí)建議用括號(hào)來控制運(yùn)算的優(yōu)先級(jí),以有效避免錯(cuò)誤,同時(shí)增加程序的可讀性。1.算術(shù)運(yùn)算符VerilogHDL中常用的算術(shù)運(yùn)算符有五種,分別是加法(?+?)、減法(?-?)、乘法(?*?)、除法(?/?)和取模(?%?)。這五種運(yùn)算符都屬于雙目運(yùn)算符。符號(hào)“+”“-”“*”“/”分別表示常用的加、減、乘、除四則運(yùn)算;%?是取模運(yùn)算,如“6%3”的值為0,“7%4”的值為3。在算術(shù)運(yùn)算符的使用中,要注意如下問題:(1)算術(shù)運(yùn)算結(jié)果的位寬。算術(shù)表達(dá)式結(jié)果的長度由最長的操作數(shù)決定。在賦值語句下,算術(shù)運(yùn)算結(jié)果的長度由等號(hào)操作符左端的目標(biāo)長度決定。(2)有符號(hào)數(shù)和無符號(hào)數(shù)的使用。在設(shè)計(jì)中要注意到哪些操作數(shù)應(yīng)該是無符號(hào)數(shù),哪些應(yīng)該是有符號(hào)數(shù)。無符號(hào)數(shù)值一般存儲(chǔ)在線網(wǎng)、reg(寄存器)型變量及普通(沒有符號(hào)標(biāo)記s)的基數(shù)格式表示的整型數(shù)中。有符號(hào)數(shù)值一般存儲(chǔ)在整型變量、十進(jìn)制形式的整數(shù)、有符號(hào)的reg(寄存器)型變量及有符號(hào)的線網(wǎng)中。2.關(guān)系運(yùn)算符關(guān)系運(yùn)算符也是雙目運(yùn)算符,是對(duì)兩個(gè)操作數(shù)的大小進(jìn)行比較。關(guān)系運(yùn)算符有大于(>)、小于(<)、大于等于(>=)和小于等于(<=)幾種。在進(jìn)行關(guān)系比較時(shí),如果成立則結(jié)果為1'b1,否則返回的結(jié)果為0'b0;若不確定則返回結(jié)果為不定值(x)。例如:10>15的結(jié)果為假(0),20?>?18的結(jié)果為真(1),而4'b1101?<?4'hx的結(jié)果為不定值(x)。需注意的是,若操作數(shù)長度不同,則長度短的操作數(shù)應(yīng)在左邊用0補(bǔ)齊。例如:'b1001>='b101100等價(jià)于?'b001001>='b101101,結(jié)果為假(0)。3.相等關(guān)系運(yùn)算符相等關(guān)系運(yùn)算符是對(duì)兩個(gè)操作數(shù)進(jìn)行比較,比較的結(jié)果有三種,即真(1)、假(0)和不定值(x)。VerilogHDL中有四種相等關(guān)系運(yùn)算符:等于(==)、不等于(!=)、全等(===)、非全等(!==)。這四種運(yùn)算符都是雙目運(yùn)算符,要求有兩個(gè)操作數(shù),并且這四種相等運(yùn)算符的優(yōu)先級(jí)別是相同的?!?=”和“!=”稱為邏輯等式運(yùn)算符,其結(jié)果由兩個(gè)操作數(shù)的值決定,由于操作數(shù)中某些位可能是不定值x和高阻態(tài)值z(mì),所以結(jié)果可能為不定值x?!?==”和“!==”運(yùn)算符則不同,它是對(duì)操作數(shù)進(jìn)行按位比較,兩個(gè)操作數(shù)必須完全一致,其結(jié)果才是1,否則為0。若兩個(gè)操作數(shù)對(duì)應(yīng)位同時(shí)出現(xiàn)不定值x和高阻值z(mì),則可認(rèn)為是相同的?!?==”和“!==”運(yùn)算符常用于case表達(dá)式的判別,所以又稱為“case等式運(yùn)算符”。表2.1-11列出了“==”和“===”的真值表,可幫助讀者理解兩者的區(qū)別。4.邏輯運(yùn)算符邏輯運(yùn)算符有三種,分別是邏輯與(&&)、邏輯或(||)和邏輯非(!)。其中邏輯與、邏輯或是雙目運(yùn)算符,邏輯非為單目運(yùn)算符。邏輯運(yùn)算符的操作數(shù)只能是邏輯0或者邏輯1。三種邏輯運(yùn)算符的真值表如表2.1-12所示。在邏輯運(yùn)算符的操作過程中,如果操作數(shù)僅有1位,那么1就代表邏輯真,0就代表邏輯假;如果操作數(shù)是由多位組成的,則當(dāng)操作數(shù)每一位都是0時(shí)才是邏輯0值,只要有某一位為1,這個(gè)操作數(shù)就是邏輯1值。例如:寄存器變量a、b的初值分別為4'b1110和4'b0000,則?!a?=?0,!b?=?1,a&&b?=?0,a?||?b?=?1。需注意的是,若操作數(shù)中存在不定態(tài)x,并且其他位都是0,則邏輯運(yùn)算的結(jié)果也是不定態(tài),例如:a的初值為4'b1100,b的初值為4'b00x0,則?!a?=?0,!b?=?x,a&&b?=?x,a?||?b?=?1。5.按位運(yùn)算符數(shù)字邏輯電路中,信號(hào)與信號(hào)之間的運(yùn)算稱為位運(yùn)算。VerilogHDL提供了五種類型的位運(yùn)算符:按位取反(~)、按位與(&)、按位或(|)、按位異或(^)、按位同或(^~)。按位運(yùn)算符對(duì)其自變量的每一位進(jìn)行操作。例如:表達(dá)式A|B的結(jié)果是A和B的對(duì)應(yīng)位相或的值。表2.1-13~表2.1-15給出了按位與、按位或和按位異或運(yùn)算符的真值表。需要注意的是,兩個(gè)不同長度的數(shù)進(jìn)行位運(yùn)算時(shí),會(huì)自動(dòng)地將兩個(gè)操作數(shù)按右端對(duì)齊,位數(shù)少的操作數(shù)會(huì)在高位用0補(bǔ)齊;然后逐位進(jìn)行運(yùn)算,運(yùn)算結(jié)果的位寬與操作數(shù)中的位寬較大者相同。6.歸約運(yùn)算符歸約運(yùn)算符按位進(jìn)行邏輯運(yùn)算,屬于單目運(yùn)算符。由于這一類運(yùn)算符運(yùn)算的結(jié)果是產(chǎn)生1位邏輯值,因而被形象地稱為縮位運(yùn)算符。VerilogHDL中,縮位運(yùn)算符包括?&(與)、|(或)、^(異或)以及相應(yīng)的非操作?~&、~|、~^、^~。歸約運(yùn)算符的操作數(shù)只有一個(gè)。歸約運(yùn)算符的運(yùn)算過程是:設(shè)a是一個(gè)4位的寄存器型變量,它的4位分別是a[0]、a[1]、a[2]?和a[3]。當(dāng)對(duì)a進(jìn)行縮位運(yùn)算時(shí),先對(duì)a[0]?和a[1]?進(jìn)行縮位運(yùn)算,產(chǎn)生1位的結(jié)果,再將這個(gè)結(jié)果與a[2]?進(jìn)行縮位運(yùn)算,接著是a[3],最后產(chǎn)生1位的操作結(jié)果。7.移位運(yùn)算符移位運(yùn)算符有兩種:左移位運(yùn)算符(<<)和右移位運(yùn)算符(>>)。移位運(yùn)算過程是將左邊(右邊)的操作數(shù)向左(右)移,所移動(dòng)的位數(shù)由右邊的操作數(shù)來決定,然后用0來填補(bǔ)移出的空位。

8.條件運(yùn)算符條件運(yùn)算符(??:)是VerilogHDL里唯一的三目運(yùn)算符,它根據(jù)條件表達(dá)式的值來選擇應(yīng)執(zhí)行的表達(dá)式,其表達(dá)形式如下:<條件表達(dá)式>?<表達(dá)式1>:<表達(dá)式2>其中,條件表達(dá)式的運(yùn)算結(jié)果有真(1)、假(0)和不定態(tài)(x)三種。當(dāng)條件表達(dá)式的結(jié)果為真時(shí),執(zhí)行表達(dá)式1;當(dāng)條件表達(dá)式的結(jié)果為假時(shí),執(zhí)行表達(dá)式2。如果條件表達(dá)式的運(yùn)算結(jié)果為不定態(tài)x,則模擬器將按位對(duì)表達(dá)式1的值與表達(dá)式2的值進(jìn)行比較,位與位的比較按表2.1-16的規(guī)則產(chǎn)生每個(gè)結(jié)果位,從而構(gòu)成條件表達(dá)式的結(jié)果。9.連接和復(fù)制運(yùn)算符VerilogHDL中還有兩個(gè)特殊的運(yùn)算符:連接運(yùn)算符({})和復(fù)制運(yùn)算符({{}})。連接運(yùn)算符是把位于大括號(hào)({})中的兩個(gè)或兩個(gè)以上信號(hào)或數(shù)值用逗號(hào)(?,?)分隔的小表達(dá)式按位連接在一起,最后用大括號(hào)括起來表示一個(gè)整體信號(hào)或數(shù)值,形成一個(gè)大的表達(dá)式。其格式如下:{信號(hào)1的某幾位,信號(hào)2的某幾位,…,信號(hào)n的某幾位}復(fù)制運(yùn)算符({{}})將一個(gè)表達(dá)式放入雙重花括號(hào)中,復(fù)制因子放在第一層括號(hào)中。它為復(fù)制一個(gè)常量或變量提供了一種簡便的方法。2.2模

塊模塊(module)是VerilogHDL的基本單元,它代表一個(gè)基本的功能塊,用于描述某個(gè)設(shè)計(jì)的功能或結(jié)構(gòu),以及與其他模塊通信的外部端口。一個(gè)電路的設(shè)計(jì)不是一個(gè)模塊的設(shè)計(jì),而是多個(gè)模塊的組合,因此一個(gè)模塊的設(shè)計(jì)只是一個(gè)系統(tǒng)設(shè)計(jì)中某個(gè)層次的設(shè)計(jì)。圖2.2-1是一個(gè)基本的模塊結(jié)構(gòu)組成。從圖2.2-1中可以看出,一個(gè)模塊主要包括模塊的開始與結(jié)束、模塊端口定義、模塊數(shù)據(jù)類型說明和模塊邏輯功能描述幾個(gè)基本部分。(1)模塊的開始與結(jié)束:模塊在語言形式上是以關(guān)鍵詞module開始、以關(guān)鍵詞endmodule結(jié)束的一段程序,其中模塊開始語句必須以分號(hào)結(jié)束。模塊的開始部分包括模塊名(name)和端口列表(port_list),模塊名是模塊唯一的標(biāo)識(shí)符,而端口列表是由模塊各個(gè)輸入、輸出和雙向端口變量組成的一張列表,這些端口用來與其他模塊進(jìn)行連接(不妨理解為集成電路的引腳)。(2)模塊端口定義:定義端口列表里的變量哪些是輸入(input)、輸出(output)和雙向端口(inout)以及位寬。(3)模塊數(shù)據(jù)類型說明:包括wire、reg、memory和parameter等數(shù)據(jù)類型,以說明模塊中所用到的內(nèi)部信號(hào)、調(diào)用模塊等的聲明語句和功能定義語句。一般來說,module的input缺省定義為wire類型;output信號(hào)可以是wire類型,也可以是reg類型(條件是在always或initial語句塊中被賦值);inout一般為tri(三態(tài)線)類型,表示有多個(gè)驅(qū)動(dòng)源。(4)模塊邏輯功能描述:產(chǎn)生各種邏輯(主要是組合邏輯和時(shí)序邏輯),主要包括initial語句、always語句、其他子模塊實(shí)例化語句、門實(shí)例化語句、用戶自定義原語(UDP)實(shí)例化語句、連續(xù)賦值語句(assig

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論