What bugs? Software reset is simpler CySoftwareReset();
That implies that the software is still running and doing what it should _or_ that the watchdog reset has not broken down. Bugs = mistakes in our code. Since the code is in software, bugs are guaranteed ;)
I think you should put more effort in writing bug-free software than designing new hardware components.
By the way: The watchdog timer is hardware.
You could design a reset block and route its output to XRES pin. It is totally fine to route the output to a digital output pin and connect it to XRES. Otherwise you can generate an interrupt based on the designed logic block and call CySoftwareReset(); as Odissey said.