In molte applicazioni di sistemi embedded, vengono comunemente utilizzati dispositivi logici discreti, come la serie 74HC. Il vantaggio di questi dispositivi logici è che operano indipendentemente dal microcontrollore e possono rispondere molto più velocemente del software. Tuttavia, questi dispositivi aumentano la distinta base e richiedono più spazio sul circuito stampato. Per ovviare a questo problema, molti microcontrollori Microchip integrano una periferica chiamata CLC (Configurable Logic Cell) nei microcontrollori PIC® o una periferica simile chiamata CCL (Configurable Custom Logic) nei microcontrollori AVR®. Entrambe le periferiche implementano una logica personalizzata, definita via software, che può essere eseguita indipendentemente dalla CPU. In altre parole, una volta configurata la funzione logica personalizzata, il suo funzionamento è indipendente dal microcontrollore. Tuttavia, un limite di queste periferiche è la quantità limitata di logica che offrono. Ogni CLC è approssimativamente equivalente a una singola tabella di ricerca (LUT), mentre ogni CCL integra una coppia di LUT indipendenti. Queste periferiche sono strumenti potenti per lo sviluppo di circuiti logici semplici. Combinano segnali e si integrano con altre periferiche hardware. Ad esempio, tutti gli esempi di debounce su un pulsante hardware, generazione con il WS2812 e decodifica in quadratura richiedono queste periferiche, ma sul microcontrollore ne sono presenti solo alcune, il che limita la complessità delle applicazioni. Per supportare applicazioni più complesse, è stato aggiunto alla famiglia di microcontrollori PIC16F13145 un nuovo tipo di periferica logica, chiamata Configurable Logic Block (CLB) , come mostrato in Figura 1. Si noti che il CLB non sostituisce le periferiche CLC o CCL e che i dispositivi possono essere uno o più CLC/CCL o un CLB.

Figura 1. Diagramma a blocchi del CLB.
Il CLB della famiglia PIC16F13145 è costituito da quattro gruppi logici, ciascuno contenente otto BLE. I BLE in ogni gruppo logico sono collegati; ogni gruppo rappresenta due uscite GPIO e un interrupt della CPU opzionale. Quando operano a 5,5 V, i BLE hanno un ritardo di propagazione tipico inferiore a 6 ns. Tutti i BLE condividono la stessa struttura di clock, la cui sorgente è configurata via software insieme a un partitore di clock opzionale. Il CLB può utilizzare una delle sorgenti di clock interne del microcontrollore o una sorgente esterna.
La periferica viene inizializzata dalla memoria del microcontrollore e può controllare i pin direttamente dalla struttura stessa tramite Peripheral Pin Select (PPS). Il PPS consente all'utente di riassegnare i pin di I/O utilizzati dalle periferiche hardware, aumentando notevolmente la flessibilità di progettazione. Ad esempio, se RA1 fosse utilizzato per il clock SPI, sarebbe più vantaggioso utilizzare RA6 e il PPS riassegnerebbe il pin.
Altri elementi integrati nel CLB includono un timer hardware a 3 bit con uscite decodificate, un rilevatore di fronte per i segnali di ingresso e un registro di uscita a 32 bit per il debug. Altre uscite delle periferiche indipendenti dal core (CIP) del microcontrollore possono essere utilizzate come ingressi per il CLB in progetti più complessi.
Poiché il CLB è considerevolmente più complesso del CLC o del CCL, è stato sviluppato un nuovo strumento chiamato CLB Synthesizer. CLB Synthesizer fornisce un'interfaccia grafica per la configurazione della logica, come mostrato in Figura 2. Oltre alla logica primitiva, lo strumento supporta anche blocchi logici di livello superiore, che possono essere forniti o creati dall'utente.
L'interazione con lo strumento grafico genera in background un modulo Verilog per la sintesi. Se lo sviluppatore preferisce scrivere il proprio codice Verilog o dispone di un file già pronto, può importarlo direttamente nello strumento come modulo.
Figura 2. Sintetizzatore CLB con un esempio di PSK (Phase-Shift Keying). L'output del sintetizzatore CLB è un file assembler contenente il bitstream per la regolazione del CLB e il codice sorgente per la configurazione del CLB come periferica. Questo strumento può essere eseguito tramite MPLAB® Code Configurator (MCC) o come strumento online autonomo . MCC è un'utility di generazione del codice che consente agli utenti di regolare e configurare le periferiche sul microcontrollore tramite un'interfaccia visiva. Dopo aver configurato le periferiche hardware, MCC genera il codice di inizializzazione e un'API del dispositivo. Durante l'esecuzione, il bitstream del CLB viene caricato direttamente dalla memoria di programma utilizzando l'hardware integrato. Un vantaggio di questa soluzione è che è necessario modificare la configurazione del CLB solo mentre il programma è in esecuzione e il processo di caricamento può essere ripetuto con un bitstream diverso memorizzato nella memoria del dispositivo. Sono stati creati una serie di esempi di utilizzo per dimostrare la funzionalità del CLB nelle applicazioni. Vediamo due esempi: il convertitore per display a 7 segmenti e il convertitore da SPI a WS2812 . Questi esempi sono blocchi funzionali che possono essere copiati e utilizzati come parte di una soluzione completa. Sono stati sviluppati per dimostrare l'utilità di questa periferica e il suo contributo a un progetto. Il primo esempio è un convertitore per display a 7 segmenti . I display a 7 segmenti possono essere controllati tramite normali pin di I/O, ma un'implementazione standard richiede solitamente una tabella di ricerca definita via software per convertire il numero di ingresso nel pattern di uscita corretto per il display. In questa implementazione, il CLB funziona come una tabella di ricerca hardware. Il carattere di uscita desiderato (da 0 a F) viene caricato nel registro di ingresso del CLB dal software. Ogni segmento di uscita del display è controllato da una LUT che mappa ingressi e uscite. Questo esempio è stato utilizzato internamente per costruire una nuova scheda di controllo per il sistema di sincronizzazione. L'interfaccia utente originale è stata sviluppata negli anni '80 utilizzando la logica della serie 74HC. Con il CLB, un singolo microcontrollore a 20 pin può implementare la logica del display e della tastiera sulla scheda, riducendo così significativamente la distinta base. La Figura 3 confronta le due tecnologie.

