Realizzazione

La realizzazione di un sistema embedded rappresenta un tipico problema ingegneristico in cui è necessario soddisfare le esigenze essenziali all'origine dell'oggetto in sviluppo (formulate in termini di "specifiche di progetto"), e possibilmente altre, meno vincolanti ma in grado di rendere più attraente il prodotto finale, con il minor costo e nel minor tempo possibile. Poichè (quasi) sempre esistono diverse alternative per realizzare il sistema, è indispensabile valutarle attentamente in modo comparativo per prendere le decisioni appropriate. Queste soluzioni, a cui è dedicato questo capitolo, sono comprese tra due estremi. Da un lato, infatti, c'è quella in cui si utilizzano sistemi, o sotto-sistemi, di tipo standard, già disponibili sul mercato. In questo caso lo sviluppo si identifica con quello del software applicativo che "specializza" il sistema verso le funzioni che deve svolgere. Perciò il software è sviluppato "indipendentemente" dall'hardware su cui dovrà "girare", il che esclude un approccio integrale al problema,come quello comunemente denominato hardware-software co-design, che potendo intervenire contestualmente su trutti gli elementi costitutivi del sistema, mira ad ottimizzarne le prestazioni. La soluzione fondata sui sistemi standard, che non prevede lo sviluppo di hardware, si caratterizza per bassi costi di sviluppo e breve Time-to-Market, ma anche per alti costi unitari, nonchè prestazioni, consumo ed ingombro nient'affatto ottimizzati. Inoltre, dà luogo a prodotti poco "sicuri" dal punto di vista della possibilità che vengano copiati da parte della concorrenza, perchè l'originalità è affidata soltanto al software, che è facilmente copiabile. Al polo opposto dello spazio delle scelte possibili c'è il caso che prevede lo sviluppo di un processore dedicato, tipicamente con metodologia semi-custom, come ad esempio quelli realizzati su silicio mediante gate-arrays. A causa dell'impegno che richiede lo sviluppo dell'hardware, questa soluzione ha costi e tempi di sviluppo generalmente alti. Tuttavia, se il progetto è ben sviluppato (a questo proposito si può anche utilizzare un approccio del tipo hardware-software co-design), il risultato può essere ottimizzato per quanto riguarda prestazioni, ingombro e consumo. Inoltre, anche il costo unitario è tipicamente molto più basso che non il caso precedente ed il prodotto è difficilmente copiabile, perchè si tratta di "decifrare" la parte hadware, il che può essere fatto mediante opportune operazioni di "ingegneria inversa" ("backward engineering") che sono difficili e, in ogni caso, molto costose. Tra questi due tipi di soluzione, ne esistono poi altre due di tipo intermedio, precisamente quella che sviluppa schede "ad hoc" a partire da componenti standard (in particolare processore e memorie) e quella che sviluppa anche il processore utilizzando dispositivi programmabili (FPGA), anzichè progettarlo su silicio. Queste due soluzioni, ovviamente, hanno costi e caratteristiche intermedie rispetto a quelle citate in precedenza.

L'esistenza di queste diverse soluzioni all'interno di un mercato molto competitivo ed attento, indica chiaramente che sono tutte valide, o meglio che ciascuna di esse risulta migliore delle altre per certe applicazioni, ovvero che ciascuna ha una "fetta di mercato" per cui è particolarmente adatta e vincente. Proprio per questo motivo, debbono essere attentamente confrontate prima di prendere una decisione su quale utilizzare. Questo confronto, peraltro, deve partire da una analisi delle specifiche tecniche e di mercato del prodotto che si intende sviluppare. Ciò richiede una attività di marketing iniziale (spesso svolta anche inconsapevolmente dai responsabili) cui è demandato il compito di individuare le caratteristiche essenziali che il prodotto deve avere per avere successo sul mercato. Da questo punto di vista è anche opportuno tenere presente che tali caratteristiche sono sempre una combinazione di cose diverse, come ad esempio le prestazioni tecniche e il Time-to-Market. Infatti un progetto sviluppato con cura per avere ottime prestazioni, ma che costi troppo ed arrivi sul mercato troppo tardi non avrà sicuramente successo, così come, all'opposto, uno che si amesso in commercio rapidamente ma non soddisfi le aspettative del cliente. Poichè tutte le voci in gioco (prestazioni, costo, ingombro, tempo di sviluppo,...) hanno caratteristiche tendenzialmente in contrasto (maggiore tempo e costo di sviluppo produce oggetti migliori ma più costosi ) è evidente che per avere successo bisogna cercare il miglior compromesso tra diversi aspetti e che questo dipende dalla specifica applicazione di interesse.