《電子技術(shù)綜合設(shè)計(jì)與實(shí)踐教程》課件第5章_第1頁(yè)
《電子技術(shù)綜合設(shè)計(jì)與實(shí)踐教程》課件第5章_第2頁(yè)
《電子技術(shù)綜合設(shè)計(jì)與實(shí)踐教程》課件第5章_第3頁(yè)
《電子技術(shù)綜合設(shè)計(jì)與實(shí)踐教程》課件第5章_第4頁(yè)
《電子技術(shù)綜合設(shè)計(jì)與實(shí)踐教程》課件第5章_第5頁(yè)
已閱讀5頁(yè),還剩64頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第5章VerilogHDL語(yǔ)言簡(jiǎn)介5.1VerilogHDL程序的基本構(gòu)成 5.2VerilogHDL語(yǔ)言的數(shù)據(jù)類(lèi)型 5.3詞匯規(guī)定 5.4模塊和端口 5.5行為描述 5.6VerilogHDL語(yǔ)言編程練習(xí)

VerilogHDL是一種硬件描述語(yǔ)言,用于從算法級(jí)、門(mén)級(jí)到開(kāi)關(guān)級(jí)的多種抽象設(shè)計(jì)層次的數(shù)字系統(tǒng)建模。被建模的數(shù)字系統(tǒng)對(duì)象的復(fù)雜性可以介于簡(jiǎn)單的門(mén)和完整的電子數(shù)字系統(tǒng)之間。數(shù)字系統(tǒng)能夠按層次描述,并可在相同描述中顯式地進(jìn)行時(shí)序建模。VerilogHDL語(yǔ)言具有下述描述能力:設(shè)計(jì)的行為特性、設(shè)計(jì)的數(shù)據(jù)流特性、設(shè)計(jì)的結(jié)構(gòu)組成以及包含響應(yīng)監(jiān)控與設(shè)計(jì)驗(yàn)證方面的時(shí)延和波形產(chǎn)生機(jī)制。

VerilogHDL語(yǔ)言是于1983年由GatewayDesignAutomation公司為其模擬器產(chǎn)品開(kāi)發(fā)的硬件建模語(yǔ)言。最初它只是一種專(zhuān)用語(yǔ)言,后來(lái)由于模擬、仿真器產(chǎn)品的廣泛使用,VerilogHDL作為一種方便且實(shí)用的語(yǔ)言逐漸為眾多設(shè)計(jì)者所接受。VerilogHDL語(yǔ)言于1990年被推向公眾領(lǐng)域。OpenVerilogInternational(OVI)是促進(jìn)Verilog發(fā)展的國(guó)際性組織。1992年,OVI決定致力將VerilogOVI標(biāo)準(zhǔn)推廣成為IEEE標(biāo)準(zhǔn)。這一努力最后獲得成功,Verilog語(yǔ)言于1995年成為IEEE標(biāo)準(zhǔn),稱(chēng)為IEEEStd1364-1995。Verilog硬件描述語(yǔ)言參考手冊(cè)中詳細(xì)描述了該標(biāo)準(zhǔn)。本章主要對(duì)VerilogHDL語(yǔ)言作一簡(jiǎn)介,詳細(xì)的編程使用請(qǐng)參考夏宇聞編寫(xiě)的《Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程》一書(shū)。

VerilogHDL程序設(shè)計(jì)的基本單元是模塊(module)。一個(gè)模塊由兩部分組成,一部分描述接口,另一部分描述邏輯功能,即定義輸入是如何影響輸出的。Verilog模塊設(shè)計(jì)描述了一個(gè)模塊的對(duì)外特性和內(nèi)部功能,包括模塊端口定義、I/O說(shuō)明、內(nèi)部信號(hào)聲明和功能定義等四部分,如圖5-1所示。5.1VerilogHDL程序的基本構(gòu)成

