In the BLE component customizer, there is an option to use the company assigned device address. Here , the silicon address which is generated is different for different devices. So even if two or more peripherals have the same firmware, the address will be different and the central can easily identify the peripheral devices.
To enable this, go to the BLE component customizer -> go to GAP settings tab -> select general option -> check the box Silicon generated "company assigned" part of device address.
If you program two peripherals with same firmware having same device name and scan from your central device using CySmart, you can see the same device name being shown for the two peripheral devices but the bluetooth address will be different.
Thank you for the quick response. I did have the Silicon generated "company assigned" part of address checked. I only have one hardware peripheral device so I can't verify your answer using CySmart as you suggested. What surprised me was that even after regenerating the project and re-building, the device still had the same address. So what I suspect is that the hardware BLE chip has something inside it that will cause a unique address to be generated but it will always be the same address for same physical BLE chip.
During mass production, the 48 bit bluetooth device address is assigned to the BLE chip which is the Silicon generated "company assigned" part of device address. But the user can also write the BLE address in the SFLASH (Supervisory flash) where the first 6 bytes of Row 0 are reserved for the BLE device address.
Please go through this KBA - Setting Bluetooth Device Address - KBA211407 . This gives the details regarding setting the Bluetooth Device Address.