Verilog中的函式和任務

2021-06-16 04:58:59 字數 1652 閱讀 9633

在高階程式語言中,為了避免在程式中多次重複編寫特定的例行程式,可以使用子程式和函式。verilog語言也提供類似的功能,即verilog的函式和任務。。它可以把大型程式模組化,從而使**更加容易理解。。

1。verilog任務

任務必須包含在呼叫該任務的模組中。它可以有輸入輸出埠,任務的埠僅用來在模組和任務之間傳遞資料。

只能從always或initial塊中呼叫任務。任務不返回任何值。

下面是有mux4to1組成的16選一多路選擇器。

module mux16to1(w,s,f);

input [15:0] w;

input [3:0] s;

output reg f;

always @(w,s)

case(s[3:2])

0:mux4to1(w[0:3],s[1:0],f);

1:mux4to1(w[4:7],s[1:0],f);

2:mux4to1(w[8:11],s[1:0],f);

3:mux4to1(w[12:15],s[1:0],f);

endcase

//task that specifies a mux4to1

task mux4to1 ;//注意了此處為分號

input [0:3] x;

input [1:0] s4;

output reg g;

case(s4)

0: g=x[0];

1: g=x[1];

2: g=x[2];

3:g=x[3];

endcase

endtask

endmodule

verilog函式:

函式是在模組內部定義的,可以在模組內的連續賦值語句和過程性語句中被呼叫。

module mux16to1(w,s,f);

input [15:0] w;

input [3:0] s;

output reg f;

//function that specifies a mux4to1

function mux4to1 ;//注意了,此處為分號啊。

input [0:3] x;

input [1:0] s4;

case(s4)

0: mux4to1=x[0];

1: mux4to1=x[1];

2: mux4to1=x[2];

3: mux4to1=x[3];

endcase

endfunction

always @(w,s)

case(s[3:2])

0:f=mux4to1(w[0:3],s[1:0]);

1:f=mux4to1(w[4:7],s[1:0]);

2:f=mux4to1(w[8:11],s[1:0]);

3:f=mux4to1(w[12:15],s[1:0]);

endcase

endmodule

注:函式可以呼叫另外乙個函式,但不能呼叫另外乙個任務。

而任務可以呼叫另外乙個任務,也可以呼叫函式。

函式和任務的乙個優點是可以在always塊中呼叫多個函式和任務塊,而這些塊是不允許包含例項引用語句的。。

verilog 中任務與函式的區別

區別 1.函式可以返回乙個值而任務可以返回多個值 2.函式一經呼叫必須立即執行,裡面不能包含任何的時序控制,而task中可以有時序控制 3.函式可以呼叫函式,但不可以呼叫任務,任務既可以呼叫函式也可以呼叫任務 4.函式必須要有乙個輸入引數,而任務可以沒有引數輸入。4.任務輸出的訊號,在模組中必須定義...

Verilog中的函式

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

verilog中的integer和reg的差別

integer型別也是一種暫存器資料型別,integer型別的變數為有符號數,而reg型別的變數則為無符號數,除非特別宣告為有符號數,還有就是integer的位寬為宿主機的字的位數,但最小為32位,用integer的變數都可以用reg定義,只是對於用於計數更方便而已。reg,integer,real...