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