第二三章Verilog語法的基本概念及常用Verilog語法之一_第1頁
第二三章Verilog語法的基本概念及常用Verilog語法之一_第2頁
第二三章Verilog語法的基本概念及常用Verilog語法之一_第3頁
第二三章Verilog語法的基本概念及常用Verilog語法之一_第4頁
第二三章Verilog語法的基本概念及常用Verilog語法之一_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第二章Verilog語法的基本概念VerilogHDL是一種用于數(shù)字系統(tǒng)設(shè)計(jì)的語言。用VerilogHDL描述的電路設(shè)計(jì)就是該電路的VerilogHDL模型(模塊)。Verilog模型可以是實(shí)際電路的不同級(jí)別的抽象。行為描述:系統(tǒng)級(jí)、算法級(jí)、RTL級(jí)結(jié)構(gòu)描述:門級(jí)、開關(guān)級(jí)2/4/20231Verilog的應(yīng)用系統(tǒng)級(jí)(system):用高級(jí)語言結(jié)構(gòu)實(shí)現(xiàn)設(shè)計(jì)模塊的外部性能的模型。算法級(jí)(algorithmic):用高級(jí)語言結(jié)構(gòu)實(shí)現(xiàn)設(shè)計(jì)算法的模型。RTL級(jí)(RegisterTransferLevel):描述數(shù)據(jù)在寄存器之間流動(dòng)和如何處理這些數(shù)據(jù)的模型。門級(jí)(gate-level):描述邏輯門以及邏輯門之間的連接的模型。開關(guān)級(jí)(switch-level):描述器件中三極管和儲(chǔ)存節(jié)點(diǎn)以及它們之間連接的模型。行為級(jí)描述modulemuxtwo(out,a,b,sl);input

a,b,sl;output

out;

regout;

always@(sloraorb)

if(!sl)out=a;

elseout=b;endmoduleabslout門級(jí)描述modulemuxtwo(out,a,b,sl);input

a,b,sl;output

out;

notu1(ns1,sl);and#1u2(sela,a,nsl);

and#1u3(selb,b,sl);

or#2u4(out,sela,selb);endmoduleoutabslselbselanslu2u3

u4

u1RTL級(jí)描述modulemuxtwo(out,a,b,sl,clk);input

a,b,sl;output

out;

regout,s;

always@(posedgeclk) out<=s;

always@(sloraorb)

if(!sl)s=a;

elses=b;endmoduleabsloutclk行為級(jí)和RTL級(jí)RTL模塊的數(shù)據(jù)流動(dòng)必須基于時(shí)鐘。RTL模塊在每個(gè)時(shí)鐘的沿時(shí)刻,其變量的值必定是精確的。RTL模塊是可綜合的,它是行為模塊的一個(gè)子集合。該行為描述并沒有說明如果輸入a或b是三態(tài)的(高阻時(shí))輸出應(yīng)該是什么,但有實(shí)際電路是有一定的輸出的。abslout簡(jiǎn)單的VerilogHDL模塊例:moduleadder(count,sum,a,b,cin);

input[2:0]a,b;

inputcin;

outputcount;

output[2:0]sum;

assign{count,sum}=a+b+cin;

endmodule

簡(jiǎn)單的VerilogHDL模塊modulecompare(equal,a,b);outputequal;//聲明輸出信號(hào)equalinput[1:0]a,b;//聲明輸入信號(hào)a,b

assignequal=(a==b)?1:0;

/*如果兩個(gè)輸入信號(hào)相等,輸出為1。否則為0*/endmodule/*........*/和//.........表示注釋部分一個(gè)復(fù)雜電路的完整VerilogHDL模型是由若個(gè)VerilogHDL模塊構(gòu)成的,每一個(gè)模塊又可以由若干個(gè)子模塊構(gòu)成。

