第三講的基本語法_第1頁
第三講的基本語法_第2頁
第三講的基本語法_第3頁
第三講的基本語法_第4頁
第三講的基本語法_第5頁
已閱讀5頁,還剩213頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三講的基本語法verilog2009--TJU.ASICCenter---ArnoldShi第一頁,共二百一十八頁,編輯于2023年,星期五3.1數(shù)據(jù)類型及其常量及變量天津大學電子科學與技術系史再峰shizaifeng@verilog2009--TJU.ASICCenter---ArnoldShi第二頁,共二百一十八頁,編輯于2023年,星期五0、低、偽、邏輯低、地、VSS、負插入01XZ0bufbufbufbufif11、高、真、邏輯高、電源、VDD、正插入X、不確定:邏輯沖突無法確定其邏輯值HiZ、高阻抗、三態(tài)、無驅(qū)動源Verilog的四種邏輯值x和X、z和Z不區(qū)別大小寫。Z有時候也用?代替verilog2009--TJU.ASICCenter---ArnoldShi第三頁,共二百一十八頁,編輯于2023年,星期五數(shù)據(jù)類型VerilogHDL中共有19種數(shù)據(jù)類型,分成常量和變量最基本最常用的4種:寄存器型reg線網(wǎng)型wire整形integer參數(shù)型parameter其余的包括:large\medium\scalared\time\small\tri\trio\tri1\triand\trior\trireg\vectored\wand\wor型,主要與基本單元庫有關,設計時很少使用verilog2009--TJU.ASICCenter---ArnoldShi第四頁,共二百一十八頁,編輯于2023年,星期五一、常量在程序運行中,其值不能被改變的量叫常量兩類最基本的常量:數(shù)字型常量和參數(shù)(parameter)數(shù)字型常量:整型數(shù)可以按如下兩種方式書寫簡單的十進制數(shù)格式基數(shù)格式verilog2009--TJU.ASICCenter---ArnoldShi第五頁,共二百一十八頁,編輯于2023年,星期五基數(shù)表示法(一)格式:[位寬]’進制

值無符號數(shù)。位寬是按照二進制數(shù)來計算的。進制可以為b或B(二進制)、o或O(八進制)、d或D(十進制)、h或H(十六進制)。值是基于進制的數(shù)字序列。如:3’b001,3’B110三位二進制6’o12,6’O12六位八進制4’d9,4’D9十位十進制8’hBF,8’HBF八位十六進制verilog2009--TJU.ASICCenter---ArnoldShi第六頁,共二百一十八頁,編輯于2023年,星期五基數(shù)表示法(二)基數(shù)格式計數(shù)形式的數(shù)通常為無符號數(shù)。這種形式的整型數(shù)的長度定義是可選的。如果沒有定義一個整數(shù)型的長度,數(shù)的長度為相應值中定義的位數(shù)。下面是兩個例子:'o7219位八進制數(shù)'hAF8位十六進制數(shù)verilog2009--TJU.ASICCenter---ArnoldShi第七頁,共二百一十八頁,編輯于2023年,星期五基數(shù)表示法(三)如果定義的長度比為常量指定的長度長,通常在左邊填0補位。但是如果數(shù)最左邊一位為x或z,就相應地用x或z在左邊補位。例如:10'b10左邊添0占位,000000001010'bx0x1左邊添x占位,xxxxxxx0x1如果長度定義得更小,那么最左邊的位相應地被截斷。例如:3'b1001_0011與3'b011相等5'H0FFF與5'H1F相等?字符在數(shù)中可以代替值z在值z被解釋為不分大小寫的情況下提高可讀性verilog2009--TJU.ASICCenter---ArnoldShi第八頁,共二百一十八頁,編輯于2023年,星期五下劃線下劃線可以用來分割數(shù)的表達式以提高程序的可讀性,但不能用在位寬和進制處,只能用于具體的數(shù)字之間比如16’b1010_1011_11111_000//合法格式8’b_0011_1011//非法格式verilog2009--TJU.ASICCenter---ArnoldShi第九頁,共二百一十八頁,編輯于2023年,星期五負數(shù)一個數(shù)字可以被定義成負數(shù),只要在位寬表達式前加一個減號-8’d5//合法格式8’d-5//非法格式verilog2009--TJU.ASICCenter---ArnoldShi第十頁,共二百一十八頁,編輯于2023年,星期五簡單的十進制格式這種形式的整數(shù)定義為帶有一個可選的“+”(一元)或“-”(一元)運算符的數(shù)字序列。這種形式的整數(shù)值代表一個有符號的數(shù)。負數(shù)使用補碼形式表示。例如15 相當于二進制01111-15 相當于二進制10001

verilog2009--TJU.ASICCenter---ArnoldShi第十一頁,共二百一十八頁,編輯于2023年,星期五實數(shù)類型實數(shù)可以用下列兩種形式定義十進制記數(shù)法,例如:2.0;-0.1等科學記數(shù)法,例如:235.1e2 等于23510.0234_12e2 等于2341200.0實數(shù)小數(shù)通過四舍五入被隱式地轉換為最相近的整數(shù)。例如:42.446,42.45轉換為整數(shù)4292.5,92.699轉換為整數(shù)93-5.62轉換為整數(shù)-6-26.22轉換為整數(shù)-6verilog2009--TJU.ASICCenter---ArnoldShi第十二頁,共二百一十八頁,編輯于2023年,星期五常量的位數(shù),x(或z)在十六進制值中代表4位x(或z),在八進制中代表3位x(或z),在二進制中代表1位x(或z)當常量不說明位數(shù)時候默認是32位,每個字母用8位ASCII碼來表示10=32’d10=32’b10101=32’d1=32’b1-1=-32’d1=32’hFFFF_FFFF‘BX=32’BX=32’BXXXXXXXXXX...“AB”=16’B010000001_01000010A的ASCII值是85,B的值是86verilog2009--TJU.ASICCenter---ArnoldShi第十三頁,共二百一十八頁,編輯于2023年,星期五字符串字符串是雙引號內(nèi)的字符串列。一個字符可用八位二進制表示。如:“INTEGER”需要8*7位。 例: reg[8*14:1]Message; Message=“INTERNALERROR”;verilog2009--TJU.ASICCenter---ArnoldShi第十四頁,共二百一十八頁,編輯于2023年,星期五課堂練習下列表達式的位模式是什么?寫出其具體的二進制表示值7'o44,'Bx0,5'bx110,'hA0,10'd2,'hzFVerilog描述實際的二進制值7'o44100100'Bx0x05'bx110xx110'hA01010_000010'd20000_0000_10'hzFzzzz1111verilog2009--TJU.ASICCenter---ArnoldShi第十五頁,共二百一十八頁,編輯于2023年,星期五參數(shù)參數(shù)是一個常量。用parameter定義一個標識符來代表一個常量。參數(shù)經(jīng)常用于定義時延和變量的寬度。格式:parameterparam1=const_expr1,param2=const_expr2, …, paramN=const_exprN;如:parameterDelay=1;

