Verilog基礎(chǔ)的基礎(chǔ)知識_第1頁
Verilog基礎(chǔ)的基礎(chǔ)知識_第2頁
Verilog基礎(chǔ)的基礎(chǔ)知識_第3頁
Verilog基礎(chǔ)的基礎(chǔ)知識_第4頁
Verilog基礎(chǔ)的基礎(chǔ)知識_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

VerilogHDL基礎(chǔ)總結(jié)明達(dá)科(成都)科技培訓(xùn)有限公司Verilog程序是由模塊構(gòu)成的。每個模塊的內(nèi)容都是位于module和endmodule兩個語句之間。每個模塊實現(xiàn)特定的功能。模塊是可以進(jìn)行層次嵌套的。正因為如此才可以將大型的的數(shù)字電路設(shè)計分割成不同的小模塊來實現(xiàn)特定功能。Verilog語法的基本概念Verilog語法的基本概念如果每個模塊都是可以綜合的,通過綜合工具可以把它們的功能描述全都轉(zhuǎn)換為最基本的邏輯單元描述,最后可以用一個上層模塊通過實例引用把這些模塊連接起來,把它們整合成一個很大的邏輯系統(tǒng)。Verilog模塊可以分為兩種類型:一種是為了讓模塊最終能生成電路結(jié)構(gòu),另一種只是為了測試所設(shè)計的電路其邏輯功能是否正確。

Verilog語法的基本概念每個模塊要進(jìn)行端口定義,并說明輸入輸出口,然后對模塊的功能進(jìn)行描述。VerilogHDL程序的書寫格式自由,一行可以寫幾個語句,一個語句也可以分寫多行。除了endmodule語句外,每個語句和數(shù)據(jù)定義的最后必須有分號。可以用/*.....*/和//.......對VerilogHDL程序的任何部分作注釋。一個好的,有使用價值的源程序都應(yīng)當(dāng)加上必要的注釋,以增強程序的可讀性和可維護(hù)性。

例子一modulemuxtwo(out,a,b,sl);

inputa,b,sl;

outputout;

regout;

always@(sloraorb)

if(!sl)

out=a;

elseout=b;

endmodule

例子二modulemuxtwo(out,a,b,sl);

inputa,b,sl;

outputout;

not

u1(ns1,sl);

and

#1

u2(sela,a,nsl);

and

#1

u3(selb,b,sl);

or

#2

u4(out,sela,selb);

endmodule

例子三module

adder(count,sum,a,b,cin);

input[2:0]a,b;

input

cin;

output

count;

output[2:0]sum;

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

endmodule

思考題是否任意抽象的符合語法的Verilog模塊都可以通過綜合工具轉(zhuǎn)變?yōu)殡娐方Y(jié)構(gòu)?什么叫綜合?仿真是什么?為什么要進(jìn)行仿真?仿真可以在幾個層面上進(jìn)行?每個層面的仿真有什么意義?如何產(chǎn)生連續(xù)的周期測試時鐘?

常用Verilog語法之一模塊的結(jié)構(gòu)(模塊端口定義;模塊內(nèi)容)數(shù)據(jù)類型及其常量和變量運算符及表達(dá)式常用Verilog語法之一在Verilog模塊中所有過程塊(initial,always)、連續(xù)賦值語句、實例引用都是并行的;他們表示的是一種通過變量名互相連接的關(guān)系在同一模塊中這三者出現(xiàn)的先后順序沒有關(guān)系。只有連續(xù)賦值的語句assign和實例引用語句可以獨立與過程塊而存在于模塊功能定義部分。常用Verilog語法之一被實例引用的模塊,其端口可以通過不同名的連線或寄存器類型變量連接到別的模塊相應(yīng)的輸出輸入信號端。在always塊內(nèi)被賦值的每一個信號都必須定義成reg型。常用Verilog語法之二邏輯;關(guān)系;等式;移位;位拼接;縮減運算符優(yōu)先級別關(guān)鍵詞賦值語句和塊語句(順序塊、并行塊、塊名、起始時間和結(jié)束時間)常用語法之二位拼接運算符{},在C語言沒有定義,但在verilog中確是一種十分有用的語法;縮減運算符也是C語言所沒有的,合理的使用縮減運算符可以使程序簡潔、明了;阻塞和非阻塞賦值也是C語言沒有的。我們應(yīng)當(dāng)理解這是十分重要的概念,特別在編程寫綜合風(fēng)格的模塊中要加以注意;常用Verilog語法之三條件語句(if_else,case)循環(huán)語句(forever,repeat,while,for)例子程序Ifelse語句module test (CK,RES,EN,Q,CA);input CK,RES,EN ;output Q,CA ;reg Q ;

