module V_triangle_generator(out); output out; voltage out; parameter real period = 10n from [0:inf), ampl = 1; integer slope; real offset; analog begin @(timer(0,period)) begin slope = +1; offset = $realtime; discontinuity(1); end @(timer(period/2,period)) begin slope = -1; offset = $realtime; discontinuity(1); end V(out) <+ ampl * slope * (4*($realtime-offset)/period - 1); end endmodule