parameterA=32,B=4’b0001;

parameterstring=“exec_command”;verilog2009--TJU.ASICCenter---ArnoldShi第十六頁,共二百一十八頁,編輯于2023年,星期五參數(shù)的傳遞參數(shù)值也可以在編譯時被改變。改變參數(shù)值可以使用參數(shù)定義語句或通過在模塊初始化語句中定義參數(shù)值當某個模塊在另一個模塊內(nèi)被引用時,高層模塊能夠改變低層模塊的參數(shù)值。模塊參數(shù)值的改變可采用下述兩種方式:參數(shù)定義語句(defparam);帶參數(shù)值的模塊引用。verilog2009--TJU.ASICCenter---ArnoldShi第十七頁,共二百一十八頁,編輯于2023年,星期五defparam舉例module

TOP(NewA,NewB,NewS,NewC);input

NewA,NewB;output

NewS,NewC;defparam

Ha1.XOR_DELAY=5,//實例Ha1中的參數(shù)XOR_DELAY。Ha1.AND_DELAY=2;//實例Ha1中參數(shù)的AND_DELAY。HAHa1(NewA,NewB,NewS,NewC);endmodulemoduleHA(A,B,S,C);inputA,B;outputS,C;parameterAND_DELAY=1,XOR_DELAY=2;assign#XOR_DELAYS=A^B;assign#AND_DELAYC=A&B;endmoduleHATOPverilog2009--TJU.ASICCenter---ArnoldShi第十八頁,共二百一十八頁,編輯于2023年,星期五參數(shù)值的模塊引用module

TOP3(NewA,NewB,NewS,NewC);input

NewA,NewB;output

NewS,NewC;HA

#(5,2)Ha1(NewA,NewB,NewS,NewC);//第1個值5賦給參數(shù)AND_DELAY,該參數(shù)在模塊HA中說明。//第2個值2賦給參數(shù)XOR_DELAY,該參數(shù)在模塊HA中說明。endmoduleverilog2009--TJU.ASICCenter---ArnoldShi第十九頁,共二百一十八頁,編輯于2023年,星期五課堂練習-參數(shù)傳遞假定一個模塊為BK,內(nèi)部兩個參數(shù)P1,P2;另外一個模塊為HA,內(nèi)部參數(shù)P3,P4其在TOP模塊中實例化調(diào)用的名稱分別為U1,U2請嘗試在top模塊中用兩種不同的方法改變其參數(shù)值p1-p4分別為1,2,3,4verilog2009--TJU.ASICCenter---ArnoldShi第二十頁,共二百一十八頁,編輯于2023年,星期五二、變量在Verilog中有兩大主要數(shù)據(jù)類型:線網(wǎng)類型(wire)、寄存器類型(reg)。線網(wǎng)類型

包含下述不同種類的線網(wǎng)子類型。

wire,tri 用于連線的最常見的線網(wǎng)類型

wor,trior線或

wand,triand線與

trireg 此線網(wǎng)存儲數(shù)值,用于電容節(jié)點的建模

tri1,tri0用于線邏輯的建模,上拉或下拉驅(qū)動

supply0,supply1supply0用于對“地”建模,supply1對電源建模verilog2009--TJU.ASICCenter---ArnoldShi第二十一頁,共二百一十八頁,編輯于2023年,星期五nets(網(wǎng)絡連線)nets(網(wǎng)絡連線):由模塊或門驅(qū)動的連線。驅(qū)動端信號的改變會立刻傳遞到輸出的連線上。例如:右圖上,selb的改變,會自動地立刻影響或門的輸出。netsabslselbselansloutverilog2009--TJU.ASICCenter---ArnoldShi第二十二頁,共二百一十八頁,編輯于2023年,星期五Nets(線網(wǎng)型)例:

wireBpW;

assignBpW=Error&Wait;

assignBpW=Valid|Clear;BpW電路圖verilog2009--TJU.ASICCenter---ArnoldShi第二十三頁,共二百一十八頁,編輯于2023年,星期五Nets(網(wǎng)絡連線,線網(wǎng)類型)簡單的線網(wǎng)類型定義說明語句為:net_kind[msb:lsb]net1,net2,….netN;當一個線形有兩個或多個驅(qū)動時,線網(wǎng)的有效值按如下表確定。verilog2009--TJU.ASICCenter---ArnoldShi第二十四頁,共二百一十八頁,編輯于2023年,星期五補充:CMOSNORABF001010100110A+BABABABverilog2009--TJU.ASICCenter---ArnoldShi第二十五頁,共二百一十八頁,編輯于2023年,星期五補充:CMOSNANDABA?BABABF001011101110ABverilog2009--TJU.ASICCenter---ArnoldShi第二十六頁,共二百一十八頁,編輯于2023年,星期五Nets(網(wǎng)絡連線)verilog2009--TJU.ASICCenter---ArnoldShi第二十七頁,共二百一十八頁,編輯于2023年,星期五補充知識:連續(xù)賦制值語句連續(xù)賦制語句用于把值賦給線網(wǎng)型變量(不能為寄存器型變量賦值)語句形式為:assignA=B&C;連續(xù)賦值語句在什么時候執(zhí)行呢?只要在右端表達式的操作數(shù)上有事件(事件為值的變化)發(fā)生時,表達式即被計算;如果結果值有變化,新結果就賦給左邊的線網(wǎng)。verilog2009--TJU.ASICCenter---ArnoldShi第二十八頁,共二百一十八頁,編輯于2023年,星期五連續(xù)賦值的目標類型標量線網(wǎng)向量線網(wǎng)向量的常數(shù)型位選擇,如a[1]向量的常數(shù)型部分選擇如:a[3:1]上述類型的任意的拼接運算結果verilog2009--TJU.ASICCenter---ArnoldShi第二十九頁,共二百一十八頁,編輯于2023年,星期五連續(xù)賦值語句舉例module

