第四章行為語句_第1頁
第四章行為語句_第2頁
第四章行為語句_第3頁
第四章行為語句_第4頁
第四章行為語句_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第四章行為語句第1頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院

本章介紹VerilogHDL的行為語句,要充分理解硬件描述語言和硬件電路的關(guān)系,熟練掌握常用的行為語句,基本的行為語句就可以完成絕大多數(shù)電路與系統(tǒng)設(shè)計,要對常用語句用心專研、深入理解,對完成硬件電路設(shè)計將是非常有用的。

本章概述第2頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院4.1賦值語句

VerilogHDL賦值語句包括連續(xù)賦值語句和過程賦值語句兩種。1.連續(xù)賦值語句數(shù)據(jù)流的描述是采用連續(xù)賦值語句(assign)語句來實現(xiàn)的,語法如下:assignnet_type=表達(dá)式;連續(xù)賦值語句用于組合邏輯的建模。等式左邊是wire類型的變量,等式右邊可以是常量,或是由運算符如邏輯運算符、算術(shù)運算符參與的表達(dá)。例如,wire[3:0]Z,Preset,Clear;//線網(wǎng)說明assignZ=Preset&Clear;//連續(xù)賦值語句第3頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院注意兩個方面的問題:(1)連續(xù)賦值語句的執(zhí)行是:只要右邊表達(dá)式任一個變量有變化,表達(dá)式立即被計算,計算的結(jié)果立即賦給左邊信號。(2)連續(xù)賦值語句之間是并行語句,因此與位置順序無關(guān)。2.過程賦值語句過程賦值語句多用于對reg型變量進(jìn)行賦值。過程賦值有阻塞賦值和非阻塞賦值兩種方式。阻塞語句是順序執(zhí)行的,在該語句結(jié)束時就立即完成賦值,那么在前面的語句沒有完成之前,后面的就不能被執(zhí)行,仿佛被阻塞了一樣,常用于組合邏輯電路設(shè)計中;而非阻塞語句是同時執(zhí)行的,在整個過程塊結(jié)束時才完成賦值操作,即被賦值的變量的值不是立刻就改變的,常用于時序邏輯電路設(shè)計中。第4頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院阻塞賦值語句,從字面上理解,該條語句阻塞了下面語句的執(zhí)行,“=”用于阻塞的賦值,凡是在組合邏輯(如在assign語句中)賦值的請用阻塞賦值。非阻塞賦值操作符用小于等于號(即<=)表示,只能用于對寄存器類型變量進(jìn)行賦值,因此只能用在“initial”和“always”等過程塊中,不能用在assign語句中。阻塞賦值非阻塞賦值注:在同一個進(jìn)程塊中,最好不要同時用阻塞賦值和非阻塞賦值語句。第5頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院4.2條件語句條件語句有if-else語句和case語句兩種,它們都是順序語句,應(yīng)放在always塊內(nèi)。1.if-else語句格式與C語言中的if-else語句類似,使用方法有三種:(1)If(表達(dá)式)語句1;(2)If(表達(dá)式)語句1;

else語句2;(3)if(條件表達(dá)式1)語句1;

elseif(條件表達(dá)式2)語句2;

elseif(條件表達(dá)式3)語句3;

……else語句n;第6頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院例如if(Sum<60)beginGrade=C;Total_C=Total_c+1;endelseif(Sum<75)beginGrade=B;Total_B=Total_B+1;endelsebeginGrade=A;Total_A=Total_A+1;end“表達(dá)式”一般為邏輯表達(dá)式或關(guān)系表達(dá)式,也可能是一位的變量。條件表達(dá)式必須總是被括起來的。對表達(dá)式的值進(jìn)行判斷,若為0,x或z,按“假”處理;若為1,按“真”處理,執(zhí)行指定語句。第7頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院2.case語句

相對于if語句只有兩個分支而言,case語句是一種多分支語句,故case語句可用于多條件譯碼電路,如:描述譯碼器、數(shù)據(jù)選擇器、狀態(tài)機及微處理器的指令譯碼等。case語句的使用格式:case(敏感表達(dá)式)

值1:語句1;值2:語句2;

……

值n:語句n;default:語句n+1;endcase

當(dāng)敏感表達(dá)式的值為值1時,執(zhí)行語句1;為n時執(zhí)行語句n;如果敏感表達(dá)式的值與列出的值都不相同的話,則執(zhí)行default后面的語句。建議:case的默認(rèn)項必須寫,防止產(chǎn)生鎖存器。第8頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院例如