利用VerilogHDL語言結(jié)構(gòu)所提供的這種功能就可以構(gòu)造一個(gè)模塊間的清晰層次結(jié)構(gòu)來描述極其復(fù)雜的大型設(shè)計(jì)。VerilogHDL行為描述語言作為一種結(jié)構(gòu)化和過程性的語言,其語法結(jié)構(gòu)非常適合于算法級(jí)和RTL級(jí)的模型設(shè)計(jì)。這種行為描述語言具有以下八項(xiàng)功能:Verilog的應(yīng)用可描述順序執(zhí)行或并行執(zhí)行的程序結(jié)構(gòu)。用延遲表達(dá)式或事件表達(dá)式來明確地控制過程的啟動(dòng)時(shí)間。通過命名的事件來觸發(fā)其它過程里的激活行為或停止行為。提供了條件、if-else、case、循環(huán)程序結(jié)構(gòu)。提供了可帶參數(shù)且非零延續(xù)時(shí)間的任務(wù)(task)程序結(jié)構(gòu)。提供了可定義新的操作符的函數(shù)結(jié)構(gòu)(function)。Verilog的應(yīng)用提供了用于建立表達(dá)式的算術(shù)運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符。VerilogHDL語言作為一種結(jié)構(gòu)化的語言也非常適合于門級(jí)和開關(guān)級(jí)的模型設(shè)計(jì)。VerilogHDL的構(gòu)造性語句可以精確地建立信號(hào)的模型。這是因?yàn)樵赩erilogHDL中,提供了延遲和輸出強(qiáng)度的原語來建立精確程度很高的信號(hào)模型。信號(hào)值可以有不同的的強(qiáng)度,可以通過設(shè)定寬范圍的模糊值來降低不確定條件的影響。Verilog的應(yīng)用第三章常用Verilog語法之一模塊結(jié)構(gòu)數(shù)據(jù)類型變量、基本的運(yùn)算符號(hào)2/4/202314模塊的結(jié)構(gòu)Verilog的基本設(shè)計(jì)單元是“模塊”(block)。一個(gè)模塊是由兩部分組成的:描述接口;描述邏輯功能,即定義輸入是如何影響輸出的。從上面的例子可以看出:-Verilog模塊結(jié)構(gòu)完全嵌在module和endmodule聲明語句之間;每個(gè)Verilog程序包括四個(gè)主要部分:端口定義I/O說明內(nèi)部信號(hào)聲明功能定義模塊的結(jié)構(gòu)模塊的端口定義module模塊名(口1,口2,口3,…

)模塊的端口表示的是模塊的輸入輸出口名,它與別的模塊聯(lián)系端口的標(biāo)識(shí)。2/4/202317modulecompare(equal,a,b);

。。。。endmodule模塊內(nèi)容輸入口:input[信號(hào)位寬-1:0]端口名1;input[信號(hào)位寬-1:0]端口名2;輸出口:output[信號(hào)位寬-1:0]端口名1;output[信號(hào)位寬-1:0]端口名2;輸入/輸出口: inout[信號(hào)位寬-1:0]端口名1;inout[信號(hào)位寬-1:0]端口名2;2/4/202318I/O說明I/O說明也可以寫在端口聲明語句里modulemodule_name(inputport1,…,outputport1,….)

2/4/202319模塊內(nèi)容I/O說明模塊內(nèi)容模塊內(nèi)部用到的與端口有關(guān)的wire和reg類型變量的聲明reg[width-1:0]R1,R2;wire[width-1:0]W1,W2;

2/4/202320內(nèi)部信號(hào)聲明模塊內(nèi)容功能定義:定義邏輯功能

用assign聲明語句 assigna=b&c;

用實(shí)例元件 and#2ul(q,a,b);ul為與門,輸入a,b,輸出q,輸出延遲2個(gè)時(shí)間單位2/4/202321模塊內(nèi)容功能定義:定義邏輯功能用always塊(過程塊,proceduralblock)always@(posedgeclkorposedgeclr)beginif(clr)q<=0;elseif(en)q<=d;end;2/4/202322模塊內(nèi)容功能定義:定義邏輯功能assign語句是描述組合邏輯常用方法;always可用于描述組合邏輯和時(shí)序邏輯;assign,always,實(shí)例化描述的邏輯功能是同時(shí)(并行)執(zhí)行;在always模塊內(nèi),邏輯是順序執(zhí)行的。但是不同的always模塊式并行執(zhí)行的。2/4/202323modulemu1(a,q,q2,b,c);inputb,c;outputq,q2,a;

assigna=b&c;

and#2ul(q,c,b);