FA_Df(A,B,Cin,Sum,Cout);input

A,B,Cin;output

Sum,Cout;assign

Sum=A^B^Cin;assign

Cout=(A&Cin)|(B&Cin)|(A&B);endmodule在本例中,有兩個連續(xù)賦值語句。這些賦值語句是并發(fā)的,與其書寫的順序無關verilog2009--TJU.ASICCenter---ArnoldShi第三十頁,共二百一十八頁,編輯于2023年,星期五數(shù)據(jù)流描述方式例:worBpW;wandBpR;

assignBpW=Error&Wait;

assignBpW=Valid|Clear;

assignBpR=Error^Valid;

assignBpR=!Clear;BpW和BpR電路圖verilog2009--TJU.ASICCenter---ArnoldShi第三十一頁,共二百一十八頁,編輯于2023年,星期五寄存器(register)類型變量寄存器(register)類型變量register型變量能保持其值,直到它被賦于新的值。register型變量常用于行為建模,產(chǎn)生測試的激勵信號。常用行為語句結構來給寄存器類型的變量賦值。abslselbselansloutreg_areg_selreg_bverilog2009--TJU.ASICCenter---ArnoldShi第三十二頁,共二百一十八頁,編輯于2023年,星期五reg型寄存器是數(shù)據(jù)存儲單元的抽象reg型數(shù)據(jù)常用來表示always塊內(nèi)的指定信號,常代表觸發(fā)器reg型數(shù)據(jù)用initial或者always塊中指定信號reg型數(shù)據(jù)的缺省值是x。可以被賦正值或者負值。當它作為一個表達式中的操作數(shù)時候,作為無符號數(shù)。reg數(shù)據(jù)類型定義格式為reg[n-1:0]數(shù)據(jù)名1,....;或者reg[n:1]數(shù)據(jù)名1,....;verilog2009--TJU.ASICCenter---ArnoldShi第三十三頁,共二百一十八頁,編輯于2023年,星期五寄存器陣列

Verilog語言支持寄存器陣列的聲明:integerNUMS[7:0];//8個整型變量的寄存器陣列timet_vals[3:0];//4個時間變量的寄存器陣列數(shù)據(jù)類型為reg的陣列常稱為存儲器(即memory):reg[15:0]MEM[0:1023];//1Kx16位的存儲器reg[7:0]PREP[‘hfffe:‘hffff];//2x8位的存儲器可以用參數(shù)來表示存儲器的大小:parameterwordsize=16;parametermemsize=1024;reg[wordsize-1:0]MEM3[memsize-1:0];只能一次選擇一個字,不允許對存儲器變量值部分進行部分選擇或位選擇.如dram[60][2:4]是錯誤的verilog2009--TJU.ASICCenter---ArnoldShi第三十四頁,共二百一十八頁,編輯于2023年,星期五存儲器memory型變量存儲器memory型用一個寄存器數(shù)組來對存儲器建模。格式:reg[msb:lsb]存儲器名[upper1:lower1];如:reg[3:0]MyMem[63:0];//64個四位寄存器組

verilog2009--TJU.ASICCenter---ArnoldShi第三十五頁,共二百一十八頁,編輯于2023年,星期五其他類型變量integer整數(shù)寄存器有符號數(shù)。主要用來高層次建模。如:integerA; //整形寄存器,32位integerB[1023:0];//10位time時間類型寄存器如:timeCurrentTime;//CurrentTime存儲一個時間值 CurrentTime=$time;verilog2009--TJU.ASICCenter---ArnoldShi第三十六頁,共二百一十八頁,編輯于2023年,星期五輸入端口(input)可以由寄存器(reg)或線網(wǎng)(wire)連接驅(qū)動,但它本身只能驅(qū)動網(wǎng)絡連接。輸出端口(output)可以由寄存器或線網(wǎng)連接驅(qū)動,但它本身只能驅(qū)動線網(wǎng)連接。輸入/輸出端口(inout)只可以由線網(wǎng)連接驅(qū)動,但它本身只能驅(qū)動線網(wǎng)連接。如果信號變量是在過程塊(initial塊或always塊)中被賦值的,必須把它聲明為寄存器類型變量

如何選擇正確的數(shù)據(jù)類型?verilog2009--TJU.ASICCenter---ArnoldShi第三十七頁,共二百一十八頁,編輯于2023年,星期五moduletop;wirey;

rega,b;DUTu1(y,a,b);

initial

begina=0;b=0;#10a=1;….

endendmodule