begincase(HEX)4'b0001:LED=7'b1111001;//14'b0010:LED=7'b0100100;//24'b0011:LED=7'b0110000;//34'b0100:LED=7'b0011001;//44'b0101:LED=7'b0010010;//54'b0110:LED=7'b0000010;//64'b0111:LED=7'b1111000;//74'b1000:LED=7'b0000000;//84'b1001:LED=7'b0010000;//94'b1010:LED=7'b0001000;//A4'b1011:LED=7'b0000011;//B4'b1100:LED=7'b1000110;//C4'b1101:LED=7'b0100001;//D4'b1110:LED=7'b0000110;//E4'b1111:LED=7'b0001110;//Fdefault:LED=7'b1000000;//0Endcase第9頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院3.條件語句使用要點

在使用條件語句時,應(yīng)注意列出所有條件分支,否則,編譯器認(rèn)為條件不滿足時,會引起一個觸發(fā)器保持原值。這一點可用于設(shè)計時序電路,例如在計數(shù)器設(shè)計中,條件滿足則加1,否則保持不變;而在組合電路設(shè)計中,應(yīng)避免這種隱含觸發(fā)器的存在。當(dāng)然,一般不可能列出所有分支,因為每一變量至少有4種取值0、1、z、x。為包含所有分支,可在if語句最后加上else;在case語句的最后加上default語句。設(shè)計者原意是設(shè)計一個二輸入與門,但因if語句中無else語句,在邏輯綜合時會認(rèn)為else語句為:“c=c”,即保持不變,形成了一個隱含鎖存器。因此需要加一條語句:elsec=0;第10頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院4.3循環(huán)語句

在VerilogHDL中存在4種類型的循環(huán)語句,可用來控制語句執(zhí)行次數(shù)。這4種語句分別為:(1)forever:連續(xù)地執(zhí)行語句,多用在“initial”塊中,以生成時鐘等周期性波形。(2)repeat:連續(xù)執(zhí)行一條語句n次;(3)while:執(zhí)行一條語句,直到某個條件不滿足;(4)for:有條件的循環(huán)語句第11頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院1.for語句for語句使用格式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句;即:for(循環(huán)變量賦初值;循環(huán)結(jié)束條件;循環(huán)變量增值)執(zhí)行語句;2.repeat語句repeat語句的使用格式為:repeat(循環(huán)次數(shù)表達(dá)式)語句;或repeat(循環(huán)次數(shù)表達(dá)式)begin……end第12頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院3.while和forever語句While語句

while語句的使用格式如下:

while(循環(huán)執(zhí)行條件表達(dá)式)語句;或while(循環(huán)執(zhí)行條件表達(dá)式)begin……endwhile語句在執(zhí)行時,首先判斷循環(huán)執(zhí)行條件表達(dá)式是否為真,若為真,執(zhí)行后面的語句或語句塊,然后再回頭判斷循環(huán)執(zhí)行條件表達(dá)式是否為真,為真的話,再執(zhí)行一遍后面的語句,如此不斷,直到條件表達(dá)式不為真。因此,在執(zhí)行語句中,必須有一條改變循環(huán)執(zhí)行條件表達(dá)式的值的語句。第13頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院forever語句

forever語句的使用格式如下:

forever語句;或foreverbegin……endforever循環(huán)語句連續(xù)不斷地執(zhí)行后面的語句或語句塊,常用來產(chǎn)生周期性的波形,作為仿真激勵信號for語句一般用在initial過程語句中,若要用它來進(jìn)行模塊描述,可用disable語句進(jìn)行中斷。第14頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院舉例:3個分別用for、repeat、while語句實現(xiàn)的同一個循環(huán)第15頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院應(yīng)用舉例:采用for循環(huán)語句設(shè)計一個“七人表決器”,通過一個for循環(huán)語句統(tǒng)計贊成人數(shù),若超過4人贊成則通過。第16頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院用vote[6:0]表示7個人的投票情況,“1”代表贊成,即vote[i]為第“1”代表第i個贊成,pass=“1”表示表決通過第17頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院4.4過程語句VerilogHDL中的多數(shù)過程模塊都從屬于以下2種過程語句:initialalways

