任務和函式只能實現組合邏輯,而對時序邏輯無能為力。一、任務
任務就是一段封裝在「task…endtask」之間的程式。任務可以彼此呼叫,而且任務內還可以呼叫函式。1、任務定義
形式如下:2、任務呼叫task task_id; // 任務名
[declaration] // 埠定義
procedural_statement // 任務的具體操作語句
endtask
一些注意事項:
a. 在任務定義結構中不能出現initial和always過程塊。
b. 任務的輸入、輸出埠和雙向埠數量不受限制,甚至可以沒有輸入、輸出埠和雙向埠。
形式如下:二、函式task_id[(埠1, 埠2, …, 埠n)];
一些注意事項:
a. 任務呼叫語句只能出現在過程塊內;
b. 任務的輸出埠必須和暫存器型別的資料變數對應;
1、函式定義
形式如下:2、函式呼叫function [range] function_id;
input_declaration
other_declarations
procedural_statement
endfunction
其中[range]引數指定返回值的型別或位寬,預設是1位元資料。function_id為所定義函式的名稱,對函式的呼叫也是通過函式名來完成的,而且它在函式結構體內代表乙個內部變數,函式呼叫的返回值就是通過函式名變數傳遞給呼叫語句的。
一些注意事項:
a. 函式定義只能在模組中完成,不能出現在過程塊中;
b. 函式至少要有乙個輸入埠,但不能包含輸出和雙向埠;
c. 在函式結構中,不能使用任何形式的時間控制語句(#、wait等),也不能使用disable中止語句;
d. 函式定義結構體總不能出現過程塊語句;
e. 函式內部可以呼叫函式,但不能呼叫過程。
形式如下:3、任務和函式的區別function_id(expr1, expr2, …, exprn);
一些注意事項:
a. 函式呼叫可以在過程塊中完成,也可以在assign這樣的連續賦值語句中出現;
b. 函式呼叫語句不能單獨作為一條語句出現,只能作為賦值語句的右端運算元。
比較點任務
函式輸入、輸出
可以有任意多個各種型別的引數
至少有乙個輸入,不能有輸出和雙向埠
呼叫任務只能在過程語句中呼叫,而不能在連續賦值語句中呼叫
函式可作為賦值操作的表示式,用於過程賦值和連續賦值語句
觸發事件控制
任務不能出現always語句;可以包含延時控制語句(#),但只能面向**,不能綜合
函式中不能出現(always、#)這樣的語句,要保證函式的執行在零時間內完成
呼叫其他任務和函式
可以呼叫其他任務和函式
只能呼叫函式,不能呼叫任務
返回值沒有返回值
只有乙個返回值
其他說明
任務呼叫語句可以作為一條完整的語句出現
函式呼叫語句不能單獨作為一條語句出現,只能作為賦值語句的右端運算元
VHDL和 verilogHDL的區別
硬體描述語言hdl hardware describe language hdl概述 隨著eda技術的發展,使用硬體語言設計pld fpga成為一種趨勢。目前最主要的硬體描述語言是vhdl和verilog hdl。vhdl發展的顯紓 鋟 細瘢 鳹erilog hdl是在c語言的基礎上發展起來的一種硬...
verilog HDL中wire和reg的區別
wire表示直通,即輸入有變化,輸出馬上無條件地反映 如與 非門的簡單連線 reg表示一定要有觸發,輸出才會反映輸入的狀態。reg相當於儲存單元,wire相當於物理連線。reg表示一定要有觸發,沒有輸入的時候可以保持原來的值,但不直接實際的硬體電路對應。兩者的區別是 暫存器型資料保持最後一次的賦值,...
FreeRtos 空閒任務與空閒任務鉤子函式
以下基礎知識 自正點原子pdf資料。前面例子中建立的任務大部份時間都處於阻塞態。這種狀態下所有的任務都不可執行,所以也不能被排程器選中。但處理器總是需要 來執行 所以至少要有乙個任務處於執行態。為了保證這 一點,當呼叫 vtaskstartscheduler 時,排程器會自動建立乙個空閒任務。空閒任...