模塊DUT的邊界輸入口輸出口輸出/入口netnetnet/registernetnet/registernetinoutmoduleDUT(Y,A,B_);outputY;inputA,B:wireY,A,B;and(Y,A,B);endmodule舉例說明數(shù)據(jù)類型的選擇verilog2009--TJU.ASICCenter---ArnoldShi第三十八頁,共二百一十八頁,編輯于2023年,星期五在過程塊(alwaysinitial)中對變量賦值時,忘了把它定義為寄存器類型(reg)或已把它定義為連接類型了(wire)把實例的輸出連接出去時,把它定義為寄存器類型把模塊的輸入信號定義為寄存器類型。這是經(jīng)常犯的三個錯誤?。?!選擇數(shù)據(jù)類型時常犯的錯誤verilog2009--TJU.ASICCenter---ArnoldShi第三十九頁,共二百一十八頁,編輯于2023年,星期五3.2運算符及表達式天津大學電子科學與技術系史再峰shizaifeng@verilog2009--TJU.ASICCenter---ArnoldShi第四十頁,共二百一十八頁,編輯于2023年,星期五3.2運算符(操作符)及表達式VerilogHDL中的運算符可以分為下述類型:算術運算符關系運算符相等運算符邏輯運算符按位運算符縮減(歸約)運算符移位運算符條件運算符連接和復制運算符verilog2009--TJU.ASICCenter---ArnoldShi第四十一頁,共二百一十八頁,編輯于2023年,星期五按所帶操作數(shù)的個數(shù)分類單目運算符(unaryoperator)帶一個操作數(shù),操作數(shù)在運算符的右邊如~clock雙目運算符(binaryoperator)帶兩個操作數(shù),操作數(shù)分別在運算符的兩邊如a|b三目運算符(ternaryoperator)帶三個操作數(shù),用三目運算符隔開verilog2009--TJU.ASICCenter---ArnoldShi第四十二頁,共二百一十八頁,編輯于2023年,星期五3.2.1算術運算符算術運算符有:+(一元加和二元加)-(一元減和二元減)*(乘)/(除)%(取模)整數(shù)除法截斷任何小數(shù)部分。例如:7/4結果為1取模運算符求出與第一個運算符符號相同的余數(shù)。7%4結果為3而-7%4結果為-3verilog2009--TJU.ASICCenter---ArnoldShi第四十三頁,共二百一十八頁,編輯于2023年,星期五課堂練習以下表達式在verilogHDL中的值是多少?(結果用16位hex表示表示)5/3(-9)/6(-9)%611%(-5)12/(-7)答案是5/3=16’h0001(-9)/6=16’hFFFF(-9)%6=16’hFFFD11%(-5)=16’h000112/(-7)=16’hFFFFverilog2009--TJU.ASICCenter---ArnoldShi第四十四頁,共二百一十八頁,編輯于2023年,星期五3.2.2按位運算符按位運算符有:~(一元非)&(二元與)|(二元或)^(二元異或)~^,^~(二元異或非)這些運算符在輸入操作數(shù)的對應位上按位操作,并產(chǎn)生向量結果。不同長度操作符運算時,會右端對齊,左端補0verilog2009--TJU.ASICCenter---ArnoldShi第四十五頁,共二百一十八頁,編輯于2023年,星期五按位非運算符verilog2009--TJU.ASICCenter---ArnoldShi第四十六頁,共二百一十八頁,編輯于2023年,星期五按位與運算符verilog2009--TJU.ASICCenter---ArnoldShi第四十七頁,共二百一十八頁,編輯于2023年,星期五按位或運算符verilog2009--TJU.ASICCenter---ArnoldShi第四十八頁,共二百一十八頁,編輯于2023年,星期五按位異或運算符verilog2009--TJU.ASICCenter---ArnoldShi第四十九頁,共二百一十八頁,編輯于2023年,星期五按位異或非運算符verilog2009--TJU.ASICCenter---ArnoldShi第五十頁,共二百一十八頁,編輯于2023年,星期五按位操作符舉例假定A='b0110;B='b0100;那么:A|B結果為0110A&B結果為01004'b1011^4'bx010=4'bx001如果操作數(shù)長度不相等,長度較小的操作數(shù)在最左側添0補位。例如,'b0110^'b10000與如下式的操作相同:'b00110^'b10000結果為'b10110。verilog2009--TJU.ASICCenter---ArnoldShi第五十一頁,共二百一十八頁,編輯于2023年,星期五3.2.3邏輯運算符邏輯運算符有:&&(邏輯與)||(邏輯或)!(一元邏輯非)這些運算符在邏輯值0或1上運算。邏輯運算的結構為0或1。verilog2009--TJU.ASICCenter---ArnoldShi第五十二頁,共二百一十八頁,編輯于2023年,星期五邏輯與運算舉例assigna=8'haa;assignb=8'hff;assignc_out=a&b;assignc_out2=a&&b;c_out2結果是0000_0001verilog2009--TJU.ASICCenter---ArnoldShi第五十三頁,共二百一十八頁,編輯于2023年,星期五課堂練習以下表達式在verilogHDL中的值是多少?(結果用8位表示)assignd_0=4'b1101^8'h0a;assignd_1=4'b1101^~8'h0a;assignd_2=4'b1z01|8'h0a;assignd_3=4'b1101&&8'h0a;assignd_4=!4'b1x01;assignd_5=4'b1010||8'h55;答案是#hexd_0is07#hexd_1isF8#binaryd_2is0000_1x11#hexd_3is01#hexd_4is00#hexd_5is01verilog2009--TJU.ASICCenter---ArnoldShi第五十四頁,共二百一十八頁,編輯于2023年,星期五3.2.4關系運算符關系運算符有:>(大于)<(小于)>=(不小于)<=(不大于)關系運算符的結果為真(1)或假(0)。如果操作數(shù)中有一位為X或Z,那么結果為X。例如:23>45結果為假(0)52<8‘hxFF結果為x。verilog2009--TJU.ASICCenter---ArnoldShi第五十五頁,共二百一十八頁,編輯于2023年,星期五關系運算符語法如果操作數(shù)長度不同,長度較短的操作數(shù)在最重要的位方向(左方)添0補齊。例如:'b1000>='b01110等價于:'b01000>='b01110結果為假(0)verilog2009--TJU.ASICCenter---ArnoldShi第五十六頁,共二百一十八頁,編輯于2023年,星期五3.2.5相等關系運算符相等關系運算符有:==(邏輯相等)!=(邏輯不等)===(全等)!==(非全等)如果比較結果為假,則結果為0;否則結果為1。在全等比較中,值x和z嚴格按位比較。verilog2009--TJU.ASICCenter---ArnoldShi第五十七頁,共二百一十八頁,編輯于2023年,星期五相等關系運算舉例Data='b11x0;Addr='b11x0;那么(Data==Addr)不定,值為x,但:Data===Addr為真,值為1。如果操作數(shù)的長度不相等,長度較小的操作數(shù)在左側添0補位,例如:2'b10==4'b0010與下面的表達式相同:4'b0010==4'b0010結果為真(1)。verilog2009--TJU.ASICCenter---ArnoldShi第五十八頁,共二百一十八頁,編輯于2023年,星期五關系及相等關系運算符練習判斷以下表達式中的d值是多少assignd_relation1=(4'b1011>=4'b10x1);