在一個模塊中,使用always和initial語句的次數(shù)是不受限制的。Initial語句常用于仿真中的初始化,initial過程塊中的語句僅執(zhí)行一次;always塊內(nèi)的語句則是不斷重復(fù)執(zhí)行的。Always過程語句是可綜合的,在綜合的電路設(shè)計中廣泛采用。第18頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院1.always過程語句always過程語句使用模板如下:always@(<敏感信號表達(dá)式event-expression>)begin//過程賦值//if-else,case選擇語句//while,repeat,for循環(huán)//task,function調(diào)用end第19頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院“always”過程語句通常是帶有觸發(fā)條件的,觸發(fā)條件寫在敏感信號表達(dá)式中,只有當(dāng)觸發(fā)條件滿足時,其后的“begin-end”塊語句才能被執(zhí)行。下面討論敏感信號表達(dá)式“event-expression”的含義以及如何寫敏感信號表達(dá)式。敏感信號表達(dá)式所謂敏感信號表達(dá)式,又稱事件表達(dá)式或敏感信號列表,即當(dāng)該表達(dá)式中變量的值改變時,就會引發(fā)塊內(nèi)語句的執(zhí)行。因此,敏感信號表達(dá)式中應(yīng)列出影響塊內(nèi)取值的所有信號。若有兩個或兩個以上信號,它們之間用“or”連接。第20頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院例如:@(a)//當(dāng)信號a值發(fā)生改變時@(aorb)//當(dāng)信號a或信號b的值發(fā)生改變時@(posedgeclock)//當(dāng)clock的上升沿到來時@(negedgeclock)//當(dāng)clock的下降沿到來時@(posedgeclkornegedgereset)//當(dāng)clk的上升沿到來或

//reset信號的下降沿到來時

敏感信號可以分為兩種類型:一種為邊沿敏感型,一種為電平敏感型。每一個always過程最好只由一種類型的敏感信號來觸發(fā),而不要將邊沿敏感型和電平敏感型列在一起。第21頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院例如:always@(posedgeclkorposedgeclr)//兩個敏感信號都是邊沿敏感型always@(aorb)//兩個敏感信號都是電平敏感型always@(posedgeclkorclr)//不建議這樣用,最好不要將邊沿敏感型和電平

//敏感型列在一起第22頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院同步和異步操作

對于時序電路,事件通常是由時鐘邊沿觸發(fā)的。為表達(dá)邊沿這個概念,VerilogHDL提供了posedge和negedge兩個關(guān)鍵字來進(jìn)行描述。根據(jù)過程語句中表述方式不同,可實現(xiàn)信號的同步操作和異步操作。此為同步置數(shù),同步清零的例子第23頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院

對于上例中的load、reset信號沒有寫在敏感信號表達(dá)式當(dāng)中,他們是同步置數(shù)、同步清零,這些信號要起作用,必須有時鐘的上升沿到來。對于異步的清零/置數(shù),應(yīng)按以下格式書寫敏感信號表達(dá)式。always@(posedgeclkorposedgeclear)//clear信號上升沿到來時清零,故高電平清零有效always@(posedgeclkornegedgeclear)//clear信號下降沿到來時清零,故低電平清零有效注:塊內(nèi)的邏輯描述要與敏感信號表達(dá)式中信號的有效電平一致。例如:第24頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院用always過程塊實現(xiàn)較復(fù)雜的組合邏輯電路

always過程語句通常用來對寄存器類型的數(shù)據(jù)進(jìn)行賦值,但always過程語句也可以用來設(shè)計組合邏輯。在有的情況下,使用assign來實現(xiàn)組合邏輯電路,很多地方會顯得冗長且效率低下,而適當(dāng)?shù)夭捎胊lways過程語句來設(shè)計組合邏輯,能收到更好的效果。

下面是一個簡單的指令譯碼電路設(shè)計示例。該電路通過對指令的判斷,對輸入數(shù)據(jù)執(zhí)行相應(yīng)的操作,包括加、減、求與、求或、求反,并且無論是指令作用的數(shù)據(jù)還是指令本身發(fā)生變化,結(jié)果都應(yīng)做出及時的反應(yīng)。顯然,這是一個較為復(fù)雜的組合邏輯電路,如果采用assign語句描述,表達(dá)起來非常復(fù)雜。本例中采用電平敏感的always塊,并運用case結(jié)構(gòu)來進(jìn)行分析判斷,使設(shè)計思想得到直觀體現(xiàn),代碼整齊有序,便于理解。第25頁,共36頁,2023年,2月20日,星期三第26頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院2.initial過程語句initial語句的使用格式如下:Initial語句的使用格式如下:

initialbegin

語句1;語句2;

……endinitial語句不帶觸發(fā)條件,initial過程中的塊語句沿時間軸只執(zhí)行一次。initial語句通常用于仿真模塊中對激勵向量的描述,或用于給寄存器變量賦初值,它是面向模擬仿真的過程語句,通常不能被邏輯綜合工具所支持。第27頁,共36頁,2023年,2月20日,星期三蕪湖職業(yè)技術(shù)學(xué)院4.5塊語句塊語句是由標(biāo)志符begin-end或fork-join界定的一組語句,當(dāng)塊語句只包含一條語句時,塊標(biāo)識符可以缺省。1.

溫馨提示

  • 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

提交評論