《Verilog HDL數(shù)字設(shè)計教程》課件第2章 Verilog HDL基本概念_第1頁
《Verilog HDL數(shù)字設(shè)計教程》課件第2章 Verilog HDL基本概念_第2頁
《Verilog HDL數(shù)字設(shè)計教程》課件第2章 Verilog HDL基本概念_第3頁
《Verilog HDL數(shù)字設(shè)計教程》課件第2章 Verilog HDL基本概念_第4頁
《Verilog HDL數(shù)字設(shè)計教程》課件第2章 Verilog HDL基本概念_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第2章VerilogHDL基本概念2.1編寫并運行一個簡單的VerilogHDL語言程序2.2層次建模2.3VerilogHDL語言的數(shù)據(jù)類型及常量和變量

2.4編譯預(yù)處理2.5小結(jié)2.1編寫、運行一個簡單的VerilogHDL語言程序1.編寫一個簡單的VerilogHDL語言程序

2.VerilogHDL語言程序開發(fā)環(huán)境—QuartusII6.0

編寫一個簡單的VerilogHDL語言程序【例2-1】實現(xiàn)一個二選一多路選擇器modulemux21a(a,b,s,y);inputa,b,s;outputy;assigny=s?b:a;//實現(xiàn)二選一功能endmodule或:modulemux21a(inputa,b,s,outputy);assigny=s?b:a;//實現(xiàn)二選一功能endmodule例2-1說明(1)module和endmodule是VerilogHDL語言的關(guān)鍵字,用來說明模塊。VerilogHDL程序是由模塊構(gòu)成的。每個模塊的內(nèi)容都是嵌在module和endmodule兩個語句之間。(2)input和output是VerilogHDL語言的關(guān)鍵字,用來說明模塊的端口屬性。端口屬性有三種,為input、output和inout,分別為輸入、輸出、輸入輸出屬性。每個模塊要進行端口列表聲明,說明這些端口的輸入、輸出屬性。(3)assign是VerilogHDL語言的關(guān)鍵字,用來說明模塊內(nèi)部信號的連接關(guān)系。語句assigny=s?b:a;的功能是:當(dāng)s=1時,y=b;當(dāng)s=0時,y=a。

VerilogHDL語言程序開發(fā)環(huán)境

—QuartusII設(shè)計流程1.創(chuàng)建工程準(zhǔn)備工作圖2-2

選擇編輯文件及其語言類型QuartusII設(shè)計流程1.創(chuàng)建工程準(zhǔn)備工作圖2-3鍵入源程序并存盤QuartusII設(shè)計流程2.創(chuàng)建工程圖2-4

選擇創(chuàng)建新工程QuartusII設(shè)計流程2.創(chuàng)建工程圖2-5工程位置、工程名稱、頂層模塊名QuartusII設(shè)計流程2.創(chuàng)建工程圖2-6

將所有相關(guān)的文件都加入進此工程

QuartusII設(shè)計流程2.創(chuàng)建工程圖2-7

選擇目標(biāo)FPGA器件QuartusII設(shè)計流程2.創(chuàng)建工程圖2-8

選擇第三方工具QuartusII設(shè)計流程2.創(chuàng)建工程圖2-9使用modelsim作為仿真工作的設(shè)置

QuartusII設(shè)計流程2.創(chuàng)建工程圖2-10

工程層次界面和設(shè)計文件界面QuartusII設(shè)計流程3.編譯設(shè)置圖2-11

設(shè)置對話框QuartusII設(shè)計流程3.編譯設(shè)置圖2-12Device設(shè)置對話框QuartusII設(shè)計流程3.編譯設(shè)置圖2-13

選擇配置器件的工作方式

QuartusII設(shè)計流程3.編譯設(shè)置圖2-14

選擇配置器件和編程方式

QuartusII設(shè)計流程3.編譯設(shè)置圖2-15

