Hardware is any physical computer part, e.g. mouse, screen or case. It does not “cause” software, and nor is software a hardware output, in the way that physical systems have physical outputs. We create software by seeing the information choices in physical events. Software only exists when we see reality in information terms. Software needs hardware, but the same code can run on a PC, Mac or mobile phone, i.e. the same software can run on different hardware. An entity relationship diagram that describes software can work for any physical storage, whether disk, CD or USB, as data entities are not disk sectors. Software assumes some hardware but does not specify which hardware.
If any part of a device acquires software, the whole system gets an information level; e.g. a computer is information technology even though its case is just hardware. We describe a system by its highest level, so if the operating system “hangs”, or gets in an infinite loop, we say “the computer” crashed, even though the hardware is working fine. Rebooting fixes the software problem with no hardware change, so a software system can fail while the hardware still works perfectly.
Conversely, a computer can fail as hardware but not software, if a chip overheats. Replace the hardware part and the computer works with no software change needed. Software can fail without hardware failing, and hardware can fail without software failing. A hardware update need not change the software, and a software update need not change the hardware. Equally, each level has its own knowledge base, so if software fails we call a programmer, but if hardware fails we call an engineer.