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

下載本文檔

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

文檔簡介

第四章行為描述第1頁,共63頁,2023年,2月20日,星期三4.1verilog行為描述概要4.1.1過程塊4.1.2過程語句initial與always第2頁,共63頁,2023年,2月20日,星期三4.1.1過程塊

HDL由五個部分組成,主要部分是描述體部分。描述體部分由多個并行運行的過程塊組成,而每個過程塊又由過程塊語句和塊語句所組成,塊語句則進一步由過程賦值語句和高級程序語句構成。第3頁,共63頁,2023年,2月20日,星期三VerilogHDL行為描述的模塊第4頁,共63頁,2023年,2月20日,星期三描述體部分:第5頁,共63頁,2023年,2月20日,星期三過程語句@

(事件控制敏感表)塊語句開始標識符:塊名塊內(nèi)局部變量說明一條或多條過程賦值或高級程序語句塊語句結束標識符過程塊的形式:第6頁,共63頁,2023年,2月20日,星期三4.1.2過程語句initial和always:

過程語句是:initial或always;事件敏感表只在always過程語句中出現(xiàn),用于激活過程語句的執(zhí)行;塊語句標識符分begin-end(串行塊)與fork-joint(并行塊)兩類。第7頁,共63頁,2023年,2月20日,星期三過程語句的特點:1.兩者都是從0時刻執(zhí)行,initial過程語句后面的塊語句沿時間軸只執(zhí)行一次,而always則循環(huán)地重復執(zhí)行其后的塊語句。2.initial過程語句不帶觸發(fā)條件,從0時刻開始執(zhí)行它后面的塊語句;always過程語句帶有觸發(fā)條件。3.一個模塊的行為描述中可以有多個initial和always語句,代表多個過程的存在,他們之間相互獨立,并行運行。第8頁,共63頁,2023年,2月20日,星期三例子:moduleclk_gen_demo(clock1,clock2);outputclock1,clock2;//portdeclarationregclock1,clock2;//datadeclarationinitialbeginclock1=0;clock2=1;endalwaysbegin#50clock1=~clock2;endalwaysbegin#100clock2=~clock2;endendmodule第9頁,共63頁,2023年,2月20日,星期三4.2塊語句塊語句是由begin-end或fork-joint界定的一組行為描述語句。構成塊語句的作用之一就是相當于給這組行為描述語句進行打包處理,使之在形式上與一條語句相一致。塊語句只能出現(xiàn)在行為描述中。第10頁,共63頁,2023年,2月20日,星期三4.2.1串行塊begin-end

1.串行塊的語句按照排列次序,逐條順序執(zhí)行。每條語句的延時是相對于前一條語句結束時的時間;2.串行塊的起始時間是第一條語句開始的時間;結束時間是最后一條語句完成的時間;3.串行塊的行為描述可以理解為硬件電路在時鐘及控制信號作用下,數(shù)據(jù)沿數(shù)據(jù)通道的各級寄存器之間的傳送過程。第11頁,共63頁,2023年,2月20日,星期三例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,流程轉出塊外。運行結果:reg_a和reg_c先后變成reg_b的值。從上述過程可以看到,每條語句的延時是相對于前一條語句而言的,串行塊是沿時間軸順序執(zhí)行。第12頁,共63頁,2023年,2月20日,星期三4.2.2并行塊fork_join

1·并行塊中的每條語句是同時并行執(zhí)行,各條語句的執(zhí)行過程與語句在塊中的順序無關。塊中的每條語句給出的延時都是相對于該塊開始的絕對時間。

2·并行塊的起始時間是流程轉入該塊的時間,每條語句都是相對于這個時間同時開始的。塊的結束時間就是該塊中按時間排序最后執(zhí)行的一條語句結束的時間。

3·并行塊的行為描述可以理解為硬件電路上電后,各電路模塊同時開始工作的過程。第13頁,共63頁,2023年,2月20日,星期三例4-4一個包括延時地并行塊描述的例子

fork#10reg_a=reg_b;#10reg_c=reg_a;join

