Con Smart I/O le porte logiche diventano intelligenti

progettisti impegnati nello sviluppo di sistemi spesso si trovano nella necessità di dover implementare logica digitale a livello di pin sui segnali di ingresso e di uscita. Per esempio, i progettisti che devono risolvere il problema della propagazione del clock mediante un microcontrollore spesso devono creare un albero per la distribuzione del clock, replicare un clock di ingresso in parecchie istanze bufferizzate (con le relative funzionalità di pilotaggio) o invertire la polarità del clock. Vi sono altri numerosi esempi in cui i progettisti di sistemi devono implementare logica combinatoria sui segnali di ingresso o di uscita. Tradizionalmente l’opzione che hanno a disposizione per effettuare queste modifiche “all’ultimo minuto” prevede l’uso di componenti esterni come ad esempio circuiti logici combinatori discreti e “blue wire” (ovvero i cavi o i fili aggiunti all’hardware per risolvere problemi di progetto) per collegare questi componenti. Una soluzione di questo tipo, oltre a incrementare la Bom, comporta la necessità di eseguire numerose modifiche al Pcb, operazioni particolarmente onerose in termini temporali. Complice la sempre più ampia diffusione di dispositivi alimentati a batteria, il consumo di potenza è divenuto il problema più importante per i progettisti. Anche la più piccola quantità di energia che viene risparmiata contribuisce ad aumentare la durata della batteria e quindi l’intervallo temporale di ricaricata. Per questo motivo i progettisti cercano di alleggerire il lavoro della Cpu, uno dei dispositivi che contribuisce in misura maggiore ai consumi complessivi, implementando alcuni semplici compiti di elaborazione dei segnali di I/O in hardware. Per esempio, è possibile implementare l’effetto “breathing” (con questo termine si intende il passaggio da uno stato di luminosità zero al massimo livello di luce per poi di nuovo scendere gradualmente e quindi ricominciare daccapo, un effetto che ha quindi la parvenza di un respiro) di più Led utilizzando porte Xor con due segnali Pwm (modulazione a variazione della larghezza d’impulso) come ingressi e la porta di I/O come uscita. I due segnali Pwm devono avere frequenze leggermente differenti e la frequenza di battimento è la “velocità di respirazione” richiesta per i Led. Grazie a questo schema è possibile evitare che la Cpu si attivi a intervalli regolare, come accadrebbe nel caso in cui questa logica fosse stata implementata in firmware. Attualmente sono disponibili microcontrollori che mettono a disposizione logica programmabile sulle porte di I/O, integando quindi le funzionalità di I/O implementate come logica sparsa a livello di scheda (come ad esempio porte And, Or e Xor). Nella Fig. 3 è illustrata una possibile modalità di integrazione di un blocco Smart I/O. Questo blocco è posizionato sul percorso del segnale tra le periferiche della Mcu e la porta di I/O. Sugli ingressi verso il chip dalla porta di I/O è possibile effettuare operazioni logiche prima che vengano istradati verso le periferiche della Mcu e le risorse di connettività. Allo stesso modo sulle uscite dei blocchi periferici e delle risorse di connettività interne del chip possono essere effettuate operazioni logiche prima che queste siano istradate verso le porte di I/O. Il blocco Smart I/O può funzionare anche quando il dispositivo si trova in modalità a basso consumo e può svegliare il chip utilizzando, quando richiesto, l’interrupt della porta.

I componenti del blocco Smart I/O

Ciascun blocco è associato a una specifica porta e può operare su un segnale proveniente o diretto verso quella porta. Nel caso del dispositivo PSoC 4 di Cypress il blocco Smart I/O è composto da 8 Lut a 3 ingressi con una matrice di interconnessione, come mostrato in Fig. 4. Grazie alla matrice di interconnessione il blocco Smart I/O garantisce la massima flessibilità in termini di collegamento. Gli utenti non devono scrivere alcuna linea di codice per configurare il blocco Smart I/O. La tool chain di progetto della Mcu, PSoC Creator in questo caso, semplifica la configurazione del blocco Smart I/O che viene effettuata mediante un’interfaccia utente grafica. Selezionando un menu a tendina è possibile instradare in maniera molto semplice i segnali in ingresso verso le Lut e il segnale in uscita dalla Lut. La tabella della verità delle Lut del blocco Smart I/O può essere configurata specificando il valore di uscita per tutte le possibili combinazioni di ingresso come mostrato nella Fig. 5.

Esempi di applicazione dei blocchi Smart I/O

Sono numerose le applicazioni che possono utilizzare un blocco Smart I/O per ridurre il costo della Bom, il carico di lavoro della Cpu e il consumo di potenza del dispositivo. Di seguito vengono riportate due applicazioni tipiche.

Utilizzo del blocco Smart I/O per implementare elementi logici - Le Lut del blocco Smart I/O possono essere utilizzate come elementi logici generici per realizzare funzioni logiche custom come ad esempio porte logiche, encoder con priorità 4:2, registri a scorrimento e filtri glitch. Nella Fig. 6 è riportato un esempio di realizzazione dell’effetto breathing di un Led mediante porte logiche: in questo caso due segnali Pwm con frequenze leggermente diverse costituiscono gli ingressi di una porta Xor. La Fig. 7 illustra invece l’utilizzo del blocco Smart I/O di una Mcu PSoC 4 per implementare il medesimo effetto: in questo caso la porta Xor è realizzata nel blocco Smart I/O configurando la tabella della verità della Lut come riportato in Fig. 8.

Rilevamento di pattern - Le tabelle Lut del blocco Smart I/O possono essere configurate per rilevare un determinato pattern sui segnali di ingresso. Nei sistemi embedded alimentati a batteria il microcontrollore viene posto in una delle varie modalità “low power” al fine di ridurre i consumi. Nel momento in cui si verifica un evento specifico, la Cpu viene risvegliata mediante un segnale di interrupt per poter processare l’evento in questione (Fig. 9). In determinate applicazioni è necessario svegliare il dispositivo sulla base di una combinazione specifica di eventi multipli e processare l’evento. I microcontrollori oggi disponibili richiedono che la Cpu venga svegliata per rilevare il pattern ed elaborare l’evento. La Cpu quindi deve essere svegliata ad ogni evento per verificare se la specifica combinazione è quella corretta, con conseguente incremento dei consumi. Il blocco Smart I/O può operare in modalità low power ed essere utilizzato per svegliare il dispositivo in funzione del verificarsi di una specifica combinazione di eventi multipli. In Fig. 10 è riportata un’applicazione Smart I/O dove la Mcu si risveglia dallo stato di “deep sleep” in un funzione di una combinazione specifica di più eventi. In questo caso, solo quando entrambi gli ingressi sono nello stato logico alto il dispositivo si sveglia e invia lo stato del sensore al ricevitore o pilota un allarme per informare l’utente di bloccare tutte le porte. Il blocco Smart I/O esegue un’operazione di And sugli ingressi provenienti dai due pin di I/O che vengono inviati al controllore che rileva l’interrupt e sveglia il dispositivo dalla modalità “deep sleep”. Poiché il risveglio avviene solo quanto entrambe le condizioni sono verificate, è possibile ridurre il consumo di potenza del dispositivo e aumentare quindi la durata della batteria.

Pubblica i tuoi commenti