FPGA應(yīng)用與開發(fā)實踐教程 課件 附A2 Verilog HDL基本語法_第1頁
FPGA應(yīng)用與開發(fā)實踐教程 課件 附A2 Verilog HDL基本語法_第2頁
FPGA應(yīng)用與開發(fā)實踐教程 課件 附A2 Verilog HDL基本語法_第3頁
FPGA應(yīng)用與開發(fā)實踐教程 課件 附A2 Verilog HDL基本語法_第4頁
FPGA應(yīng)用與開發(fā)實踐教程 課件 附A2 Verilog HDL基本語法_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

VerilogHDL基本語法運算符及表達式過程語句(initial、always)塊語句(begin-end、fork-join)賦值語句條件語句循環(huán)語句task和function說明語句主要內(nèi)容一、VerilogHDL基本語法1、

詞法規(guī)定

(1)關(guān)鍵字關(guān)鍵字(又稱保留字),小寫的英文字符串。如:module、endmodule、input、output、wire、reg、and、assign、always等。

(2)格式VerilogHDL是自由格式的,即結(jié)構(gòu)可以跨越多行編寫,也可以在一行內(nèi)編寫。空白符(換行、換頁、tab和空格)沒有特殊的意義,但使用空白符可以提高代碼的可讀性。在綜合時,空白符被忽略。

(3)標識符標識符(identifier)是程序代碼中給對象(如模塊、端口、變量等)取名所用的字符串。由字母、數(shù)字字符、下劃線(_)和美元符號($)組成,區(qū)分大小寫,其第一個字符必須是英文字母或下劃線,不能是數(shù)字或$。以$開始的字符串是為系統(tǒng)函數(shù)保留的,如“$display”最長可以是1023個字符標識符區(qū)分大小寫,sel和SEL是不同的標識符※關(guān)鍵字不能作為標識符使用。標識符舉例:outputa,A;wireclk;34net;a*b_net;module

mux21

(out,a,b,sel);outputout;

input

a,b,sel;

notnot1

(nsel,sel);

and

and1(a1,a,nsel);

and

and2(b1,b,sel);

or

or1(out,a1,b1);endmodule(4)注釋moduleFour_bit_FA(A,B,Cin,Sum,Cout);parameterLENGTH=4; //聲明加法器位數(shù)參數(shù)input[(LENGTH-1):0]A,[(LENGTH-1):0]B;//輸入/輸出端口inputCin; output[(LENGTH-1):0]Sum;outputCout;wirec1,c2,c3; //內(nèi)部線網(wǎng)聲明//實例化四個一位全加器FA_structFA0(A[0],B[0],Cin,Sum[0],c1);//端口映射采用非名字關(guān)聯(lián)FA_structFA1(A[1],B[1],C1,Sum[1],c2);FA_structFA2(A[0],B[0],C2,Sum[2],c3);FA_structFA3(A[0],B[0],C3,Sum[3],Cout);endmodule52、

數(shù)據(jù)類型常量變量常數(shù):4'b1010,8'd31,-8’d31字符串:“IloveHIT”參數(shù)型:parameterIDLE=2'b01線網(wǎng)類型(Net)wire,triwand,triandwor,triortriregtri0,tri1supply0,supply1寄存器型(Register)RegIntegerRealTimerealtime‘0’,Low,

False,

Logic

Low,

Ground,

VSS,

Negative

Assertion

‘1’,

High,

True,

Logic

High,

Power,

VDD,

VCC,

Positive

Assertion

‘X’Unknown:

Occurs

at

Logical

Which

Cannotbe

Resolved

Conflict

HiZ,

High

Impedance,

Tri-

Stated,

Disabled

Driver

(Unknown)

6常量及其表示三種類型的常量:整數(shù)型常量(整數(shù))、實數(shù)型常量(實數(shù))和字符串型常量。

(1)整數(shù)---整數(shù)的一般表達式為:

<+/-><size>’<baseformat><number>-14//十進制數(shù)-1416’d255//位寬為16的十進制數(shù)2558’h9a//位寬為8的十六進制數(shù)9a6’o21//位寬為6的八進制數(shù)218’hAF//位寬為8的十六進制數(shù)AF-4’d10//位寬為4的十進制數(shù)10(3+2)’b11001//非法表示,位寬不能為表達式注意:數(shù)基(base)無大小寫之分7(2)實數(shù)十進制格式,由數(shù)字和小數(shù)點組成(必須有小數(shù)點)例如:0.1,3.1415,2.0√3.x指數(shù)格式(科學(xué)計數(shù)法):由數(shù)字和字符e(E)組成,e(E)的前面必須要有數(shù)字而且后面必須為整數(shù),

例如:

135.1e2

//其值為13510.08.5E2//850.0(e與E相同)4E-4//0.0004

4'b10104-bitbinary4'h54-bithexadecimal'h83aunsizedhexadecimal(zero-extendedto32bits)12unsizeddecimal(zero-extendedto32bits)64'hff0164-bithexadecimal(zero-extendedto64bits)8'b1100_00018-bit

