數(shù)電第4版 課件 第9章課件 3 VerilogHDL語(yǔ)言基礎(chǔ)_第1頁(yè)
數(shù)電第4版 課件 第9章課件 3 VerilogHDL語(yǔ)言基礎(chǔ)_第2頁(yè)
數(shù)電第4版 課件 第9章課件 3 VerilogHDL語(yǔ)言基礎(chǔ)_第3頁(yè)
數(shù)電第4版 課件 第9章課件 3 VerilogHDL語(yǔ)言基礎(chǔ)_第4頁(yè)
數(shù)電第4版 課件 第9章課件 3 VerilogHDL語(yǔ)言基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

9.3VerilogHDL語(yǔ)言基礎(chǔ)9.3.1VerilogHDL的基本結(jié)構(gòu)9.3.2VerilogHDL語(yǔ)言要素9.3.3VerilogHDL行為語(yǔ)句

硬件描述語(yǔ)言HDL(HardwareDescriptionLanguage)是一種用來描述數(shù)字電路和系統(tǒng)的語(yǔ)言。利用HDL可以完成數(shù)字電路系統(tǒng)的描述、仿真驗(yàn)證,經(jīng)過自動(dòng)綜合工具轉(zhuǎn)換到門級(jí)電路網(wǎng)表。再用FPGA自動(dòng)布局布線工具,把網(wǎng)表轉(zhuǎn)換為要實(shí)現(xiàn)的具體電路布線結(jié)構(gòu)。

硬件描述語(yǔ)言主要有三大用途:建立描述數(shù)字系統(tǒng)的標(biāo)準(zhǔn)文檔;數(shù)字系統(tǒng)的仿真;邏輯綜合(Synthesis)。9.3.1VerilogHDL的基本結(jié)構(gòu)

目前常用的硬件描述語(yǔ)言有VerilogHDL和VHDL兩種。從學(xué)習(xí)的角度來看,VerilogHDL比較簡(jiǎn)單,與C語(yǔ)言較接近,容易掌握;從使用的角度看,支持VerilogHDL的半導(dǎo)體廠家也比支持VHDL的多,因此,從發(fā)展趨勢(shì)看VerilogHDL比VHDL有更寬廣的應(yīng)用前途。綜合(Synthesis)就是利用EDA工具把VerilogHDL代碼轉(zhuǎn)變成相應(yīng)的邏輯電路(門級(jí)網(wǎng)表),再通過布局布線工具自動(dòng)地轉(zhuǎn)變?yōu)槟撤N具體器件和工藝的電路布線結(jié)構(gòu)。9.3.1VerilogHDL的基本結(jié)構(gòu)

(a)計(jì)算機(jī)程序的編譯流程(b)HDL語(yǔ)言綜合流程VerilogHDL模型(1)系統(tǒng)級(jí)(system-level):用語(yǔ)言提供的高級(jí)結(jié)構(gòu)能夠?qū)崿F(xiàn)待設(shè)計(jì)模塊的外部性能的模型;9.3.1VerilogHDL的基本結(jié)構(gòu)

(2)算法級(jí)(algorithm-level):用語(yǔ)言提供的高級(jí)結(jié)構(gòu)能夠?qū)崿F(xiàn)算法運(yùn)行的模型;(3)RTL級(jí)(registertransferlevel):描述數(shù)據(jù)在寄存器之間的流動(dòng)和如何處理、控制這些數(shù)據(jù)流動(dòng)的模型;(4)門級(jí)(gate-level):描述邏輯門以及邏輯門之間連接的模型;(5)開關(guān)級(jí)(switch-level):描述器件中三極管和儲(chǔ)存節(jié)點(diǎn)以及它們之間連接的模型。一個(gè)簡(jiǎn)單的Verilog代碼moduleMUX21(Y,A,B,SEL);inputA,B,SEL;outputY;regY;always@(SELorAorB) if(!SEL) Y=A; else Y=B;endmodule9.3.1VerilogHDL的基本結(jié)構(gòu)