always@(b,c)beginq2<=b&c;end;

endmodule模塊的引用嚴(yán)格按照模塊定義的端口順序來連接,不用標(biāo)明原模塊定義時(shí)的端口名:

模塊名(連接端口1信號(hào)名,連接端口2信號(hào)名,….)在引用時(shí)用“.”符號(hào),標(biāo)明原模塊定義時(shí)規(guī)定的端口名.模塊名(.端口1名(連接信號(hào)1名),.端口2名(連接信號(hào)2名,….)2/4/202325要點(diǎn)總結(jié)Verilog模塊中所有過程塊(如initial,always)、連續(xù)賦值語句、實(shí)例引用都是并行的;它們表示的是一種通過變量名互相連接的關(guān)系;

在同一模塊中這三者出現(xiàn)的先后順序沒有關(guān)系;只有連續(xù)賦值語句和實(shí)例引用語句可以獨(dú)立于過程塊(always,initial)而存在于模塊的功能定義部分。2/4/2023263.2數(shù)據(jù)類型及其常量和變量VerilogHDL中總共有19種數(shù)據(jù)類型。數(shù)據(jù)類型是表示數(shù)字電路中的數(shù)據(jù)存儲(chǔ)和傳送元素的。2/4/202329常量數(shù)字——整數(shù)

二進(jìn)制(b,B),十進(jìn)制(d,D),十六進(jìn)制(h,H),八進(jìn)制(o,O)表示方法:<位寬>’<進(jìn)制><數(shù)字>

<進(jìn)制><數(shù)字>,默認(rèn)32位

<數(shù)字>,默認(rèn)32位,十進(jìn)制8’b10101100,8’ha2,2/4/202330常量數(shù)字——x和z

x——不定值;z——高阻值,也可用?表示4’b10x0,4’b101z,12’dz,12’d?,8’h4x2/4/202331常量數(shù)字——負(fù)數(shù)在數(shù)字表達(dá)式的前面加‘-’-8’d52/4/202332常量數(shù)字——下劃線(underscore_)用來分割數(shù)的表達(dá)以提高程序可讀性,但不可以用在位寬和進(jìn)制處,只能用在具體的數(shù)字之間16’b1010_1011_1111_10102/4/202333常量當(dāng)常量不說明位數(shù)時(shí),默認(rèn)值是32位,10=32’d10,-1=-32’d1=32’hFFFF_FFFF

’BX=32’BX=32’BXXXX…X每個(gè)字母用8位的ASCII值表示

“AB”=16’B01000001_010000102/4/202334參數(shù)型(parameter)常量可以用parameter來定義常量,即用parameter定義一個(gè)標(biāo)識(shí)符代表一個(gè)常量,稱為符號(hào)常量,即標(biāo)識(shí)符形式的常量parameter參數(shù)名1=表達(dá)式,參數(shù)名2=表達(dá)式;

注意:表達(dá)式必須是常數(shù)表達(dá)式,只能包含數(shù)字或先前已定義過的參數(shù)parametermsb=7,e=25;parameterbyte_size=8,byte_msb=byte_size-1;2/4/202335參數(shù)型(parameter)參數(shù)型常數(shù)用來定義延遲時(shí)間和變量寬度。在模塊或?qū)嵗脮r(shí),可通過參數(shù)傳遞改變?cè)诒灰媚K或者實(shí)例中已定義的參數(shù)。2/4/202336參數(shù)型(parameter)例:moduleDecode(A,F);parameterWidth=1,Polarity=1;

……endmodulemoduleTopwire[3:0]A4;wire[15:0]F16;Decode#(4,0)D1(A4,F16);Decode#(5)