未用管腳設(shè)置QuartusII設(shè)計流程3.編譯設(shè)置圖2-16

編譯進度QuartusII設(shè)計流程3.編譯設(shè)置圖2-17

全程編譯后出現(xiàn)報錯信息QuartusII設(shè)計流程3.編譯設(shè)置圖2-18

全程編譯成功后的匯總信息4.仿真圖2-19

選擇Vectorwaveformfile界面QuartusII設(shè)計流程4.仿真圖2-20仿真測試向量波形文件QuartusII設(shè)計流程4.仿真圖2-21

仿真波形信號設(shè)置QuartusII設(shè)計流程4.仿真圖2-22加入了待觀察信號的波形圖QuartusII設(shè)計流程4.仿真QuartusII設(shè)計流程圖2-23設(shè)置仿真時間最小間隔4.仿真QuartusII設(shè)計流程圖2-24設(shè)置仿真時間長度4.仿真QuartusII設(shè)計流程圖2-25

設(shè)置好的激勵波形圖4.仿真QuartusII設(shè)計流程圖2-26功能仿真設(shè)置界面4.仿真QuartusII設(shè)計流程圖2-27

功能仿真波形輸出

4.仿真QuartusII設(shè)計流程圖2-28時序仿真設(shè)置界面4.仿真QuartusII設(shè)計流程圖2-29

時序仿真波形輸出

5.引腳鎖定

QuartusII設(shè)計流程圖2-30

引腳鎖定對話框圖6.把程序下載到硬件上進行測試

QuartusII設(shè)計流程圖2-31設(shè)置USB硬件端口6.把程序下載到硬件上進行測試

QuartusII設(shè)計流程圖2-32

下載界面6.把程序下載到硬件上進行測試

QuartusII設(shè)計流程圖2-33

選擇下載文件2.2層次建模

圖2-34

全加器f_adder電路圖2.2層次建模

【例2-3】實現(xiàn)一個1位全加器//*以下為全加器頂層模塊*/modulef_adder(ain,bin,cin,cout,sum);outputcout,sum;inputain,bin,cin;wireain,bin,cin,cout,sum;wired,e,f;h_adderu0(ain,bin,d,e);h_adderu1(e,cin,f,sum);or2au2(d,f,cout);endmodule2.2層次建模

【例2-3】實現(xiàn)一個1位全加器/*以下為半加器模塊*/moduleh_adder(a,b,co,so);outputco,so;inputa,b;wirea,b,co,so,bbar;andand2(co,a,b);notnot1(bbar,b);xnorxnor2(so,a,bbar);endmodule/*以下為或門模塊*/moduleor2a(a,b,c);outputc;inputa,b;wirea,b,c;assignc=a|b;endmodule

圖2-35

半加器h_adder電路圖2.2層次建模

圖2-36一位全加器功能仿真波形2.2層次建模

圖2-37

自頂向下設(shè)計方法2.2層次建模

圖2-38

自底向上設(shè)計方法2.2層次建模

圖2-41

全加器的設(shè)計層次模塊實例化與端口關(guān)聯(lián)

在模塊實例化中,可以使用兩種方法將模塊定義的端口與外部環(huán)境中的信號連接起來:位置關(guān)聯(lián)法和名稱關(guān)聯(lián)法。(1)位置關(guān)聯(lián)

h_adderu0(ain,bin,d,e);

h_adderu1(e,cin,f,sum);

or2au2(d,f,cout);(2)名稱關(guān)聯(lián)

h_adderu0(.a(ain),.b(bin),.co(d),.so(e));

//替換h_adderu0(ain,bin,d,e);

h_adderu1(.a(e),.b(cin),.co(f),.so(sum));

//替換h_adderu1(e,cin,f,sum);

or2au2(.a(d),.b(f),.c(cout));

//替換or2au2(d,f,cout);2.3VerilogHDL語言的數(shù)據(jù)類型及常量和變量