將這個并行描述與例4-2中的串行描述對照,差別是塊標識符從原來的串行標識符begin_end改為這里的并行標識符fork_join。正是這一改變導致塊語句的執(zhí)行過程與執(zhí)行結果都發(fā)生了變化。第14頁,共63頁,2023年,2月20日,星期三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的信號波形。第15頁,共63頁,2023年,2月20日,星期三例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第16頁,共63頁,2023年,2月20日,星期三例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第17頁,共63頁,2023年,2月20日,星期三4.2.3有名塊Named-block有名塊取名方法是在塊語句開始標識符(串行塊的begin或并行塊的fork)后面加上一個冒號,之后給出一個名字即可。去了名字的塊稱之為有名塊。第18頁,共63頁,2023年,2月20日,星期三一、便于實現(xiàn)對塊語句執(zhí)行過程的有效控制對于多條語句構成的塊語句,各條語句順序或并行運行。如果需要根據(jù)過程的狀態(tài),控制過程的是否繼續(xù)執(zhí)行下去。給塊命名后,可以通過后面要介紹的disable語句,在必要時終止(或提前結束)該有名塊語句的執(zhí)行過程。

有名塊的作用之一:第19頁,共63頁,2023年,2月20日,星期三二、允許在塊語句內(nèi)部引入局部變量局部變量的含義類似于c語言中的相應含義。只在該塊內(nèi)部起作用。VerilogHDL中,變量都是靜態(tài)變量(同樣請參考c語言的靜態(tài)變量)。給塊命名后,就可以在模擬時給屬于這一有名塊的局部變量分配內(nèi)存地址單元。即使局部變量與塊外的其他變量同名,由于塊名的標識,模擬系統(tǒng)很容易據(jù)此加以區(qū)別。顯然,局部變量只可能是寄存器類的變量。

有名塊的作用之二:第20頁,共63頁,2023年,2月20日,星期三4.3賦值語句4.3.1什么是過程賦值語句4.3.2過程賦值語句的兩種延時模式4.3.3阻塞型與非阻塞型過程賦值4.3.4連續(xù)賦值語句assign4.3.5過程連續(xù)賦值語句(assign/deassign,force/release)第21頁,共63頁,2023年,2月20日,星期三

VerilogHDL對模塊的行為描述由一個或多個并行運行的過程塊構成,而位于過程塊中的賦值語句稱之為過程賦值語句。過程賦值語句只能對寄存器類的量進行賦值。

過程語句的左邊必須是寄存器類的變量(eger.real.Time).對于多位寬的寄存器變量(矢量)可以只對其中某一位或某幾位賦值。對與存儲器只能通過選定的地址單元,對某個字賦值;還可以將前述各類變量用連續(xù)符拼接起來,構成一個整體作為過程賦值的左端。4.3.1什么是過程賦值語句

(continuousassignmentstatement)第22頁,共63頁,2023年,2月20日,星期三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;/*通過連接算符構成一個整體進行賦值*/例4-8對各種形式的寄存器變量進行過程賦值的例子第23頁,共63頁,2023年,2月20日,星期三4.3.2過程賦值語句的兩種延時模式

過程賦值語句的基本形式:

寄存器變量=表達式考慮賦值過程的定時控制(Timing-control)時,根據(jù)定時控制在過程賦值語句中的不同位置,存在兩類定時模式:

一.外部定時模式二.內(nèi)部定時模式第24頁,共63頁,2023年,2月20日,星期三一、外部模式:表達式:<定時控制><寄存器變量>=<表達式>

該延時的模式:經(jīng)“定時控制”所確定的延時后,計算出右端表達式的值,把結果賦值給左端的“寄存器變量”。其中的“定時控制”分為兩種類型:

1.延時控制

2.事件控制第25頁,共63頁,2023年,2月20日,星期三1.延時控制延時控制就是直接給出所需延時的時間,如:#delaya=b;

這條語句表明,經(jīng)delay確定的延時時間后,過程賦值語句右端表達式才被求值并被賦給左端的寄存器變量。第26頁,共63頁,2023年,2月20日,星期三2.事件控制

事件控制以符號“@”開頭,后面緊跟的是事件控制控制敏感表,有以下幾種形式:

(1)@(信號名);

(2)@(clock)reg_a=reg_b;

(3)

@(negedgeclock)reg_a=reg_b;

(4)@(事件1or事件2or事件3…)。第27頁,共63頁,2023年,2月20日,星期三(1)@(信號名)

信號名所指定的信號通常是一位標量,也可以是多位的矢量。該形式的含義:只要被檢驗的信號發(fā)生變化(一般是指上升沿或下降沿)時,后面的賦值語句就被執(zhí)行。如:

@(clock)reg_a=reg_b;當clock發(fā)生跳變(上升沿或下降沿),reg_b的值就賦給reg_a。第28頁,共63頁,2023年,2月20日,星期三(2)@(posedge信號名)

信號發(fā)生上升沿跳變(positiveedge)如:

@(posedgeclock)reg_a=reg_b;