圖5-1VerilogHDL程序模塊結(jié)構(gòu)圖模塊是Verilog的基本描述單位,用于描述某個(gè)設(shè)計(jì)的功能或結(jié)構(gòu)及與其它模塊通信的外部端口。一個(gè)設(shè)計(jì)的結(jié)構(gòu)可使用開(kāi)關(guān)級(jí)原語(yǔ)、門(mén)級(jí)原語(yǔ)和用戶定義的原語(yǔ)方式描述;設(shè)計(jì)的數(shù)據(jù)流行為使用連續(xù)賦值語(yǔ)句進(jìn)行描述;時(shí)序行為使用過(guò)程結(jié)構(gòu)進(jìn)行描述。一個(gè)模塊可以在另一個(gè)模塊中使用,進(jìn)行層次嵌套。正因?yàn)槿绱?,才可以將大型的?shù)字電路設(shè)計(jì)分割成不同的子模塊來(lái)實(shí)現(xiàn)特定的功能,最后通過(guò)頂層模塊調(diào)用子模塊來(lái)實(shí)現(xiàn)整體功能。

1.模塊端口的定義

模塊端口定義聲明了輸入/輸出口,其格式如下:

Module模塊名(口1,口2,口3,…)

端口定義的圓括弧中的內(nèi)容,是設(shè)計(jì)電路模塊與外界聯(lián)系的全部輸入/輸出端口信號(hào)或引腳,它是設(shè)計(jì)實(shí)體對(duì)外的一個(gè)通信界面,是外界可以看到的部分(不包含電源和接地端),多個(gè)端口名之間用“,”分隔。例如:

moduleadder(sum,cont,ina,inb,cin);

2.I/O說(shuō)明

模塊的I/O說(shuō)明用來(lái)聲明模塊端口定義中各端口數(shù)據(jù)的流動(dòng)方向,包括輸入(input)、輸出(output)和雙向(inout)。其格式如下:

輸入:input[信號(hào)位寬-1:0]端口名

輸出:out[信號(hào)位寬-1:0]端口名

輸入輸出:inout[信號(hào)位寬-1:0]端口名

3.內(nèi)部信號(hào)聲明

內(nèi)部信號(hào)聲明用來(lái)說(shuō)明設(shè)計(jì)電路的功能描述中所用信號(hào)的數(shù)據(jù)類(lèi)型以及函數(shù)聲明。其格式如下:

reg[width-1:0]變量1,變量2

wire[width-1:0]變量1,變量2

4.功能定義

功能定義是VerilogHDL程序設(shè)計(jì)中最主要的部分,用來(lái)描述設(shè)計(jì)模塊的內(nèi)部結(jié)構(gòu)和模塊端口間的邏輯關(guān)系,在電路上相當(dāng)于器件的內(nèi)部電路結(jié)構(gòu)。功能定義采用三種方法產(chǎn)生邏輯,其格式如下:

(1)使用assign聲明語(yǔ)句。

如:assigna=b&c;

(2)用實(shí)例元件(instantiate)。

如:and#2u1(q,a,b);

(3)使用always塊。

如:always@(posedgeclkorposedgeclr)

begin……

end

在每個(gè)模塊中,可用四種方式描述一個(gè)設(shè)計(jì):數(shù)據(jù)流方式、行為方式、結(jié)構(gòu)方式、上述描述方式的混合。

1)數(shù)據(jù)流方式

用數(shù)據(jù)流方式描述一個(gè)設(shè)計(jì)建模的最基本的機(jī)制就是使用連續(xù)賦值語(yǔ)句。在連續(xù)賦值語(yǔ)句中,某個(gè)值被指派給線網(wǎng)變量。連續(xù)賦值語(yǔ)句的語(yǔ)法如下:

assign[delay]LHS_net=RHS_expression;

