Design a FAST protocol multi-field message decoder.

The FAST (FIX Adapted for Streaming) protocol is used in financial exchanges for
low-latency market data. Messages consist of multiple fields, each encoded using
stop-bit encoding (bit 7 = 1 marks the last byte of a field). This module decodes
a complete message containing up to 4 consecutive stop-bit encoded fields,
terminated by a 0x00 delimiter byte.

Module name: fast_msg_decoder
Ports:
  - input         clk
  - input         rst_n
  - input  [7:0]  byte_in       // Input byte from stream
  - input         byte_valid    // Input byte is valid
  - output [31:0] field0        // Decoded value of field 0
  - output [31:0] field1        // Decoded value of field 1
  - output [31:0] field2        // Decoded value of field 2
  - output [31:0] field3        // Decoded value of field 3
  - output        msg_valid     // Asserted for one cycle when message is complete
  - output [2:0]  field_count   // Number of fields decoded in this message (1-4)

Functional specification:
  - Bytes arrive one per cycle when byte_valid is high
  - Each field uses stop-bit encoding: bit 7 = 0 means continuation byte,
    bit 7 = 1 means last byte of the field. Data is in bits [6:0].
  - Fields are accumulated by shifting left by 7 and OR-ing in new bits [6:0]
  - When a stop bit is detected, the current field value is stored in the
    corresponding field register (field0, field1, field2, or field3), and
    the decoder advances to the next field
  - A delimiter byte of 0x00 (with byte_valid=1) marks end of message
  - When the delimiter is received, msg_valid pulses for one cycle
  - field_count indicates how many fields were decoded (1 to 4)
  - After msg_valid, the decoder resets for the next message
  - Unused fields output 0
  - This module is self-contained (no external module instantiation)

Example:
  - Message with 2 fields: [0x85, 0x01, 0x82, 0x00]
    field0 = 5 (0x85: stop bit, data=5)
    field1 = 130 (0x01, 0x82: (1<<7)|2 = 130)
    field_count = 2