always@(posedgeCKorposedgeRES)begin if(RES==1’b1) Q<=1’b0 ; elseif(EN==1’b1) Q<=~Q ;endassignCA=EN&Q;endmodule4選一4to1seleclter(usefunctioncase)moduletest(din,sel,dout);input[3:0]din;input[1:0]sel;outputdout;functionselect; input[3:0]din;input[1:0]sel;case(sel)2'h0:select=din[0];2'h1:select=din[1];2'h2:select=din[2];2'h3:select=din[3];defaultselect=1'bx;endcaseendfunctionassigndout=select(din,sel);endmodule常用Verilog語法之四結(jié)構(gòu)說明語句(initial,always語句)Task和function說明語句系統(tǒng)函數(shù)和任務(wù)常用Verilog語法之四一個程序模塊可以有多個initial和always過程塊;每個initial和always說明語句在仿真的一開始同時立即開始執(zhí)行;initial語句只執(zhí)行一次;always語句則是不斷地重復(fù)活動著,直到仿真過程結(jié)束;常用Verilog語法之四always語句后跟著的過程塊是否運行,則要看它的觸發(fā)條件是否滿足,如滿足則運行過程塊一次,再次滿足則再運行一次,直至仿真過程結(jié)束;在一個模塊中,使用initial和always語句的次數(shù)是不受限制的,它們都是同時開始運行的;task和function語句可以在程序模塊中的一處或多處調(diào)用;常用Verilog語法之四Always的時間控制可以是沿觸發(fā)也可以是電平觸發(fā),可以是單個信號也可以是多個信號,中間需要用關(guān)鍵字OR連接;沿觸發(fā)的always塊常常描述時序行為,如有限狀態(tài)機;電平觸發(fā)的always塊常常用來描述組合邏輯電路;$display和$write的格式需要注意;常用Verilog語法之四initial

begin

areg=0;//初始化寄存器areg

for(index=0;index

memory[index]=0;

//初始化一個memory

end

在這個例子中用initial語句在仿真開始時對各變量進(jìn)行初始化,注意這個初始化過程不需要任何時間。常用Verilog語法之五系統(tǒng)任務(wù)$monitor時間度量系統(tǒng)函數(shù)$time系統(tǒng)任務(wù)$finish$stop$readmemb$readmemh$random編譯預(yù)處理(宏定義;文件包含處理;時間尺度;條件編譯命令)常用Verilog語法之五在多模塊調(diào)試的情況下,$monitor需配合$monitoron與$monitoroff使用$monito與$display的不同之處在于$monitor是連續(xù)監(jiān)視數(shù)據(jù)的變化,因而往往只要在測試模塊的initial塊中調(diào)用一次就可以監(jiān)視被測試的所以感興趣的信號,不需要也不能在always過程中調(diào)用$monitor$time常用在$monitor中,用來做時間標(biāo)記常用Verilog語法之五$stop和$finish常用在測試模塊的initial模塊中,配合時間延遲用來控制仿真的持續(xù)時間;$random在編寫測試程序是十分有用的,可以用來產(chǎn)生邊沿不穩(wěn)定的波形,和隨機出現(xiàn)的脈沖;$readmem在編寫測試程序是也十分有用,可以用來生成給定的復(fù)雜數(shù)據(jù)流.常用Verilog語法之五宏定義字符串引用時,不要忘記,要用`引號Include等編譯預(yù)處理也必須用`引導(dǎo),而不是與C語言一樣用#引導(dǎo)或不需要引導(dǎo)符;關(guān)于阻塞和非阻塞的原則歸納總結(jié):原則一:時序電路建模時,用非阻塞賦值;原則二:鎖存器電路建模時,用非阻塞賦值;原則三:用always塊寫組合邏輯時,采用阻塞賦值;常用Verilog語法之五原則四:在同一個always塊中同時建立時序和組合邏輯電路時,用非阻塞賦值;原則五:在同一個always塊,不要同時使用非阻塞賦值和阻塞賦值;原則六:不要在多個always塊中為同一個變量賦值;原則七:用$strobe系統(tǒng)任務(wù)來顯示用非阻塞賦值的變量值;原則八:在賦值是不要用#0延遲;練習(xí)分別使用如下方式設(shè)計一個3輸入或門or3:連續(xù)賦值原語調(diào)用

UDP過程賦值練習(xí)設(shè)計一個對同步輸入碼流中“10110”序列的檢測電路完成一個8位的雙向移位寄存器的設(shè)計。要求能夠在控制信號和時鐘的共同作用下進(jìn)行并行輸入、左移和右移操作。其中的左移與右移操作都是用外來數(shù)據(jù)位填充移空位的。練習(xí)設(shè)計一個function,它完成兩個4位操作數(shù)a與b之間的8種操作,產(chǎn)生5位的結(jié)果out(不考慮溢出情況),8種功能由3位的輸入select信號選擇,分別如下:select功能3’b000a3’b001a+b3’b010a-b3’b011a/b3’b100a%b3’b101a<<13’b110a>>13’b111(a>b)(比較)練習(xí)1、數(shù)字電路設(shè)計有那幾種層次,可否分別舉個例子?2、能否回憶一下在學(xué)校中用原理圖進(jìn)行設(shè)計的方法或在數(shù)字電路課中的進(jìn)行數(shù)字電路設(shè)計的方法?能否用HDL語言簡單描述一下4位寬的加法器?3、當(dāng)前兩種硬件描述語言是什么?4、以CPU為例,能否畫出Top-Down的樹狀圖?5、假設(shè)一D觸發(fā)器組的器件Reg8,輸入信號Din,輸出信號Qout,位寬8位,時鐘信號Clk,異步復(fù)位信號Rst,用于實現(xiàn)對8位數(shù)據(jù)總線的寄存,請描述出module語句,并畫出電路的示意圖練習(xí)6、HDL有哪幾種建模方式?7、結(jié)構(gòu)化建模方式主要的語句是什么?.A(A)的兩個A具體含義是什么?8、數(shù)據(jù)流的建模方式采用什么語句?語法是什么?9、行為建模方式采用什么語

溫馨提示

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

評論

0/150

提交評論