版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第二章Verilog語法的基本概念VerilogHDL是一種用于數(shù)字系統(tǒng)設計的語言。用VerilogHDL描述的電路設計就是該電路的VerilogHDL模型(模塊)。Verilog模型可以是實際電路的不同級別的抽象。行為描述:系統(tǒng)級、算法級、RTL級結(jié)構描述:門級、開關級2/4/20231Verilog的應用系統(tǒng)級(system):用高級語言結(jié)構實現(xiàn)設計模塊的外部性能的模型。算法級(algorithmic):用高級語言結(jié)構實現(xiàn)設計算法的模型。RTL級(RegisterTransferLevel):描述數(shù)據(jù)在寄存器之間流動和如何處理這些數(shù)據(jù)的模型。門級(gate-level):描述邏輯門以及邏輯門之間的連接的模型。開關級(switch-level):描述器件中三極管和儲存節(jié)點以及它們之間連接的模型。行為級描述modulemuxtwo(out,a,b,sl);input
a,b,sl;output
out;
regout;
always@(sloraorb)
if(!sl)out=a;
elseout=b;endmoduleabslout門級描述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級描述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行為級和RTL級RTL模塊的數(shù)據(jù)流動必須基于時鐘。RTL模塊在每個時鐘的沿時刻,其變量的值必定是精確的。RTL模塊是可綜合的,它是行為模塊的一個子集合。該行為描述并沒有說明如果輸入a或b是三態(tài)的(高阻時)輸出應該是什么,但有實際電路是有一定的輸出的。abslout簡單的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
簡單的VerilogHDL模塊modulecompare(equal,a,b);outputequal;//聲明輸出信號equalinput[1:0]a,b;//聲明輸入信號a,b
assignequal=(a==b)?1:0;
/*如果兩個輸入信號相等,輸出為1。否則為0*/endmodule/*........*/和//.........表示注釋部分一個復雜電路的完整VerilogHDL模型是由若個VerilogHDL模塊構成的,每一個模塊又可以由若干個子模塊構成。
利用VerilogHDL語言結(jié)構所提供的這種功能就可以構造一個模塊間的清晰層次結(jié)構來描述極其復雜的大型設計。VerilogHDL行為描述語言作為一種結(jié)構化和過程性的語言,其語法結(jié)構非常適合于算法級和RTL級的模型設計。這種行為描述語言具有以下八項功能:Verilog的應用可描述順序執(zhí)行或并行執(zhí)行的程序結(jié)構。用延遲表達式或事件表達式來明確地控制過程的啟動時間。通過命名的事件來觸發(fā)其它過程里的激活行為或停止行為。提供了條件、if-else、case、循環(huán)程序結(jié)構。提供了可帶參數(shù)且非零延續(xù)時間的任務(task)程序結(jié)構。提供了可定義新的操作符的函數(shù)結(jié)構(function)。Verilog的應用提供了用于建立表達式的算術運算符、邏輯運算符、位運算符。VerilogHDL語言作為一種結(jié)構化的語言也非常適合于門級和開關級的模型設計。VerilogHDL的構造性語句可以精確地建立信號的模型。這是因為在VerilogHDL中,提供了延遲和輸出強度的原語來建立精確程度很高的信號模型。信號值可以有不同的的強度,可以通過設定寬范圍的模糊值來降低不確定條件的影響。Verilog的應用第三章常用Verilog語法之一模塊結(jié)構數(shù)據(jù)類型變量、基本的運算符號2/4/202314模塊的結(jié)構Verilog的基本設計單元是“模塊”(block)。一個模塊是由兩部分組成的:描述接口;描述邏輯功能,即定義輸入是如何影響輸出的。從上面的例子可以看出:-Verilog模塊結(jié)構完全嵌在module和endmodule聲明語句之間;每個Verilog程序包括四個主要部分:端口定義I/O說明內(nèi)部信號聲明功能定義模塊的結(jié)構模塊的端口定義module模塊名(口1,口2,口3,…
)模塊的端口表示的是模塊的輸入輸出口名,它與別的模塊聯(lián)系端口的標識。2/4/202317modulecompare(equal,a,b);
。。。。endmodule模塊內(nèi)容輸入口:input[信號位寬-1:0]端口名1;input[信號位寬-1:0]端口名2;輸出口:output[信號位寬-1:0]端口名1;output[信號位寬-1:0]端口名2;輸入/輸出口: inout[信號位寬-1:0]端口名1;inout[信號位寬-1:0]端口名2;2/4/202318I/O說明I/O說明也可以寫在端口聲明語句里modulemodule_name(inputport1,…,outputport1,….)
2/4/202319模塊內(nèi)容I/O說明模塊內(nèi)容模塊內(nèi)部用到的與端口有關的wire和reg類型變量的聲明reg[width-1:0]R1,R2;wire[width-1:0]W1,W2;
2/4/202320內(nèi)部信號聲明模塊內(nèi)容功能定義:定義邏輯功能
用assign聲明語句 assigna=b&c;
用實例元件 and#2ul(q,a,b);ul為與門,輸入a,b,輸出q,輸出延遲2個時間單位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可用于描述組合邏輯和時序邏輯;assign,always,實例化描述的邏輯功能是同時(并行)執(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模塊的引用嚴格按照模塊定義的端口順序來連接,不用標明原模塊定義時的端口名:
模塊名(連接端口1信號名,連接端口2信號名,….)在引用時用“.”符號,標明原模塊定義時規(guī)定的端口名.模塊名(.端口1名(連接信號1名),.端口2名(連接信號2名,….)2/4/202325要點總結(jié)Verilog模塊中所有過程塊(如initial,always)、連續(xù)賦值語句、實例引用都是并行的;它們表示的是一種通過變量名互相連接的關系;
在同一模塊中這三者出現(xiàn)的先后順序沒有關系;只有連續(xù)賦值語句和實例引用語句可以獨立于過程塊(always,initial)而存在于模塊的功能定義部分。2/4/2023263.2數(shù)據(jù)類型及其常量和變量VerilogHDL中總共有19種數(shù)據(jù)類型。數(shù)據(jù)類型是表示數(shù)字電路中的數(shù)據(jù)存儲和傳送元素的。2/4/202329常量數(shù)字——整數(shù)
二進制(b,B),十進制(d,D),十六進制(h,H),八進制(o,O)表示方法:<位寬>’<進制><數(shù)字>
<進制><數(shù)字>,默認32位
<數(shù)字>,默認32位,十進制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ù)字——負數(shù)在數(shù)字表達式的前面加‘-’-8’d52/4/202332常量數(shù)字——下劃線(underscore_)用來分割數(shù)的表達以提高程序可讀性,但不可以用在位寬和進制處,只能用在具體的數(shù)字之間16’b1010_1011_1111_10102/4/202333常量當常量不說明位數(shù)時,默認值是32位,10=32’d10,-1=-32’d1=32’hFFFF_FFFF
’BX=32’BX=32’BXXXX…X每個字母用8位的ASCII值表示
“AB”=16’B01000001_010000102/4/202334參數(shù)型(parameter)常量可以用parameter來定義常量,即用parameter定義一個標識符代表一個常量,稱為符號常量,即標識符形式的常量parameter參數(shù)名1=表達式,參數(shù)名2=表達式;
注意:表達式必須是常數(shù)表達式,只能包含數(shù)字或先前已定義過的參數(shù)parametermsb=7,e=25;parameterbyte_size=8,byte_msb=byte_size-1;2/4/202335參數(shù)型(parameter)參數(shù)型常數(shù)用來定義延遲時間和變量寬度。在模塊或?qū)嵗脮r,可通過參數(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變量在程序運行過程中其值可以改變的量。變量數(shù)據(jù)類型(variabledatatype),用來暫存數(shù)據(jù),在過程中被賦值的變量??稍趇nitialprocedure,alwaysprocedure,task,function中被賦值。未被初始化時,默認值為X。默認為unsigned類型,除非指定為signed類型。默認位寬為1bit。變量網(wǎng)絡數(shù)據(jù)類型(netdatatype)表示結(jié)構實體之間的物理連接,不能儲存值,而且必須受到驅(qū)動器的驅(qū)動。如果沒有驅(qū)動器連接到網(wǎng)絡類型的變量上,則該變量就是高阻值z。Wire:表示單個門驅(qū)動或者連續(xù)賦值語句驅(qū)動的網(wǎng)絡類型數(shù)據(jù)。Tri:表示多驅(qū)動源(器)驅(qū)動的網(wǎng)絡類型數(shù)據(jù)。變量Wire:常用來表示以assign關鍵字指定的組合邏輯信號。Verilog中輸入、輸出信號類型默認時自動定義為wire型。Wire信號可以用作任何方程式的輸入可用作assign語句或?qū)嵗妮敵觥?/p>
wire[n-1:0]b,a;定義了兩條總線b、a,每條總線寬度為nbits;變量reg型:寄存器數(shù)據(jù)類型,默認初始值為不定值x。reg型數(shù)據(jù)常用來表示always模塊內(nèi)的指定信號,代表觸發(fā)器。在always內(nèi)被賦值的每一個信號都必須定義成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ā)器的存儲單元的值;reg型數(shù)據(jù)的默認值是x,reg型數(shù)據(jù)可以賦正值、負值,若為表達式的操作數(shù),其值被當作是無符號值。
reg只表示被定義的信號將用在always塊內(nèi)。memory型:Verilog通過對reg型變量建立數(shù)組來對存儲器建模,RAM型存儲器ROM存儲器reg文件。Memory型數(shù)據(jù)通過擴展reg型數(shù)據(jù)的地址范圍來生成。
reg[n-1:0]存儲器名[m-1:0];
reg[n-1:0]存儲器名[m:1];reg[7:0]mema[255:0];變量對存儲器進行地址索引的表達式必須為常數(shù)表達式,m必須為常數(shù)在同一個數(shù)據(jù)類型聲明語句里,可以同時定義存儲器型數(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;定義一個n位的寄存器,regmema[n-1:0];定義一個由n個1位寄存器構成的存儲器組。
rega=0;合法
mema=0;錯誤
mema[2]=0;正確變量3.3運算符及表達式按功能分類:算術運算符(+,-,x,/,%);位運算符(~,&,|,^,^~);邏輯運算符(&&,||,!);關系運算符(>,<,>=,<=);移位運算符(<<,>>);拼接運算符({});條件運算符(?:);賦值運算符(=,<=);
3.3運算符及表達式按運算符所帶的操作數(shù)不同:
單目運算符(unaryoperator):可以帶一個操作數(shù),操作數(shù)放在運算符的右邊;
雙目運算符(binaryoperator):可以帶兩個操作數(shù),操作數(shù)放在運算符的兩邊;三目運
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度企業(yè)員工加班工資支付合同3篇
- 2025年度旅行社連鎖加盟總部與加盟店合作協(xié)議范本2篇
- 2025版醫(yī)療健康監(jiān)事聘任與健康管理合同2篇
- 2025版礦業(yè)并購交易法律支持與盡職調(diào)查合同3篇
- 二零二五年度互聯(lián)網(wǎng)平臺用戶服務協(xié)議范本3篇
- 2025年度澳大利亞力拓鐵礦石精煉加工合作協(xié)議3篇
- 股份制合同(標準版)
- 2025版油氣資源開發(fā)與LNG加工一體化項目合同3篇
- 2024年鮮辣制品采購合同
- 2024年資產(chǎn)投資擔?;刭徴?篇
- 石油英語詞匯
- 《夜宿山寺》-完整版課件
- 滬教牛津版八年級上冊初二英語期末測試卷(5套)
- 北京市海淀區(qū)2020-2021學年度第一學期期末初三物理檢測試卷及答案
- 《潔凈工程項目定額》(征求意見稿)
- 家庭室內(nèi)裝飾裝修工程保修單
- 小學語文課堂提問有效性策略研究方案
- 物業(yè)上門維修收費標準
- ATS技術交流(新型發(fā)動機智能恒溫節(jié)能冷卻系統(tǒng))100318
- 手術區(qū)皮膚的消毒和鋪巾ppt課件
- 2022年度培訓工作總結(jié)
評論
0/150
提交評論