I would do something like this:
Code:module time_diff_amp (z, y, a, b);
input a, b;
output z, y;
electrical z, y, a, b;
parameter real thresh = 0.5;
parameter real tgain = 3.0;
parameter real td = 10p;
parameter real tr = 20p;
real out, last_cross_a, last_cross_b, delta_t;
integer sign_t;
analog begin
last_cross_a = last_crossing(V(a) - thresh, +1);
last_cross_b = last_crossing(V(b) - thresh, +1);
@(cross(V(a) - thresh, -1) or
cross(V(b) - thresh, -1)) begin
last_cross_a = 0;
last_cross_b = 0;
out = 0;
end
@(cross(V(a) - thresh, +1))
if (last_cross_a > 0 && last_cross_b > 0) begin
delta_t = tgain * abs(last_cross_a - last_cross_b)
sign_t = (last_cross_a >= last_cross_b);
out = 1;
end
@(cross(V(b) - thresh, +1))
if (last_cross_a > 0 && last_cross_b > 0) begin
delta_t = tgain * abs(last_cross_a - last_cross_b);
sign_t = (last_cross_a >= last_cross_b);
out = 1;
end
V(z) <+ transition(out, td + sign_t *delta_t, tr);
V(y) <+ transition(out, td + (1 - sign_t) *delta_t, tr);
end
endmodule // time_diff_amp