//----------------------------------------------------------------------
// This File: clk0test.v
//
// Sunburst Design (Beaverton, OR): 
//            cliffc@sunburst-design.com
//            www.sunburst-design.com
//----------------------------------------------------------------------
`define CYCLE 10
`timescale 1ns / 1ns
module clk0test;
  logic clk, rst_n;

  //-------------------------------------------------------------------
  // Clock oscillator
  //-------------------------------------------------------------------
  initial begin
    clk <= 0;
    forever #(`CYCLE/2) clk = ~clk;
  end

  //-------------------------------------------------------------------
  // First negedge clk at time 0
  //-------------------------------------------------------------------
  default clocking cb0 @(negedge clk);
  endclocking

  //-------------------------------------------------------------------
  // Test code 
  //-------------------------------------------------------------------
  initial begin
    init_reset;
    ##6;
    reset;
    ##4;
    reset(3);
    ##3 $finish;
  end

  //-------------------------------------------------------------------
  // Reset commands: init_reset (time-0 reset) & reset
  //-------------------------------------------------------------------
  task init_reset;
    `ifdef NODLY
        rst_n <= '0; // +define+NODLY
    `else
    ##1 rst_n <= '0; // Should this happen at time-0 or time-10?
    `endif
    ##1 rst_n  = '1;
  endtask
  
  task reset (input int cnt=1);
    ##1 rst_n  = '0;
    repeat(cnt) ##1;
        rst_n  = '1;
  endtask

  initial begin
    $timeformat(-9,0,"ns",6);
    $monitor("%t: rst_n=%b", $time, rst_n);
  end
endmodule
