System Verilog Code:-
//---------------------------------------------------------------------------------------
// Name: jitter_clock_gen
// Author: Bharath Kumar Y
// Description: This module will generate a clock with
// period = 16ps
// Max Skew/half clock = +/-1ps
// Max Skew/clock period = +/-2ps
// Copyright (C) Bharath Kumar Y
//----------------------------------------------------------------------------------------
`timescale 1ps/1ps
module jitter_clock_gen;
//Initializations
bit req0=0;
bit clk=0;
integer seed;
real zero_time=0;
real one_time=8;
// Just to run the sim for some good amount of time to get
// enough clock edges
initial begin
# 100 $finish;
end
// Actual clock generation clock
always
#(8+$dist_uniform(seed,-1,1)) clk = ~clk;
// Checking of clock geneation implemented using
// Immediate assertions
// This block will assert errors when the
// half clock period != 8
always @*
begin
if(clk==0) begin
req0=1;
zero_time = $realtime;
$display("zero_time = %t",$realtime);
assert(!(($realtime<(one_time+8))));
assert(!(($realtime>(one_time+8))));
end
if (req0==1 && clk==1) begin
req0=0;
one_time=$realtime;
$display("time:%t:-req0=%b,req=%b",$realtime,req0,clk);
assert(!(($realtime<(zero_time+8))));
assert(!(($realtime>(zero_time+8))));
end
end
endmodule
Output for the same code using ncsim:-
ncsim> run
zero_time = 15
ncsim: *E,ASRTST (./fun1.sv,41): (time 15 PS) Assertion jitter_clock_gen.__assert_1 has failed
time: 22:-req0=0,req=1
ncsim: *E,ASRTST (./fun1.sv,49): (time 22 PS) Assertion jitter_clock_gen.__assert_3 has failed
zero_time = 29
ncsim: *E,ASRTST (./fun1.sv,41): (time 29 PS) Assertion jitter_clock_gen.__assert_1 has failed
time: 37:-req0=0,req=1
zero_time = 46
ncsim: *E,ASRTST (./fun1.sv,42): (time 46 PS) Assertion jitter_clock_gen.__assert_2 has failed
time: 53:-req0=0,req=1
ncsim: *E,ASRTST (./fun1.sv,49): (time 53 PS) Assertion jitter_clock_gen.__assert_3 has failed
zero_time = 60
ncsim: *E,ASRTST (./fun1.sv,41): (time 60 PS) Assertion jitter_clock_gen.__assert_1 has failed
time: 68:-req0=0,req=1
zero_time = 76
time: 85:-req0=0,req=1
ncsim: *E,ASRTST (./fun1.sv,50): (time 85 PS) Assertion jitter_clock_gen.__assert_4 has failed
zero_time = 93
Simulation complete via $finish(1) at time 100 PS + 0
./fun1.sv:26 # 100 $finish;
//---------------------------------------------------------------------------------------
// Name: jitter_clock_gen
// Author: Bharath Kumar Y
// Description: This module will generate a clock with
// period = 16ps
// Max Skew/half clock = +/-1ps
// Max Skew/clock period = +/-2ps
// Copyright (C) Bharath Kumar Y
//----------------------------------------------------------------------------------------
`timescale 1ps/1ps
module jitter_clock_gen;
//Initializations
bit req0=0;
bit clk=0;
integer seed;
real zero_time=0;
real one_time=8;
// Just to run the sim for some good amount of time to get
// enough clock edges
initial begin
# 100 $finish;
end
// Actual clock generation clock
always
#(8+$dist_uniform(seed,-1,1)) clk = ~clk;
// Checking of clock geneation implemented using
// Immediate assertions
// This block will assert errors when the
// half clock period != 8
always @*
begin
if(clk==0) begin
req0=1;
zero_time = $realtime;
$display("zero_time = %t",$realtime);
assert(!(($realtime<(one_time+8))));
assert(!(($realtime>(one_time+8))));
end
if (req0==1 && clk==1) begin
req0=0;
one_time=$realtime;
$display("time:%t:-req0=%b,req=%b",$realtime,req0,clk);
assert(!(($realtime<(zero_time+8))));
assert(!(($realtime>(zero_time+8))));
end
end
endmodule
Output for the same code using ncsim:-
ncsim> run
zero_time = 15
ncsim: *E,ASRTST (./fun1.sv,41): (time 15 PS) Assertion jitter_clock_gen.__assert_1 has failed
time: 22:-req0=0,req=1
ncsim: *E,ASRTST (./fun1.sv,49): (time 22 PS) Assertion jitter_clock_gen.__assert_3 has failed
zero_time = 29
ncsim: *E,ASRTST (./fun1.sv,41): (time 29 PS) Assertion jitter_clock_gen.__assert_1 has failed
time: 37:-req0=0,req=1
zero_time = 46
ncsim: *E,ASRTST (./fun1.sv,42): (time 46 PS) Assertion jitter_clock_gen.__assert_2 has failed
time: 53:-req0=0,req=1
ncsim: *E,ASRTST (./fun1.sv,49): (time 53 PS) Assertion jitter_clock_gen.__assert_3 has failed
zero_time = 60
ncsim: *E,ASRTST (./fun1.sv,41): (time 60 PS) Assertion jitter_clock_gen.__assert_1 has failed
time: 68:-req0=0,req=1
zero_time = 76
time: 85:-req0=0,req=1
ncsim: *E,ASRTST (./fun1.sv,50): (time 85 PS) Assertion jitter_clock_gen.__assert_4 has failed
zero_time = 93
Simulation complete via $finish(1) at time 100 PS + 0
./fun1.sv:26 # 100 $finish;