Design a single-side order book that maintains price levels sorted in ascending order.

Module name: order_book_side
Parameters:
  - PRICE_W = 24     // Price width (Q15.8 fixed-point)
  - QTY_W   = 16     // Quantity width
  - DEPTH   = 8      // Maximum number of price levels

Ports:
  - input  clk, rst_n
  - input  [PRICE_W-1:0] price        // Order price
  - input  [QTY_W-1:0]   qty          // Order quantity
  - input  [2:0]          order_id     // Order identifier (0-7)
  - input                 add          // Add order
  - input                 cancel       // Cancel order by order_id
  - output [PRICE_W-1:0]  best_price   // Best (lowest) price
  - output [QTY_W-1:0]    best_qty     // Quantity at best price
  - output                valid        // At least one order exists

Functional specification:
  - Stores up to DEPTH price levels, sorted ascending by price (ask side)
  - add: insert new order; if price level already exists, merge (add) qty
  - cancel: remove order by order_id, adjusting qty and removing level if empty
  - best_price/best_qty: top of book (lowest price for ask side)
  - valid: high when at least one order exists in the book
  - Each order_id maps to exactly one active order (price + qty stored separately)
  - On reset, book is empty