其中,右邊表達(dá)式使用的操作數(shù)無(wú)論何時(shí)發(fā)生變化,表達(dá)式值都會(huì)重新計(jì)算,并且在指定時(shí)延后被賦予左邊的線網(wǎng)變量。時(shí)延定義了右邊表達(dá)式操作數(shù)變化與賦值給左邊表達(dá)式之間的持續(xù)時(shí)間。如果沒(méi)有定義時(shí)延值delay,則缺省時(shí)延為0。連續(xù)賦值語(yǔ)句對(duì)電路的數(shù)據(jù)流行為采用的建模方式是隱式而非顯式的。此外,連續(xù)賦值語(yǔ)句是并發(fā)執(zhí)行的,也就是說(shuō)各語(yǔ)句的執(zhí)行順序與其在描述中出現(xiàn)的順序無(wú)關(guān)。

2)行為方式

設(shè)計(jì)的行為功能采用下述過(guò)程語(yǔ)句結(jié)構(gòu)描述:

(1)

initial語(yǔ)句:此語(yǔ)句只執(zhí)行一次。

(2)

always語(yǔ)句:此語(yǔ)句總是循環(huán)執(zhí)行,或者說(shuō)此語(yǔ)句重復(fù)執(zhí)行。

只有寄存器類(lèi)型的數(shù)據(jù)能夠在這兩種語(yǔ)句中被賦值。寄存器類(lèi)型的數(shù)據(jù)在被賦新值前保持原有值不變。所有的初始化語(yǔ)句和always語(yǔ)句在0時(shí)刻并發(fā)執(zhí)行。

3)結(jié)構(gòu)方式

在VerilogHDL語(yǔ)言中可使用四種方式描述結(jié)構(gòu):內(nèi)置門(mén)原語(yǔ)(在門(mén)級(jí));開(kāi)關(guān)級(jí)原語(yǔ)(在晶體管級(jí));用戶定義的原語(yǔ)(在門(mén)級(jí));模塊實(shí)例(創(chuàng)建層次結(jié)構(gòu))。

(1)內(nèi)置門(mén)原語(yǔ)(在門(mén)級(jí))。VerilogHDL語(yǔ)言中提供下列內(nèi)置基本門(mén):

●多輸入門(mén):and,nand,or,nor,xor,xnor。

●多輸出門(mén):buf,not。

●三態(tài)門(mén):bufif0,bufif1,notif0,notif1。

●上拉、下拉電阻:pullup,pulldown。

(2)開(kāi)關(guān)級(jí)原語(yǔ)(在晶體管級(jí))。

MOS開(kāi)關(guān):cmos,nmos,pmos,rcmos,rnmos,rpmos。

●雙向開(kāi)關(guān):tran,tranif0,tranif1,rtran,rtranif0,rtranif1。

門(mén)級(jí)邏輯設(shè)計(jì)描述中可使用具體的門(mén)實(shí)例語(yǔ)句。下面是簡(jiǎn)單的門(mén)實(shí)例語(yǔ)句格式:

gate_type[instance_name](term1,term2,…,term);N

注意,instance_name是可選的;gate_type為前面列出的某種門(mén)類(lèi)型。各term用于表示與門(mén)的輸入/輸出端口相連的線網(wǎng)或寄存器。同一門(mén)類(lèi)型的多個(gè)實(shí)例能夠在一個(gè)結(jié)構(gòu)形式中定義。語(yǔ)法如下:

gate_type

[instance_name1](term11,term12,…,term)1,N

[instance_name2](term21,term22,…,term)2,N

[instance_nameM](termM1,termM2,…,term)M;N

(3)用戶定義的原語(yǔ)(UDP,在門(mén)級(jí))。

以下語(yǔ)法的UDP說(shuō)明可用來(lái)定義UDP:

PrimitiveUDP_name(OutputName,List_of_inpu)ts

Output_declaration

List_of_input_declarations

[Reg_declaration]

[Initial_statement]

table

List_of_tabel_entries

endtable

endprimitive

