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

下載本文檔

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

文檔簡介

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

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

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

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

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

(2)算法級(algorithm-level):用語言提供的高級結(jié)構(gòu)能夠?qū)崿F(xiàn)算法運(yùn)行的模型;(3)RTL級(registertransferlevel):描述數(shù)據(jù)在寄存器之間的流動和如何處理、控制這些數(shù)據(jù)流動的模型;(4)門級(gate-level):描述邏輯門以及邏輯門之間連接的模型;(5)開關(guān)級(switch-level):描述器件中三極管和儲存節(jié)點(diǎ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聲明語句之間,每個VerilogHDL模塊程序包括:端口列表、端口說明、數(shù)據(jù)類型說明和邏輯功能定義。有時,還包括一些有用的注釋。9.3.1VerilogHDL的基本結(jié)構(gòu)

模塊是VerilogHDL的基本描述單位,用于描述某個設(shè)計的功能、結(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ù)對象的類型。常用的有連線型和寄存器型。input端口只能是連線(wire)型數(shù)據(jù)類型;output端口可以是連線型或寄存器(reg)型數(shù)據(jù)類型;inout端口也只能聲明為連線型數(shù)據(jù)類型。wireA,B,C,D;//定義信號A、B、C、D為連線型reg[3:0]OUT;//定義信號OUT的數(shù)據(jù)類型為4位寄存器型9.3.1VerilogHDL的基本結(jié)構(gòu)

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

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

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

敏感信號列表的作用是用來激活always過程語句的執(zhí)行;只要敏感信號列表中某個信號發(fā)生變化,就會引發(fā)塊內(nèi)語句的執(zhí)行。敏感信號可以分為兩種類型:一種為電平敏感型,一種為邊沿敏感型。@(A)//當(dāng)信號A的值發(fā)生變化時敏感信號列表主要有以下幾種格式:@(AorB)//當(dāng)信號A或B的值發(fā)生變化時@(posedgeCLK) //當(dāng)CLK上升沿到來時@(negedgeCLK) //當(dāng)CLK下降沿到來時@(posedgeCLKornegedgeRST) //當(dāng)CLK的上升沿或RST的下降沿到來時9.3.3VerilogHDL行為語句【例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過程中只允許對寄存器型的信號進(jìn)行賦值。9.3.3VerilogHDL行為語句【例9.3-5】

同步置數(shù)、同步清零的計數(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)制加法計數(shù)器9.3.3VerilogHDL行為語句思考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:異步清零信號RD為電平有效,敏感信號表中能否改為@(posedgeCLKorRD)?9.3.3VerilogHDL行為語句2.持續(xù)賦值語句

持續(xù)賦值語句用來描述組合邏輯,它只能對連線型變量進(jìn)行賦值,不能對寄存器型變量進(jìn)行賦值?!纠?.3-6】用持續(xù)賦值語句實(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行為語句3.過程賦值語句

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

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

C=B;

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

非阻塞型賦值用“<=”進(jìn)行賦值。always塊中所有非阻塞賦值語句在求值時所用的值全都是進(jìn)入always塊時各變量已具有的值。非阻塞的含義為,在執(zhí)行當(dāng)前語句時,對其它語句的執(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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論