在高階程式語言中,為了避免在程式中多次重複編寫特定的例行程式,可以使用子程式和函式。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...