VerilogHDL模塊結(jié)構(gòu)位于module和endmodule聲明語(yǔ)句之間,每個(gè)VerilogHDL模塊程序包括:端口列表、端口說明、數(shù)據(jù)類型說明和邏輯功能定義。有時(shí),還包括一些有用的注釋。9.3.1VerilogHDL的基本結(jié)構(gòu)

模塊是VerilogHDL的基本描述單位,用于描述某個(gè)設(shè)計(jì)的功能、結(jié)構(gòu)以及與其它模塊連接的外部端口。1.端口說明端口是模塊與外部電路連接的通道,相當(dāng)于芯片的外部引腳。端口包括以下3種類型:9.3.1VerilogHDL的基本結(jié)構(gòu)

(1)input:輸入端口,即規(guī)定數(shù)據(jù)只能由此端口被讀入模塊實(shí)體中。(2)output:輸出端口,即規(guī)定數(shù)據(jù)只能由此端口從模塊實(shí)體向外輸出。(3)inout:雙向端口,即規(guī)定數(shù)據(jù)既可從此端口輸出,也可以從此端口輸入。input端口名1,端口名2,…;output端口名1,端口名2,…;inout端口名1,端口名2,…;input[msb:lsb]端口名1,端口名2,…;

輸入輸出端口如果沒有申明數(shù)據(jù)類型,則默認(rèn)為wire類型。9.3.1VerilogHDL的基本結(jié)構(gòu)

2.數(shù)據(jù)類型說明用來指定模塊內(nèi)用到的數(shù)據(jù)對(duì)象的類型。常用的有連線型和寄存器型。input端口只能是連線(wire)型數(shù)據(jù)類型;output端口可以是連線型或寄存器(reg)型數(shù)據(jù)類型;inout端口也只能聲明為連線型數(shù)據(jù)類型。wireA,B,C,D;//定義信號(hào)A、B、C、D為連線型reg[3:0]OUT;//定義信號(hào)OUT的數(shù)據(jù)類型為4位寄存器型9.3.1VerilogHDL的基本結(jié)構(gòu)

3.邏輯功能定義通常用“assign”連續(xù)賦值語(yǔ)句或者“always”過程塊賦值語(yǔ)句描述邏輯功能。(1)用“assign”聲明語(yǔ)句,如:assignF=A&B;(2)用“always”塊,如:這種方法語(yǔ)句很簡(jiǎn)單,只需在assign后面加一個(gè)賦值表達(dá)式即可。always@(SELorAorB) if(!SEL) Y=A; else Y=B;endmodule“assign”語(yǔ)句是描述組合邏輯最常用的方法之一,而“always”塊既可用于描述組合邏輯,也可描述時(shí)序邏輯。9.3.1VerilogHDL的基本結(jié)構(gòu)

