第七张行为模型BehavoralModeling

上传人:大米 文档编号:593391512 上传时间:2024-09-24 格式:PPT 页数:44 大小:910.03KB
返回 下载 相关 举报
第七张行为模型BehavoralModeling_第1页
第1页 / 共44页
第七张行为模型BehavoralModeling_第2页
第2页 / 共44页
第七张行为模型BehavoralModeling_第3页
第3页 / 共44页
第七张行为模型BehavoralModeling_第4页
第4页 / 共44页
第七张行为模型BehavoralModeling_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《第七张行为模型BehavoralModeling》由会员分享,可在线阅读,更多相关《第七张行为模型BehavoralModeling(44页珍藏版)》请在金锄头文库上搜索。

1、第第 七七 張張行為模型行為模型(Behavoral Modeling)17.1 結構化程序結構化程序(Structured Procedures)在verilog中有兩個結構化程序:always和initial兩個敘述,這是最基本的敘述,verilog是並行程式語言,執行流也是並行執行的,而且不能有巢狀結構。7.1.1 initial要把將執行的敘述放在initiial敘述,行程initiial區塊,一個區塊啟動程式啟動模擬時間零,且執行一次多個區塊,就要同時啟動模擬時間零,但各自執行。2module stimulues;reg x,y,a,b,m;initial m=1b0; /單一敘述,

2、不需要被群聚。initial begin #5 a=1b1; /多個敘述,需要被群聚。 #25 b=1b0;end範例7-1initial敘述3initialbegin #10 x =1b0; #25 y =1b1;endinitial #50 $finish;endmudule範例7-1initial敘述(續)47.2 程式指定程式指定(Procedural Assignments)程式指定可用來更新暫存器(reg)、整數(integer)、實數(real)或時間(time)變數的值,變數上的值會一直保持到被更新為止。範例簡單的程式指定assignment:=variable_lvalue=

3、delay_or_event_control expression等號右手邊可以是任何一個可求出值的運算式,在行為模式中的運算子,皆能用來當行為模式的運算式。程式指定有兩種型態:阻礙指定(Blocking)與 無阻礙指定(Nonblocking)。57.2.1 阻礙指定阻礙指定(Blocking Assignments)阻礙指定的運算符號是 “=”。範例7-6阻礙指定regx, y, z;reg15:0 reg_a,reg_b;integer count; /所有行為模式敘述,必須在initial或always區塊內。initialbeginx=0;y=1;z=1; /純量指定count=0;

4、 /指定變數至整數變數6reg_a=16b0;reg_b=reg_a; /設定向量初始#15 reg_a2=1b1: /在延遲後選擇位元指定#10 reg_b15:13=x,y,z /指定連結的結果至向量部分指定count=count+1; /指定至一個整數(遞增)end77.2.2 無阻礙指定無阻礙指定(Nonblocking Assignments)無阻礙指定的運算符號是“=” 。reg x,y,z;reg 15:0reg_a,reg_b;integer count; /所有行為模式敘述,必須在initial或always區塊內。initialbeginx=0;y=1;z=1; /純量指定

5、count=0; /指定變數至整數變數範例7-7無限定指定8reg_a=16b0;reg_b=reg_a; /設定向量初始reg_a2 =#15 1b1; /在延遲後選擇位元指定reg_b15:13 =#10 x,y,z; /指定連結的結果,至向量部分指定。count”來觸發,一個觸發的事件是用“”來識別。/當最後的封裝packet資料被接收時,儲存四個封裝資料至資/料緩衝器。event recieved_ data; /定義一個事件recieved_ dataalways (posedge clock) /在正緣觸發時做檢查begin if(last_data_packet) /如果是最後的