UDP的定義不依賴(lài)于模塊定義,因此出現(xiàn)在模塊定義以外,也可以在單獨(dú)的文本文件中定義UDP。

UDP只能有一個(gè)輸出和一個(gè)或多個(gè)輸入。第一個(gè)端口必須是輸出端口。此外,輸出

可以取值0、1或x(不允許取z值)。輸入中出現(xiàn)z值時(shí)以x處理。UDP的行為以表的形式描述。在UDP中可以描述下面兩類(lèi)行為:

●組合電路。在組合電路UDP中,規(guī)定了不同的輸入組合和相對(duì)應(yīng)的輸出值。沒(méi)有指定的任意組合輸出為x。

●時(shí)序電路(邊沿觸發(fā)和電平觸發(fā))。在時(shí)序電路UDP中,使用1位寄存器描述內(nèi)部狀態(tài)。該寄存器的值是時(shí)序電路UDP的輸出值。共有兩種不同類(lèi)型的時(shí)序電路UDP:一種模擬電平觸發(fā)行為;另一種模擬邊沿觸發(fā)行為。時(shí)序電路UDP使用寄存器的當(dāng)前值和輸入值來(lái)決定寄存器的下一狀態(tài)(和后繼的輸出)。

(4)模塊實(shí)例(創(chuàng)建層次結(jié)構(gòu))。

首先構(gòu)建基本模塊,再逐層實(shí)例化,構(gòu)成高級(jí)模塊。

moduleDFF(d,clk,clr,q,qb);

....//定義各種邏輯

endmodule//構(gòu)建基本模塊DEF

moduleREG4(d,clk,clr,q,qb);

output[3:0]q,qb;

input[3:0]d;

inputclk,clr;

DFFd0(d[0],clk,clr,q[0],qb[0]);

DFFd1(d[1],clk,clr,q[1],qb[1]);

DFFd2(d[2],clk,clr,q[2],qb[2]);

DFFd3(d[3],clk,clr,q[3],qb[3]);

endmodule//在REG4模塊內(nèi),通過(guò)實(shí)例化基本模塊DEF構(gòu)建高層模塊

4)上述描述方式的混合

在模塊中,結(jié)構(gòu)方式和行為方式的描述可以自由混合。也就是說(shuō),模塊描述中可以包含實(shí)例化的門(mén)、模塊實(shí)例化語(yǔ)句、連續(xù)賦值語(yǔ)句以及always語(yǔ)句和initial語(yǔ)句的混合。它們之間也可以相互包含。來(lái)自always語(yǔ)句和initial語(yǔ)句(切記只有寄存器類(lèi)型的數(shù)據(jù)才可以在這兩種語(yǔ)句中被賦值)的值能夠驅(qū)動(dòng)門(mén)或開(kāi)關(guān),而來(lái)自于門(mén)或連續(xù)賦值語(yǔ)句(只能驅(qū)動(dòng)線網(wǎng))的值能夠反過(guò)來(lái)用于觸發(fā)always語(yǔ)句和initial語(yǔ)句。

VerilogHDL語(yǔ)言有兩種數(shù)據(jù)類(lèi)型。

(1)線網(wǎng)類(lèi)型(nettype):表示Verilog結(jié)構(gòu)化元件間的物理連線。它的值由驅(qū)動(dòng)元件的值決定,例如連續(xù)賦值或門(mén)的輸出。如果沒(méi)有驅(qū)動(dòng)元件連接到線網(wǎng),則線網(wǎng)的缺省值為z。

5.2VerilogHDL語(yǔ)言的數(shù)據(jù)類(lèi)型

(2)寄存器類(lèi)型(registertype):表示一個(gè)抽象的數(shù)據(jù)存儲(chǔ)單元,它只能在always語(yǔ)句和initial語(yǔ)句中被賦值,并且它的值從一個(gè)賦值到另一個(gè)賦值被保存下來(lái)。寄存器類(lèi)型的變量具有x的缺省值。5.2.1線網(wǎng)類(lèi)型

