版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第6章 行為描述(二):時間控制和賦值語句 第第6章行為描述章行為描述(二二):時間控制和賦值語句:時間控制和賦值語句 6.1 時間控制時間控制 6.2 賦值語句賦值語句 第6章 行為描述(二):時間控制和賦值語句 6.1 時時 間間 控控 制制時間控制可以用來對過程塊中各條語句的執(zhí)行時間(時序)進行控制。時間控制可以分為兩類:(1) 延時控制:為行為語句的執(zhí)行指定一個延時時間的時間控制方式。(2) 事件控制:為行為語句的執(zhí)行指定觸發(fā)事件的時間控制方式。其中事件控制方式又可以分成兩類:邊沿觸發(fā)事件控制和電平敏感事件控制。第6章 行為描述(二):時間控制和賦值語句 6.1.1 延時控制延時控制延
2、時控制的格式為:# 行為語句;或 # ;其中:符號“#”是延時控制的標識符;“”是直接指定的延遲時間量,它是以多少個仿真時間單位的形式給出的,可以是一個立即數(shù)、變量或表達式。第6章 行為描述(二):時間控制和賦值語句 1. 第一種形式的延時控制語句第一種形式的延時控制語句的后面跟著一條行為語句。在這種情況下,仿真進程在遇到這條帶有延時控制的行為語句后并不立即執(zhí)行行為語句指定的操作,而是要延遲等待到“”所指定的時間量過去后才真正開始執(zhí)行行為語句指定的操作,如例6-1所示的程序。第6章 行為描述(二):時間控制和賦值語句 【例例6-1】第一種形式的延時控制語句。module clk_gen(clk
3、);output clk;reg clk;initialbeginclk=0; /語句S1#10 clk = 1; /語句S2#20 clk = 0; /語句S3#30 clk = 1; /語句S4endendmodule第6章 行為描述(二):時間控制和賦值語句 表 6.1 例 6-1 進行仿真時的程序控制流程和輸出信號 clk 的變化情況 時 間 程序控制流程 輸出 clk 0 進入串行塊,進入 S1, 執(zhí)行 S1 后進入 S2 0 10 退出 S2 后進入 S3 1 30 退出 S3 后進入 S4 0 60 退出 S4,退出串行塊 1 第6章 行為描述(二):時間控制和賦值語句 2. 第
4、二種形式的延時控制語句第二種形式的延時控制語句在“”后面沒有出現(xiàn)任何行為語句,而只有一個語句結束符號“;”。仿真進程在遇到這條延時控制語句后不執(zhí)行任何操作,而是進入一種等待狀態(tài),等到過了由“”所指定的時間量后仿真流程,結束這條延時控制語句的執(zhí)行。這種形式的延時語句出現(xiàn)在串行塊和并行塊中時產(chǎn)生的作用是不同的,下面我們舉例說明。第6章 行為描述(二):時間控制和賦值語句 【例例6-2】第二種形式的延時控制語句使用于串行塊。module clk_gen(clk);output clk;reg clk;initial begin /串行塊clk=0; /語句S1#10 clk = 1; /語句S2#1
5、0 ; /語句S3#10 clk = 0; /語句S4#30 clk = 1; /語句S5endendmodule第6章 行為描述(二):時間控制和賦值語句 表 6.2 例 6-2 仿真時的程序控制流程和輸出信號 clk 的變化情況 時 間 程序控制流程 輸出 clk 0 進入串行塊,然后進入 S1, 退出 S1 后進入 S2 0 10 退出 S2, 進入 S3(進入延時) 1 20 (延時結束)退出 S3, 進入 S4 不變,仍為 1 30 退出 S4,進入 S5 0 60 退出 S5,退出串行塊 1 第6章 行為描述(二):時間控制和賦值語句 在例6-2的執(zhí)行中我們可以看出:第二種形式的延
6、時控制語句在串行塊中的作用是使該控制語句后的下一條語句的執(zhí)行時刻延遲了指定的時間量。因此,如下語句:begin#10 ; a=b ; end 將等價于下面這一條語句:#10 a=b; 下面我們給出另一個例子來說明第二種形式的延時控制語句在并行塊中使用的情況。第6章 行為描述(二):時間控制和賦值語句 【例例6-3】第二種形式的延時控制語句使用于并行塊。module clk_gen(clk);output clk;reg clk;initial fork/并行塊clk=0;/語句P1#10 clk = 1;/語句P2#10 ;/語句P3#20 clk = 0;/語句P4#30 clk = 1;/
7、語句P5joinendmodule第6章 行為描述(二):時間控制和賦值語句 程序控制流程是在執(zhí)行時間最長的那條語句(語句P5)執(zhí)行完畢后(t30時刻)才退出fork-join并行塊。表 6.3 例 6-3 所示代碼以及將其修改后的代碼在進行仿真時的執(zhí)行情況 時間 程序控制流程(修改前) 輸出 clk(修改前) 程序控制流程(修改后) 輸出 clk(修改后) 0 同時進入 P1P5,退出 P1 0 同時進入 P1P5,退出 P1 0 10 同時退出 P2,P3 1 退出 P2 1 20 退出 P4 0 退出 P4 0 30 退出 P5,退出并行塊 1 退出 P5 1 40 已離開并行塊 退出
8、P3,然后退出并行塊 不變,仍為 1 第6章 行為描述(二):時間控制和賦值語句 ”這一項還可以是一個變量或表達式,而不必將其局限于某一立即數(shù),比如:initialbegin : SEQ_1parameter DELAY_TIME=50 ;#DELAY_TIME out_1=0; /第一條賦值語句#(DELAY_TIME / 2) out_2=1; /第二條賦值語句end第6章 行為描述(二):時間控制和賦值語句 當“”是由一個變量或由一個表達式表示時,有可能出現(xiàn)該變量或表達式的值為負值以及取值為x或z的情況。Verilog語法規(guī)定:如果代表延時時間的變量或表達式的值為x或z,那么該延時控制等
9、效于零時延控制;如果代表延時時間的變量或表達式的值為負值,則以該負值的二進制補碼值作為實際的延時量。第6章 行為描述(二):時間控制和賦值語句 6.1.2 邊沿觸發(fā)事件控制邊沿觸發(fā)事件控制事件控制方式是時間控制的另一種方式。在這種時間控制方式下,行為語句的執(zhí)行需要由指定事件的發(fā)生來觸發(fā),該事件被稱為“觸發(fā)事件”。在always語句塊格式中所使用的敏感事件列表就是一種事件控制。事件控制方式不僅能用于always語句塊,而且還可以用于其它的行為語句。事件控制方式又可以進一步分成兩類:邊沿觸發(fā)事件控制和電平敏感事件控制。第6章 行為描述(二):時間控制和賦值語句 1. 邊沿觸發(fā)事件控制邊沿觸發(fā)事件控
10、制這一類時間控制方式在指定的信號變化時刻,也就是在指定的信號的跳變邊沿才觸發(fā)語句的執(zhí)行;而當信號處于穩(wěn)定狀態(tài)時則不會觸發(fā)語句的執(zhí)行。邊沿觸發(fā)事件控制的語法格式可以為如下幾種:第一種: () 行為語句;第二種: () ; 第三種: ( or or or) 行為語句;第四種: ( or or or) ; 第6章 行為描述(二):時間控制和賦值語句 符號“”是邊沿觸發(fā)事件控制的標識符,“事件表達式”代表著觸發(fā)語句執(zhí)行的觸發(fā)事件;而“行為語句”則指出了觸發(fā)事件所要觸發(fā)執(zhí)行的具體操作。第6章 行為描述(二):時間控制和賦值語句 1) 事件表達式事件表達式可以是如下三種形式之一: 。 posedge 。
11、negedge 。其中,“”可以是任何數(shù)據(jù)類型的標量或矢量。(1) 第一種事件表達式形式:代表的觸發(fā)事件是“”所指定的信號發(fā)生了某種邏輯變化。它是信號除了保持穩(wěn)定態(tài)以外的任意一種變化過程。比如語句: (reg_a) reg_b=reg_a;第6章 行為描述(二):時間控制和賦值語句 (2) 第二種事件表達式形式:在“”前面加上了一個關鍵詞“posedge”。這種形式代表的觸發(fā)事件是“”所指定的信號發(fā)生了正跳變。所謂“正跳變”就是發(fā)生如下邏輯轉換中的一種:0 x0z01x1z1比如語句: (posedge reg_a) reg_b=reg_a;第6章 行為描述(二):時間控制和賦值語句 (3)
12、第三種事件表達式形式:在“”前面加上了一個關鍵詞“negedge”。這種形式代表的觸發(fā)事件是“”所指定的信號發(fā)生了負跳變。所謂“負跳變”就是發(fā)生如下邏輯轉換中的一種:1x1z10 x0z0比如語句: (negedge reg_a) reg_b=reg_a;第6章 行為描述(二):時間控制和賦值語句 2) 語法格式(1) 邊沿觸發(fā)事件控制的第一種語法格式: () 行為語句;這種語法格式的敏感事件列表內只包含了一個觸發(fā)事件,只有當這個指定的觸發(fā)事件發(fā)生之后,后面的行為語句才能啟動執(zhí)行;在仿真進程中遇到這種帶有事件控制的行為語句時,如果指定的觸發(fā)事件還沒有發(fā)生,則仿真進程就會停留在此處等待,直到指定
13、觸發(fā)事件發(fā)生之后再啟動執(zhí)行后面的行為語句,仿真進程繼續(xù)向下進行。第6章 行為描述(二):時間控制和賦值語句 【例例6-4】時鐘脈沖計數(shù)器。module clk_counter(clk,count_out);input clk,output count_out;reg 3:0 count_out;initial count_out=0; /給count_out賦初值0always ( posedge clk ) count_out=count_out+1;/在clk的每個正跳變邊沿count_out增加1endmodule第6章 行為描述(二):時間控制和賦值語句 (2) 邊沿觸發(fā)事件控制的第二
14、種語法格式: () ; 這種語法格式與前面的第一種語法格式一樣只指定了一個觸發(fā)事件,但是在這種格式中沒有行為語句來指定觸發(fā)事件發(fā)生時要執(zhí)行的操作。第6章 行為描述(二):時間控制和賦值語句 【例例6-5】用于測定輸入時鐘正電平,負電平持續(xù)時間以及時鐘周期的模塊。module clk_time_mea(clk );input clk;time pos_edge_time,neg_edge_time;time high_last_time,low_last_time,last_time;initial begin (posedge clk) ; /* 等待,直到時鐘發(fā)生正跳變后退出等待狀態(tài),繼續(xù)執(zhí)
15、行下一條語句 */pos_edge_time=$time; (negedge clk) ; /* 等待,直到時鐘發(fā)生負跳變后退出等待狀態(tài),繼續(xù)執(zhí)行下一條語句 */neg_edge_time=$time;第6章 行為描述(二):時間控制和賦值語句 (posedge clk) ; /* 等待,直到時鐘再次正跳變后退出等待狀態(tài),繼續(xù)執(zhí)行下一條語句 */last_time=$time- pos_edge_time ;high_last_time= neg_edge_time pos_edge_time ;low_last_time= last_time- high_last_time;$display
16、(“The clk stay in High level for:%t”,high_last_time );$display(“The clk stay in Low level for:%t”,low_last_time );$display(The clk signal Period is :%t,last_time ); endendmodule 第6章 行為描述(二):時間控制和賦值語句 (3) 邊沿觸發(fā)事件控制的第三種語法格式: ( or or or ) 行為語句; 只要這些觸發(fā)事件中的任何一個得到發(fā)生,就啟動行為語句的執(zhí)行。【例例6-6】邊沿觸發(fā)事件控制語句的例子。 initial
17、 begin a=1; (posedge clk1 or negedge clk2 or b) a=b; end第6章 行為描述(二):時間控制和賦值語句 (4) 邊沿觸發(fā)事件控制的第四種語法格式: ( or or or ) ;仿真進程在遇到這條事件控制語句后會進入等待狀態(tài),直到敏感事件列表所包含的多個觸發(fā)事件中的任何一個得到發(fā)生后才結束等待狀態(tài),退出該事件控制語句并開始執(zhí)行該事件控制語句后的下一條語句。第6章 行為描述(二):時間控制和賦值語句 【例例6-7】連續(xù)監(jiān)測信號a或b發(fā)生變化的時間。module display_information_of_change(a,b);input a,
18、b;wire a,b;always /always過程塊,重復進行監(jiān)測 begin (a or b ); /* 等待,直到a或b發(fā)生變化后退出等待狀態(tài), 并開始下一條語句的執(zhí)行 */ $display (One of a and b changed in time:%t,$time); endendmodule第6章 行為描述(二):時間控制和賦值語句 例6-7中begin-end串行塊內的兩條語句可以用如下一條語句替換: (a or b ) $display (One of a and b changed in time:%t,$time) ; 第6章 行為描述(二):時間控制和賦值語句 2
19、. 敏感事件列表在敏感事件列表在always過程塊中的使用過程塊中的使用always過程塊可以帶有事件控制。帶有事件控制的always過程塊既可以實現(xiàn)組合邏輯又可以實現(xiàn)時序邏輯;在用于實現(xiàn)這兩種不同邏輯功能種類時,always過程塊內的敏感事件列表會具有不同的特點。下面分別加以討論。1) 用always過程塊實現(xiàn)組合邏輯功能 (1) 事件表達式內不能包含“posedge”和“negedge”關鍵詞。 。 因為組合邏輯電路的輸出是由輸入電平所決定的,輸入不同的跳變方式對輸出不會產(chǎn)生任何影響,因此敏感事件列表中的事件表達式不能是其余兩種對跳變邊沿加以指定的形式。 第6章 行為描述(二):時間控制和
20、賦值語句 (2) 組合邏輯的所有輸入信號都要作為“”出現(xiàn)在敏感事件列表中。組合邏輯電路的輸入輸出關系在每個時刻都應該是嚴格成立的,也就是說,無論什么時刻輸入發(fā)生了變化,在輸出端都應該立即有反應。第6章 行為描述(二):時間控制和賦值語句 【例例6-8】不能正確實現(xiàn)三輸入與門的模塊。module three_input_and(a,b,c,out);input a,b,c ; /三個輸入a,b,coutput out;reg out;always (a or b) /敏感事件列表中只包含了兩個輸入: a,b begin out=a & b & c; endendmodule第6章 行為描述(二)
21、:時間控制和賦值語句 【例例6-9】正確實現(xiàn)三輸入與門的模塊。module three_input_and (a,b,c,out);input a,b,c ; /三個輸入a,b,coutput out;reg out;always (a or b or c) /敏感事件列表中包含了所有輸入 begin out=a & b & c; endendmodule第6章 行為描述(二):時間控制和賦值語句 【例例6-10】利用敏感事件列表來對組合邏輯建模。module selective_adder_and_multiplier(a,b,sel,y);input a,b,sel;output y;wi
22、re3:0 a,b;reg7:0 y;always (a or b or sel) begin if (sel=0) y = a + b; else if(sel=1) y = a * b; endendmodule第6章 行為描述(二):時間控制和賦值語句 2) 用always過程塊實現(xiàn)時序邏輯功能(1) 事件表達式可以是事件表達式三種形式中的任何一種,也就是說所采用的事件表達式既可以是帶有“posedge”或“negedge”關鍵詞,也可以是只包含“信號名” 的事件表達式。 (2) 不要求所有的輸入信號都出現(xiàn)在敏感事件列表的“信號名”中。這是由于時序邏輯電路邏輯狀態(tài)的改變只發(fā)生在某個或某幾
23、個時鐘輸入信號的變化邊沿,而在其它輸入信號發(fā)生變化時電路邏輯狀態(tài)保持不變。第6章 行為描述(二):時間控制和賦值語句 【例例6-11】時鐘下降沿觸發(fā)的D觸發(fā)器。module d_ff(q,clk,d);input clk,d;output q;reg q;always ( negedge clk) begin q=d; endendmodule 第6章 行為描述(二):時間控制和賦值語句 【例例6-12】同時由兩個時鐘沿:clk1上升沿和clk2下降沿進行控制的8位移位寄存器。module 8bits_shift_register(d_in,d_out,clk1,clk2);input clk
24、1,clk2,d_in;output d_out;reg d_out; /d_out保存1bitreg1:7 data; / reg1:7保存其余7bitsreg1:4 i ; / i用于循環(huán)計數(shù)always ( posedge clk1 or negedge clk2) begin d_out=data1; for ( i=1;i7;i=i+1) datai=datai+1; data7=d_in; endendmodule第6章 行為描述(二):時間控制和賦值語句 3) always過程塊實現(xiàn)組合和時序混合的邏輯功能可以在一個模塊中建立多個并行結構來實現(xiàn)。用一個或多個帶有事件控制的alwa
25、ys過程塊來實現(xiàn)時序邏輯部分的功能;再用連續(xù)賦值語句或另外一個(或多個)always過程塊來實現(xiàn)組合邏輯部分功能。在組合邏輯和時序邏輯混合的情況下,模塊邏輯狀態(tài)和輸出發(fā)生變化時刻要同時受時鐘信號跳變沿和某些輸入控制信號的控制,典型的例子是帶有異步置位(清零)控制輸入的時鐘邊沿觸發(fā)器。比如一個帶有異步清零控制輸入位clr的時鐘上升沿T觸發(fā)器,其輸入輸出真值表如表6.4所示。第6章 行為描述(二):時間控制和賦值語句 第6章 行為描述(二):時間控制和賦值語句 【例例6-13】帶有異步清零位clr(高電平有效)的時鐘上升沿T觸發(fā)器。module asyn_clear_Tff(clk,clr,t,q
26、);input clk,clr,t;output q;reg q;always (posedge clk or posedge clr) begin if(clr=1) q=0; else if(t=1) q=q; endendmodule第6章 行為描述(二):時間控制和賦值語句 可以看出:在實現(xiàn)組合和時序混合邏輯時,always語句的敏感事件列表內要包含時序邏輯部分的時鐘信號以及組合邏輯部分的輸入控制信號。雖然可以利用一個always過程塊來實現(xiàn)組合邏輯功能或者混合的邏輯功能,但必須注意到always過程塊主要是為了對時序邏輯建模而引入的一種描述方式。所以在實際硬件設計工作中應該盡量使用結
27、構描述方式(連續(xù)賦值語句、模塊實例、原語實例等語句)來描述組合邏輯,這樣可以使綜合后的結果更加接近實際硬件的結構。第6章 行為描述(二):時間控制和賦值語句 6.1.3 電平敏感事件控制電平敏感事件控制(wait語句語句)與邊沿觸發(fā)事件控制不同,在電平敏感事件控制方式下啟動語句執(zhí)行的觸發(fā)條件是某一個指定的條件表達式為真。電平敏感事件控制用關鍵詞“wait”來表示。它可以有如下三種形式: wait (條件表達式) 語句塊; wait (條件表達式) 行為語句; wait (條件表達式);第6章 行為描述(二):時間控制和賦值語句 在這種事件控制語句形式下,語句塊啟動執(zhí)行的觸發(fā)條件是:條件表達式的
28、值為“真(邏輯1)”。如果當仿真進程執(zhí)行到這條電平敏感事件控制語句時條件表達式的值是“真”,那么語句塊立即得到執(zhí)行;否則語句塊要一直等到條件表達式變?yōu)椤罢妗睍r再開始執(zhí)行。比如如下語句: wait (enable=1) begin d=a & b; d=d | c; end第6章 行為描述(二):時間控制和賦值語句 電平敏感事件控制的第二種形式中包含了一條行為語句,在這種事件控制語句形式下,行為語句啟動執(zhí)行的觸發(fā)條件與前面第一種形式下的觸發(fā)條件相同。兩者之間惟一不同之處在于:這里啟動的是一條行為語句的執(zhí)行,而在第一種形式下啟動的是一個語句塊的執(zhí)行。比如:wait (enable=1) d= (a
29、&b) | c ;第6章 行為描述(二):時間控制和賦值語句 第三種形式中沒有包含行為語句或語句塊。如果當仿真進程執(zhí)行到該wait控制語句時條件表達式的值是“真”,那么立即結束該wait事件控制語句的執(zhí)行,仿真進程繼續(xù)往下進行;而如果當仿真進程執(zhí)行到這條wait控制語句時條件表達式的值不是“真”,則仿真進程進入等待狀態(tài),一直等到條件表達式取值變?yōu)椤罢妗睍r才退出等待狀態(tài)同時結束該wait語句的執(zhí)行,仿真進程繼續(xù)進行。 這種形式的電平敏感事件控制常常用來對串行塊中各條語句的執(zhí)行時序進行控制。beginwait (enable=1);d=a&b;d=d | c;end第6章 行為描述(二):時間控制
30、和賦值語句 注意這種形式的wait語句在串行結構(串行塊)中才能實現(xiàn)時序控制功能。在使用電平敏感事件控制語句(wait語句)時,要注意體會它與上一小節(jié)所介紹的“邊沿觸發(fā)事件控制”的區(qū)別:以“”開頭的邊沿觸發(fā)事件控制只對信號的跳變邊沿敏感,它給出的觸發(fā)事件是指定的信號跳變邊沿;以“wait”開頭的電平敏感事件控制只對信號的電平敏感,它給出的觸發(fā)事件是指定的信號穩(wěn)定邏輯狀態(tài)。第6章 行為描述(二):時間控制和賦值語句 【例例6-14】電平敏感事件控制與邊沿觸發(fā)事件控制的比較。module level_and_edge_sensitive_compare( flag1,flag2 );output
31、flag1,flag2;reg enable,flag1,flag2;initial /第一個initial過程塊,用于產(chǎn)生enable信號 begin flag1=1; flag2=1; enable=1; #10 enable=0; #10 enable=1; #10 $finish; end第6章 行為描述(二):時間控制和賦值語句 initial /第二個initial過程塊,用于實現(xiàn)電平敏感事件控制 begin #10 ; wait(enable=1) flag1=flag1;/若觸發(fā)條件成立,flag1翻轉 endinitial /第三個initial過程塊,用于實現(xiàn)邊沿觸發(fā)事件控
32、制 begin #10 ; (posedge enable) flag2=flag2;/若觸發(fā)條件成立,flag2翻轉 endendmodule 第6章 行為描述(二):時間控制和賦值語句 圖6.1 例6-14所示模塊仿真執(zhí)行時產(chǎn)生的波形第6章 行為描述(二):時間控制和賦值語句 6.2 賦賦 值值 語語 句句6.2.1 過程賦值語句的基本格式過程賦值語句的基本格式 在過程塊中只能使用過程賦值語句,同時過程賦值語句也只能用在過程塊中。過程賦值語句的基本格式為: 其中是“=”或“=”之一,它們分別代表了阻塞型賦值和非阻塞型賦值類型。第6章 行為描述(二):時間控制和賦值語句 過程賦值語句只能用于
33、對寄存器類的變量(寄存器reg、整型integer、實型real或時間型time變量)進行賦值操作。在經(jīng)過過程賦值后,上面的這些變量的取值將保持不變,直到另一條過程賦值語句對變量重新賦值為止。過程賦值操作的具體目標可以是:(1) reg,integer,real,time型變量(標量或矢量)。(2) 上述類型變量的某一位或某幾位(在矢量情況下)。(3) 存儲器類,只能對某地址單元的整個字進行賦值,不能對其中某些位單獨進行賦值。(4) 上述幾個變量用連接運算符“,”拼接起來構成的寄存器整體。第6章 行為描述(二):時間控制和賦值語句 【例例6-15】過程賦值語句賦值操作的各種目標變量形式。reg
34、 a;reg 0:7 b;integer i;reg0:7 mem_10:1023 ;initialbegina=0;/對一個1位寄存器a賦值i=356;/對一個整型變量i賦值b2=1b1;/對8位寄存器b的第3位賦值b0:3=4b1111;/對8位寄存器b的前4位賦值mem_1200=8hfd;/對存儲器mem_1的第201個存儲單元進行賦值a,b=9b101110110;/對用連接運算符構成的一個整體進行賦值end 第6章 行為描述(二):時間控制和賦值語句 過程賦值語句右端的賦值表達式可以是任何合法的表達式。比如: reg c; #10 c=a&(b);根據(jù)對被賦值變量產(chǎn)生作用的優(yōu)先級差
35、別,可以將過程賦值語句分為如下兩種類型: 普通過程賦值語句(簡稱過程賦值語句)。 過程連續(xù)賦值語句。其中普通過程賦值語句又可以根據(jù)賦值操作執(zhí)行時的不同時序特點分成阻塞型過程賦值語句和非阻塞型過程賦值語句。第6章 行為描述(二):時間控制和賦值語句 6.2.2 過程賦值的兩種延時方式過程賦值的兩種延時方式各種過程賦值語句都可以帶有時間控制,過程賦值語句中可以出現(xiàn)延時控制形式的時間控制和事件控制形式的時間控制。根據(jù)時間控制部分在過程賦值語句中出現(xiàn)的位置,可以把過程賦值語句中的時間控制方式分為如下兩類: 外部時間控制方式。 內部時間控制方式。第6章 行為描述(二):時間控制和賦值語句 1. 外部時間
36、控制方式外部時間控制方式如果時間控制部分出現(xiàn)在整個過程賦值語句的最左端,也就是出現(xiàn)在賦值目標變量的左邊,那么這種時間控制方式就是外部時間控制方式。在外部時間控制方式下,過程賦值語句在仿真時是這樣執(zhí)行的:仿真進程遇到這條帶有時間控制的過程賦值語句后,首先要延遲等待由時間控制部分指定的延時時間量,或者是要等待到指定觸發(fā)事件發(fā)生后,才開始計算右端的賦值表達式并將其取值賦給左端被賦值變量。比如語句:#5 a=b; 第6章 行為描述(二):時間控制和賦值語句 在仿真執(zhí)行時就相當于如下幾條語句的執(zhí)行:initial begin #5; /先延時 a=b; /再求b值并將其賦值給a end第6章 行為描述(
37、二):時間控制和賦值語句 【例例6-16】外部時間控制方式。module timing_control_out_mode(b,c,d,clk,enable);input clk,enable;output b,c,d;reg b,c,d;initial /此過程塊用于對輸出進行初始化 fork b=0; c=0; d=0; join第6章 行為描述(二):時間控制和賦值語句 initial /此過程塊用于對輸出進行賦值,其中包含了外部時間控制 fork #5 b=b; /語句S1 (posedge clk) c=c; /語句S2 wait (enable) d=d; /語句S3 joinend
38、module第6章 行為描述(二):時間控制和賦值語句 圖6.2 例6-16模塊在進行仿真時的輸入輸出波形t403530201050dcbenableclk第6章 行為描述(二):時間控制和賦值語句 在外部時間控制方式下還有一種特殊情況,那就是當外部時間控制所指定的延時時間為零時的情況,我們稱這種情況下的時間控制為“顯式零延時控制”。 #0 a=b;上面這條語句的執(zhí)行過程與不具有延時控制的賦值語句“a=b;”的執(zhí)行過程是很相似的:在語句開始執(zhí)行后,它們都是首先計算表達式b 的取值,再對變量a進行賦值;同時兩條語句的開始執(zhí)行時刻、表達式計算時刻和變量賦值時刻都是相同的。第6章 行為描述(二):時
39、間控制和賦值語句 但是,上面這條語句在執(zhí)行時序上還是與語句“a=b;”的執(zhí)行時序存在著微妙的差別:在顯示零延時控制下,賦值語句內賦值表達式的計算以及變量的賦值操作是在當前仿真時刻的末尾進行的,也就是說要等到這一時刻其它正常操作完成后才進行的。而賦值語句“a=b;”內的表達式計算和變量賦值操作則是在賦值語句開始執(zhí)行后立即進行的,并不需要等待同一時刻的其它操作完成后才進行。比如如下語句:initial begin a = 0; /語句S1 b = 0; /語句S2 endinitial begin #0 a = 1; /語句S3 #0 b = 1; /語句S4 end第6章 行為描述(二):時間控
40、制和賦值語句 2. 內部時間控制方式內部時間控制方式時間控制部分出現(xiàn)在“賦值操作符”和“賦值表達式”之間。這種情況下的時間控制稱為“內部時間控制方式”。在內部時間控制方式下,過程賦值語句是這樣執(zhí)行的:仿真進程遇到帶有內部時間控制的過程賦值語句后,立即計算賦值語句中“賦值表達式”的值,然后進入時間控制部分指定的等待狀態(tài),一直等到指定的延時時間量過去之后或者是指定的觸發(fā)事件得到發(fā)生之后再將賦值表達式的取值賦給左端的被賦值變量。比如語句: a = #5 b;第6章 行為描述(二):時間控制和賦值語句 它在執(zhí)行時就相當于如下幾條語句的執(zhí)行:initialbegintemp=b; /先求b的值#5; /
41、再延時a=temp; /延時結束后再進行賦值操作end第6章 行為描述(二):時間控制和賦值語句 【例例6-17】過程賦值語句中的內部時間控制方式。module timing_control_inner_mode(a,b,c,d,clk,enable);input a,clk,enable;output b,c,d;reg b,c,d;initial /此過程塊用于對輸出進行初始化 fork b=0; c=0; d=0; join第6章 行為描述(二):時間控制和賦值語句 initial /此模塊用于對輸出進行賦值,其中包含了內部時間控制 fork b=#5 a; /語句S1 c=(posed
42、ge clk) a ; /語句S2 d= wait (enable) a ; /語句S3 joinendmodule第6章 行為描述(二):時間控制和賦值語句 圖6.3 例6-17所示模塊在進行仿真時的輸入輸出波形t4030201050dcbenableclka第6章 行為描述(二):時間控制和賦值語句 6.2.3 阻塞型過程賦值阻塞型過程賦值以賦值操作符“”來標識的賦值操作稱為“阻塞型過程賦值(Blocking Assign-ment)”。阻塞型過程賦值語句特點如下:(1) 串行塊(begin-end語句塊)中的各條阻塞型過程賦值語句將以它們在順序塊中的先后排列次序依次得到執(zhí)行;而fork-
43、join并行塊中的各條阻塞型過程賦值語句則是同時得到執(zhí)行的。第6章 行為描述(二):時間控制和賦值語句 (2) 阻塞型過程賦值語句的執(zhí)行過程是:首先計算右端賦值表達式的取值,然后立即將計算結果賦值給“=”左端的被賦值變量。阻塞型過程賦值的這兩個特點表明:仿真進程在遇到阻塞型過程賦值語句時將計算表達式的值并立即將其結果賦給等式左邊的被賦值變量;在串行語句塊中,下一條語句的執(zhí)行會被本條阻塞型過程賦值語句所阻塞,只有在當前這條阻塞型過程賦值語句所對應的賦值操作執(zhí)行完畢后下一條語句才能開始執(zhí)行。第6章 行為描述(二):時間控制和賦值語句 initialbegina=0; /語句S1a=1; /語句S2
44、end第6章 行為描述(二):時間控制和賦值語句 【例例6-18】阻塞型過程賦值語句帶有延時控制時的情況。initialbegina=0; /語句S1a=#5 1; /語句S2a=#10 0; /語句S3a=#15 1; /語句S4end第6章 行為描述(二):時間控制和賦值語句 圖6.4 帶有延時控制的阻塞型過程賦值產(chǎn)生的波形t302015100a5initial過程塊執(zhí)行時間段第6章 行為描述(二):時間控制和賦值語句 6.2.4 非阻塞型過程賦值非阻塞型過程賦值以賦值操作符“=”來標識的賦值操作稱為“非阻塞型過程賦值(Nonblocking Assignment)”。非阻塞型過程賦值語句
45、的特點是:(1) 在begin-end串行語句塊中,一條非阻塞型過程賦值語句的執(zhí)行不會阻塞下一條語句的執(zhí)行,也就是說在本條非阻塞型過程賦值語句對應的賦值操作執(zhí)行完畢之前,下一條語句也可以開始執(zhí)行。第6章 行為描述(二):時間控制和賦值語句 (2) 仿真進程在遇到非阻塞型過程賦值語句后首先計算其右端賦值表達式的值,然后要等到當前仿真時間步結束時再將該計算結果賦值給賦值變量。為了了解非阻塞型過程賦值語句的上述兩個特點,我們可以觀察如下語句:initialbeginA = B; /語句S1B = A; /語句S2end第6章 行為描述(二):時間控制和賦值語句 如果非阻塞型過程賦值語句帶有外部延時控
46、制,則它的執(zhí)行相當于在指定的延時之后執(zhí)行一條不帶時間控制的非阻塞型過程賦值語句。并且這條非阻塞型過程賦值語句不會阻塞其后面語句的執(zhí)行。第6章 行為描述(二):時間控制和賦值語句 【例例6-19】帶有外部延時控制的非阻塞型過程賦值語句。initial /過程塊1begin#5 a = b; /語句S1#10 c = d; /語句S2end第6章 行為描述(二):時間控制和賦值語句 上面的過程塊1相當于如下的過程塊2:initial /過程塊2fork begin /語句塊1 #5; a=b; end begin /語句塊2 #10; c=d; endjoin第6章 行為描述(二):時間控制和賦值
47、語句 圖6.5 帶有外部延時控制的非阻塞型過程賦值語句的執(zhí)行時序t151005abcd第6章 行為描述(二):時間控制和賦值語句 如果非阻塞型過程賦值語句帶有內部延時控制,則仿真進程在遇到這種賦值語句后將立即計算語句右端賦值表達式的值,然后進入延時控制部分所指定的等待狀態(tài),直到退出等待狀態(tài)時刻所在時間步的末尾才執(zhí)行賦值操作,將已計算得到的賦值表達式結果值賦給被賦值變量。例如如下語句:a=#10 b;就是一條帶有內部延時控制的非阻塞型過程賦值語句。在開始執(zhí)行這條語句后,首先立即計算賦值表達式“b”的值(在t0時刻),然后等待10個單位時間的延時量,一直等到延時結束時刻(t=10時刻)所在時間步的
48、末尾才將計算得到的賦值表達式取值結果賦給變量a。第6章 行為描述(二):時間控制和賦值語句 【例例6-20】非阻塞型過程賦值語句帶有延時控制的情況。initial begin a = 0; /語句S1 a = #5 1; /語句S2 #10 a = 0; /語句S3 a =#25 1; /語句S4 end第6章 行為描述(二):時間控制和賦值語句 圖6.6 帶有延時控制的非阻塞型過程賦值產(chǎn)生的波形2520initial過程塊執(zhí)行時間段t151005a第6章 行為描述(二):時間控制和賦值語句 【例例6-21】同時使用阻塞型過程賦值語句和非阻塞型過程賦值語句。reg a,b,c;initial
49、begin a=0; /語句S1 a=1; /語句S2 b=a; /語句S3 #5; /等待一定的時延 c=a; /語句S4 end第6章 行為描述(二):時間控制和賦值語句 6.2.5 連續(xù)賦值語句連續(xù)賦值語句Verilog HDL語言中的連續(xù)賦值語句與過程塊一樣也是一種行為描述語句。它主要用來對組合邏輯電路的行為進行描述。連續(xù)賦值語句只能用來對連線型變量進行驅動(賦值),而不能對寄存器型變量進行賦值,它可以采取如下兩種格式:(1) 顯式連續(xù)賦值語句:連線型變量類型 連線型變量位寬 連線型變量名;assign #(延時量) 連線型變量名 = 賦值表達式;第6章 行為描述(二):時間控制和賦值
50、語句 (2) 隱式連續(xù)賦值語句:連線型變量類型(賦值驅動強度)連線型變量位寬 #(延時量) 連線型變量名= 賦值表達式;第6章 行為描述(二):時間控制和賦值語句 “延時量”的基本格式如下:#(delay1,delay2,delay3)其中delay1,delay2和delay3都是一個數(shù)值,其中的“delay1”指明了連線型變量轉移到“1”狀態(tài)時的延時值(稱為上升延時);“delay2”指明了連線型變量轉移到“0”狀態(tài)時的延時值(稱為下降延時);“delay3”指明了連線型變量轉移到“高阻(z)”狀態(tài)時的延時值(稱為關斷延時)。在實際使用中“延時量”也可以省略為由一個或二個延時值構成,這種情
51、況下三種延時值(“上升延時值”、“下降延時值”和“關斷延時值”)的確定準則是: 若只給出一個延時值,則這個延時值將同時代表“上升延時值”、“下降延時值”和“關斷延時值”。第6章 行為描述(二):時間控制和賦值語句 如果只給出了兩個延時值,那么這兩個延時值將分別代表“上升延時值”和“下降延時值”,而“關斷延時值”將由給出的兩個延時值中較小的那一個指定。 如果“延時量”這一項缺省,則默認所有的延時值都為0?!百x值表達式”內可以包含連線型、寄存器或函數(shù)調用等任何數(shù)據(jù)類型的操作數(shù),同時也可以包含任何操作符。例6-22給出了一個顯式連續(xù)賦值語句的例子。第6章 行為描述(二):時間控制和賦值語句 【例例6
52、-22】顯式連續(xù)賦值語句。module and_cont_assignment (z,x,y);input 3:0 x,y;output 3:0 z; wire 3:0 z, x, y; / 連線型變量說明assign #(1.5, 1.0, 2.0) z = x & y; /連續(xù)賦值語句endmodule第6章 行為描述(二):時間控制和賦值語句 例6-22中連續(xù)賦值語句的賦值目標是連線型變量z,它的位寬為4位。連續(xù)賦值語句指定用表達式“x & y”的取值對連線型變量z 進行連續(xù)驅動。其中指定的延時量為“(1.5,1.0,2.0)”,它指明了從信號x或y發(fā)生變化時刻到變量z被更新時刻之間的延
53、時時間量:上升延時為1.5個時間單位,下降延時為1個時間單位,關斷延時為2個時間單位。連續(xù)賦值語句中并未出現(xiàn)“驅動強度”這一項,所以連線型變量z受到的驅動強度是缺省的“(strong1,strong0)”。例6-23則給出了一個隱式連續(xù)賦值語句的例子,它描述了與例6-22相同的硬件行為。第6章 行為描述(二):時間控制和賦值語句 【例例6-23】隱式連續(xù)賦值語句。module and_cont_assignment(z,x,y);input 3:0 x,y;output 3:0 z; wire 3:0 x, y; / 輸入連線型變量說明wire 3:0 #(1.5,1.0,2.0) z = x
54、 & y; /隱式連續(xù)賦值語句endmodule第6章 行為描述(二):時間控制和賦值語句 在實際使用中,連續(xù)賦值語句的賦值目標可以是如下幾種: (1) 標量連線型變量。如wire a,b;assign a = b;(2) 向量連線型變量。如wire 7:0 a,b;assign a = b;(3) 向量連線型變量中的某一位。如wire 7:0 a,b;assign a3 = b3 ; (4) 向量連線型變量中的某幾位。如: wire 7:0 a,b; assign a3:2 = b3:2;第6章 行為描述(二):時間控制和賦值語句 (5) 上面幾種類型的任意拼接運算結果。如wire a,c;
55、wire 2:1 b;assign a,c = b ;在需要對多個連線型變量進行連續(xù)賦值時,還可以采用如下形式的連續(xù)賦值語句,它可以實現(xiàn)對多個變量進行連續(xù)賦值:assign out_and = a&b;out_or = a|b;out_xor = ab;out_not_a = a;out_not_b = b;第6章 行為描述(二):時間控制和賦值語句 上述語句是下面5條獨立的連續(xù)賦值語句的簡化形式:assign out_and = a&b;assign out_or = a|b;assign out_xor = ab;assign out_not_a = a;assign out_not_b
56、= b;正如“連續(xù)賦值”這一名稱所表述的含義,連續(xù)賦值語句對連線型變量(wire)進行的是連續(xù)的驅動。與寄存器型變量類型不同,連線型變量(除了trireg類型外)沒有數(shù)據(jù)保持能力,只有在被連續(xù)驅動后才能取得確定值(而寄存器型變量只要在某一時刻得到一次過程賦值后就能一直保持其取值),若一個連線型變量沒有得到任何連續(xù)驅動則它的取值將為不定態(tài)“x”。連續(xù)賦值就是實現(xiàn)對連線型變量進行連續(xù)驅動的一種方法(還有一種進行連續(xù)驅動的方法是由某個模塊輸出端來對連線型變量進行驅動,這歸類于結構描述方式)。第6章 行為描述(二):時間控制和賦值語句 一個連線型變量一旦被連續(xù)賦值語句賦值后,賦值語句右端賦值表達式的值
57、將始終對被賦值連線型變量產(chǎn)生驅動(連續(xù)驅動)。在仿真執(zhí)行時,只要右端賦值表達式內的任一操作數(shù)發(fā)生變化,就會立即觸發(fā)對被賦值連線型變量的更新操作:重新計算賦值表達式的取值,然后將計算得到的結果賦值給被賦值連線型變量。也就是說賦值表達式內各個信號的變化將隨時被反映到賦值表達式和被賦值變量的取值上。比如例6-24所示的模塊實現(xiàn)了用輸入信號a,b的“按位或”運算結果對連線型變量c進行連續(xù)驅動。a或b在任意時刻發(fā)生的變化將立即被反映到變量c的取值上。例6-24所示模塊和例6-25所示的用過程賦值語句描述的模塊是等價的。第6章 行為描述(二):時間控制和賦值語句 【例例6-24】連續(xù)賦值語句的例子。mod
58、ule or_by_cont_assignment(c,a,b);input a,b;output c;assign c=a|b;endmodule第6章 行為描述(二):時間控制和賦值語句 【例例6-25】與例624等價的描述。module or_by_proc_assignment(c,a,b);input a,b;output c;reg c;initial/initial過程塊用于對c賦初值beginc=x;endalways (a or b)/always過程塊用于更新c的取值c=a|b;endmodule第6章 行為描述(二):時間控制和賦值語句 在仿真執(zhí)行時,例6-25所示模塊中
59、的always過程塊將對輸入a和b進行監(jiān)測,每當a或b的取值發(fā)生變化時,過程賦值語句都將通過always的循環(huán)控制,啟動一次對c的賦值操作過程; 而當a和b的取值沒有發(fā)生變化時,always過程塊內的語句得不到執(zhí)行,輸出c將保持原有取值。所以例6-25描述的硬件行為特征是與例6-24所描述的行為特征相一致的。但這種描述方式顯然沒有例6-24中的描述那么簡單明了。如果連續(xù)賦值語句帶有延時(#delay),則在仿真執(zhí)行時,只要右端賦值表達式中的任一信號發(fā)生變化,都將立即對賦值表達式進行重新計算,然后進入延時等待狀態(tài),等到指定的延時時間過去后再將計算得到的賦值表達式取值結果賦值給被賦值連線型變量。第
60、6章 行為描述(二):時間控制和賦值語句 例如,下面這條連續(xù)賦值語句:assign #5 a = b; 指定的驅動方式就是:當b的值發(fā)生變化時,立即對賦值表達式“b”的取值進行計算(也就是對b的取值進行采樣,但不是立即將其賦值給a),然后進入“5”指定的延時等待狀態(tài),直到過了5個時間單位的延時時間后(相對于b值變化時刻的5個單位時間的延時)才對a執(zhí)行賦值操作,賦值表達式取值的計算結果(b發(fā)生變化后的采樣值)賦值給a。圖6.7給出了這條連續(xù)賦值語句在仿真執(zhí)行時的時序圖。第6章 行為描述(二):時間控制和賦值語句 圖6.7 連續(xù)賦值語句“assign #5 a=b;”執(zhí)行時的時序圖ax26t191
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 五年級數(shù)學第二學期滬教版-期末試卷(滬版)
- 一年級數(shù)學第一學期滬教版- 期末試卷 3
- 生活安全 課件
- 2024年湖北省中考數(shù)學真題卷及答案解析
- 課件 頁面大小
- 西京學院《網(wǎng)絡數(shù)據(jù)庫》2022-2023學年期末試卷
- 西京學院《建筑信息模型》2021-2022學年第一學期期末試卷
- 西京學院《機械原理》2021-2022學年第一學期期末試卷
- 西京學院《高等混凝土結構學》2021-2022學年第一學期期末試卷
- 西京學院《單片機原理及應用實驗》2021-2022學年期末試卷
- 醫(yī)院志愿者培訓課件
- 幼兒園中班健康《不一樣的氣味》PPT
- 實習單位鑒定表(模板)
- 生涯決策平衡單
- 機械廠加工車間變電所初步設計
- 六年級上冊道德與法治知識點重點歸納總結
- 危貨運輸企業(yè)安全生產(chǎn)雙體系安全風險分級管控管理制度
- 梁山伯與祝英臺的故事
- Python語言基礎與應用學習通課后章節(jié)答案期末考試題庫2023年
- XXXX年度煤礦機電設備檢修計劃
- 公路水運實驗檢測專業(yè)能力評價考試題庫及答案
評論
0/150
提交評論