6、封裝資料 - recieved_ data; /觸發事件recieved_ data 命名事件控制範例7-14 命名事件控制16endalways (recieved_ data) /直到recieved_ data事件被觸 /發,儲存四個封裝資料至資料 /緩衝器。 data_buf=data_pkt0, data_pkt1, data_pkt2, data_pkt3;17當有多個訊號或事件中,任一個都能觸發某個敘述或多敘述區塊執行,就好像這些訊號或事件做或(OR)的邏輯運算。這些事件或訊號的列表,也稱為感測列表(Sensitivity List),這多個觸發是用關鍵字or來區隔(範例7-15

7、)。 事件或控制/非同步重設位準感測閂always (reset or clock or d) /等待reset、clock或d的數值改變。begin if(reset) /如果reset是高電位,設定q為0。 q=1b0; else if(clock) /如果clock是高電位,鎖住輸入資料。 q=d;end範例7-15 事件或控制187.3.3 位準感測時序控制位準感測時序控制(Level-Sensitive Timing Control)Verilog也允許位準感測時序控制,亦即等到某一個條件變成真(true)值,才執行某個敘述或區塊。位準感測時序控制用關鍵字wait做指定。always

8、 wait (count_enable) #20 count = count +1;範例中,count_enable的值是一直被監控的。如果count_enable是0,這個敘述將不會被執行。如果是1,敘述將在20個時間單位後執行。如果count_enable停在1的位準,則每隔20個間,單位count都會加1。197.4 條件敘述條件敘述(Condition Statements)條件敘述依照條件成立與否,決定是否執行某敘述或執行其他敘述,其關鍵字為if和else。/型1條件敘述,無else敘述,敘述可能被執行,或不被執行。 if (expression), true_statement ;

9、/型2條件敘述,一個else敘述,/true_statement 或 false_statement 其中一個會被執行。If (expression), true_statement;else false_statement;/型3條件敘述,巢狀 if-else-if。/多個敘述擇一,僅有一個敘述被執行。if (expression1) true_statement1 ;else if (), true_statement2 ;else if (), true_statement3 ;else default_statement ;207.5 多路徑分支多路徑分支(Multiway Branc

10、hing)這種巢狀結構的 if-else-if,在過多的選擇時會變的很難處理。此時可以用case敘述來完成相同的結果。7.5.1 case敘述敘述(case Statements)其關鍵字為case、endcase和default。case (expression) alternative1:statement1; alternative2:statement2; alternative3:statement3; . . default:default_statement;endcase217.6 迴圈迴圈(Loops)在Verilng中有四種迴圈敘述:while、for、repeat和for

11、ever。迴圈的語法是與C程式語言相當類似的,而所有的迴圈敘述皆僅能在initial或always的區塊中,其能包含延遲的敘述。7.6.1 while 迴圈迴圈關鍵字為while,while迴圈會一直執行到while條件運算式 (While Expression)成假的時候。若一進入while迴圈時,其條件運算式即是假時,這迴圈就不會執行。每一個條件運算式包含之運算子(Operators),若有多個敘述要在迴圈中執行,它們必須被群聚起來,通常上是使用關鍵字begin和end。227.6.2 for 迴圈迴圈其關鍵字為for。for迴圈包含了三個部份: 初始條件。 判斷終止條件是否為真。 一個可

12、改變控制變數的程序指定。初始狀態和累增程序指定,是包含在for迴圈之中,不需另外去定義它們,所以for迴圈要比while迴圈簡潔。但while迴圈有較廣的用途,for迴圈並不能取代所有的while迴圈。for迴圈一般使用在有固定起始和結束的迴圈,如果迴圈是在某一條件下的簡單迴圈,最好使用while迴圈。237.6.4 forever迴圈迴圈其關鍵字為forever,forever迴圈並未包含任何條件運算式(Expression),會一直執行到遇到$finish,就好像while迴圈的條件運算式永遠為真,例:while(1)。forever迴圈亦可用disable敘述跳出。一般forever迴圈

