Non vi è dubbio che la comparsa di un gran numero di tecniche e metodologie – incapsulamento, oggetti, polimorfismo, librerie di classi, riutilizzo del codice e via dicendo – abbia contribuito alla realizzazione di un’ampia gamma di tool di natura visiva destinati a coloro che si occupano dello sviluppo di applicazioni software. L’adozione di questi tool ha comportato parecchi benefici in quanto essi fanno ricorso al concetto di “astrazione”: in altre parole cercano di “nascondere” allo sviluppatore tutti quei dettagli dei quali non è tenuto a occuparsi. La capacità di ampliare le potenzialità di questi tool con l’aggiunta di nuovi “oggetti” capaci di rispecchiare in maniera più accurata il contesto di una particolare applicazione si è rivelata particolarmente efficace.
Processori DSP, microprocessori, microcontrollori e dispositivi a segnali misti fanno ricorso a un insieme comune di tool per lo sviluppo delle applicazioni – compresi compilatori C, linker e assemblatori, oltre a un’ampia gamma di tool di debug – che sono rimasti sostanzialmente invariati nell’ultimo ventennio. La mancanza di moderni tool di sviluppo per questi dispositivi può rappresentare un ostacolo alla diffusione del loro utilizzo.
Mentre per anni i progettisti di applicazioni software hanno utilizzato i compilatori C++ per il “type checking” (ovvero controllare che i valori assegnati a una variabile siano di un tipo di dato ammissibile per il tipo della variabile) e la portabilità del codice nel corso della compilazione del codice sorgente C, i progettisti hardware hanno dovuto accontentarsi dei più tradizionali compilatori C.
Sebbene alcuni progettisti insistano sull’uso dei linguaggi assembly e/o C, la tecnologia per la generazione del codice esistente è in grado di produrre tutto il codice richiesto per un gran numero di applicazioni. Senza dimenticare che un approccio grafico di tipo “point and click” per la progettazione di un’applicazione hardware rappresenta una metodologia efficace per il design di sistemi.
Esso favorisce il riutilizzo del codice, permette di realizzare applicazioni più stabili e affidabili, consente di effettuare rapidamente la prototipazione e di minimizzare il tempo di debug. I produttori di sensori, ventole, dispositivi a semiconduttori di vario genere e altri tipi di componenti hardware dovrebbero essere supportati da opportuni “driver”, del tutto assimilabili ai driver software forniti dai costruttori di periferiche per computer. Il concetto di “plug and play” rappresenta un validissimo ausilio per la maggior parte dei progettisti hardware e i vantaggi che si otterrebbero a livello di design contribuirebbero a ridurre sensibilmente il time to market dei nuovi prodotti.
I progettisti non devono interessarsi ai dettagli inerenti l’architettura e l’implementazione dei vari dispositivi coinvolti – siano essi analogici, digitali o a segnali misti – se vogliono realizzare design ottimizzati e affidabili nel rispetto dei tempi previsti. Un maggior livello di astrazione permette ai progettisti di focalizzare la loro attenzione sul contesto dell’applicazione, senza incagliarsi nelle secche dei dettagli architetturali.
Per la maggior parte dei design non è necessario comprimere il codice per minimizzare il numero di byte e neppure ottimizzare la velocità di esecuzione a livello di picosecondi. Le moderne tecnologie di generazione e di compilazione del codice consentono di produrre codice estremamente efficiente senza richiedere competenze particolari nell’ambito della programmazione.
Con il termine paradigma si intende “un insieme di ipotesi, concetti, valori e procedure che rappresentano un mezzo per osservare la realtà da parte di una comunità che li condivide, specialmente dal punto di vista intellettuale”. Nuovi paradigmi suggeriscono dunque nuove visioni. La tecnologia è già disponibile. Per i sistemi embedded a segnali misti, dunque, è ora di tramutare queste visioni in realtà.
—————————————————————
The promise of objects, encapsulation, single and multiple inheritance, polymorphism, class libraries, data hiding, code reusability, etc., have produced a broad range of sophisticated “Visual” tools for the software application developer. These tools have provided huge benefits by exploiting the concept of “abstraction” which seeks to mask underlying details that a developer need not be concerned about. The ability to extend such tools by the addition of new “objects” that more closely reflect the context of a particular application, has proven to be significant.
DSPs, microprocessors, micro-controllers and mixed signal devices of various types all rely on a common set of tools for development of applications, including C compilers, linkers, assemblers and a variety of debugging tools, none of which have changed significantly in the last twenty years. The lack of modern application development tools for these devices can prevent chip sales from reaching full potential.
While software application designers have for years used C++ compilers to achieve stronger type checking and code portability when compiling C source code, hardware designers have been left with the traditional, “plain-vanilla” C compilers.
Although some designers insist on using assembly language and/or C, existing code generation technology can produce all of the code required for a large number of applications. And a “point and click” graphical approach to hardware application design is an effective way to design systems. It encourages code re-use, produces more stable/robust applications, and allows rapid prototyping and minimal debugging time to become a reality.
Manufacturers of sensors, fans, a wide variety of semiconductor devices and other hardware components should be supported by “drivers” similar to the software drivers provided by computer peripheral manufacturers. “Plug and Play” can work wonders for much of the hardware design community and the resulting design benefits can significantly shorten time to market for new products.
Designers must be freed from the underlying architectural and implementation details of the various components involved, whether analog, digital or some synthesis of both, if they are to produce highly optimized, robust designs in a timely manner. A higher level of abstraction allows designers to focus on designing in the context of the application and avoids the danger of the designer becoming bogged down in a swamp of the fine grain details of the underlying architecture.
For the majority of designs, it is not necessary to squeeze the code into the absolute minimum number of bytes, or to optimize execution speed to the last picosecond. Modern code generation and compiler technology is quite capable of producing very efficient code while requiring minimal programming skills.
The term paradigm is defined as “a set of assumptions, concepts, values, and practices that constitutes a way of viewing reality for the community that shares them, especially in an intellectual discipline.” Therefore new paradigms suggest new visions. We have the technology. It’s time to make the new visions a reality for mixed-signal embedded systems