線網(wǎng)數(shù)據(jù)包含以下不同的線網(wǎng)子類(lèi)型:wire、tri、wor、trior、wand、triand、trireg、tri1、tri0、supply0、supply1。

通用的線網(wǎng)類(lèi)型說(shuō)明語(yǔ)法如下:

net_kind[msb:lsb]net1,net2,...,netN;

線網(wǎng)子類(lèi)型描述如表5-1所示。

表5-1線網(wǎng)子類(lèi)型描述

1.wire和tri線網(wǎng)

用于連接單元的連線(wire)是最常見(jiàn)的線網(wǎng)類(lèi)型。三態(tài)線(tri)與連線的語(yǔ)法和語(yǔ)義一致。三態(tài)線可以用于描述多個(gè)驅(qū)動(dòng)源驅(qū)動(dòng)同一根線的線網(wǎng)類(lèi)型,并且沒(méi)有其它特殊的意義。

2.wor和trior線網(wǎng)

線或(wor)指如果某個(gè)驅(qū)動(dòng)源為1,那么線網(wǎng)的值也為1。三態(tài)線或(trior)與線或在語(yǔ)法和功能上是一致的。

3.wand和triand線網(wǎng)

線與(wand)指如果某個(gè)驅(qū)動(dòng)源為0,那么線網(wǎng)的值為0。三態(tài)線與(triand)和線與在語(yǔ)法和功能上是一致的。

4.trireg線網(wǎng)

三態(tài)寄存器(trieg)線網(wǎng)用于存儲(chǔ)數(shù)值(類(lèi)似于寄存器)及電容節(jié)點(diǎn)的建模。當(dāng)三態(tài)寄存器線網(wǎng)的所有驅(qū)動(dòng)源都處于高阻態(tài)時(shí),也就是說(shuō),當(dāng)值為z時(shí),三態(tài)寄存器線網(wǎng)保存作用在線網(wǎng)上的最后一個(gè)值。此外,三態(tài)寄存器線網(wǎng)的缺省初始值為x。例如:

trireg[1:8]Dbus,Abus;

5.tri0和tri1線網(wǎng)

這類(lèi)線網(wǎng)可用于線邏輯的建模,即線網(wǎng)有多于一個(gè)的驅(qū)動(dòng)源。tri0(tri1)線網(wǎng)的特征是,若無(wú)驅(qū)動(dòng)源驅(qū)動(dòng),則它的值為0(tri1的值為1)。

6.supply0和supply1線網(wǎng)

supply0用于對(duì)“地”建模,即低電平0;supply1用于對(duì)電源建模,即高電平1。例如:

supply0Gnd,ClkGnd;

supply1[2:0]Vcc;5.2.2寄存器類(lèi)型

VerilogHDL語(yǔ)言中有五種不同的寄存器類(lèi)型:reg、integer、time、real、realtime。

1.reg寄存器類(lèi)型

reg寄存器類(lèi)型是最常見(jiàn)的數(shù)據(jù)類(lèi)型。簡(jiǎn)單的寄存器類(lèi)型說(shuō)明如下:

reg[msb:lsb]reg1,reg2,…,regN;其中,msb和lsb定義了范圍,并且均為常數(shù)值表達(dá)式。范圍定義是可選的,如果沒(méi)有定義范圍,則缺省值為1位寄存器。該寄存器可以取任意長(zhǎng)度。寄存器中的值通常被解釋為無(wú)符號(hào)數(shù)。例如:

reg[3:0]Sat; //Sat為4位寄存器

regCnt; //1位寄存器

reg[1:32]Kisp,Pisp,Lisp; //32位寄存器

2.存儲(chǔ)器類(lèi)型