13、會與時序控制合用,若沒有使用時序控制,則會一直執行迴圈中的敘述,而其他的敘述將都不會被執行到。7.6.3 Repeat 迴圈迴圈關鍵字式repeat,其功用為指定一個固定次數的迴圈。repeat迴圈必須帶一個數值,可以是一個常數、變數或訊號值,而不能是一個邏輯表示式。若其為變數或訊號值時,僅在迴圈剛開始時才被讀取,在迴圈執行期間並不會再去讀取。247.7 循序和平行區塊循序和平行區塊(Sequential and Parallel Blocks)區塊是為了群眾多個敘述使其一起動作。在前面幾個範例中,我們使用關鍵字begin和end。來群聚多個敘述,這樣所得的是循序區塊,其內部的敘述將會一個接一

14、個執行。在這一節中我們將討論到循序和並行兩種區塊,和三種特殊區塊:命名區塊、關閉命名區塊和巢狀區塊。7.7.1區塊型態有兩種型態的區塊:循序區塊和平行區塊。循序區塊 其關鍵字為begin和end,其有下列特性: 每一個敘述會依照其順序執行,且要等到前一個敘述執行完才能開始執行(除了包含指定內部延遲控制的無阻礙指定)。 每一個相對延遲控制或事件控制的敘述,其需等到前一個敘述執行完成,再依相對延遲時間或事件執行。25/說明1:不含延遲的循序區塊reg x, y;reg1:0 z, w;initialbegin x = 1b0; y = 1b1; z = x,y; w = y,x;end /說明2:

15、含延遲的循序區塊範例7-26 循序區塊26reg x, y;rge1:0z,w;initialbegin x = 1b0; /完成執行在模擬時間0 #5 y=1b1; /完成執行在模擬時間5 #10 z=x,y; /完成執行在模擬時間15 #20 w=y,x; /完成執行在模擬時間35end範例7-26 循序區塊(續)27平行區塊平行區塊其關鍵字為fork和join,在用特殊的模擬功能,其有以下之特性: 在平行區塊中的所有敘述會同時執行。 在平行區塊中,敘述的執行順序是依照延遲控制與事件控 制。 所有時序控制與事件驅動的時間,都相對進入區塊的模擬時 間。 循序區塊與平行區塊最大的不同是,所有在

16、平行區塊中的敘述皆執行於區塊啟動時,因此順序是不重要的,除了每一個敘述皆起始模擬時間0之外,結果皆相同,所以區塊結束會在模擬時間20而非35。28/範例1:包含延遲的平行區塊reg x, y;reg 1:0 z, w;initialfork x=1b0; /完成執行在模擬時間0 #5 y=1b1; /完成執行在模擬時間5 #10 z=x,y; /完成執行在模擬時間10 #20 w=y,x; /完成執行在模擬時間20join範例7-27 平行區塊29/會產生競爭情況的平行區塊reg x, y;reg 1:0 z,w;initial fork x=1b0; y=1b1; z=x,y; w=y,x;

17、join307.7.2區塊的特殊特性區塊的特殊特性(Special Features of Blocks)我們討論三種區塊敘述的特殊功能:巢狀區塊(Nasted Blocks)、命名區塊(Named Blocks)與禁能命名區塊(Disabling of Named Blocks)。巢狀區塊巢狀區塊(Nasted Blocks)區塊可以巢狀使用,循序區塊和並行區塊是可以混合在一起的。31 /巢狀區塊initialbegin x = 1b0; fork #5 y=1b1; #10 z= x,y; join #20 w = y,x;end範例7-28 巢狀區塊32命名區塊命名區塊(Named Bl

18、ocks)區塊是可以命名的: 命名區塊中可宣告區域變數。 命名區塊是設計階層的一部份,在命名區塊中的變數可用階 層化命名參照存取。 可以禁能一個命名區塊,也就是停止這區塊的執行。33 /命名區塊module top;initialbegin:block1 /循序區塊命名為block1integer i; /整數i是區塊block1的靜態區塊區域變數 /可以用以下的階層化命名來取得 /top.block1.iend範例7-29 命名區塊34initialfork:block2 /平行區塊命名為block2reg i; /暫存器i是block2的靜態區域變數 /可以用以下的階層化命名來取得, /t

