Design a Black-Scholes option delta calculator.

Module name: option_delta
Parameters:
  - WIDTH = 32       // Total bit width
  - FRAC  = 16       // Fractional bits (Q16.16 fixed-point)

Ports:
  - input                        clk
  - input                        rst_n        // Active-low synchronous reset
  - input  signed [WIDTH-1:0]    spot_price   // S: spot price (Q16.16)
  - input  signed [WIDTH-1:0]    strike_price // K: strike price (Q16.16)
  - input  signed [WIDTH-1:0]    time_to_expiry // T: time to expiry in years (Q16.16)
  - input  signed [WIDTH-1:0]    volatility   // sigma: annualized volatility (Q16.16)
  - input  signed [WIDTH-1:0]    risk_free_rate // r: risk-free rate (Q16.16)
  - input                        valid_in     // Asserts for one cycle with new inputs
  - output signed [WIDTH-1:0]    delta_out    // N(d1), range 0 to 1.0 (Q16.16)
  - output                       valid_out    // Asserts for one cycle when result is ready

Functional specification:
  - Computes Black-Scholes delta = N(d1) for a European call option
  - d1 = (ln(S/K) + (r + sigma^2/2)*T) / (sigma * sqrt(T))
  - N(x) = cumulative standard normal distribution (Abramowitz & Stegun approximation)
    N(x) ≈ 1 - n(x)*(a1*t + a2*t^2 + a3*t^3) where t=1/(1+0.33267*|x|), n(x)=exp(-x^2/2)/sqrt(2*pi)
    a1=0.4361836, a2=-0.1201676, a3=0.9372980
  - For ln(S/K): use ln(1+y) ≈ y - y^2/2 + y^3/3 with range reduction
  - For sqrt(T): Newton-Raphson with 3 iterations
  - For exp(-x): Taylor series: 1 - x + x^2/2 - x^3/6
  - Sequential, multi-cycle computation
  - All arithmetic in signed Q16.16 fixed-point

Knobs:
  - WIDTH: [24, 32, 48] — precision vs area tradeoff

Critical IO: valid_in -> valid_out (sequential, ~30-50 cycles)
