verilog中taskd的用法

2021-10-20 21:37:10 字數 2016 閱讀 8366

:定義乙個任務。

task task_demo; //任務定義結構開頭,命名為 task_demo

input [7:0] x,y; //輸入埠說明

output [7:0] tmp; //輸出埠說明

if(x>y)                  //給出任務定義的描述語句 

tmp = x;

else

tmp = y;

endtask

上述**定義了乙個名為「task_demo」的任務,求取兩個數的最大值。在定義任務時,

有下列六點需要注意:

(1)在第一行「task」語句中不能列出埠名稱;

(2)任務的輸入、輸出埠和雙向埠數量不受限制,甚至可以沒有輸入、輸出以及

雙向埠。

(3)在任務定義的描述語句中,可以使用出現不可綜合操作符合語句(使用最為頻繁

的就是延遲控制語句) ,但這樣會造成該任務不可綜合。

(4)在任務中可以呼叫其他的任務或函式,也可以呼叫自身。

(5)在任務定義結構內不能出現 initial和 always過程塊。

(6)在任務定義中可以出現「disable 中止語句」 ,將中斷正在執行的任務,但其是不

可綜合的。當任務被中斷後,程式流程將返回到呼叫任務的地方繼續向下執行。

2.任務呼叫

雖然任務中不能出現 initial 語句和 always 語句語句, 但任務呼叫語句可以在 initial 語句

和 always 語句中使用,其語法形式如下:

task_id[(埠1, 埠 2, …, 埠 n)];

其中 task_id是要呼叫的任務名,埠 1、埠 2,…是引數列表。引數列表給出傳入任

務的資料(進入任務的輸入端)和接收返回結果的變數(從任務的輸出端接收返回結果) 。

任務呼叫語句中,引數列表的順序必須與任務定義中的埠宣告順序相同。任務呼叫語句是

過程性語句,所以任務呼叫中接收返回資料的變數必須是暫存器型別。下面給出乙個任務調

用例項。

例:通過 verilog hdl 的任務呼叫實現乙個 4 位元全加器。

module example (a, b, cin, s, cout);

input [3:0] a, b;

input cin;

output [3:0] s;

output cout;

reg [3:0] s;

reg cout;

reg [1:0] s0, s1, s2, s3;

task add;

input a, b, cin;

output [1:0] c;

reg [1:0] c;

reg s, cout;

begin

s = a ^ b ^ cin;

cout = (a&b) | (a&cin) | (b&cin);

c = ;

endendtask

always @(a or b or cin) begin

add (a[0], b[0], cin, s0);

add (a[1], b[1], s0[1], s1);

add (a[2], b[2], s1[1], s2);

add (a[3], b[3], s2[1], s3);

s = ;

cout = s3[1];

endendmodule

在呼叫任務時,需要注意以下幾點:

(1)任務呼叫語句只能出現在過程塊內;

(2)任務呼叫語句和一條普通的行為描述語句的處理方法一致;

(3)當被呼叫輸入、輸出或雙向埠時,任務呼叫語句必須包含埠名列表,且訊號

埠順序和型別必須和任務定義結構中的順序和型別一致。需要說明的是,任務的輸出埠

必須和暫存器型別的資料變數對應。

(4)可綜合任務只能實現組合邏輯,也就是說呼叫可綜合任務的時間為「0」 。而在面

向**的任務中可以帶有時序控制,如時延,因此面向**的任務的呼叫時間不為「0」 。

Verilog中的函式

verilog中的函式 verilog hdl與大多數可程式語言一樣,將使用率很高的 按照軟體工程的思想,寫成函式,這樣,該函式可以被多次呼叫。verilog中函式常用語三種情況 verilog中的函式與c語言中的函式的主要不同之處是 在verilog中,呼叫函式時,需要將乙個或則多個自變數傳給函式...

用verilog實現的串列埠通訊模組

串列埠功能 1 8個資料位 1個停止為 無校驗位 2 空閒時資料線為高電平,從高電平跳向低電平表示啟動訊號 3 波特率可以通過parameter引數實現可調 有兩個檔案 uart.v 串列埠模組 module uart 全域性時鐘復位訊號 iclk,irst n,序列資料線 irx,序列接收 otx...

用verilog 蜂鳴器的演奏樂曲

module song clk,beep 模組名稱song input clk 系統時鐘50mhz output beep 蜂鳴器輸出端 reg beep r 暫存器 reg 7 0 state 樂譜狀態機 reg 16 0 count,count end reg 23 0 count1 樂譜引數 ...