binary32'b101xzero-extendedto32bits3'b1010_11013-bitnumber,truncatedto3'b1016.3decimalnotation32e-4scientificnotationfor0.00324.1e3scientificnotationfor41008(3)字符串常量是由一對雙引號括起來的字符序列(不能跨行)。如”helloworld!”是一個合法字符串。每個字符串(包括空格)被看作是8位的ASCII值序列。存儲字符串“helloworld!”,就需要定義一個8*12位的變量:reg[1:8*12]stringvar;initialbeginstringvar=“helloworld”;end9變量的數(shù)據(jù)類型(1)線網(wǎng)型變量(net)

wire型信號定義格式如下:wire[msb:lsb]變量名1,變量名2,…變量名n;wirea;//定義了一個1位的wire型數(shù)據(jù)wire[7:0]b;//定義了一個8位的wire型向量wire[4:1]c,d;//定義了二個4位的wire型向量assignc=d;

線網(wǎng)型變量可以理解為實際電路中的導(dǎo)線,通常表示為結(jié)構(gòu)實體(例如門)之間的

物理連接。

10線網(wǎng)類型除了常用的wire、tri類型之外,還有一些其他的線網(wǎng)類型線網(wǎng)類型功能說明可綜合性說明wiretri表示單元(元件)之間的連線,Wire為一般連線:

tri為三態(tài)線√supply0

supply1用于對電源建?!蘷andtriand多重驅(qū)動,具有線與特性的線網(wǎng)類型wortrior多重驅(qū)動,具有線或特性的線網(wǎng)類型triltri0上拉電阻,用于開關(guān)級建模trireg具有電荷保持特性的線網(wǎng)類型,用于開關(guān)級建模11(2)寄存器型變量可以理解為實際電路中的寄存器,具有記憶性,是數(shù)據(jù)儲存單元的抽象,在輸入信號消失后它可以保持原有的數(shù)值不變。與線網(wǎng)型變量的根本區(qū)別在于:register型變量需要被明確地賦值,并且在被重新賦值前一直保持原值。關(guān)鍵字是reg,只能在initial或always賦值,默認值是x。注意:在always和initial塊內(nèi)被賦值的每一個信號都必須定義成reg型??偨Y(jié):Verilog程序模塊中,被聲明為input或者inout型的端口,只能被定義為線網(wǎng)型變量,被聲明為output型的端口可以被定義為線網(wǎng)型或者寄存器型變量,輸入輸出信號類型缺省時自動定義為wire型。wire型信號可以用作任何方程式的輸入,也可以用作“assign”語句或?qū)嵗妮敵觯豢梢栽趇nitial和always模塊中被賦值。12reg型數(shù)據(jù)的格式如下:reg[msb:lsb]變量名1,變量名2,…變量名n;regclock;reg[3:0]regb;reg[4:1]regc,regd;除了常用的reg類型之外,還有一些其他的寄存器類型:寄存器類型功能說明可綜合說明reg常用的寄存器型變量√integer32位有符號整型變量√time64位無符號時間變量real64位有符號實型變量寄存器類型變量及其說明13端口類型判斷方法:一個端口看成是由相互連接的兩個部分組成,一部分位于模塊的內(nèi)部,另一部分位于模塊的外部。當在一個模塊中調(diào)用(引用)另一個模塊時,端口之間的連接必須遵守一些規(guī)則。端口的IOP端口的數(shù)據(jù)類型module內(nèi)部module外部inputnetnet或regoutputnet或regnetinoutnetnet端口的I/O與數(shù)據(jù)類型的關(guān)系14輸入端口:從模塊內(nèi)部來講,輸入端口必須為線網(wǎng)數(shù)據(jù)類型,從模塊外部來看,輸入端口可以連接到線網(wǎng)或者reg數(shù)據(jù)類型的變量。輸出端口:從模塊內(nèi)部來講,輸出端口可以是線網(wǎng)或者reg數(shù)據(jù)類型,從模塊外部來看,輸出必須連接到線網(wǎng)類型的變量,而不能連接到reg類型的變量。輸入/輸出端口:從模塊內(nèi)部來講,輸入/輸出端口必須為線網(wǎng)數(shù)據(jù)類型;從模塊外部來看,輸入/輸出端口也必須連接到線網(wǎng)類型的變量。位寬匹配:在對模塊進行調(diào)用的時候,verilog允許端口的內(nèi)、外兩個部分具有不同的位寬。一般情況下,verilog仿真器會對此警告。未連接端口:Verilog允許模塊實例的端口保持未連接的狀態(tài)。例如,如果模塊的某些輸出端口只用于調(diào)試,那么這些端口可以不與外部信號連接。端口與外部信號的連接:在對模塊調(diào)用的時候,可以使用兩種方法將模塊定義的端口與外部環(huán)境中的信號連接起來:按順序連接以及按名字連接。但兩種方法不能混合在一起使用。順序端口連接:需要連接到模塊實例的信號必須與模塊聲明時目標端口在端口列表中的位置保持一致。15端口類型定義舉例輸入端口in1,in2可以由net/register(A,B)驅(qū)動,但輸入端口in1,in2只能是net類型。輸出端口out可以是net/register類型,輸出端口只能驅(qū)動net(Y)。若輸出端口out在過程塊中賦值則為register類型;若在過程塊外賦值(包括實例化語句),則為net類型。外部信號A,B類型判斷方法與輸出端口相同。16數(shù)據(jù)類型選擇舉例修改前:moduleexample(o1,o2,a,b,c,d);inputa,

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論