存儲(chǔ)器是一個(gè)寄存器數(shù)組。在賦值語(yǔ)句中需要注意如下區(qū)別:存儲(chǔ)器賦值不能在一條賦值語(yǔ)句中完成,但是寄存器可以。因此在存儲(chǔ)器被賦值時(shí),需要定義一個(gè)索引。

存儲(chǔ)器使用如下說(shuō)明方式:

reg[msb:lsb]memory1[upper1:lower1], //msb、lsb分別表示寄存器的最高位、

memory2[upper2:lower2],...; //最低位,upper1、lower1分別表示

//存儲(chǔ)器包含的最高寄存器編號(hào)、最低

//寄存器編號(hào)

例如:

reg[0:3]MyMem[0:63] //MyMem為64個(gè)4位寄存器的數(shù)組

regBog[1:5] //Bog為5個(gè)1位寄存器的數(shù)組

3.integer寄存器類(lèi)型

integer(整數(shù))寄存器的值為整數(shù)值。整數(shù)寄存器可以作為普通寄存器使用,其典型應(yīng)用為高層次行為建模。

使用整數(shù)型的說(shuō)明如下:

integerinteger1,integer2,...,intergerN[msb:lsb];

其中,msb和lsb是定義整數(shù)數(shù)組界限的常量表達(dá)式,數(shù)組界限的定義是可選的。

4.time寄存器類(lèi)型

time(時(shí)間)類(lèi)型的寄存器用于存儲(chǔ)和處理時(shí)間。

5.real和realtime寄存器類(lèi)型

real(實(shí)數(shù))寄存器類(lèi)型和realtime(實(shí)數(shù)時(shí)間)寄存器類(lèi)型中的參數(shù)是常量。該參數(shù)經(jīng)常用于定義時(shí)延和變量的寬度。

real類(lèi)型說(shuō)明的變量的缺省值為0。

real類(lèi)型寄存器說(shuō)明如下:

realreal_reg1,real_reg2,…,real_regN;

realtime類(lèi)型寄存器說(shuō)明如下:

realtimerealtime_reg1,realtime_reg2,...,realtime_regN;

realtime與real類(lèi)型完全相同。例如:

realSwing,Top;

realtimeCurrTime;5.2.3常量

常量是一個(gè)恒定不變的值數(shù),一般在程序前部定義。常量定義格式如下:

parameter常量名1=表達(dá)式,常量名2=表達(dá)式,…,常量名n=表達(dá)式;

parameter是常量定義關(guān)鍵字,常量名是用戶定義的標(biāo)識(shí)符,表達(dá)式是為常量賦的值。例如:

parameterVcc=5,fbus=8'b11010001;

使用參數(shù)說(shuō)明的參數(shù)只被賦值一次。參數(shù)說(shuō)明如下:

parameterparam1=const_expr1,param2=const_expr2,...,paramN=const_exprN;

1.空白符和注釋

VerilogHDL語(yǔ)言中的空白符包括空格、tab符號(hào)、換行和換頁(yè)。空白符如果不是出現(xiàn)在字符串中,則在編譯源程序時(shí)將被忽略。

注釋分為行注釋和塊注釋兩種方式。行注釋用符號(hào)//(兩個(gè)斜杠)開(kāi)始,注釋到本行結(jié)束。塊注釋用/*開(kāi)始,用*/結(jié)束。塊注釋可以跨越多行,但它們不能被嵌套。5.3詞匯規(guī)定

2.常數(shù)

VerilogHDL語(yǔ)言中的常數(shù)包括數(shù)字、未知x和高阻z三種。數(shù)字可以用二進(jìn)制、十進(jìn)制、八進(jìn)制和十六進(jìn)制等4種不同數(shù)制來(lái)表示,完整的數(shù)字格式如下:

<位寬>'<進(jìn)制符號(hào)><數(shù)字>