只要檢測到clock信號出現(xiàn)上升沿,reg_b的值就賦給reg_a。第29頁,共63頁,2023年,2月20日,星期三(3)@(negedge信號名)

信號發(fā)生下降沿跳變的情況如:

@(negedgeclock)reg_a=reg_b;

只要當檢測到clock信號的下降沿,reg_b的值就賦給reg_a。第30頁,共63頁,2023年,2月20日,星期三(4)@(事件1or事件2or事件3…)

表達式中的事件是指上面(1)、(2)、(3)三類事件中的任何一種事件,or表示邏輯或的意思,即只要所列舉的任何一種情況出現(xiàn),都將激活這里的事件控制。注意,VerilogHDL只提供“或”方式來處理多重觸發(fā)情況,沒有再定義諸如“與”等其他方式。第31頁,共63頁,2023年,2月20日,星期三例子:@(posedgeresetorposedgeclear)reg_out=0;

上例表示,只有reset或clear中的任一個出現(xiàn)下跳變,reg_out被復位。

第32頁,共63頁,2023年,2月20日,星期三二、內(nèi)部模式:

<寄存器變量>=<定時控制><表達式>;

在內(nèi)部模式中,有關“定時控制”的表現(xiàn)形式與上面對外部模式中的說明完全一致。兩者之間的差別在于,在外部模式中,定時控制位于過程賦值語句之前,直接體現(xiàn)為對過程賦值語句執(zhí)行事件的延期(postpone)上,只有當延時時間被滿足,或其他類型的激發(fā)條件被滿足后,過程賦值語句才能被計算和賦值。第33頁,共63頁,2023年,2月20日,星期三內(nèi)部模式說明:在內(nèi)部模式中,定時控制位于賦值語句內(nèi)部,與外部模式相同的是,兩者都是在延時時間到期后再執(zhí)行過程賦值操作,不同的是右端表達式的求值過程是在不同的時間段進行的。在外部模式中,直到延時到后,再對表達式求值,并執(zhí)行賦值過程。而在內(nèi)部模式中,先完成對表達式的求值,待延時到后,條件滿足時,再把前面求得的結果賦給左邊的寄存器變量。下表說明了兩者之間的關系:第34頁,共63頁,2023年,2月20日,星期三兩者之間的關系:內(nèi)部模式外部模式Reg_a=#10reg_b;begintmp=rg_b;#10reg_a=tmp;endReg_a=@(posedgeclk)reg_bbegintmp=rg_b;@(posedgeclk)reg_a=tmp;end第35頁,共63頁,2023年,2月20日,星期三例4-9一個包含延時的并行塊

的兩種描述形式方式一:對應于外部模式

fork#10reg_a=reg_b;#10reg_b=reg_a;join方式二:對應于內(nèi)部模式

forkreg_a=#10reg_b;reg_b=#10reg_a;join第36頁,共63頁,2023年,2月20日,星期三4.3.3阻塞型過程賦值于非阻塞型過程賦值過程賦值語句的兩種賦值方式:阻塞型過程賦值與非賦值型過程賦值。

在過程賦值語句中,賦值算符“=”被稱為阻塞型過程賦值算符。前一條語句沒有完成賦值之前,后面的語句不可能被執(zhí)行。即前一條賦值語句沒有執(zhí)行,使得后面的語句都被阻塞住了(Blocking),這種賦值過程稱之為阻塞型賦值,相應的賦值語句被稱為阻塞型賦值語句(BlockingAssignmentStatement).第37頁,共63頁,2023年,2月20日,星期三例4-10一個用于說明阻塞型賦值語句與非阻塞型賦值語句差別的例子。Moduledemo_blocking_or_non;Rega,b,c,d,e,f;/*方法一:blockingassignmentinaserialblock*/initiabegina=#101;b=#50;c=#11;end第38頁,共63頁,2023年,2月20日,星期三方法二:non-blockingassignmentinaserialblockinitialbegina<=#101;b<=#50;c<=#11;endendmodule第39頁,共63頁,2023年,2月20日,星期三

同時包含阻塞型與非阻塞型串行塊的描述:

1.在前一個阻塞型賦值語句的串行塊中,到達10單位時刻時,a得到1;在到達15單位時刻時,b得到0的值;在到達16單位時刻時,c得到1。

2.在后一個使用非阻塞型賦值語句的串行塊描述中,c在1單位時刻首先得到1;繼之b在5時間單位時得到了0;最后才是a在10單位時刻得到了1。阻塞型賦值與非阻塞型賦值的比較:第40頁,共63頁,2023年,2月20日,星期三例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第41頁,共63頁,2023年,2月20日,星期三例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第42頁,共63頁,2023年,2月20日,星期三例4-12描述的綜合結果第43頁,共63頁,2023年,2月20日,星期三例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第44頁,共63頁,2023年,2月20日,星期三例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第45頁,共63頁,2023年,2月20日,星期三4.3.1什么是過程賦值語句