Figura 3. Confronto tra il circuito stampato originale e il nuovo assemblaggio. Questo esempio è stato sviluppato da Josh Booth.
Il convertitore da SPI a WS2812 è mostrato di seguito . Il WS2812 è un protocollo seriale a singolo filo per il controllo di matrici di LED tramite modulazione a larghezza di impulso (PWM). In questo caso, l'hardware SPI viene utilizzato come registro a scorrimento per i dati inviati ai LED, mentre il CLB converte SCLK e SDO nell'uscita desiderata. Nell'esempio, ciò è implementato utilizzando un contatore a singolo impulso a 3 bit, un latch D con abilitazione e una LUT a 4 ingressi, come mostrato in Figura 4. La chiave di questa soluzione risiede nelle sorgenti di clock per SPI e CLB. Il clock SPI è mantenuto alto in modalità standby, cambia stato su un fronte di salita e opera alla frequenza di uscita del WS2812 (800 kHz), mentre la sorgente di clock del CLB ha una velocità dieci volte superiore (8 MHz). Quando SCLK passa a livello basso, il contatore a 3 bit inizia a contare. Quando il contatore raggiunge 7 (0b111), si arresta e rimane a 0 fino al successivo periodo basso dell'impulso di clock. L'uscita del contatore viene inviata a una LUT a 4 ingressi insieme a una copia memorizzata dei dati di uscita. Questo stabilisce la sequenza di dati in uscita, visibile sul lato destro della Figura 4. Una volta azzerato il contatore, la sua uscita seguirà lo 0 per completare il ciclo. Quindi, se necessario, il byte successivo viene trasmesso tramite l'interfaccia SPI hardware e il ciclo si ripete.

Figura 4. Diagramma a blocchi del convertitore da SPI a WS2812 sviluppato da Petre Teodor-Emilian.
Entrambi gli esempi dimostrano il vantaggio di integrare la logica discreta in un microcontrollore. Le periferiche hardware alleggeriscono il carico di lavoro della CPU, migliorando i tempi di risposta e il consumo energetico, oltre a ridurre il numero di componenti. Il CLB consente lo sviluppo di applicazioni complesse che in precedenza erano impossibili da implementare su un microcontrollore. Attualmente, il CLB è presente nella famiglia di microcontrollori PIC16F13145, disponibile tramite Microchip Direct o altri distributori.
Autore: Robert Perkel, ingegnere applicativo presso la Business Unit Microcontrollori a 8 bit di Microchip Technology
Robert Perkel è un ingegnere applicativo presso Microchip Technology, dove si occupa dello sviluppo di contenuti tecnici come note applicative, articoli e video. È inoltre responsabile dell'analisi dei casi d'uso delle periferiche e dello sviluppo di esempi di codice e dimostrazioni. Perkel ha studiato al Virginia Tech, dove ha conseguito una laurea in Ingegneria Informatica