19、op.block2.ijoin範例7-29 命名區塊(續)35禁能命名區塊禁能命名區塊(Disabling of Named Blocks)關鍵字disable提供一個方法來結束一個命名區塊的執行。/說明:尋找flag(向量變數)中第一個1的位元reg15:0 flag;integer i; /整數持續計數initialbegin flag = 16b 0010_0000_0000_0000; i=0; begin :block1 /將while迴圈內的主要區控命名為 /block1。範例7-30 禁止命名區塊36while(i 16 ) begin if (flag i ) begin $d

20、isplay(“Encountered a TRUE bit at element number %d”,i); disable block1; /因發現“1”位元所以禁能block1。 end i=i+1; end end end範例7-30 禁止命名區塊(續)377.8 產生區塊產生區塊(Generate Blocks)在模擬開始之前動態產生所需的區塊。這樣的產生方式,很適合開發參數化的設計模型,針對多位元的訊號所需的重複動作,可以產生出對應的模組;針對不同的模擬條件,產生出對應的模組。產生的敘述方式可以針對訊號的宣告、功能的宣告,工作的宣告以及別名模組的產生來做控制。由關鍵字genera

21、te開始,到endgenerate結束。可以產生的對象可以分成底下幾類: 模組。 使用者自訂的原生模組。 Verilog中邏輯閘模組。 連續指定敘述。 initial與always區塊。38條件化產生使用if-else-if的方式,依不同條件產生不同的Verilog語法。與迴圈化產生類似,可針對底下的資料型態使用。 模組。 使用者自訂原生邏輯閘,或是基本邏輯閘。 連續指定區塊。 initial與always區塊。組合條件化產生應用,在模擬開始之前,選取最適合的一組組合來做產生的動作,適合的資料型態如下: 模組。 使用者自訂原生邏輯閘,或是基本邏輯閘。 連續指定區塊。 initial與alway

22、s區塊。7.8.2 條件化產生條件化產生(Generate Conditional)7.8.3 組合條件化產生組合條件化產生(Generate Case)397.9 範例範例(Examples)7.9.1 4對對1多工器多工器(4-to-1 Multiplexer)範例7-35是行為模型4對1的多工器/4-to-1 多工器module mux4_to_1 (out, i0, i1, i2, i3, s1,s0);/宣告輸出入埠output out;input i0, i1, i2, i3;input s1, s0;/宣告輸出為暫存器變數reg out;範例7-35 行為模型4對1的多工器40/

23、當有任何輸入改變,重新計算輸出信號。always (s1 or s0 or i0 or i1 or i2 or i3)begincase (s1, s0) 2b00: out = i0; 2b01: out = i1; 2b10: out = i2; 2b11: out = i3; default : out = 1bx; endcaseendendmodule417.9.3 紅綠燈控制器紅綠燈控制器(Traffic Signal Controller)我們將使用一個有限狀態機FSM來設計一個紅綠燈控制器。規格說明有一個紅綠燈在主要幹道(Main Highway)和郊道(Country Roa

24、d)交叉口。 Main HighwayCountry Road42紅綠燈的規格如下: 因為在主幹道上,時常有車在上面行駛,所以有較高優先順 序。其紅綠燈預設會保持綠燈。 偶爾會有車從郊道行駛到交叉口,郊道的紅綠燈應該轉為綠 燈,且有足夠時間讓郊道的車子通過。 若郊道上已無車輛,郊道的紅綠燈應轉為黃燈再轉為紅燈, 主幹道的紅綠燈應由紅轉綠。 所以郊道上應有一個車子的感應器,其產生的信號(X),是紅 綠燈控制的輸入,X=1代表有車子在郊道上,反之為0。 狀態由S1到S2,由S2到S3和由S4到S0需要有延遲,延遲的 數值必須可以控制。 圖7-1表示紅綠燈的狀態圖。43 State Signals S0 Hwy=G Cuntry=R S1 Hwy=Y Cuntry=R S2 Hwy=R Cuntry=R S3 Hwy=R Cuntry=G S4 Hwy=G Cuntry=Y圖7-1 FSM應用於交通訊號控制器44

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号