// model of comparator with piecewise linear transfer function module pwl_comparator(in,ref,out) input in,ref; output out; voltage in,ref,out; parameter real output_high = 5; parameter real output_low = 0 from (-inf:output_high); parameter real vhysteresis = 1m from [0:inf); parameter real tdelay = 1n from [0:inf); parameter real ttransit = 10n from [0:inf); real vout; analog begin if (analysis("static")) begin @(initial_step) begin if (output_high <= output_low) begin $strobe("Range specification error.\n output_high = (%E) less than output_low = (%E).\n", output_high, output_low ); $finish; end end if (V(in) >= V(ref) vout = output_high; else vout = output_low; V(out) <+ vout; end else begin @cross(V(in)+vhysteresis-V(ref), 1) V(out) <+ transition(output_high,tdelay,ttransit); @cross(V(in)-vhysteresis-V(ref),-1) V(out) <+ transition(output_low ,tdelay,ttransit); end end endmodule