其中,位寬表示數(shù)字對(duì)應(yīng)的二進(jìn)制數(shù)的位數(shù)寬度;進(jìn)制符號(hào)包括b或B(表示二進(jìn)制數(shù)),d或D(表示十進(jìn)制數(shù)),h或H(表示十六進(jìn)制數(shù)),o或O(表示八進(jìn)制數(shù))。例如:

8'b10110001 //表示位寬為8位的二進(jìn)制數(shù)

8'hf5 //表示位寬為8位的十六進(jìn)制數(shù)

十進(jìn)制數(shù)的位寬和進(jìn)制符號(hào)可以缺省,例如:

125 //表示十進(jìn)制數(shù)125

8'b1111xxxx //等價(jià)于8'hfx

8'b1101zzzz //等價(jià)于8'hdz

3.字符串

字符串是用雙引號(hào)括起來(lái)的可打印字符序列,它必須包含在同一行中。例如,"ABC"、"ABOY."、"A"、"1234"都是字符串。

4.標(biāo)識(shí)符

標(biāo)識(shí)符是用戶編程時(shí)為常量、變量、模塊、寄存器、端口、連線、示例和begin-end塊等元素定義的名稱(chēng)。標(biāo)識(shí)符可以是字母、數(shù)字和下劃線“_”等符號(hào)組成的任意序列。定義標(biāo)識(shí)符時(shí)應(yīng)遵循如下規(guī)則:

(1)首字符不能是數(shù)字。

(2)字符數(shù)不能多于1024個(gè)。

(3)大小寫(xiě)字母是不同的。

(4)不要與關(guān)鍵字同名。

5.關(guān)鍵字

關(guān)鍵字是VerilogHDL預(yù)先定義的單詞,它們?cè)诔绦蛑杏胁煌氖褂媚康摹@纾胢odule和endmodule來(lái)指出源程序模塊的開(kāi)始和結(jié)束;用assign來(lái)描述一個(gè)邏輯表達(dá)式等。VerilogHDL的關(guān)鍵字有97個(gè)。

6.操作符

操作符也稱(chēng)為運(yùn)算符,是VerilogHDL預(yù)先定義的函數(shù)名字,這些函數(shù)對(duì)被操作的對(duì)象(即操作數(shù))進(jìn)行規(guī)定的運(yùn)算,得到一個(gè)結(jié)果。

操作符通常由1~3個(gè)字符組成,例如,“+”表示加操作,“==”(兩個(gè)

=

字符)表示邏輯等操作,“=

=

=”(3個(gè)

=

字符)表示全等操作。有些操作符的操作數(shù)只有1個(gè),稱(chēng)為單目操作;有些操作符的操作數(shù)有2個(gè),稱(chēng)為雙目操作;有些操作符的操作數(shù)有3個(gè),稱(chēng)為三目操作。

1)算術(shù)操作符(Arithmeticoperators)

常用的算術(shù)操作符包括:+

(加)、-

(減)、*

(乘)、/

(除)、%(求余)。其中%是求余操作符,在兩個(gè)整數(shù)相除的基礎(chǔ)上,取出其余數(shù)。例如,5%6的值為5,13%5的值是3。

2)邏輯操作符(Logicaloperators)

邏輯操作符包括:&&(邏輯與)、||

(邏輯或)、!(邏輯非)。

3)位運(yùn)算(Bitwiseoperators)

位運(yùn)算是將兩個(gè)操作數(shù)按對(duì)應(yīng)位進(jìn)行邏輯操作。位運(yùn)算操作符包括:~

(按位取反)、&

(按位與)、|

(按位或)、^

(按位異或)、^~

~^

(按位同或)。

在進(jìn)行位運(yùn)算時(shí),當(dāng)兩個(gè)操作數(shù)的位寬不同時(shí),計(jì)算機(jī)會(huì)自動(dòng)將兩個(gè)操作數(shù)按右端對(duì)齊,位數(shù)少的操作數(shù)會(huì)在高位用0補(bǔ)齊。