4.注釋在VerilogHDL程序中有兩種形式的注釋:?jiǎn)涡凶⑨專阂浴?/”開始到本行結(jié)束,不允許續(xù)行;多行注釋:以“/*”開始,到“*/”結(jié)束。注釋能夠大大提高程序的可讀性,在初學(xué)階段就要養(yǎng)成撰寫注釋的習(xí)慣。1.詞法9.3.2VerilogHDL語(yǔ)言要素(1)標(biāo)識(shí)符VerilogHDL中的標(biāo)識(shí)符可以是任意一組字母、數(shù)字以及“$”符號(hào)和“_”(下劃線)的組合,但是標(biāo)識(shí)符的第一個(gè)字符必須是字母或下劃線。標(biāo)識(shí)符區(qū)分大小寫。(2)空白符空白符包括:空格、tab、換行符及換頁(yè)符??瞻追勾a層次分明、閱讀方便。綜合時(shí),空白符被忽略。但是,在字符串中空白和制表符會(huì)被認(rèn)為是有意義的字符。1.詞法9.3.2VerilogHDL語(yǔ)言要素(3)數(shù)字VerilogHDL有4種基本數(shù)值,或者說任何變量都可能有1、0、x和z等4種不同邏輯狀態(tài)的取值。0:含義有4個(gè),即二進(jìn)制數(shù)0、邏輯0、低電平、事件為偽的判斷結(jié)果。1:含義有4個(gè),即二進(jìn)制數(shù)1、邏輯1、高電平、事件為真的判斷結(jié)果。x或X:不確定或者未知的邏輯狀態(tài)。z或Z:高阻態(tài)。9.3.2VerilogHDL語(yǔ)言要素常數(shù)的表示方式為:(4)關(guān)鍵字VerilogHDL內(nèi)部已經(jīng)使用的詞稱為關(guān)鍵字或保留字。這些關(guān)鍵字用戶不能隨便使用。在編寫程序時(shí),變量的定義不要與這些關(guān)鍵詞沖突。所有的關(guān)鍵字都是小寫。8‘b01011100 //位寬為8位的二進(jìn)制數(shù)<對(duì)應(yīng)的二進(jìn)制數(shù)的位寬'><進(jìn)制><數(shù)字>8'hd4//位寬為8位的十六進(jìn)制數(shù)d4H9.3.2VerilogHDL語(yǔ)言要素2.數(shù)據(jù)類型(1)連線(wire)型連線型變量的特點(diǎn)是輸出的值緊跟輸入值的變化而變化。連線型變量不能存儲(chǔ)值,而且必須受到驅(qū)動(dòng)器的驅(qū)動(dòng)。連線型變量有兩種驅(qū)動(dòng)方式,一種是在結(jié)構(gòu)描述中將它連接到一個(gè)邏輯門或模塊的輸出端,另一種是用連續(xù)賦值語(yǔ)句assign對(duì)其進(jìn)行賦值。如果輸入/輸出信號(hào)沒有明確指定數(shù)據(jù)類型時(shí)都被默認(rèn)為連線型。wire型變量的格式:例如:wire[n-1:0]數(shù)據(jù)名1,數(shù)據(jù)名2,…,數(shù)據(jù)名n;wire[7:0]DI;//定義8位wire型向量wireA;//定義了一個(gè)1位的wire型數(shù)據(jù)9.3.2VerilogHDL語(yǔ)言要素(2)寄存器(reg)型寄存器型變量對(duì)應(yīng)的是具有狀態(tài)保持作用的硬件電路,如觸發(fā)器、鎖存器等。寄存器型變量和連線型變量的區(qū)別:寄存器型變量保持最后一次的賦值,而連線型變量需有持續(xù)的驅(qū)動(dòng)。寄存器型數(shù)據(jù)的格式:reg[n-1:0]數(shù)據(jù)名1,數(shù)據(jù)名2,…數(shù)據(jù)名n;在“always”模塊內(nèi)被賦值的每一個(gè)信號(hào)都必須定義成reg型。例如:regA,B; //定義了兩個(gè)reg型變量reg[7:0]QOUT;//定義QOUT為8位寬的reg型變量9.3.2VerilogHDL語(yǔ)言要素(3)參數(shù)型(parameter)以下時(shí)常見的參數(shù)型變量聲明語(yǔ)句示例:參數(shù)型數(shù)據(jù)格式:parameter參數(shù)名1=表達(dá)式1,參數(shù)名2=表達(dá)式2,…;parameterS0=2'b00;parameterS1=2'b01;parameterS2=2'b10;parameterS3=2'b11;9.3.2VerilogHDL語(yǔ)言要素3.運(yùn)算符VerilogHDL語(yǔ)言參考了C語(yǔ)言中大多數(shù)運(yùn)算符的語(yǔ)義和句法。運(yùn)算符類型運(yùn)算符符號(hào)運(yùn)算功能描述算術(shù)運(yùn)算符+加法運(yùn)算符或正值運(yùn)算符-減法運(yùn)算符或者負(fù)值運(yùn)算符*乘法運(yùn)算符/除法運(yùn)算符%取模運(yùn)算符邏輯運(yùn)算符&&邏輯與||邏輯或!邏輯非9.3.2VerilogHDL語(yǔ)言要素運(yùn)算符類型運(yùn)算符符號(hào)運(yùn)算功能描述按位運(yùn)算符~按位取反|按位或&按位與^按位異或~^按位同或關(guān)系運(yùn)算符>大于<小于<=小于或等于>=大于或等于==等于!=不等于9.3.2VerilogHDL語(yǔ)言要素運(yùn)算符類型運(yùn)算符符號(hào)運(yùn)算功能描述縮位運(yùn)算符&與~&與非|或~|或非^異或~^同或移位運(yùn)算符<<左移>>右移條件運(yùn)算符?:條件位拼接運(yùn)算符{,}拼接9.3.2VerilogHDL語(yǔ)言要素(8)各運(yùn)算符的優(yōu)先級(jí)。運(yùn)算符類型運(yùn)算符符號(hào)優(yōu)先級(jí)補(bǔ)集!,~最高優(yōu)先級(jí)算術(shù)*,/,%,+,-移位<<,>>關(guān)系<,<=,>,>=等式==,!=縮減&,~&,^,^~,|,~|邏輯&&,||條件?:最低優(yōu)先級(jí)9.3.2VerilogHDL語(yǔ)言要素【例9.3-2】關(guān)系運(yùn)算符應(yīng)用示例。moduleRELATION(A,B,Y);input[5:0]A,B;output[5:0]Y;reg[5:0]Y;always@(A,B)beginY[0]=(A>B)?1:0;Y[1]=(A>=B)?1:0;Y[2]=(A<B)?1:0;Y[3]=(A<=B)?1:0;Y[4]=(A!=B)?1:0;Y[5]=(A==B)?1:0;

