Design a Volume Weighted Average Price (VWAP) calculator.

Module name: vwap
Parameters:
  - WIDTH = 24       // Total bit width (Q15.8 unsigned fixed-point)
  - FRAC  = 8        // Fractional bits

Ports:
  - input              clk
  - input              rst_n       // Active-low synchronous reset
  - input  [WIDTH-1:0] price_in    // Unsigned fixed-point price
  - input  [WIDTH-1:0] volume_in   // Unsigned fixed-point volume
  - input              valid_in    // High for one cycle when inputs are valid
  - output [WIDTH-1:0] vwap_out    // VWAP output (unsigned fixed-point)
  - output             valid_out   // High after first valid sample

Functional specification:
  - Accumulate cumulative_pv = sum(price_in * volume_in) over all valid samples
  - Accumulate cumulative_vol = sum(volume_in) over all valid samples
  - VWAP = cumulative_pv / cumulative_vol
  - Use 48-bit accumulators internally to prevent overflow
  - The price*volume product needs extra FRAC bits (it has 2*FRAC fractional bits)
  - Division produces the Q15.8 result
  - valid_out asserts after first valid sample
  - On reset, clear accumulators