4)關(guān)系操作符(Pelationaloperators)

關(guān)系操作符包括:<

(小于)、<=

(小于等于)、>

(大于)、>=

(大于等于)。其中,<=

也是賦值運(yùn)算的賦值符號(hào)。

關(guān)系運(yùn)算的結(jié)果是1位邏輯值。在進(jìn)行關(guān)系運(yùn)算時(shí),如果關(guān)系是真,則計(jì)算結(jié)果為1;如果關(guān)系是假,則計(jì)算結(jié)果為0;如果某個(gè)操作數(shù)的值不定,則計(jì)算結(jié)果不定(未知),表示結(jié)果是模糊的。

5)等式操作符(Equalityoperators)

等值操作符包括:==

(等于)、!=

(不等于)、===

(全等)、!==

(不全等)。

等值運(yùn)算的結(jié)果也是1位邏輯值,當(dāng)運(yùn)算結(jié)果為真時(shí),返回值1;為假則返回值0。

相等操作符(==)與全等操作符(===)的區(qū)別是:相等運(yùn)算時(shí),兩個(gè)操作數(shù)必須逐位相等,其比較結(jié)果的值才為1(真);如果某些位是不定或高阻狀態(tài),其相等比較的結(jié)果就會(huì)是不定值。

全等運(yùn)算時(shí),對(duì)不定或高阻狀態(tài)位也進(jìn)行比較,當(dāng)兩個(gè)操作數(shù)完全一致時(shí),其結(jié)果的值才為1(真),否則結(jié)果為0(假)。

6)縮減操作符(Reductionoperators)

縮減操作符包括:&(與)、~&(與非)、|

(或)、~|

(或非)、^

(異或)、^~

或~^

(同或)。

運(yùn)算結(jié)果有1位:1或0。

例如,A=8'b11010001,則&A=0(在與縮減運(yùn)算中,只有A中的數(shù)字全為1時(shí),結(jié)果才為1);|A=1(在或縮減運(yùn)算中,只有A中的數(shù)字全為0時(shí),結(jié)果才為0)。

7)轉(zhuǎn)移操作符(Shiftoperators)

轉(zhuǎn)移操作符包括:>>(右移)、<<(左移)。

操作數(shù)>>n;//將操作數(shù)的內(nèi)容右移n位,同時(shí)從左邊開(kāi)始用0來(lái)填補(bǔ)移出的位數(shù)

操作數(shù)<<n;//將操作數(shù)的內(nèi)容左移n位,同時(shí)從右邊開(kāi)始用0來(lái)填補(bǔ)移出的位數(shù)

例:設(shè)A=8'b11010001,則A>>4的結(jié)果是A=8'b00001101;而A<<4的結(jié)果是A=8'b00010000。

8)條件操作符(Conditionaloperators)

條件操作符的操作數(shù)有3個(gè),其使用格式如下:

操作數(shù)=條件?表達(dá)式1:表達(dá)式2;

當(dāng)條件為真(條件結(jié)果值為1)時(shí),操作數(shù)=表達(dá)式1;為假(條件結(jié)果值為0)時(shí),操作數(shù)=表達(dá)式2。

9)并接操作符(Concatenationoperators)

并接操作符為{}。

并接操作符的使用格式如下:

{操作數(shù)1,操作數(shù)2,…,操作數(shù)n}; //將操作數(shù)1、操作數(shù)2…操作數(shù)n

//并接在一起

例如,將1位全加器進(jìn)位cout與和sum并接在一起使用,它們的結(jié)果由兩個(gè)加數(shù)ina、inb及低位進(jìn)位cin相加決定,表達(dá)式如下:

{cout,sum}=ina+inb+cin;

下面通過(guò)一個(gè)實(shí)例來(lái)說(shuō)明模塊的說(shuō)明,圖5-2(a)是邏輯功能模塊,圖5-2(b)是用Verilo

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論