`timescale 1 ns/1 ns module TestBench(); wire clk; reg reset_in; reg LM; reg L0; reg L1; reg BUSY_GTU; reg [4:0] timer_width; reg [7:0] timer_L0; reg [11:0] timer_L1; wire reset; wire enable; wire [5:0] timer_mon; time LM_start, L0_start, L1_start, window_open, window_close, reset_time; integer i; FastClk fast(clk); Timer timer( .clk(clk), .reset_in(reset_in), .LM(LM), .L0(L0), .L1(L1), .BUSY_GTU(BUSY_GTU), .timer_width(timer_width), .timer_L0(timer_L0), .timer_L1(timer_L1), .reset(timer_reset), .enable(timer_enable), .timer_mon(timer_mon)); initial begin reset_in <= 1; LM <= 0; L0 <= 0; L1 <= 0; BUSY_GTU <= 0; timer_width <= 0; timer_L0 <= 0; timer_L1 <= 0; #25 reset_in <= 0; #100; timer_width <= 5'h8; timer_L0 <= 8'hBA; timer_L1 <= 12'h412; $display("#########################################"); $display("%tns: Complete Sequence",$time/1000.0); $display("#########################################\n"); #100; LM <= 1; #25 LM <= 0; #1125 L0 <= 1; #25 L0 <= 0; #6275 BUSY_GTU <= 1; #200 L1 <= 1; #100 L1 <= 0; #1000 BUSY_GTU <= 0; #1000; #1000; $display("#########################################"); $display("%tns: Without L1",$time/1000.0); $display("#########################################\n"); #100; LM <= 1; #25 LM <= 0; #1125 L0 <= 1; #25 L0 <= 0; #6275 BUSY_GTU <= 1; #1000 BUSY_GTU <= 0; #1000; $display("#########################################"); $display("%tns: Without L0",$time/1000.0); $display("#########################################\n"); #100; LM <= 1; #25 LM <= 0; #2000; #1000; $display("#########################################"); $display("%tns: Variation of L1 arrival",$time/1000.0); $display("#########################################\n"); for (i=0; i<=100; i=i+5) begin $display("###############################"); $display("%tns: %d",$time/1000.0,i); $display("###############################\n"); #100; LM <= 1; #25 LM <= 0; #1125 L0 <= 1; #25 L0 <= 0; #6275 BUSY_GTU <= 1; #150 repeat (i) #1; L1 <= 1; #100 L1 <= 0; #1000 BUSY_GTU <= 0; #1000; end #1000; $display("#########################################"); $display("%tns: Variation of L0 arrival",$time/1000.0); $display("#########################################\n"); for (i=0; i<=100; i=i+5) begin $display("###############################"); $display("%tns: %d",$time/1000.0,i); $display("###############################\n"); #100; LM <= 1; #25 LM <= 0; #1075 repeat (i) #1; L0 <= 1; #25 L0 <= 0; #6700; end end always @(posedge timer_enable) begin window_open = $time; $display("%tns: Window for next signal is now open.",$time/1000.0); end always @(negedge timer_enable) begin window_close = $time; $display("%tns: Window for next signal is now closed.",$time/1000.0); end always @(posedge timer_reset) begin reset_time = $time; $display("%tns: Reset is sent.",$time/1000.0); end endmodule