2016-07-17 14 views
-1
module clock 
    (
input logic wclk,rclk 
); 
    initial begin 
    wclk = 1'b0; 
    rclk = 1'b0; 
    end 



task genclock; 
begin 
    genvar i; 
    generate 
     begin 
    for(i=0;i<20;i++) 
    begin 
    #10 
    wclk=~wclk; 
    rclk=~rclk; 
    #20 
    rclk=~rclk; 
    #20 
    wclk=~wclk; 
    #40 
    wclk=~wclk; 
    #40 
    rclk=~rclk; 
    #80 
    wclk=~wclk; 
    #100 
    rclk=~rclk; 
    #10 
    wclk=~wclk; 
    #2 
    rclk=~rclk; 
    #150 
    wclk=~wclk; 
    rclk=~rclk; 
    #30 
    wclk=~wclk; 
    #44 
    rclk=~rclk; 
    end 
    #100 
    $finish; 
    end 
    endgenerate 
    end 
    endtask 
    endmodule 

Antwort

2

Generate im Allgemeinen mehrere Instanzen von modules, functions, tasks usw. Es wird verwendet für die Wiederholung Top-Level-Strukturen zu erzeugen, verwendet.

genvar wird normalerweise für einen generate Block verwendet. Für Ihren Fall brauchen Sie wirklich nicht genvar und generate.

Ein kleines bearbeiten Sie zum Beispiel:

module clock(wclk, rclk); 

input reg wclk; 
input reg rclk; 

initial begin 
    wclk = 1'b0; 
    rclk = 1'b0; 
    $finish; 
end 

task genclock; 
    integer i; 

    begin 
    for(i=0;i<20;i=i+1) 
     #10 
     wclk <= ~wclk; 
     rclk <= ~rclk; 
     #20 
     rclk <= ~rclk; 
     #20 
     wclk <= ~wclk; 
     #40 
     wclk <= ~wclk; 
     #40 
     rclk <= ~rclk; 
     #80 
     wclk <= ~wclk; 
     #100 
     rclk <= ~rclk; 
     #10 
     wclk <= ~wclk; 
     #2 
     rclk <= ~rclk; 
     #150 
     wclk <= ~wclk; 
     rclk <= ~rclk; 
     #30 
     wclk <= ~wclk; 
     #44 
     rclk <= ~rclk; 
     #100; 

    end 

endtask 
endmodule