1.變量及其數(shù)據(jù)類型

2.常量及其數(shù)據(jù)類型

變量及其數(shù)據(jù)類型

表2-1四值邏輯邏輯值硬件電路中的條件0邏輯0,條件為假1邏輯1,條件為真x邏輯值不確定z高阻,浮動狀態(tài)Wire類型wire型信號的格式如下:wire[n-1:0]數(shù)據(jù)名1,數(shù)據(jù)名2,…數(shù)據(jù)名i;//共有i條總線,每條總線內(nèi)有n條線路 或

wire[n:1]數(shù)據(jù)名1,數(shù)據(jù)名2,…數(shù)據(jù)名i; 例:wirea;//定義了一個1位的wire型數(shù)據(jù)wire[7:0]b;//定義了一個8位的wire型數(shù)據(jù)wire[4:1]c,d;//定義了二個4位的wire型數(shù)據(jù)register類型

reg型數(shù)據(jù)的格式如下:reg[n-1:0]數(shù)據(jù)名1,數(shù)據(jù)名2,…數(shù)據(jù)名i;或

reg[n:1]數(shù)據(jù)名1,數(shù)據(jù)名2,…數(shù)據(jù)名i;

例:regrega;//定義了一個1位的名為rega的reg型數(shù)據(jù)reg[3:0]regb;//定義了一個4位的名為regb的reg型數(shù)據(jù)reg[4:1]regc,regd;//定義了兩個4位的名為regc和regd的reg型數(shù)據(jù)register類型【例2-4】二選一數(shù)據(jù)選擇器示例modulemux21a(a,b,s,y);inputwirea,b,s;outputregy;always@(a,b,s) if(s==1)y=b; elsey=a;endmoduleinteger類型整數(shù)是一種通用的寄存器數(shù)據(jù)類型,用于對數(shù)據(jù)進行操作,使用關(guān)鍵字integer進行聲明。整數(shù)的默認(rèn)位寬為32位。通常,聲明為reg類型的寄存器變量為無符號數(shù),而整數(shù)類型的寄存器變量則為有符號數(shù)

向量類型

向量通過[MSB:LSB]進行說明,方括號中左邊的數(shù)總是代表向量的最高有效位。例如:wire[0:31]addr;reg[7:0]data;定義了向量addr和data,則向量addr的最高有效為它的第0位,向量data的最高有效為它的第7位。一個使用多種數(shù)據(jù)類型的程序片斷【例2-5】一個使用多種數(shù)據(jù)類型的程序片斷integer

M;reg[3:0]A;reg[7:0]B;initialbeginM=-1;//M為32位整數(shù),采用補碼形式存放,補碼形式為32個1A=M;//A為4位無符號數(shù),截取M的低4位賦給A:1111B=A;//B為8位無符號數(shù),將A零擴展后送給B:00001111B=A+14//B為29:11101A=A+14;//A+14為29,截取低4位送給A:1101end

memory類型VerilogHDL通過對reg型變量建立數(shù)組來對存儲器建模,可以描述RAM型存儲器、ROM型存儲器、寄存器文件。數(shù)組中的每一個單元通過一個數(shù)組索引進行尋址。在Verilog中沒有多維數(shù)組存在。memory類型【例2-6】存儲器建模modulerom(clk,rst,rd,data,addr);inputclk,rst,rd;//rd讀使能信號input[2:0]addr;//建立的存儲器有8個地址空間outputreg[7:0]data;//數(shù)據(jù)是8位的reg[7:0]memory[0:7];//8x8位數(shù)據(jù)的存儲器always@(posedgeclk,posedgerst) if(rst) begin:init//該順序塊用于初始化ROM值

memory[0]=8’b0000_0001; memory[1]=8’b0000_0010; memory[2]=8’b0000_0100; memory[3]=8’b0000_1000; memory[4]=8’b0001_0000; memory[5]=8’b0010_0000; memory[6]=8’b0100_0000; memory[7]=8’b1000_0000; endelse begin:read//該順序塊用于讀取ROM值