assignd_relation2=(4'b1011==4'b10x1);

assignd_relation3=(4'b10x1==4'b10x1);

assignd_relation4=(4'b10z1===4'b10x1);assignd_relation5=(4'b10x1!==4'b10x1);assignd_relation6=(4'b10x1!=4'b10x1);答案是:#bind_relation1is1'bx#bind_relation2is1'bx#bind_relation3is1'bx#bind_relation4is1'b0#bind_relation5is1'b0#bind_relation6is1'bxverilog2009--TJU.ASICCenter---ArnoldShi第五十九頁,共二百一十八頁,編輯于2023年,星期五3.2.6縮減(歸約)運算符歸約運算符在單一操作數(shù)的所有位上操作,并產(chǎn)生1位結果。歸約運算符有:&(歸約與):如果存在位值為0,那么結果為0;若如果存在位值為x或z,結果為x;否則結果為1。~&(歸約與非):與歸約運算符&相反。

|(歸約或):如果存在位值為1,那么結果為1;如果存在位x或z,結果為x;否則結果為0。~|(歸約或非):與歸約運算符|相反。

^(歸約異或):如果存在位值為x或z,那么結果為x;否則如果操作數(shù)中有偶數(shù)個1,結果為0;否則結果為1。

~^(歸約異或非):與歸約運算符^正好相反。verilog2009--TJU.ASICCenter---ArnoldShi第六十頁,共二百一十八頁,編輯于2023年,星期五縮減(歸約)運算符練習判斷以下表達式中的d值是多少

assignd_reduction1=&8'b1011_0011;

assignd_reduction2=~|8'b1011_0011;

assignd_reduction3=~&8'b1011_0011;assignd_reduction4=~^8'b1011_0011;

assignd_reduction5=^8'b1011_0011;assignd_reduction6=~|8'b1011_00x1;

assignd_reduction7=^8'b10z1_0011;

assignd_reduction8=&8'b1011_00x1;assign

d_reduction8=&~8'b1011_00x1;modelsim仿真驗證的答案是#bind_reduction1is1'b0#bind_reduction2is1'b0#bind_reduction3is1'b1#bind_reduction4is1'b0#bind_reduction5is1'b1#bind_reduction6is1'b0#bind_reduction7is1'bx#bind_reduction8is1'b0

Error:./vlog_test.v(57):near"~":syntaxerror,

verilog2009--TJU.ASICCenter---ArnoldShi第六十一頁,共二百一十八頁,編輯于2023年,星期五3.2.7移位運算符移位運算符有:<<(左移)

>>(右移)移位運算符左側操作數(shù)移動右側操作數(shù)表示的次數(shù),它是一個邏輯移位。空閑位添0補位。如果右側操作數(shù)的值為x或z,移位操作的結果為x。假定:reg

[0:7]Qreg;...Qreg=4'b0111;那么:Qreg>>2是8'b0000_0001verilog2009--TJU.ASICCenter---ArnoldShi第六十二頁,共二百一十八頁,編輯于2023年,星期五3.2.8條件運算符條件運算符根據(jù)條件表達式的值選擇表達式,形式如下:cond_expr

?expr1:expr2如果cond_expr為真(即值為1),選擇expr1;如果cond_expr為假(值為0),選擇expr2。如果cond_expr為x或z,結果將是按以下邏輯expr1和expr2按位操作的值:0與0得0,1與1得1,其余情況為x。verilog2009--TJU.ASICCenter---ArnoldShi第六十三頁,共二百一十八頁,編輯于2023年,星期五條件運算符舉例wire

[0:2]Student=Marks>18?GA:GC;計算表達式Marks>18;如果真,GA賦值給Student;如果Marks<=18,GC賦值給Student。再例如:always#5Ctr=(Ctr!=25)?(Ctr+1):5;過程賦值中的表達式表明如果Ctr不等于25,則加1;否則如果Ctr值為25時,將Ctr值重新置為5。verilog2009--TJU.ASICCenter---ArnoldShi第六十四頁,共二百一十八頁,編輯于2023年,星期五3.3.8連接和復制操作連接操作是將小表達式合并形成大表達式的操作。形式如:{expr1,expr2,...,exprN}實例如下所示:wire[7:0]Dbus;wire[11:0]Abus;assignDbus[7:4]={Dbus[0],Dbus[1],Dbus[2],Dbus[3]};//以反轉的順序?qū)⒌投?位賦給高端4位。assignDbus={Dbus[3:0],Dbus[7:4]};//高4位與低4位交換。verilog2009--TJU.ASICCenter---ArnoldShi第六十五頁,共二百一十八頁,編輯于2023年,星期五復制運算符通過指定重復次數(shù)來執(zhí)行操作。形式如下:{repetition_number{expr1,expr2,...,exprN}}以下是一些實例:Abus={3{4'b1011}};/位向量12'b1011_1011_1011)Abus={{4{Dbus[7]}},Dbus};/*符號擴展*/verilog2009--TJU.ASICCenter---ArnoldShi第六十六頁,共二百一十八頁,編輯于2023年,星期五運算符的優(yōu)先級verilog2009--TJU.ASICCenter---ArnoldShi第六十七頁,共二百一十八頁,編輯于2023年,星期五3.2.10關鍵詞所有關鍵詞都是事先定義好的確認符,用于組織語言結構,全部是小寫定義。常用的有assignalwaysinitialbeginendbufbufif0bufif1casexcasezcmosdeassigndefaultdefparamdisableedgecaseifelseendcasejoinlargeforkjoinnotnotif0notif1xorwireregworxorxnorwhiletritri0tri1triandtriorrepeattaskfunctionforeverendtask等等verilog2009--TJU.ASICCenter---ArnoldShi第六十八頁,共二百一十八頁,編輯于2023年,星期五作業(yè)練習題假定32位總線Address_Bus,編寫一個表達式,計算從第11位到第20位的歸約與非。假定一條總線Control_Bus[15:0],編寫賦值語句將總線分為兩條總線:Abus[0:9]和Bbus[6:1]。編寫一個表達式,執(zhí)行算術移位,將Qparity中包含的8位有符號數(shù)算術移位。使用條件運算符,編寫賦值語句選擇NextState的值。如果CurrentState的值為RESET,那么NextState的值為GO;如果CurrentState的值為GO,則NextState的值為BUSY;如果CurrentState的值為BUSY;則NextState的值為RESET。verilog2009--TJU.ASICCenter---ArnoldShi第六十九頁,共二百一十八頁,編輯于2023年,星期五習題解答錯誤解答:assign