(continuousassignmentstatement)過程賦值與連續(xù)賦值之間的差別:

1·賦值對象的不同:連續(xù)賦值用于對連續(xù)類變量賦值,過程賦值完成對寄存器變量的賦值。

2·賦值過程實現(xiàn)方法不同:變量被連續(xù)賦值以后,右端的信號有任何變化,都將引起左端變量的變化;而過程賦值只有在語句被執(zhí)行到時,賦值過程才進行一次,且賦值過程的具體執(zhí)行時刻還受到定時控制和延時模式等諸方面的影響。

第46頁,共63頁,2023年,2月20日,星期三過程賦值與連續(xù)賦值之間的差別:3·語句出現(xiàn)的位置不同:連續(xù)賦值語句不能出現(xiàn)在任何一個過程塊中;過程賦值語句則只能出現(xiàn)在過程塊中。4·語句結構的不同:連續(xù)賦值語句以關鍵詞assign為先導(有缺省情況),語句中的賦值算符分阻塞型和非阻塞型兩類。第47頁,共63頁,2023年,2月20日,星期三過程賦值與連續(xù)賦值之間的差別:

5.沖突處理方式的不同:一條連續(xù)可被多條連續(xù)賦值語句同時驅(qū)動,最后的結果依據(jù)連續(xù)類型的不同有相應的沖突處理方式;寄存器變量在同一時刻只允許一條過過程賦值語句對其進行賦值。第48頁,共63頁,2023年,2月20日,星期三例4-15用兩種方式實現(xiàn)一個與門的描述.

方式一:用連續(xù)賦值語句實現(xiàn)方式一:用連續(xù)賦值語句實現(xiàn)moduledemo_and_assign(c,a,b);inputa,b;outputc;assignc=a&b;endmodule第49頁,共63頁,2023年,2月20日,星期三方式二:用過程賦值語句實現(xiàn)moduledemo_and_procedure(c,a,b);inputa,b;outputc;regcalways@(aorb)c=a&b;endmodule第50頁,共63頁,2023年,2月20日,星期三4.3.5過程連續(xù)賦值語句

VerilogHDL中有兩組過程連續(xù)賦值語句,即assign/deassign與force/release.一、assign與deassign二、force/release第51頁,共63頁,2023年,2月20日,星期三例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第52頁,共63頁,2023年,2月20日,星期三二、force與release

force與release的定義和assign與deassign所作的說明是一樣的,差別體現(xiàn)在:1.assign與deassign的賦值對象只能是寄存器量:force與reease的賦值對象即可以是寄存器量,也可以是連線類量.2.對寄存器而言,force與release是一個比assign和deassign有更高優(yōu)先級的賦值語句:對連線類變量而言,它同樣具有最高優(yōu)先級,可以覆蓋掉其它所有對這條連線驅(qū)動.第53頁,共63頁,2023年,2月20日,星期三

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語句與有名事件第54頁,共63頁,2023年,2月20日,星期三4.4.1if-else條件語句

一、if(條件表達式)塊語二、if(條件表達式)塊語句1else塊語句2三、if(條件表達式1)塊語句1elseif(條件表達式2)塊語句2

……第55頁,共63頁,2023年,2月20日,星期三一、if(條件表達式)塊語

當條件表達式成立指條件表達式為1(邏輯真),如果出現(xiàn)0,x或Z等非1,作為不成立處理.另外,這晨對塊語句的定義與4.2節(jié)對塊語句的定義完全一致.當塊語句只由一條語句構成時,塊語句標識符可以缺省.這些在后面不再一一進行重復說明.第56頁,共63頁,2023年,2月20日,星期三

一條沒有else選項的if語句映射到硬件上,形成一個鎖存器。如:always@(enableordata)if(enable)out=data;

當enable有效時,輸出(out)得到data的值;而enable無效時,上面的描述并沒有告知輸出端(out)應當處在什么狀態(tài)。而按照過程的定義,在執(zhí)行下一次賦值操作之前,寄存器將保持原值不變,于是綜合器將據(jù)此產(chǎn)生一個鎖存器,用以保存輸出out的值。第57頁,共63頁,2023年,2月20日,星期三二、if(條件表達式)塊語句1

else塊語句2

溫馨提示

  • 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

提交評論