Quelles sont les similitudes entre le matériel et le logiciel, et quelles sont les différences ?


Pour les similitudes, les deux s'appuient fortement sur la logique, et les deux sont déterministes ; c'est-à-dire que, sauf si quelque chose ne va pas, étant donné les mêmes entrées, un système matériel ou logiciel devrait se comporter de la même manière.

Certains aspects de la conception matérielle ressemblent davantage à des logiciels. La conception de FPGA, par exemple, se fait avec des fichiers sources qui ressemblent beaucoup au C. Cela ne signifie pas qu'un programmeur peut simplement concevoir un FPGA sans rien savoir d'autre, cependant : pour la conception de FPGA, vous devez être beaucoup plus conscient des sortes de ressources que vous venez de dépenser, sous la forme de portes d'entrée, de portes régulières, de portes de sortie, de multiplicateurs et de cycles d'horloge, que vous ne le feriez pour le C ordinaire. Certaines constructions C normales (les instructions switch, par exemple) s'étendront géométriquement si vous les laissez faire.


En ce qui concerne les différences, dans les logiciels, vous n'avez jamais à vous soucier de la physique. Considérez qu'une nanoseconde fait environ 15 cm de long en cuivre. En tant qu'ingénieur logiciel, cela ne signifie rien pour vous, mais en tant que concepteur de cartes, cela signifie tout. Cela signifie que l'idée d'une impulsion d'horloge sur une moitié de votre carte de taille moyenne est déphasée par rapport à l'impulsion d'horloge sur l'autre moitié. Que faire si j'ai besoin que des éléments sur toute la carte se synchronisent, et bien sûr j'ai besoin qu'ils se synchronisent ?


Et puis il y a le coût. Quel est le coût de bousiller la construction de votre logiciel, disons en ajoutant un bogue majeur ? Eh bien, en règle générale, tout ce que vous avez perdu est le temps qu'il vous faudra pour la reconstruire. Pour le matériel ? Vous pourriez avoir à respinner une carte (la faire reconstruire à l'extérieur), au prix de semaines et potentiellement de dizaines de milliers de dollars.

Cela devient ridiculement cher quand on parle de respinner des ASICS. La NRE (dépense non récupérable) pour un ASIC peut se chiffrer en millions.

C'est l'une des raisons pour lesquelles les ASIC (Application-Specific IC's) ne sont plus en faveur dans une grande partie du monde du matériel, au profit des FPGA à haute densité. Avec un FPGA, une erreur coûte généralement le même temps de reconstruction qu'un logiciel (bien que les temps de construction soient plus longs). Cela fait que la prime par unité que vous payez pour les derniers FPGA en vaut la peine dans de nombreux cas.

Aucun responsable d'ingénierie ne veut entendre qu'un bug ordinaire dans un ASIC va lui coûter quelques mois et quelques millions de dollars. " Très bien ", dit-il, " je vais utiliser le FPGA à 300 $ juste pour éviter ce risque. "

Parfois, une fois qu'une conception FPGA est éprouvée, une équipe de conception peut choisir de la convertir en ASIC. Cela dépend, à ce moment-là, du nombre d'unités que vous allez vendre, et si les économies par unité justifient le NRE.

Une autre différence est que les outils de conception matérielle, en particulier la conception ASIC, sont très chers et nécessitent des tonnes et des tonnes de calcul. Ce sont les gars qui ont besoin d'un cluster Beowulf de 64 nœuds pour que leurs constructions restent gérables. Les logiciels ? Donnez-moi un ordinateur portable fabriqué au cours des 10 dernières années, et peut-être même que les outils gratuits sur Linux seront assez bons ; un gars du logiciel peut littéralement faire son travail avec des trucs à 50 $ dans de nombreux cas.

Les outils de conception matérielle sont très chers et nécessitent des tonnes et des tonnes de calcul.