2016-03-25 15 views
0

Test tezgahında basit bir saat kıpırdatma görevi bildirmeye çalışıyorum ancak ModelSim, görev türünün hiçbir tasarım öğesinin olmadığını iddia ediyor.Aynı verilog dosyasında bildirme görevi

`timescale 1 ns/1 ns 

module at25320a_tester(); 
    reg clk, s_in, s_out, chip_select, write_protect, hold; 

    // Instantiate at25320a module 
    at25320a EEPROM (.SCK(clk), .SI(s_in), .CSNeg(chip_select), .HOLDNeg(hold), .WPNeg(write_protect), .SO(s_out)); 

    run_clk(15); 

    task run_clk; 
     input [3:0] cycles; 
     output reg clk; 

     integer i; 

     for (i=0;i<cycles;i=i+1) begin 
      #100 clk = 1; 
      #100 clk = 0; 
     end 
    endtask 

endmodule 

cevap

2

Görevler usul bloktan çağrılmalıdır gibi always veya initial: Bu kod ile sorun nedir. Senin durumunda, sen bir kaç değişiklik ile bir initial blokta görevi çalıştırmak istiyorum:

görev reg clk çizgi ben ayrı bir dosyada vardı ne zaman arta kalan, fakat
`timescale 1 ns/1 ns 

module at25320a_tester(); 
    reg clk, s_in, s_out, chip_select, write_protect, hold; 

    // Instantiate at25320a module 
    at25320a EEPROM (.SCK(clk), .SI(s_in), .CSNeg(chip_select), .HOLDNeg(hold), .WPNeg(write_protect), .SO(s_out)); 

    initial begin 
     run_clk(15); 
    end 

    task run_clk; 
     input integer cycles; // Might as well not have this be bigger 
     // No clock, you want to use the clock from the module 
     integer i; 

     for (i=0;i<cycles;i=i+1) begin 
      #100 clk = 1; 
      #100 clk = 0; 
     end 
    endtask 

endmodule 
+0

prosedürel blok ve Tamsayı değişiklikleri noktadaydı. Teşekkür ederim! – Answoquest