D2(A4,F16);endmodule2/4/202337變量在程序運(yùn)行過程中其值可以改變的量。變量數(shù)據(jù)類型(variabledatatype),用來暫存數(shù)據(jù),在過程中被賦值的變量??稍趇nitialprocedure,alwaysprocedure,task,function中被賦值。未被初始化時(shí),默認(rèn)值為X。默認(rèn)為unsigned類型,除非指定為signed類型。默認(rèn)位寬為1bit。變量網(wǎng)絡(luò)數(shù)據(jù)類型(netdatatype)表示結(jié)構(gòu)實(shí)體之間的物理連接,不能儲(chǔ)存值,而且必須受到驅(qū)動(dòng)器的驅(qū)動(dòng)。如果沒有驅(qū)動(dòng)器連接到網(wǎng)絡(luò)類型的變量上,則該變量就是高阻值z(mì)。Wire:表示單個(gè)門驅(qū)動(dòng)或者連續(xù)賦值語句驅(qū)動(dòng)的網(wǎng)絡(luò)類型數(shù)據(jù)。Tri:表示多驅(qū)動(dòng)源(器)驅(qū)動(dòng)的網(wǎng)絡(luò)類型數(shù)據(jù)。變量Wire:常用來表示以assign關(guān)鍵字指定的組合邏輯信號(hào)。Verilog中輸入、輸出信號(hào)類型默認(rèn)時(shí)自動(dòng)定義為wire型。Wire信號(hào)可以用作任何方程式的輸入可用作assign語句或?qū)嵗妮敵觥?/p>

wire[n-1:0]b,a;定義了兩條總線b、a,每條總線寬度為nbits;變量reg型:寄存器數(shù)據(jù)類型,默認(rèn)初始值為不定值x。reg型數(shù)據(jù)常用來表示always模塊內(nèi)的指定信號(hào),代表觸發(fā)器。在always內(nèi)被賦值的每一個(gè)信號(hào)都必須定義成reg型。

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

reg[n:1]數(shù)據(jù)名1,數(shù)據(jù)名2;reg[3:0]regb;reg[4:1]regc,regd;變量reg型數(shù)據(jù),其賦值語句的作用就如同改變一組觸發(fā)器的存儲(chǔ)單元的值;reg型數(shù)據(jù)的默認(rèn)值是x,reg型數(shù)據(jù)可以賦正值、負(fù)值,若為表達(dá)式的操作數(shù),其值被當(dāng)作是無符號(hào)值。

reg只表示被定義的信號(hào)將用在always塊內(nèi)。memory型:Verilog通過對(duì)reg型變量建立數(shù)組來對(duì)存儲(chǔ)器建模,RAM型存儲(chǔ)器ROM存儲(chǔ)器reg文件。Memory型數(shù)據(jù)通過擴(kuò)展reg型數(shù)據(jù)的地址范圍來生成。

reg[n-1:0]存儲(chǔ)器名[m-1:0];

reg[n-1:0]存儲(chǔ)器名[m:1];reg[7:0]mema[255:0];變量對(duì)存儲(chǔ)器進(jìn)行地址索引的表達(dá)式必須為常數(shù)表達(dá)式,m必須為常數(shù)在同一個(gè)數(shù)據(jù)類型聲明語句里,可以同時(shí)定義存儲(chǔ)器型數(shù)據(jù)和reg型數(shù)據(jù)。

parameterwordsize=16,memsize=256;reg[wordsize-1:0]mem[memsize-1:0],writereg,readreg;變量注意memory型數(shù)據(jù)與reg型數(shù)據(jù)的不同

reg[n-1:0]rega;定義一個(gè)n位的寄存器,regmema[n-1:0];定義一個(gè)由n個(gè)1位寄存器構(gòu)成的存儲(chǔ)器組。

rega=0;合法

mema=0;錯(cuò)誤

mema[2]=0;正確變量3.3運(yùn)算符及表達(dá)式按功能分類:算術(shù)運(yùn)算符(+,-,x,/,%);位運(yùn)算符(~,&,|,^,^~);邏輯運(yùn)算符(&&,||,!);關(guān)系運(yùn)算符(>,<,>=,<=);移位運(yùn)算符(<<,>>);拼接運(yùn)算符({});條件運(yùn)算符(?:);賦值運(yùn)算符(=,<=);

3.3運(yùn)算符及表達(dá)式按運(yùn)算符所帶的操作數(shù)不同:

單目運(yùn)算符(unaryoperator):可以帶一個(gè)操作數(shù),操作數(shù)放在運(yùn)算符的右邊;

雙目運(yùn)算符(binaryoperator):可以帶兩個(gè)操作數(shù),操作數(shù)放在運(yùn)算符的兩邊;三目運(yùn)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論