CLB-periferien (Configurable Logic) i PIC16F13145-familien af mikrocontrollere gør designere i stand til at implementere komplekse diskrete logikfunktioner i hardwaren for at reducere BOM’en og udvikle kundespecifik applikationslogik
Artiklen har været bragt i Aktuel Elektronik nr. 2 – 2025 og kan læses herunder uden illustrationer
(læs originaludgaven her)
Af Robert Perkel, application engineer, Microchip Technologys 8-bit MCU business unit
I embeddede systemer er brug af diskret logik normalt, og eksempelvis 74’HC-serien ses mange steder. Denne logik gør apparater i stand til at fungere uafhængigt af en central mikrocontroller (MCU) og kan reagere hurtigere end software, men de øger BOM’en og kræver mere plads på printet.
Microchips MCU’er løser problemet gennem en indbygget CLC-periferi (Configurable Logic Cell) i PIC MCU’erne og en lignende løsning, CCL (Configurable Custom Logic), i AVR MCU’erne. Begge periferier bruger en softwaredefineret kunderettet logik, som kan eksekveres uafhængigt af processoren. Med andre ord fungerer den kundespecifikke logik uafhængigt af MCU’en efter setup af hardwaren.
En begrænsning i disse periferier er dog en begrænset mængde logik. Hver CLC er stort set ækvivalent til en enkelt LUT (Look-Up Table), mens CCL har et par uafhængige LUT’er internt. Periferien er effektiv til helt enkle logiske kredsløb, til blanding af signaler og integration med anden hardwareperiferi. Til for eksempel forhindring af prel ved tryk på knapper i hardwaren er det fint, men til generering af WS2812-outputs og kvadratur-dekodning kræves der en større mængde periferi, og da der kun er en begrænset mængde til rådighed, bliver kompleksiteten af applikationerne begrænset.
Til support af mere komplekse applikationer er en ny type af logisk periferi, CLB (Configurable Logic Block, figur 1) blevet introduceret i PIC16F13145-mikrocontrollerfamilien. CLB erstatter ikke hverken CLC- eller CCL-periferi, og en MCU kan have både CLC/CCL’er og en CLB ombord.
CLB’en i PIC16F13145-familien består af fire sæt af logiske grupper, der hver især indeholder otte BLE’er. BLE’erne er konnekterede på tværs af logikgrupperne, og hver logisk gruppe repræsenterer to GPIO-outputs samt et valgfrit interrupt for processoren (CPU). Ved en 5,5V forsyning har BLE’erne et typisk propagations-delay på mindre end 6ns. Alle BLE’er deler en fælles clock gennem det logiske væv, og clocken er konfigureret i softwaren sammen med en valgfri clock-divider. CLB’en kan bruge én af de interne clock-sources fra MCU’en selv eller en eksternt placeret clock-source.
Initiering fra memoryen
Periferien initieres fra mikrocontrollerens memory og kan styre pins direkte fra vævet selv via en PPS (Peripheral Pin Select). PPS’en gør det muligt for brugeren at omfordele de aktuelle I/O-pins med hardwareperiferien for større designfleksibilitet. Hvis RA1 for eksempel blev brugt til SPI-clocken, men det ville være mere hensigtsmæssigt at bruge RA6, så kan PPS’en omfordele disse pins.
Andre elementer i CLB inkluderer en dedikeret 3-bit hardwaretimer (med dekodede outputs), en edge-detektor til input-signaler samt et 32-bit output-register (til debugging). Andre CIP-outputs (Core Independent Peripherals) på mikrocontrolleren kan bruges som inputs for CLB’en i mere komplekse designs.
Da CLB’en er betydeligt mere kompleks end både CLC og CCL, har Microchip udviklet et nyt værktøj, CLB Synthesizer. CLB Synthesizer giver et grafisk interface til konfiguration af logikken som vist i figur 2. Ud over logik-primitives supporterer værktøjet også biblioteker af højniveaulogik, som enten kan leveres prækonfigureret eller kundeudviklet af brugeren selv.
Ved interaktion med det grafiske værktøj bliver et Verilog-modul genereret ”bag tæppet” af hensyn til syntese. Hvis en designer foretrækker at skrive sin egen Verilog – eller har en færdig fil klar – så kan filen importeres direkte til værktøjet som et modul.
Output af CLB Synthesizeren er en assembler-fil, der indeholder en bitstream, som laver setup af CLB’en og indeholder source-kode til konfiguration af CLB’en som periferi. Dette værktøj kan køre over en MPLAB Code Configurator (MCC) eller via et standalone online-værktøj. MCC er kodegenerering, som gør brugeren i stand til at udføre setup og konfiguration af periferien i mikrocontrolleren med et visuelt interface. Efter konfiguration af hardwareperiferien genererer MCC’en en initialiseringskode samt en device-API.
I runtime bliver CLB-bitstreamen loaded direkte fra program-memoryen med en on-board hardware. En fordel ved den implementering er, at skulle CLB-konfigurationen behøve ændringer, mens programmet kører, så kan load-processen gentages med en forskellig bitstream, der er lagret i komponentens memory.
For at demonstrere CLB i applikationer har Microchip udviklet case-eksempler. Følgende er to eksempler, nemlig en 7-segment display-konverter samt en SPI-til-WS2812. Brugereksemplerne er byggesten, der kan kopieres og bruges som en del af en komplet løsning. De skal demonstrere anvendeligheden af periferien, og hvad der måtte skulle tilføjes i et design.
7-segment display-konverter
Første bruger-case er en 7-segment display-konverter. 7-segment displays kan drives fra et normalt sæt I/O-pins, men en standardimplementering kræver normalt en softwaredefineret lookup-tabel til konvertering fra et input number til et korrekt output-mønster for displayet. I denne implementering fungerer CLB’en som en hardware lookup-tabel. De ønskede karakterer på output (0 til F) loades i CLB’ens input-register fra softwaren. Hvert output-segment i displayet er styret af LUT’en, der mapper inputs til outputs.
Dette bruger-case-eksempel har været designet internt til at bygge et nyt kontrol-board til et tidstagningssystem. Det oprindelige bruger-interface blev udviklet i 1980’erne med en logik fra 74’HC-serien. Med brug af CLB’en kan én enkelt 20-pin mikrocontroller implementere display- og keypad-logik direkte på boardet, og det reducerer BOM’en ganske betydeligt. Forskellen mellem de to designs er vist i figur 3.
WS2812-konverter
Næste eksempel er en SPI-til-WS2812-konverter. WS2812 er en 1-wire seriel protokol til styring af LED-arrays med pulsbreddemodulation (PWM). I dette tilfælde bruges SPI-hardwaren som et skifteregister for de data, der skal sendes ud til LED’erne, mens CLB konverterer SCLK og SDO til det forventede output.
Eksemplet er implementeret med brug af en mono-triggered 3-bit counter, en D-latch med Enable samt en 4-input LUT, som vist i figur 4. Tricket i denne implementering er clock-sources for SPI og CLB. SPI-clocken er sat til idle High med tilstandsskift på den stigende flanke og kørsel på WS2812’s frekvens-output (800kHz), mens CLB’ens clock-source kører ved 10x den hastighed (8 MHz). Når SCLK er Low, så trigger man 3-bit counteren, og den begynder at tælle. Når counteren når 7 (0b111), stopper 3-bit counteren og forbliver i 0, indtil den næste lave periode i clock-pulsen.
Output for counteren føres frem til en 4-input LUT sammen med en latched version af output-data. Det opstiller output-mønstret for data, som kan ses i den højre side af figur 4. Efter reset af counteren vil counter-output forblive ved 0 for at fuldende cyklus. Så vil den næste byte – om nødvendigt – SPI-hardwaren blive transmitteret, og cyklus bliver gentaget.
Begge eksempler demonstrerer fordelene ved en diskret logikimplementering internt i en mikrocontroller. Hardwareperiferien offloader opgaver fra CPU’en, der dermed opnår en bedre responstid og et mindre energiforbrug, og designet kræver færre komponenter. CLB’en gør udvikling af komplekse applikationer – som ikke tidligere kunne realiseres internt i en MCU – til en reel mulighed. På nuværende tidspunkt leverer Microchip CLB i sin PIC16F13145-familie af mikrocontrollere.
Billedtekster:
Figur 1: Blokdiagram for CLB-periferi.
Figur 2: CLB Synthesizer med et åbent PSK-eksempel (Phase-Shift Keying). (PSK).
Figur 3: Side ved side-sammenligning af et oprindeligt print med diskret logik til en 7-segment display-konverter med et nyt CLB-baseret design. Dette designeksempel er udviklet af Josh Booth.
Figur 4: Blokdiagram for en SPI-til-WS2812-konverter udviklet af Petre Teodor-Emilian.