




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第四章行為描述第一頁,共六十三頁,編輯于2023年,星期五4.1verilog行為描述概要4.1.1過程塊4.1.2過程語句initial與always第二頁,共六十三頁,編輯于2023年,星期五4.1.1過程塊
HDL由五個部分組成,主要部分是描述體部分。描述體部分由多個并行運行的過程塊組成,而每個過程塊又由過程塊語句和塊語句所組成,塊語句則進一步由過程賦值語句和高級程序語句構(gòu)成。第三頁,共六十三頁,編輯于2023年,星期五VerilogHDL行為描述的模塊第四頁,共六十三頁,編輯于2023年,星期五描述體部分:第五頁,共六十三頁,編輯于2023年,星期五過程語句@
(事件控制敏感表)塊語句開始標識符:塊名塊內(nèi)局部變量說明一條或多條過程賦值或高級程序語句塊語句結(jié)束標識符過程塊的形式:第六頁,共六十三頁,編輯于2023年,星期五4.1.2過程語句initial和always:
過程語句是:initial或always;事件敏感表只在always過程語句中出現(xiàn),用于激活過程語句的執(zhí)行;塊語句標識符分begin-end(串行塊)與fork-joint(并行塊)兩類。第七頁,共六十三頁,編輯于2023年,星期五過程語句的特點:1.兩者都是從0時刻執(zhí)行,initial過程語句后面的塊語句沿時間軸只執(zhí)行一次,而always則循環(huán)地重復執(zhí)行其后的塊語句。2.initial過程語句不帶觸發(fā)條件,從0時刻開始執(zhí)行它后面的塊語句;always過程語句帶有觸發(fā)條件。3.一個模塊的行為描述中可以有多個initial和always語句,代表多個過程的存在,他們之間相互獨立,并行運行。第八頁,共六十三頁,編輯于2023年,星期五例子:moduleclk_gen_demo(clock1,clock2);outputclock1,clock2;//portdeclarationregclock1,clock2;//datadeclarationinitialbeginclock1=0;clock2=1;endalwaysbegin#50clock1=~clock2;endalwaysbegin#100clock2=~clock2;endendmodule第九頁,共六十三頁,編輯于2023年,星期五4.2塊語句塊語句是由begin-end或fork-joint界定的一組行為描述語句。構(gòu)成塊語句的作用之一就是相當于給這組行為描述語句進行打包處理,使之在形式上與一條語句相一致。塊語句只能出現(xiàn)在行為描述中。第十頁,共六十三頁,編輯于2023年,星期五4.2.1串行塊begin-end
1.串行塊的語句按照排列次序,逐條順序執(zhí)行。每條語句的延時是相對于前一條語句結(jié)束時的時間;2.串行塊的起始時間是第一條語句開始的時間;結(jié)束時間是最后一條語句完成的時間;3.串行塊的行為描述可以理解為硬件電路在時鐘及控制信號作用下,數(shù)據(jù)沿數(shù)據(jù)通道的各級寄存器之間的傳送過程。第十一頁,共六十三頁,編輯于2023年,星期五例4-2一個包含延時的串行塊描述的例子
begin#10reg_a=reg_b;#10reg_c=reg_a;end
當流程控制進入串行塊后,經(jīng)10單位時間,reg_b的值賦給reg_a;再過10單位,又將reg_a的值賦給reg_c;到標識符end,流程轉(zhuǎn)出塊外。運行結(jié)果:reg_a和reg_c先后變成reg_b的值。從上述過程可以看到,每條語句的延時是相對于前一條語句而言的,串行塊是沿時間軸順序執(zhí)行。第十二頁,共六十三頁,編輯于2023年,星期五4.2.2并行塊fork_join
1·并行塊中的每條語句是同時并行執(zhí)行,各條語句的執(zhí)行過程與語句在塊中的順序無關(guān)。塊中的每條語句給出的延時都是相對于該塊開始的絕對時間。
2·并行塊的起始時間是流程轉(zhuǎn)入該塊的時間,每條語句都是相對于這個時間同時開始的。塊的結(jié)束時間就是該塊中按時間排序最后執(zhí)行的一條語句結(jié)束的時間。
3·并行塊的行為描述可以理解為硬件電路上電后,各電路模塊同時開始工作的過程。第十三頁,共六十三頁,編輯于2023年,星期五例4-4一個包括延時地并行塊描述的例子
fork#10reg_a=reg_b;#10reg_c=reg_a;join
將這個并行描述與例4-2中的串行描述對照,差別是塊標識符從原來的串行標識符begin_end改為這里的并行標識符fork_join。正是這一改變導致塊語句的執(zhí)行過程與執(zhí)行結(jié)果都發(fā)生了變化。第十四頁,共六十三頁,編輯于2023年,星期五modulewave_gen_seri(wav);outputwav;regwav;eventend_wave;parameterdelay=50;initialbeginwav=0;#delaywav=1;#delaywav=0;#delaywav=1;#delaywav=0;#delay->end_wave;end例4-5.用串行塊行為描述產(chǎn)生一段周期為100時間單位。占空比為1:1的信號波形。第十五頁,共六十三頁,編輯于2023年,星期五例4-6用并行塊描述一段周期為100時間單位、占空比為1:1的信號modulewave_gen_para(wav);outputwav;regwav;eventend_wave;initialforkwav=0;#50wav=1;#100wav=0;#150wav=1;#200wav=0;#250->end_wave;join第十六頁,共六十三頁,編輯于2023年,星期五例4-7用于驗證并行塊描述中語句的排序不影響語句的執(zhí)行過程的例子。modulewave_gen_para_verify(wav);outputwav;regwav;eventend_wave;initialfork#250->end_wave;#200wav=0;#150wav=1;#100wav=0;#50wav=1;wav=0;joinendmodule第十七頁,共六十三頁,編輯于2023年,星期五4.2.3有名塊Named-block有名塊取名方法是在塊語句開始標識符(串行塊的begin或并行塊的fork)后面加上一個冒號,之后給出一個名字即可。去了名字的塊稱之為有名塊。第十八頁,共六十三頁,編輯于2023年,星期五一、便于實現(xiàn)對塊語句執(zhí)行過程的有效控制對于多條語句構(gòu)成的塊語句,各條語句順序或并行運行。如果需要根據(jù)過程的狀態(tài),控制過程的是否繼續(xù)執(zhí)行下去。給塊命名后,可以通過后面要介紹的disable語句,在必要時終止(或提前結(jié)束)該有名塊語句的執(zhí)行過程。
有名塊的作用之一:第十九頁,共六十三頁,編輯于2023年,星期五二、允許在塊語句內(nèi)部引入局部變量局部變量的含義類似于c語言中的相應含義。只在該塊內(nèi)部起作用。VerilogHDL中,變量都是靜態(tài)變量(同樣請參考c語言的靜態(tài)變量)。給塊命名后,就可以在模擬時給屬于這一有名塊的局部變量分配內(nèi)存地址單元。即使局部變量與塊外的其他變量同名,由于塊名的標識,模擬系統(tǒng)很容易據(jù)此加以區(qū)別。顯然,局部變量只可能是寄存器類的變量。
有名塊的作用之二:第二十頁,共六十三頁,編輯于2023年,星期五4.3賦值語句4.3.1什么是過程賦值語句4.3.2過程賦值語句的兩種延時模式4.3.3阻塞型與非阻塞型過程賦值4.3.4連續(xù)賦值語句assign4.3.5過程連續(xù)賦值語句(assign/deassign,force/release)第二十一頁,共六十三頁,編輯于2023年,星期五
VerilogHDL對模塊的行為描述由一個或多個并行運行的過程塊構(gòu)成,而位于過程塊中的賦值語句稱之為過程賦值語句。過程賦值語句只能對寄存器類的量進行賦值。
過程語句的左邊必須是寄存器類的變量(reg.integer.real.Time).對于多位寬的寄存器變量(矢量)可以只對其中某一位或某幾位賦值。對與存儲器只能通過選定的地址單元,對某個字賦值;還可以將前述各類變量用連續(xù)符拼接起來,構(gòu)成一個整體作為過程賦值的左端。4.3.1什么是過程賦值語句
(continuousassignmentstatement)第二十二頁,共六十三頁,編輯于2023年,星期五reg_a=8’b1011_1100;//對一個8位寄存器的賦值reg_a[3]=1’b0;//對寄存器的某一位賦值reg_a[7:4]=4’b1010;//對寄存器的幾位賦值mem_a[address]=8’h5d;/*對由address地址指定的寄存器單元賦值*/{carry,sum}=reg_a+reg_b;/*通過連接算符構(gòu)成一個整體進行賦值*/例4-8對各種形式的寄存器變量進行過程賦值的例子第二十三頁,共六十三頁,編輯于2023年,星期五4.3.2過程賦值語句的兩種延時模式
過程賦值語句的基本形式:
寄存器變量=表達式考慮賦值過程的定時控制(Timing-control)時,根據(jù)定時控制在過程賦值語句中的不同位置,存在兩類定時模式:
一.外部定時模式二.內(nèi)部定時模式第二十四頁,共六十三頁,編輯于2023年,星期五一、外部模式:表達式:<定時控制><寄存器變量>=<表達式>
該延時的模式:經(jīng)“定時控制”所確定的延時后,計算出右端表達式的值,把結(jié)果賦值給左端的“寄存器變量”。其中的“定時控制”分為兩種類型:
1.延時控制
2.事件控制第二十五頁,共六十三頁,編輯于2023年,星期五1.延時控制延時控制就是直接給出所需延時的時間,如:#delaya=b;
這條語句表明,經(jīng)delay確定的延時時間后,過程賦值語句右端表達式才被求值并被賦給左端的寄存器變量。第二十六頁,共六十三頁,編輯于2023年,星期五2.事件控制
事件控制以符號“@”開頭,后面緊跟的是事件控制控制敏感表,有以下幾種形式:
(1)@(信號名);
(2)@(clock)reg_a=reg_b;
(3)
@(negedgeclock)reg_a=reg_b;
(4)@(事件1or事件2or事件3…)。第二十七頁,共六十三頁,編輯于2023年,星期五(1)@(信號名)
信號名所指定的信號通常是一位標量,也可以是多位的矢量。該形式的含義:只要被檢驗的信號發(fā)生變化(一般是指上升沿或下降沿)時,后面的賦值語句就被執(zhí)行。如:
@(clock)reg_a=reg_b;當clock發(fā)生跳變(上升沿或下降沿),reg_b的值就賦給reg_a。第二十八頁,共六十三頁,編輯于2023年,星期五(2)@(posedge信號名)
信號發(fā)生上升沿跳變(positiveedge)如:
@(posedgeclock)reg_a=reg_b;
只要檢測到clock信號出現(xiàn)上升沿,reg_b的值就賦給reg_a。第二十九頁,共六十三頁,編輯于2023年,星期五(3)@(negedge信號名)
信號發(fā)生下降沿跳變的情況如:
@(negedgeclock)reg_a=reg_b;
只要當檢測到clock信號的下降沿,reg_b的值就賦給reg_a。第三十頁,共六十三頁,編輯于2023年,星期五(4)@(事件1or事件2or事件3…)
表達式中的事件是指上面(1)、(2)、(3)三類事件中的任何一種事件,or表示邏輯或的意思,即只要所列舉的任何一種情況出現(xiàn),都將激活這里的事件控制。注意,VerilogHDL只提供“或”方式來處理多重觸發(fā)情況,沒有再定義諸如“與”等其他方式。第三十一頁,共六十三頁,編輯于2023年,星期五例子:@(posedgeresetorposedgeclear)reg_out=0;
上例表示,只有reset或clear中的任一個出現(xiàn)下跳變,reg_out被復位。
第三十二頁,共六十三頁,編輯于2023年,星期五二、內(nèi)部模式:
<寄存器變量>=<定時控制><表達式>;
在內(nèi)部模式中,有關(guān)“定時控制”的表現(xiàn)形式與上面對外部模式中的說明完全一致。兩者之間的差別在于,在外部模式中,定時控制位于過程賦值語句之前,直接體現(xiàn)為對過程賦值語句執(zhí)行事件的延期(postpone)上,只有當延時時間被滿足,或其他類型的激發(fā)條件被滿足后,過程賦值語句才能被計算和賦值。第三十三頁,共六十三頁,編輯于2023年,星期五內(nèi)部模式說明:在內(nèi)部模式中,定時控制位于賦值語句內(nèi)部,與外部模式相同的是,兩者都是在延時時間到期后再執(zhí)行過程賦值操作,不同的是右端表達式的求值過程是在不同的時間段進行的。在外部模式中,直到延時到后,再對表達式求值,并執(zhí)行賦值過程。而在內(nèi)部模式中,先完成對表達式的求值,待延時到后,條件滿足時,再把前面求得的結(jié)果賦給左邊的寄存器變量。下表說明了兩者之間的關(guān)系:第三十四頁,共六十三頁,編輯于2023年,星期五兩者之間的關(guān)系:內(nèi)部模式外部模式Reg_a=#10reg_b;begintmp=rg_b;#10reg_a=tmp;endReg_a=@(posedgeclk)reg_bbegintmp=rg_b;@(posedgeclk)reg_a=tmp;end第三十五頁,共六十三頁,編輯于2023年,星期五例4-9一個包含延時的并行塊
的兩種描述形式方式一:對應于外部模式
fork#10reg_a=reg_b;#10reg_b=reg_a;join方式二:對應于內(nèi)部模式
forkreg_a=#10reg_b;reg_b=#10reg_a;join第三十六頁,共六十三頁,編輯于2023年,星期五4.3.3阻塞型過程賦值于非阻塞型過程賦值過程賦值語句的兩種賦值方式:阻塞型過程賦值與非賦值型過程賦值。
在過程賦值語句中,賦值算符“=”被稱為阻塞型過程賦值算符。前一條語句沒有完成賦值之前,后面的語句不可能被執(zhí)行。即前一條賦值語句沒有執(zhí)行,使得后面的語句都被阻塞住了(Blocking),這種賦值過程稱之為阻塞型賦值,相應的賦值語句被稱為阻塞型賦值語句(BlockingAssignmentStatement).第三十七頁,共六十三頁,編輯于2023年,星期五例4-10一個用于說明阻塞型賦值語句與非阻塞型賦值語句差別的例子。Moduledemo_blocking_or_non;Rega,b,c,d,e,f;/*方法一:blockingassignmentinaserialblock*/initiabegina=#101;b=#50;c=#11;end第三十八頁,共六十三頁,編輯于2023年,星期五方法二:non-blockingassignmentinaserialblockinitialbegina<=#101;b<=#50;c<=#11;endendmodule第三十九頁,共六十三頁,編輯于2023年,星期五
同時包含阻塞型與非阻塞型串行塊的描述:
1.在前一個阻塞型賦值語句的串行塊中,到達10單位時刻時,a得到1;在到達15單位時刻時,b得到0的值;在到達16單位時刻時,c得到1。
2.在后一個使用非阻塞型賦值語句的串行塊描述中,c在1單位時刻首先得到1;繼之b在5時間單位時得到了0;最后才是a在10單位時刻得到了1。阻塞型賦值與非阻塞型賦值的比較:第四十頁,共六十三頁,編輯于2023年,星期五例4-11用非阻塞型賦值語句產(chǎn)生一段周期為100時間單位,占空為1:1的信號:modulewave_gen_nonblk(wav);outputwav;regwav;eventebd_wave;initialbeginwav<=0;#50wav<=1;#100wav<=0;#150wav<=1;#200wav<=0;#250->end_wave;endendmodule第四十一頁,共六十三頁,編輯于2023年,星期五例4-12用串行塊及阻塞型賦值語句描述的一個例子。moduledemo_seri_bloc(reg_a,reg_b,data,clock);inputdata,clock;outputreg_a,reg_b;regreg_a,reg_b;always@(posedgeclock)beginreg_a=data;reg_b=reg_a;endendmodule第四十二頁,共六十三頁,編輯于2023年,星期五例4-12描述的綜合結(jié)果第四十三頁,共六十三頁,編輯于2023年,星期五例4-13用并行塊及阻塞型賦值語句描述的一個例子。moduledemo_seri_para(reg_a,reg_b,data,clock);inputdata,clock;outputreg_a,reg_b;regreg_a;reg_b;always@(posedegclock)forkreg_a=data;reg_b=reg_a;joinendmodule第四十四頁,共六十三頁,編輯于2023年,星期五例4-14用串行塊及非阻塞型賦值語句描述的一個例子。moduledemo_seri_nonblk(reg_a,reg_b,data,clock);inputdata,clock;outputreg_a,reg_b;regreg_a,reg_b;always@(posedegclock)beginreg_a<=data;reg_b<=reg_a;endendmodule第四十五頁,共六十三頁,編輯于2023年,星期五4.3.1什么是過程賦值語句
(continuousassignmentstatement)過程賦值與連續(xù)賦值之間的差別:
1·賦值對象的不同:連續(xù)賦值用于對連續(xù)類變量賦值,過程賦值完成對寄存器變量的賦值。
2·賦值過程實現(xiàn)方法不同:變量被連續(xù)賦值以后,右端的信號有任何變化,都將引起左端變量的變化;而過程賦值只有在語句被執(zhí)行到時,賦值過程才進行一次,且賦值過程的具體執(zhí)行時刻還受到定時控制和延時模式等諸方面的影響。
第四十六頁,共六十三頁,編輯于2023年,星期五過程賦值與連續(xù)賦值之間的差別:3·語句出現(xiàn)的位置不同:連續(xù)賦值語句不能出現(xiàn)在任何一個過程塊中;過程賦值語句則只能出現(xiàn)在過程塊中。4·語句結(jié)構(gòu)的不同:連續(xù)賦值語句以關(guān)鍵詞assign為先導(有缺省情況),語句中的賦值算符分阻塞型和非阻塞型兩類。第四十七頁,共六十三頁,編輯于2023年,星期五過程賦值與連續(xù)賦值之間的差別:
5.沖突處理方式的不同:一條連續(xù)可被多條連續(xù)賦值語句同時驅(qū)動,最后的結(jié)果依據(jù)連續(xù)類型的不同有相應的沖突處理方式;寄存器變量在同一時刻只允許一條過過程賦值語句對其進行賦值。第四十八頁,共六十三頁,編輯于2023年,星期五例4-15用兩種方式實現(xiàn)一個與門的描述.
方式一:用連續(xù)賦值語句實現(xiàn)方式一:用連續(xù)賦值語句實現(xiàn)moduledemo_and_assign(c,a,b);inputa,b;outputc;assignc=a&b;endmodule第四十九頁,共六十三頁,編輯于2023年,星期五方式二:用過程賦值語句實現(xiàn)moduledemo_and_procedure(c,a,b);inputa,b;outputc;regcalways@(aorb)c=a&b;endmodule第五十頁,共六十三頁,編輯于2023年,星期五4.3.5過程連續(xù)賦值語句
VerilogHDL中有兩組過程連續(xù)賦值語句,即assign/deassign與force/release.一、assign與deassign二、force/release第五十一頁,共六十三頁,編輯于2023年,星期五例4-16用過程邊續(xù)賦值語句實現(xiàn)具有異步清零功能(低電平有效)的上升沒D觸發(fā)器moduledff_asyn(q,d,clear,clk);outputq;inputd,clear,clk;regq;always@(clear)/*asynchronousclearprocedureblockIf(!clear)assignq=0;elsedessignq;//normalDflipprocedureblockalways@(posedgeclk)q=d;endmodule第五十二頁,共六十三頁,編輯于2023年,星期五二、force與release
force與release的定義和assign與deassign所作的說明是一樣的,差別體現(xiàn)在:1.assign與deassign的賦值對象只能是寄存器量:force與reease的賦值對象即可以是寄存器量,也可以是連線類量.2.對寄存器而言,force與release是一個比assign和deassign有更高優(yōu)先級的賦值語句:對連線類變量而言,它同樣具有最高優(yōu)先級,可以覆蓋掉其它所有對這條連線驅(qū)動.第五十三頁,共六十三頁,編輯于2023年,星期五
4.4高級程序語句4.4.1if-else條件語句4.4.2case語句
4.4.3forever循環(huán)語句
4.4.4repeat循環(huán)語句
4.4.5while循環(huán)語句
4.4.6for循環(huán)語句
4.4.7disable循環(huán)中斷控制語句
4.4.8wait語句與有名事件第五十四頁,共六十三頁,編輯于2023年,星期五4.4.1if-else條件語句
一、if(條件表達式)塊語二、if(條件表達式)塊語句1else塊語句2三、if(條件表達式1)塊語句1elseif(條件表達式2)塊語句2
……第五十五頁,共六十三頁,編輯于2023年,星期五一、if(條件表達式)塊語
當條件表達式成立指條件表達式為1(邏輯真),如果出現(xiàn)0,x或Z等非1,作為不成立處理.另外,這晨對塊語句的定義與4.2節(jié)對塊語句的定義完全一致.當塊語句只由一條語句構(gòu)成時,塊語句標識符可以缺省.這些在后面不再一一進行重復說明.第五十六頁,共六十三頁,編輯于2023年,星期五
一條沒有else選項的if語句映射到硬件上,形成一個鎖存器。如:always@(enableordata)if(enable)out=data;
當enable有效時,輸出(out)得到data的值;而enable無效時,上面的描述并沒有告知輸出端(out)應當處在什么狀態(tài)。而按照過程的定義,在執(zhí)行下一次賦值操作之前,寄存器將保持原值不變,于是綜合器將據(jù)此產(chǎn)生一個鎖存器,用以保存輸出out的值。第五十七頁,共六十三頁,編輯于2023年,星期五二、if(條件表達式)塊語句1
else塊語句2
當
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 土木課題申報書范文
- 千金合同合同范本
- 公司注冊股東合同范本
- 單獨招生機電類練習題庫與答案
- MySQL數(shù)據(jù)庫原理設計與應用模擬題+參考答案
- 修路租用土地合同范例
- 下鄉(xiāng)支教社會實踐報告
- 醫(yī)療訂購合同范本
- 一年級語文下冊識字教案
- 反擔保合同范本2
- DeepSeek從入門到精通
- 人工智能賦能職業(yè)教育高質(zhì)量發(fā)展研究
- 2024年水利工程建設行業(yè)市場發(fā)展監(jiān)測及投資潛力預測報告
- 崗位職責心得體會(2篇)
- 機械設計基礎(chǔ) 課件 01機械設計概論
- GB/T 6822-2024船體防污防銹漆體系
- 全國第三屆職業(yè)技能大賽(智能網(wǎng)聯(lián)汽車裝調(diào)運維)選拔賽理論考試題庫(含答案)
- 電信網(wǎng)絡詐騙犯罪的特征、治理困境及對策建議
- 品質(zhì)培訓提升員工質(zhì)量意識3
- 四大名著導讀-課件-(共18張)
- 10.1溶液的酸堿性教學設計-2024-2025學年九年級化學人教版下冊
評論
0/150
提交評論