CurrentState==RESET?NextState=Go:(CurrentState==Go?NextState=BUSY:(CurrentState==BUSY?NextState=RESET:))正確解答:assignnextstate=(currentstate==RESET)?GO:((currentstate==GO)?BUSY:((currentstate==BUSY)?RESET:1’bz));verilog2009--TJU.ASICCenter---ArnoldShi第七十頁,共二百一十八頁,編輯于2023年,星期五3.3數(shù)據(jù)流建模天津大學電子科學與技術系史再峰shizaifeng@verilog2009--TJU.ASICCenter---ArnoldShi第七十一頁,共二百一十八頁,編輯于2023年,星期五一、連續(xù)賦制值語句連續(xù)賦制語句用于把值賦給線網(wǎng)型變量(不能為寄存器型變量賦值)語句形式為:assignA=B&C;只要在右端表達式的操作數(shù)上有事件(事件為值的變化)發(fā)生時,表達式即被計算;如果計算的結果值有變化,新結果就賦給左邊的線網(wǎng)。verilog2009--TJU.ASICCenter---ArnoldShi第七十二頁,共二百一十八頁,編輯于2023年,星期五數(shù)據(jù)流的模型化連續(xù)賦值語句將值賦給線網(wǎng)(連續(xù)賦值不能為reg)例如assign

Mux=(S==0)?A:1'bz;assign

Mux=(S==1)?B:1'bz;assign

Mux=(S==2)?C:1'bz;assign

Mux=(S==3)?D:1'bz;assign

Mux=(S==0)?A:1‘bz,//也可以這樣在一個語句中寫Mux=(S==1)?B:1‘bz,

Mux=(S==2)?C:1‘bz,

Mux=(S==3)?D:1'bz;verilog2009--TJU.ASICCenter---ArnoldShi第七十三頁,共二百一十八頁,編輯于2023年,星期五連續(xù)賦值的目標類型標量線網(wǎng)wirea;向量線網(wǎng)wire[7:0]a;向量線網(wǎng)的常數(shù)型位選擇,如a[1]向量線網(wǎng)的常數(shù)型部分選擇如:a[3:1]上述類型的任意的拼接運算結果{3a[2],a[2:1]}verilog2009--TJU.ASICCenter---ArnoldShi第七十四頁,共二百一十八頁,編輯于2023年,星期五連續(xù)賦值語句舉例module

FA_Df(A,B,Cin,Sum,Cout);input

A,B,Cin;output

Sum,Cout;assign

Sum=A^B^Cin;assign

Cout=(A&Cin)|(B&Cin)|(A&B);endmodule在本例中,有兩個連續(xù)賦值語句。這些賦值語句是并發(fā)的,與其書寫的順序無關verilog2009--TJU.ASICCenter---ArnoldShi第七十五頁,共二百一十八頁,編輯于2023年,星期五對應的電路連接關系verilog2009--TJU.ASICCenter---ArnoldShi第七十六頁,共二百一十八頁,編輯于2023年,星期五賦值給向量線網(wǎng)的拼接wire

Cout,Cin;wire[3:0]Sum,A,B;assign{Cout,Sum}=A+B+Cin;verilog2009--TJU.ASICCenter---ArnoldShi第七十七頁,共二百一十八頁,編輯于2023年,星期五數(shù)據(jù)流描述方式例:worBpW;wandBpR;

assignBpW=Error&Wait;

assignBpW=Valid|Clear;

assignBpR=Error^Valid;

