Per quanto riguarda le somiglianze, entrambi si basano molto sulla logica, ed entrambi sono deterministici; cioè, a meno che qualcosa non vada storto, dati gli stessi input, un sistema hardware o software dovrebbe comportarsi allo stesso modo.
Alcuni aspetti della progettazione dell'hardware assomigliano più al software. La progettazione di FPGA, per esempio, è fatta con file sorgente che assomigliano molto al C. Questo non significa che un programmatore possa semplicemente progettare un FPGA senza sapere nient'altro, però: per la progettazione di FPGA, bisogna essere molto più consapevoli di quali tipi di risorse si sono appena spese, sotto forma di porte di ingresso, porte regolari, porte di uscita, moltiplicatori e cicli di clock, di quanto si farebbe per il normale C. Alcuni normali costrutti del C (dichiarazioni di switch, per esempio) si espandono geometricamente se li lasciate fare.
Per quanto riguarda le differenze, nel software, non dovete mai preoccuparvi della fisica. Considerate che un nanosecondo è lungo circa 6 pollici nel rame. Come ingegnere del software, questo non significa nulla per voi, ma come progettista a livello di scheda, significa tutto. Significa che l'idea di un impulso di clock su una metà della vostra scheda moderatamente grande è fuori fase con l'impulso di clock sull'altra metà. Cosa fare se ho bisogno che gli elementi di tutta la scheda si sincronizzino, e ovviamente ho bisogno che si sincronizzino?
Poi c'è il costo. Qual è il costo di rovinare la costruzione del vostro software, per esempio aggiungendo un bug importante? Beh, di regola, tutto quello che avete perso è il tempo che vi servirà per ricostruirlo. Nell'hardware? Potreste dover resinare una scheda (farla ricostruire all'esterno), al costo di settimane e potenzialmente decine di migliaia di dollari.
Questo diventa ridicolmente costoso quando si parla di resinare ASICS. L'NRE (spesa non recuperabile) per un ASIC può essere nell'ordine dei milioni.
Questa è una delle ragioni per cui gli ASIC (Application-Specific IC's) sono in disuso in gran parte del mondo dell'hardware, in favore degli FPGA ad alta densità. Con un FPGA, un errore generalmente costa lo stesso tempo di ricostruzione del software (anche se i tempi di costruzione sono più lunghi). Questo fa sì che il premio per unità che si paga per gli ultimi FPGA valga la pena in molti casi.
Nessun engineering manager vuole sentire che un bug ordinario in un ASIC gli costerà qualche mese e qualche milione di dollari. "Bene", dice, "userò l'FPGA da 300 dollari solo per evitare il rischio di questo."
A volte, una volta che un progetto FPGA è provato, un team di progettazione potrebbe scegliere di convertirlo in un ASIC. Dipende, a quel punto, dal numero di unità che si venderanno e se il risparmio per unità giustifica il NRE.
Un'altra differenza è che gli strumenti per la progettazione hardware, in particolare la progettazione ASIC, sono molto costosi e richiedono tonnellate e tonnellate di calcolo. Sono quelli che hanno bisogno di un cluster Beowulf a 64 nodi per mantenere le loro build gestibili. Il software? Datemi un portatile fatto negli ultimi 10 anni, e forse anche gli strumenti gratuiti su Linux saranno abbastanza buoni; un softwareista può letteralmente fare il suo lavoro con 50 dollari di roba in molti casi.