```ts
export function formatBits(value: number, width: number): string {
  if (!Number.isInteger(value) || value < 0) {
    throw new Error("Value must be a non-negative integer.");
  }
  if (width <= 0 || width % 4 !== 0 || width > 32) {
    throw new Error("Width must be a positive multiple of four and less than or equal to 32.");
  }
  
  const binaryString = value.toString(2);
  const paddedBinaryString = binaryString.padStart(width, '0');
  const nibbleGroups = paddedBinaryString.match(/.{4}/g) || [];
  
  return nibbleGroups.join(' ');
}
```