assignBpR=!Clear;BpW和BpR電路圖verilog2009--TJU.ASICCenter---ArnoldShi第七十八頁,共二百一十八頁,編輯于2023年,星期五用數(shù)據(jù)流描述對2-4解碼器電路的建模verilog2009--TJU.ASICCenter---ArnoldShi第七十九頁,共二百一十八頁,編輯于2023年,星期五參考答案`timescale1ns/1nsmoduleDecoder2x4(A,B,EN,Z);inputA,B,EN;output[0:3]Z;wireAbar,Bbar;assignAbar=~A;assignBbar=~B;assignZ[0]=~(Abar&Bbar&EN);assignZ[1]=~(Abar&B&EN);assignZ[2]=~(A&Bbar&EN);assignZ[3]=~(A&B&EN);endmoduleverilog2009--TJU.ASICCenter---ArnoldShi第八十頁,共二百一十八頁,編輯于2023年,星期五課堂練習題使用連續(xù)賦值語句,描述圖示的優(yōu)先編碼器電路的行為2bar02bar12bar2verilog2009--TJU.ASICCenter---ArnoldShi第八十一頁,共二百一十八頁,編輯于2023年,星期五某同學的解答module(Data,Encode,Valid);input[3:0]Data;output[1:0]Encode;wire2bar0,2bar1,0bar;assign2bar0=~Data[2];assign2bar1=2bar0&Data[1];assign0bar=Data[0]|Data[1];assignEncode[0]=Data[3]|2bar1;assignEncode[1]=Data[3]|Data[2];assignValid=Data[3]|Data[2]|0bar;endmodule程序基本沒有問題,但是:第1行module沒有命名,這是不可以的第4行變量定義的時候,標識符的首字母應該是字母或者下劃線verilog2009--TJU.ASICCenter---ArnoldShi第八十二頁,共二百一十八頁,編輯于2023年,星期五正確解答moduleencoder(Data,Encode,Valid);input[3:0]Data;output[1:0]Encode;wirebar0,bar1,bar;assignbar0=~Data[2];assignbar1=2bar0&Data[1];assignbar=Data[0]|Data[1];assignEncode[0]=Data[3]|2bar1;assignEncode[1]=Data[3]|Data[2];assignValid=Data[3]|Data[2]|0bar;endmoduleverilog2009--TJU.ASICCenter---ArnoldShi第八十三頁,共二百一十八頁,編輯于2023年,星期五二、線網(wǎng)說明賦值連續(xù)賦值可作為線網(wǎng)說明本身的一部分。這樣的賦值被稱為線網(wǎng)說明賦值。如:wire[3:0]Sum=4'b0;wireClear='b1;wireA_GT_B=A>B,B_GT_A=B>A;等價于

wireclear;

assignclear=‘b1;不允許在同一個線網(wǎng)上出現(xiàn)多個線網(wǎng)說明賦值。如果多個賦值是必需的,則必須使用連續(xù)賦值語句。verilog2009--TJU.ASICCenter---ArnoldShi第八十四頁,共二百一十八頁,編輯于2023年,星期五隱式線網(wǎng)如果在VerilogHDL模型中一個線網(wǎng)沒有被特別說明,那么它被缺省聲明為1位線網(wǎng)。但是`default_nettype編譯指令能夠用于取代缺省線網(wǎng)類型.例:`default_nettypewand

//根據(jù)此編譯指令,所有后續(xù)未說明的線網(wǎng)都是wand類型再例:`default_nettypewiremoduleAND4to1(Z,D0,D1,D2,D3,S0);outputZ;inputD0,D1,D2,D3,S0;

assignZ=S0?(D0&D1&D2&D3):1’b0;

endmoduleverilog2009--TJU.ASICCenter---ArnoldShi第八十五頁,共二百一十八頁,編輯于2023年,星期五數(shù)據(jù)流建模課堂練習verilog2009--TJU.ASICCenter---ArnoldShi第八十六頁,共二百一十八頁,編輯于2023年,星期五數(shù)據(jù)流建模參考答案moduleMSDFF_DF(D,C,Q,Qbar);inputD,C;outputQ,Qbar;//wireNotC,NotD,NotY,Y,D1,D2,Ybar,Y1,;Y2assignNotD=~D;assignNotC=~C;assignNotY=~Y;assignD1=~(D&C);assignD2=~(C&NotD);assignY=~(D1&Ybar);assignYbar=~(Y&D2);assignY1=~(Y&NotC);assignY2=~(NotY&NotC);assignQ=~(Qbar&Y1);assignQbar=~(Y2&Q);endmoduleverilog2009--TJU.ASICCenter---ArnoldShi第八十七頁,共二百一十八頁,編輯于2023年,星期五三、時延說明assign#6Ask=Quiet||Late;規(guī)定右邊表達式結果的計算到其賦給左邊目標需經(jīng)過6個時間單位時延。例如,如果在時刻5,Late值發(fā)生變化,則賦值的右端表達式被計算,并且Ask在時刻11(=5+6)被賦于新值verilog2009--TJU.ASICCenter---ArnoldShi第八十八頁,共二百一十八頁,編輯于2023年,星期五時延VerilogHDL模型中的所有時延都根據(jù)時間單位定義使用編譯指令將時間單位與物理時間相關聯(lián)。這樣的編譯器指令需在模塊描述前定義,如下所示:`timescale