endendmodule9.3.3VerilogHDL行為語(yǔ)句行為描述語(yǔ)句包括過程語(yǔ)句、賦值語(yǔ)句、條件語(yǔ)句等,以下介紹這3種常用的語(yǔ)句。1.always過程語(yǔ)句

always過程語(yǔ)句后跟著的過程塊可以不斷重復(fù)執(zhí)行,只要觸發(fā)條件滿足就可以,即滿足一次執(zhí)行一次,而且是可綜合的。always@(敏感信號(hào)列表)begin//過程賦值//if-else,case等選擇語(yǔ)句end9.3.3VerilogHDL行為語(yǔ)句

敏感信號(hào)列表的作用是用來激活always過程語(yǔ)句的執(zhí)行;只要敏感信號(hào)列表中某個(gè)信號(hào)發(fā)生變化,就會(huì)引發(fā)塊內(nèi)語(yǔ)句的執(zhí)行。敏感信號(hào)可以分為兩種類型:一種為電平敏感型,一種為邊沿敏感型。@(A)//當(dāng)信號(hào)A的值發(fā)生變化時(shí)敏感信號(hào)列表主要有以下幾種格式:@(AorB)//當(dāng)信號(hào)A或B的值發(fā)生變化時(shí)@(posedgeCLK) //當(dāng)CLK上升沿到來時(shí)@(negedgeCLK) //當(dāng)CLK下降沿到來時(shí)@(posedgeCLKornegedgeRST) //當(dāng)CLK的上升沿或RST的下降沿到來時(shí)9.3.3VerilogHDL行為語(yǔ)句【例9.3-4】4選1數(shù)據(jù)選擇器的描述。moduleMUX_41(Y,A,B,C,D,SEL);inputA,B,C,D;input[1:0]SEL;outputY;regY;always@(AorBorCorDorSEL)case(SEL) 2'b00:Y=A;

2'b01:Y=B;2'b10:Y=C;

2'b11:Y=D;

default:Y=2'bx;