if(rd)data=memory[addr]; endendmodule常量及其數(shù)據(jù)類型

數(shù)字聲明在VerilogHDL中,整型常量即整常數(shù)有以下四種進制表示形式:二進制整數(shù)(b或B)、十進制整數(shù)(d或D)、十六進制整數(shù)(h或H)和八進制整數(shù)(o或O)。數(shù)字表達方式有以下三種:①<位寬><進制><數(shù)字>,這是一種全面的描述方式。②<進制><數(shù)字>,在這種描述方式中,數(shù)字的位寬采用缺省位寬(這由具體的機器系統(tǒng)決定,但至少為32位)。③<數(shù)字>,在這種描述方式中,進制缺省為十進制。常量及其數(shù)據(jù)類型

x和z值在數(shù)字電路中,x代表不定值,z代表高阻值。一個x可以用來定義十六進制數(shù)的四位二進制數(shù)的狀態(tài),八進制數(shù)的三位,二進制數(shù)的一位。z的表示方式同x類似。z還有一種表達方式是可以寫作“?”。

常量及其數(shù)據(jù)類型

負(fù)數(shù)一個數(shù)字可以被定義為負(fù)數(shù),只需在位寬表達式前加一個減號,減號必須寫在數(shù)字定義表達式的最前面。注意減號不可以放在位寬和進制之間,也不可以放在進制和具體的數(shù)之間。見下例:-8'd4 //這個表達式代表4的補數(shù)(用八位二進制數(shù)表示)8'd-4 //非法格式

常量及其數(shù)據(jù)類型

下劃線下劃線可以用來分隔開數(shù)的表達,以提高程序可讀性。但不可以用在位寬和進制處,只能用在具體的數(shù)字之間。見下例:16'b1010_1011_1111_1010 //合法格式8'b_0011_1010

//非法格式當(dāng)常量不說明位數(shù)時,默認(rèn)值是32位。例:10=32’d10=32’b10101=32’d1=32’b1-1=-32’d1=32’hFFFFFFFF‘BX=32’BX=32’HXXXXXXXX常量及其數(shù)據(jù)類型

參數(shù)(parameter)型在VerilogHDL中用parameter來定義常量,即用parameter定義一個標(biāo)識符來代表一個常量,稱為符號常量,即標(biāo)識符形式的常量,采用標(biāo)識符代表一個常量可提高程序的可讀性和可維護性。parameter型數(shù)據(jù)是一種常數(shù)型的數(shù)據(jù),其說明格式如下:parameter 參數(shù)名1=表達式,參數(shù)名2=表達式,…,參數(shù)名n=表達式;設(shè)計參數(shù)型N位加法器【例2-7】設(shè)計參數(shù)型N位加法器moduleadd_N(X,Y,sum,co);parameterN=4;input[N-1:0]X,Y;output[N-1:0]sum;outputco;assign{co,sum}=X+Y;endmodule//16位加法器只需要調(diào)用參數(shù)型N位加法器即可moduleadd_16(X,Y,s,c);input[15:0]X,Y;output[15:0]s;outputc;add_N#(16)add16(X,Y,s,c);endmodule//8位加法器只需要調(diào)用參數(shù)型N位加法器即可moduleadd_8(X,Y,s,c);input[7:0]X,Y;output[7:0]s;outputc;add_Nadd8(X,Y,s,c);defparamadd8.N=8;endmodule2.4編譯預(yù)處理

1.宏定義`define

2.“文件包含”處理`include

宏定義應(yīng)用舉例【例2-8】宏定義應(yīng)用舉例`defineM3+2modulemacro_ex(x,y);input[3:0]x;output[5:0]y;assigny=`M*x;endmodule文件包含示例【例2-9】文件包含示例文件one

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論