1ns/100ps此語句說明時延時間單位為1ns并且時間精度為100ps(時間精度是指所有的時延必須被限定在0.1ns內(nèi))。如果此編譯器指令所在的模塊包含上面的連續(xù)賦值語句,#2代表2ns。如果沒有這樣的編譯器指令,VerilogHDL模擬器會指定一個缺省時間單位。IEEEVerilogHDL標準中沒有規(guī)定缺省時間單位。verilog2009--TJU.ASICCenter---ArnoldShi第八十九頁,共二百一十八頁,編輯于2023年,星期五為什么會有延時?以下兩個最基本的電路單元verilog2009--TJU.ASICCenter---ArnoldShi第九十頁,共二百一十八頁,編輯于2023年,星期五CMOSNANDABA?BABABF001011101110ABverilog2009--TJU.ASICCenter---ArnoldShi第九十一頁,共二百一十八頁,編輯于2023年,星期五CMOSNORABF001010100110A+BABABABverilog2009--TJU.ASICCenter---ArnoldShi第九十二頁,共二百一十八頁,編輯于2023年,星期五MOSFET的結構verilog2009--TJU.ASICCenter---ArnoldShi第九十三頁,共二百一十八頁,編輯于2023年,星期五MOS電容verilog2009--TJU.ASICCenter---ArnoldShi第九十四頁,共二百一十八頁,編輯于2023年,星期五靜態(tài)CMOS的開關模型AReqARpARpARnCLACLBRnARpBRpARnCintBRpARpARnBRnCLCintNAND2INVNOR2verilog2009--TJU.ASICCenter---ArnoldShi第九十五頁,共二百一十八頁,編輯于2023年,星期五關于時延探討如果右端在傳輸給左端之前變化,右端發(fā)生在時延間隔內(nèi)的變化被濾掉。 例如:assign#4Cab=Drm;這也同樣適用于慣性時延行為:即右端值變化在能夠傳播到左端前必須至少保持時延間隔;如果在時延間隔內(nèi)右端值變化,則前面的值不能傳輸?shù)捷敵?。verilog2009--TJU.ASICCenter---ArnoldShi第九十六頁,共二百一十八頁,編輯于2023年,星期五三類時延值對于每個時延定義,總共能夠指定三類時延值:上升時延下降時延關閉時延assign#(rise,fall,turn-off)LHS=RHS_expr;如果右端從非0向量變化到0向量,那么就使用下降時延。如果右端值到達z,那么使用下降時延;否則使用上升時延。assign#4Ask=Quiet||Late;//Onedelayvalue.assign#(4,8)Ask=Quick;//Twodelayvalues.assign#(4,8,6)Arb=&DataBus;//Threedelayvalues.assignBus=MemAddr[7:4];//Nodelayvalue.verilog2009--TJU.ASICCenter---ArnoldShi第九十七頁,共二百一十八頁,編輯于2023年,星期五帶時延的譯碼器建模`timescale1ns/1nsmoduleDecoder2x4(A,B,EN,Z);inputA,B,EN;output[0:3]Z;wireAbar,Bbar;assign#1Abar=~A;assign#1Bbar=~B;assign#2Z[0]=~(Abar&Bbar&EN);assign#2Z[1]=~(Abar&B&EN);assign#2Z[2]=~(A&Bbar&EN);assign#2Z[3]=~(A&B&EN);endmoduleverilog2009--TJU.ASICCenter---ArnoldShi第九十八頁,共二百一十八頁,編輯于2023年,星期五結果波形verilog2009--TJU.ASICCenter---ArnoldShi第九十九頁,共二百一十八頁,編輯于2023年,星期五3.3.3線網(wǎng)時延時延也可以在線網(wǎng)說明中定義,如:wire#5Arb;線網(wǎng)時延效果如圖線網(wǎng)時延Textassign時延assign時延驅(qū)動2驅(qū)動2驅(qū)動1RHS表達式RHS表達式線網(wǎng)目標verilog2009--TJU.ASICCenter---ArnoldShi第一百頁,共二百一十八頁,編輯于2023年,星期五線網(wǎng)時延舉例wire#5Arb;assign#2Arb=Bod⋒因為定義了線網(wǎng)時延,實際對Arb的賦值發(fā)生在時刻17(=10+2+5)。verilog2009--TJU.ASICCenter---ArnoldShi第一百零一頁,共二百一十八頁,編輯于2023年,星期五課后作業(yè)數(shù)據(jù)流建模以下的奇偶發(fā)生器verilog2009--TJU.ASICCenter---ArnoldShi第一百零二頁,共二百一十八頁,編輯于2023年,星期五3.4門級結構建模天津大學電子科學與技術系史再峰shizaifeng@verilog2009--TJU.ASICCenter---ArnoldShi第一百零三頁,共二百一十八頁,編輯于2023年,星期五3.4門級結構建模moduleaddbit(a,b,ci,sum,co);inputa,b,ci;outputsum,co;wirea,b,ci,sum,co,n1,n2,n3;xor(n1,a,b,);xor(sum,n1,ci);and(n2,a,b);and(n3,n1,ci);or(co,n2,n3);endmodule由一些Verilog原型列出結構化的元件并按網(wǎng)表連接verilog2009--TJU.ASICCenter---ArnoldShi第一百零四頁,共二百一十八頁,編輯于2023年,星期五3.4.1內(nèi)置的基本門VerilogHDL為門級電路建模的能力.提供下列內(nèi)置基本門:

多輸入門:and,nand,or,nor,xor,xnor多輸出門:buf,not三態(tài)門:bufif0,bufif1,notif0,notif1上拉、下拉電阻:pullup,pulldownMOS開關:cmos,nmos,pmos,rcmos,rnmos,rpmos雙向開關:tran,tranif0,tranif1,rtran,rtranif0,rtranif1verilog2009--TJU.ASICCenter---ArnoldShi第一百零五頁,共二百一十八頁,編輯于2023年,星期五門級結構建模語法語句形式gate_type[instance_name](term1,term2,...,termN);注意,instance_name是可選的;gate_type為前面列出的某種門類型。各term用于表示與門的輸入/輸出端口相連的線網(wǎng)或寄存器.同一門類型的多個實例能夠在一個結構形式中定義gate_type[instance_name1](term1,term2,...,termN),[instance_name2](term1,term2,...,termN),[instance_name3](term1,term2,...,termN),[instance_name4](term1,term2,...,termN);verilog2009--TJU.ASICCenter---ArnoldShi第一百零六頁,共二百一十八頁,編輯于2023年,星期五3.4.2多輸入門內(nèi)置的多輸入門包括:andnandnororxorxnor這些邏輯門只有單個輸出,1個或多個輸入。門實例語句的語法如:multi_input_gate_type[instance_name](OutputA,Input1,Input2,...,InputN);第一個端口是輸出,其它端口是輸入多輸入門input1input2inputNOutputAverilog2009--TJU.ASICCenter---ArnoldShi第一百零七頁,共二百一十八頁,編輯于2023年,星期五多輸入門語法舉例andA1(Out1,In1,In2);andRBX(Sty,Rib,Bro,Qit,Fi)x;xor(Bar,Bud[0],Bud[1],Bud[2]),(Car,Cut[0],Cut[1]),(Sar,Sut[2],Sut[1],Sut[0],Sut[3]);verilog2009--TJU.ASICCenter---ArnoldShi第一百零八頁,共二百一十八頁,編輯于2023年,星期五多輸入門的真值表(一)nand01XZ01111110XXX1XXXZ1XXXand01XZ00000101XXX0XXXZ0XXXverilog2009--TJU.ASICCenter---ArnoldShi第一百零九頁,共二百一十八頁,編輯于2023年,星期五多輸入門的真值表(二)nor01XZ010XX10000XX0XXZX0XXor01XZ001XX11111XX1XXZX1XXverilog2009--TJU.ASICCenter---ArnoldShi第一百一十頁,共二百一十八頁,編輯于2023年,星期五多輸入門的真值表(三)xnor01XZ010XX101XXXXXXXZXXXXxor01XZ001XX110XXXXXXXZXXXXverilog2009--TJU.ASICCenter---ArnoldShi第一百一十一頁

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論