endcaseendmodule//always過程中只允許對(duì)寄存器型的信號(hào)進(jìn)行賦值。9.3.3VerilogHDL行為語(yǔ)句【例9.3-5】

同步置數(shù)、同步清零的計(jì)數(shù)器。moduleCOUNT(CLK,CLR,LD,D,Q);input[7:0]D;inputLD,CLR,CLK;output[7:0]Q;reg[7:0]Q;always@(posedgeCLK)

beginif(!CLR)Q<=0;

elseif(!LD)Q<=D;

elseQ<=Q+1;

endendmodule//CLK上升沿觸發(fā)//同步清零,低電平有效//同步置數(shù),低電平有效//8位二進(jìn)制加法計(jì)數(shù)器9.3.3VerilogHDL行為語(yǔ)句思考1:異步清零如何描述?【例9.3-5】具有異步清零的D觸發(fā)器VerilogHDL代碼。moduleDFFC(D,CLK,RD,Q);inputD,CLK,RD;outputregQ;always@(posedgeCLKornegedgeRD)beginif(!RD)Q<=1'd0;elseQ<=D; endendmodule思考2:異步清零信號(hào)RD為電平有效,敏感信號(hào)表中能否改為@(posedgeCLKorRD)?9.3.3VerilogHDL行為語(yǔ)句2.持續(xù)賦值語(yǔ)句

持續(xù)賦值語(yǔ)句用來描述組合邏輯,它只能對(duì)連線型變量進(jìn)行賦值,不能對(duì)寄存器型變量進(jìn)行賦值?!纠?.3-6】用持續(xù)賦值語(yǔ)句實(shí)現(xiàn)4位全加器。assign連線型變量名=賦值表達(dá)式;moduleADDR_4(A,B,CI,SUM,CO);input[3:0]A,B;inputCI;output[3:0]SUM;outputCO;assign{CO,SUM}=A+B+CI;endmodule9.3.3VerilogHDL行為語(yǔ)句3.過程賦值語(yǔ)句

過程賦值是在always語(yǔ)句內(nèi)的賦值,它只能對(duì)寄存器數(shù)據(jù)類型的變量賦值。過程賦值語(yǔ)句分為阻塞型賦值和非阻塞賦值兩種。(1)阻塞賦值方式

阻塞賦值用“=”進(jìn)行賦值。如果一個(gè)變量通過阻塞賦值語(yǔ)句賦值,則這個(gè)新賦的值會(huì)被該塊中所有的后續(xù)語(yǔ)句使用。如果在一個(gè)語(yǔ)句塊中有多條阻塞賦值語(yǔ)句,則前面賦值語(yǔ)句沒有完成之前,后面賦值語(yǔ)句不能被執(zhí)行,仿佛被阻塞一樣。9.3.3VerilogHDL行為語(yǔ)句【例9.3-7】阻塞賦值舉例。moduleBLOCK(C,B,A,CLK);inputCLK,A;outputC,B;regC,B;always@(posedgeCLK)begin B=A;

C=B;

endendmodule//阻塞賦值如果一個(gè)變量通過阻塞賦值語(yǔ)句賦值,則這個(gè)新賦的值會(huì)被該塊中所有的后續(xù)語(yǔ)句使用。9.3.3VerilogHDL行為語(yǔ)句(2)非阻塞型賦值方式

非阻塞型賦值用“<=”進(jìn)行賦值。always塊中所有非阻塞賦值語(yǔ)句在求值時(shí)所用的值全都是進(jìn)入always塊時(shí)各變量已具有的值。非阻塞的含義為,在執(zhí)行當(dāng)前語(yǔ)句時(shí),對(duì)其它語(yǔ)句的執(zhí)行一律不加限制,不加阻塞?!纠?.3-8】

非阻塞賦值舉例。moduleNON_BLOCK(C,B,A,CLK);outputC,B;inputCLK,A;regC,B;always@(posedgeCLK)begin

B<=A;

C<=B;

enden

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論