2016-04-13 40 views
-1

içinde bir hata alıyorum Ben bir hata alıyorum - "testler bir işlev adı değil." Burada neyi yanlış yapıyorum? Her zaman bloktan bir görev diyemez miyim?Görevi her zaman verilog

task automatic tests(
    input a, 
    input b, 
    output c); 
    // code 
endtask 

module test123 
(
input clk, 
input a, 
input b, 
input e 
); 

reg d; 

always @(posedge clk) 
    if(e) 
     d <= tests(a, b);  

endmodule 
+2

'C' görevden çıkış olduğundan, yapmanız gereken. Bu, reg d'de çıktı verecektir. – sharvil111

+0

Değeri döndürebilen veya LHS işleneni göreve argüman olarak aktaran işlevi kullanın. –

cevap

2

Görevler asla değerleri döndürmez - yalnızca bir işlev bunu yapabilir. Ayrıca, SystemVerilog'u kullanmıyorsanız, bir modül içinde görevler ve işlevler beyan edilmelidir. `;` If (e) testleri (a, b, d):

2

aşağıda gösterildiği gibi Bunu yapabilirsin,

module test123 
(
input clk, 
input a, 
input b, 
input e 
); 

task automatic tests(
    input a, 
    input b, 
    output c); 
    // code 
endtask 

reg d; 

always @(posedge clk) 
    if(e) 
          // a=a, b=b, d=c 
     tests(a, b, d);  // d is assigned to your output 

endmodule