1. task(任務(wù))與function(函數(shù))的不同 任務(wù)與函數(shù)主要有以下四點(diǎn)不同: l 函數(shù)只能與主模塊共用一個 仿真時間單位,而任務(wù)定義自己的仿真時間單位。 l 函數(shù)不能啟動任務(wù),任務(wù)可以啟動其他任務(wù)和函數(shù)。 l 函數(shù)至少要有一個輸入變量,而任務(wù)可以沒有或有多任何類型的變量。 l 函數(shù)返回一個值,而任務(wù)不返回值。
2. task語句說明 l 任務(wù)的定義 定義任務(wù)的語法如下: task<任務(wù)名> <端口及數(shù)據(jù)類型聲明語句> <語句1> <語句2> ………… <語句n> endtask
l 任務(wù)的調(diào)用及變量的傳遞 任務(wù)的調(diào)用: <任務(wù)名>(端口1,端口2,…..,端口n); 下面舉例子說明怎么定義任務(wù)與調(diào)用任務(wù): 任務(wù)定義: task my_task; input a,b; output c; <語句> …. endtask 任務(wù)調(diào)用:my_task(v,w,x); 任務(wù)調(diào)用變量(v,w,x)和任務(wù)定義的I/O變量(a,b,c)之間是一一對應(yīng)的,當(dāng)任務(wù)啟動時,由v和w傳入的變量賦給了a和b,而當(dāng)任務(wù)完成之后的輸出又通過c賦給x,下面舉一個具體程序來介紹,代碼如下: 測試代碼如下:
仿真波形圖如下:
當(dāng)start信號變成高電平的時候,即當(dāng)state狀態(tài)由0跳變到1時,調(diào)用load任務(wù),把data_in的值寄存在save_data的同時狀態(tài)機(jī)狀態(tài)跳轉(zhuǎn)到2,當(dāng)狀態(tài)跳轉(zhuǎn)到2的時候,調(diào)用shift任務(wù),把save_data的值往左移一位的同時狀態(tài)機(jī)狀態(tài)跳轉(zhuǎn)到3,當(dāng)狀態(tài)跳轉(zhuǎn)到3的時候,調(diào)用out任務(wù),把save_data的值往data_out賦值的同時狀態(tài)機(jī)狀態(tài)跳轉(zhuǎn)到0,仿真的波形跟設(shè)計的完全一樣。
3. function說明語句 l 定義函數(shù)的語法: function<返回值的類型或范圍>(函數(shù)名); <端口說明語句> <變量類型說明語句> begin <語句> ……… end endfunction 注意:<返回值的類型或范圍>這一項(xiàng)是可選項(xiàng),如缺省則返回值位一位寄存器類型數(shù)據(jù)
l 舉例說明 下面舉一個實(shí)際程序的例子,來說明一下function函數(shù)的實(shí)際定義與如何調(diào)用。代碼如下:
測試代碼如下: 仿真波形如下:
當(dāng)start信號變成高電平的時候,即當(dāng)state狀態(tài)有0跳變到1時,調(diào)用load_data(data_in)函數(shù),把data_in的值寄存在save_data的同時狀態(tài)機(jī)狀態(tài)跳轉(zhuǎn)到2,當(dāng)狀態(tài)跳轉(zhuǎn)到2的時候,調(diào)用shift(save_data)函數(shù),把save_data的值往左移一位的同時狀態(tài)機(jī)狀態(tài)跳轉(zhuǎn)到3,當(dāng)狀態(tài)跳轉(zhuǎn)到3的時候,調(diào)用load_data(save_data)函數(shù),把save_data的值往data_out賦值的同時狀態(tài)機(jī)狀態(tài)跳轉(zhuǎn)到0,仿真的波形跟設(shè)計的完全一樣。 |