News Microchip CLB – erste Versuche zur „FPGA-Zelle“ im Achtbitter


von Tam H. (Firma: Tamoggemon Holding k.s.) (tamhanna)


Angehängte Dateien:

Lesenswert?

Microchip erweitert das Achtbitter-Portfolio permanent um innovative Peripheriegeräte, die Entwicklern das Auslagern von Rechenaufgaben vom Kern an die Core Independent Peripherals erlauben. Mit dem PIC16F13145 steht eine logische Weiterentwicklung der CLC an – dieser Artikel wirft einen ersten Blick auf die als Configurable Logic Block bezeichnete Engine und vergleicht ihn mit der CLC.

Worum geht es hier

Mit der in der ersten Abbildung gezeigten CLC wagte Microchip den ersten Schritt in die Welt der „konfigurierbaren Logik“. Der blaue Block konnte dabei verschiedene Aufgaben übernehmen, die eine „Vermaschung“ der anliegenden Signale ohne Eingriff von Seiten des Rechenkerns erledigten.

Bildquelle: https://developerhelp.microchip.com/xwiki/bin/view/products/mcu-mpu/8bit-pic/peripherals/clc/

Ob der sehr rigiden Struktur war der Einsatzbereich des Moduls streng limitiert. Mit der CLB setzt Microchip stattdessen auf eine matrizierte Struktur, die – wie in der Abbildung gezeigt – bis zu 32 „flexible Funktionseinheiten“ zur Verfügung stellt.

Bildquelle: Microchip

Exkurs: Online-Bitstromgenerator

Microchip bietet unter der URL https://logic.microchip.com/clbsynthesizer/ ein im Browser lebendes Synthesewerkzeug an. Es ermöglicht die Generierung von Gatterschaltungen und ermöglicht auch ihre – teilweise – Verdrahtung mit Eingangs- und Ausgangssignalen.

Bildquelle: Autor

Über CLB Synthesizer → Save Design lässt sich eine .clb-Datei exportieren, die danach in verschiedenen anderen Werkzeugen ladbar ist. In der Praxis ist das System allerdings eher wenig nützlich, da die eigentliche Entwicklung in MPLAB erfolgt.

Erste Versuche und Beschaffung

Als der Autor die Arbeiten an diesem Artikel begann, waren die Bauteile nur als Samples bei Microchip verfügbar. Die Lieferung der drei PIC16F13145-I/SS erfolgte zollschonend aus Thailand mit einem Zwischenstop in Frankreich; im Moment ergibt eine OEMSecrets-Suche nach wie vor keine Lieferbarkeiten außerhalb von Microchip.

Bildquelle: https://www.oemsecrets.com/compare/PIC16F13145

Wie bei den Achtbittern üblich plant Microchip auch hier das Anbieten einer DIP-Variante. Im Datenblatt findet sich außerdem der hier tabellarisch gezeigte Speisezettel.

Bildquelle: Microchip

Mit einem Adapter ist es problemlos möglich, eine primitive Entwicklungsplatine zu konstruieren. Wichtig ist vor Allem die Verwendung einer brandaktuellen Version von MPLab (hier 6.20), als Kommandogerät soll ein PicKit4 zum Einsatz kommen. Nach dem erfolgreichen Abarbeiten des Projektgeneratorassistenten (man achte auf eine brandaktuelle Version von XC8) öffnen wir MCC und fügen in der Rubrik Device Resources das Modul CLB1 zum Projekt hinzu. Lohn der Mühen ist das Erscheinen der in der Abbildung gezeigten Oberfläche, die eine lokale Version des CLB Synthesizer einbindet.

Bildquelle: Autor

Für einen ersten Versuch bietet siich die Auswahl des Beispiels Invert a Signal an. Ein Doppelklick auf den Tabheader ermöglicht den Wechsel in den Vollschirmmodus, der dringend empfehlenswert ist.

Bildquelle: Autor

Nach einem Klick auf das unten links befindliche Synthesize-Steuerelement erscheint ein grüner Haken und eine Art Fortschrittsbalken, der über die „Menge“ der verbrauchten Logikblöcke informiert. Schließen Sie das CLB-Fenster danach, um im normalen Project Resources-Fenster weiterzuarbeiten. In der Pin Grid View-Anzeige scheinen die Ein- und Ausgangspins dann zur Ansteuerung bzw Zuweisung auf – die Aktualisierung erfolgt erst nach (!) dem Schließen des CLB-Fensters (!!!).

Bildquelle: Autor

Die vom Autor verwendete Belegung präsentiert sich wie in der Abbildung gezeigt.

Bildquelle: Autor

Betrachtung des Codes

Ist die Generation des Codes erfolgreich verlaufen, so entsteht im Unterordner MCC Generated Files die Struktur clb/src. In clbBitstream.s findet sich eine nach folgendem Schema aufgebaute Bitstromdatei:

1
GLOBAL  _start_clb_config
2
GLOBAL  _end_clb_config
3
4
PSECT  clb_config,global,class=STRCODE,delta=2,noexec,split=0,merge=0,keep
5
6
_start_clb_config:
7
    DW  0x0000
8
    DW  0x0000
9
    DW  0x0000
10
    DW  0x0000
11
    DW  0x0000
12
    DW  0x0000
13
    DW  0x0000
14
    DW  0x0000
15
    DW  0x0000
16
    . . . .

Die eigentliche Logik findet sich in clb1.c – interessant ist vor Allem die folgende Methode, die sich um die Initialisierung des CLB kümmert:

1
void CLB1_Configure(uint16_t start_address)
2
{
3
4
    uint16_t end_address;
5
6
    end_address = start_address + 102;
7
8
    // Set the bitstream address
9
    CRC_SetScannerAddressLimit(start_address, end_address);
10
11
    // Start CLB bitstream load
12
    CRC_StartNvmScanner();
13
14
    // Wait to complete
15
    while (CRC_IsScannerBusy());
16
17
    // Switch back to the CRC peripheral
18
    CRC_StopNvmScanner();
19
}

Die Aktivierung der Lademethode erfolgt separat:

1
void CLB1_Initialize(void)
2
{
3
    /* Disable CLB */
4
    CLBCONbits.CLBEN = 0;
5
6
    //Load the bitstream
7
    CLB1_Configure((uint16_t) &start_clb_config);
8
9
    /* CLK HFINTOSC; */
10
    CLBCLK = 0x6;
11
12
    /* OESEL0 0; OESEL1 0; */
13
    CLBPPSCON1 = 0x0;
14
15
    /* OESEL2 0; OESEL3 0; */
16
    CLBPPSCON2 = 0x0;
17
18
    /* OESEL4 0; OESEL5 0; */
19
    CLBPPSCON3 = 0x0;
20
21
    /* OESEL6 0; OESEL7 0; */
22
    CLBPPSCON4 = 0x0;
23
24
    // Clearing CLB1I0 IF flag.
25
    PIR7bits.CLB1IF0 = 0;
26
    // Disabled CLB1I0 CLB1 interrupt
27
    PIE7bits.CLB1IE0 = 0;
28
29
    // Clearing CLB1I1 IF flag.
30
    PIR7bits.CLB1IF1 = 0;
31
    // Disabled CLB1I1 CLB1 interrupt
32
    PIE7bits.CLB1IE1 = 0;
33
34
    // Clearing CLB1I2 IF flag.
35
    PIR7bits.CLB1IF2 = 0;
36
    // Disabled CLB1I2 CLB1 interrupt
37
    PIE7bits.CLB1IE2 = 0;
38
39
    // Clearing CLB1I3 IF flag.
40
    PIR7bits.CLB1IF3 = 0;
41
    // Disabled CLB1I3 CLB1 interrupt
42
    PIE7bits.CLB1IE3 = 0;
43
44
    /* EN enabled; */
45
    CLBCON = 0x80;
46
47
}

Um den eigentlichen Aufruf kümmert sich dann folgende Methode:

1
void SYSTEM_Initialize(void)
2
{
3
    CLOCK_Initialize();
4
    CLB1_Initialize();
5
    PIN_MANAGER_Initialize();
6
    CRC_Initialize();
7
    NVM_Initialize();
8
    INTERRUPT_Initialize();
9
}

Ebenda finden sich auch einige Methoden, die die Kommunikation mit den 32 bit breiten „Steuerregistern“ ermöglichen. Aus Sicht der Recheneinheit stehen zwei Registergruppen aus je vier Kernregistern zur Verfügung, die wie in der Abbildung gezeigt mit den diversen Funktionseinheiten verdrahtet werden. Hier als Auszug eine der Beispielmethoden:

1
void CLB1_SWIN_Write8(uint8_t data)
2
{
3
    //wait for CLBSWIN register to be synchronized
4
    while (CLB1_IsCLBSWINBusy());
5
6
    CLBSWINL = data;
7
}

Wie geht es weiter?

Nachdem wir uns die grundlegende Struktur eines CLB-basierten Projekts angesehen haben, ist es nun an der Zeit, in die Praxis überzugehen. Dies ist Thema eines Folgeartikels – über eventuelle Fragen und Testwünsche freut sich der Autor wie immer im Kommentarbereich.


: Bearbeitet durch NewsPoster
von Luky S. (luky)


Lesenswert?

Microchip Advertorials als "News"?

von 🍅🍅 🍅. (tomate)


Lesenswert?

Zynq für Arme/Dumme?

von Motopick (motopick)


Lesenswert?

🍅🍅 🍅. schrieb:
> Zynq für Arme/Dumme?

Lichtjahre davon entfernt. Sieh dir mal eine einzelne Zelle an,
und vergleiche sie mit einer LUT/LE.
Und richtig neu ist es eigentlich auch nicht.
Statt 4 CLC-Zellen wie bei einem 16F1509 sind es jetzt halt 32
und das ganze heisst jetzt CLB.
Ganz unnuetz sind diese 4 CLC-Zellen zumindest nicht.

Ein UPSD3233/4, dass ist ein 8051-Derivat von ST, hat auch ein PLD.
Dort z.B. zur externen Adressdekodierung ausgesprochen nuetzlich.
Das hat aber auch 3000 Gates mit 16 Macrozellen.
Leider abgekuendigt...

von Sigint 112 (sigint)


Lesenswert?

Es gab damals doch die FPSLIC... ein AVR in Kombination mit einem FPGA.
Leider waren die Software-Tools unbezahlbar, sonst hätte ich mir ein 
paar von den Chips besorgt. Ich würde mir einen kleinen FPGA mit AVR 
Hardcore und RAM wünschen.

von Vanye R. (vanye_rijan)


Lesenswert?

> Es gab damals doch die FPSLIC... ein AVR in Kombination mit einem FPGA.

Oder auch ein RP2040 (PIO) und 68332(TPU) geht auch in die Richtung,
wenn vielleicht auch nicht ganz so flexibel. Oder die PSOCs,
es gab da in den letzten 20Jahren immer wieder Ansaetze. Aber
so eine richtig grosse Verbreitung hat es irgendwie nie gefunden.

Man braucht sowas vermutlich nicht oft, aber wenn dann kann es sehr
nuetzlich sein. Allerdings mit MPLAP auf einem Pfui-Betriebsystem
mit Gattern rumdroesseln? Ne, dann schreib ich das lieber
in abgehalfterten Assembler fuer den RP2040.

Vanye

von Gerhard H. (hauptmann)


Lesenswert?

Vanye R. schrieb:
> Man braucht sowas vermutlich nicht oft

Letztlich sind das nur halbe Lösungen.
Schaut man sich an was damit gebaut werden soll kommt man entweder zum 
Schluss es ginge in Software genauso oder das Peripheral was man damit 
oft aufwertet hätte die Funktionalität gleich selber mitbringen können.

von Motopick (motopick)


Lesenswert?

Vanye R. schrieb:
> Man braucht sowas vermutlich nicht oft, aber wenn dann kann es sehr
> nuetzlich sein. Allerdings mit MPLAP auf einem Pfui-Betriebsystem
> mit Gattern rumdroesseln? Ne, dann schreib ich das lieber
> in abgehalfterten Assembler fuer den RP2040.

Fuer die CLC gab/gibt es den CLC-Designer. Der braucht kein MPLAB(X).
Wuenschenswerter Weise rafft Microchip sich zu etwas aehnlichem fuer
die CLBs auf.

Und wenn man wirklich einen FPGA im Design haben moechte oder muss,
dann will, oder braucht man regelmaessig auch wesentlich mehr IOs
als die "sparsamen" 32(?) GPIOs eines RP2040 oder eines PIC.
Der skaliert naemlich ueberhaupt nicht. Selbst die "kleine" MAX10
Serie kennt aber Packages mit 500 IOs.

Was sicherlich interessant waere, waeren ein oder mehrere FP-DSPs
wie in den TI daVincis, verbunden mit aktuelleren ARM-Kern(en)
und 50 k LEs im FPGA. Die DSPs waeren eine sehr hilfreiche Ergaenzung.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

zur Info. Reichelt hat Artikel-Nr.: PIC16F13145-ISS (SSOP-20) verfügbar 
und Artikel-Nr.: EV06M52A (Curiosity Nano Evaluation Kit PIC16F13145). 
Wobei letzteres ganz schön teuer ist. Wer kann sollte das direkt von 
Microchip beziehen. Ggf. noch einen Coupon suchen.
CLC finde ich generell gut. Man kann damit viel machen ohne das es 
Unterbrechungen oder Verzögerungen durch Softwarerechenoperationen / 
Interrupts gibt. Je mehr die Möglichkeiten damit ausgebaut werden umso 
komplizierter wird allerdings die Nutzung dessen. Es wird eine 
Gradwanderung bleiben. Der Profi könnte dann lieber zu einem FPGA 
greifen und hat alle Freiheiten und der Hobbyist lässt es links liegen, 
weil Einstiegshürde zu hoch.
Mir würde es reichen eine leicht aufgebohrte Variante zu haben die ich 
vom AVRxDB o.ä. kenne. Mit noch paar Kombinationsmöglichkeiten mehr und 
der Wahlfreiheit ob Puls- oder Level-Event für alle Event-Generatoren. 
Damit kann man schon Allerhand anfangen.

Generell hätte diese Serie hier aber zu wenig RAM für mich.  ;-)
Wie ordnet man diese PICs überhaupt ein? Aufgebohrte ATtiny Serie?

: Bearbeitet durch User
von Vanye R. (vanye_rijan)


Lesenswert?

> Und wenn man wirklich einen FPGA im Design haben moechte oder muss,
> dann will, oder braucht man regelmaessig auch wesentlich mehr IOs
> als die "sparsamen" 32(?) GPIOs eines RP2040 oder eines PIC.

Nein, mir faellt das sofort eine Anwendung ein wo das nicht so
ist, kann ich aber wegen Firma und so hier nicht erzaehlen.

Wie schon gesagt, es ist selten sinnvoll, aber wenn doch kann
es sehr cool sein.

Vane

von Jörg H. (idc-dragon)


Lesenswert?

Die Version mit den 4 "Makrozellen" gibt es auch in der AVR-Famile, habe 
ich mal in einem ATmega4808 benutzt. Heißt dort CCL, für Configurable 
Custom Logic. Selbst ganz kleine moderne ATtiny haben 2 solche Zellen.

Im Zusammenspiel mit dessen Event System ganz nützlich, um sich z.B. 
eine eigene Interrupt-Quelle für Hard Realtime zu verknüpfen.
(Konkret habe ich ein schnelles Signal auf Taktänderungen überwacht, mit 
2 Timern ein "Fenster" definiert und mit den CCL-Zellen einen Interrupt 
ausgelöst wenn sich eine Flanke außerhalb der Fenster befindet.)

Von einem FPGA ist das aber weit entfernt. Es gehen nur ganz einfache 
Verknüpfungen. Hilfreich war, dass man auch interne Signale der anderen 
uC-Peripherie mit einbeziehen kann.
Auf 32 Zellen aufgebohrt ginge dann etwas mehr, so etwa auf dem Level 
der frühen konfigurierbaren Logik (PALs, GALs).

Für andere Anwendungen suche ich tatsächlich low-pincount FPGAs, in 
nicht-BGA Gehäuse. Aussichtsreichster Kandidat ist Lattice ICE40UP5K im 
QFN48-Gehäuse. Da soll man auch schon einen kleinen RISC-V mit 
reinsynthetisiert bekommen, läuft vermutlich bereits den 8-Bittern 
davon.
Auch interessant aber m.W. nicht einzeln als nackte Chips erhältlich 
sind Chips von GoWin. Die älteren (GW1NSR-LV4C) haben einen ARM 
Cortex-M3 mit drin, die neueren (GW1NR-9) sparen sich wohl die 
Lizenzkosten und verlassen sich auf RISC-V Softcore Möglichkeit.
(Sorry für die Abschweifung)

: Bearbeitet durch User
von Motopick (motopick)


Angehängte Dateien:

Lesenswert?

Veit D. schrieb:
> Wie ordnet man diese PICs überhaupt ein? Aufgebohrte ATtiny Serie?

Man koennte sich am ausgeschriebenen Akronym orientieren.
Es sind Computer!

Was noch nicht erwaehnt wurde:
Man kann die/eine CLC auch zur Laufzeit umprogrammieren.
Um z.B. eine Negation "wegzukonfigurieren".
Wenn einem das nuetzlich erscheint.
Man muss aber aufpassen, dass man sich keine Glitche einfaengt. :)

von Tam H. (Firma: Tamoggemon Holding k.s.) (tamhanna)


Lesenswert?

Motopick schrieb:
> Veit D. schrieb:
>> Wie ordnet man diese PICs überhaupt ein? Aufgebohrte ATtiny Serie?
>
> Man koennte sich am ausgeschriebenen Akronym orientieren.
> Es sind Computer!
>
> Was noch nicht erwaehnt wurde:
> Man kann die/eine CLC auch zur Laufzeit umprogrammieren.
> Um z.B. eine Negation "wegzukonfigurieren".
> Wenn einem das nuetzlich erscheint.
> Man muss aber aufpassen, dass man sich keine Glitche einfaengt. :)

Hallo,
ja, sowohl CLC als auch CLB sind dynamisch rekonfigurierbar.

Bei der CLB kannst du auch eines der Bits im Kontrollregister zum 
"Umstellen" verwenden, ohne den Bitstrom neu zu laden

von Tam H. (Firma: Tamoggemon Holding k.s.) (tamhanna)


Lesenswert?

Jörg H. schrieb:
> Die Version mit den 4 "Makrozellen" gibt es auch in der AVR-Famile, habe
> ich mal in einem ATmega4808 benutzt. Heißt dort CCL, für Configurable
> Custom Logic. Selbst ganz kleine moderne ATtiny haben 2 solche Zellen.

Die CLB wird sehr bald auch für AVR rauskommen, mE nach. Ich weiss nix 
offizielles aber...bisher war es so...

von Tam H. (Firma: Tamoggemon Holding k.s.) (tamhanna)


Lesenswert?

Motopick schrieb:
> Vanye R. schrieb:
>> Man braucht sowas vermutlich nicht oft, aber wenn dann kann es sehr
>> nuetzlich sein. Allerdings mit MPLAP auf einem Pfui-Betriebsystem
>> mit Gattern rumdroesseln? Ne, dann schreib ich das lieber
>> in abgehalfterten Assembler fuer den RP2040.
>
> Fuer die CLC gab/gibt es den CLC-Designer. Der braucht kein MPLAB(X).
> Wuenschenswerter Weise rafft Microchip sich zu etwas aehnlichem fuer
> die CLBs auf.
>

Gibt es online, den CLB Synthesizer.

von Tam H. (Firma: Tamoggemon Holding k.s.) (tamhanna)


Lesenswert?

Luky S. schrieb:
> Microchip Advertorials als "News"?

Immer. Ich bin nicht einmal in der Lage zu atmen, ohne einen Sponsor.

lg und Danke
Tam

von Vanye R. (vanye_rijan)


Lesenswert?

> Gibt es online, den CLB Synthesizer.

Online ist irrelevant. Niemand will ein Projekt aufsetzen
das er ein paar Jahre spaeter nicht mehr uebersetzen kann.

Vanye

von Peter S. (cbscpe)


Lesenswert?

Hoffentlich gibt es das bald auch für AVR. Die CCL dort konnte ich schon 
gut gebrauchen. Aber bei einigen Projekten hätte ich etwas mehr 
Logikelemente gebraucht und musste so auf ein zusätzliches CPLD 
ausweichen. Das macht dann eine weiter Toolchain und ein zusätzliches 
Programmierinterface nötig. Alles im Microcontroller integriert wäre 
echt praktisch.

von Michael (Firma: HW Entwicklung) (mkn)


Lesenswert?

Vanye R. schrieb:
> Online ist irrelevant. Niemand will ein Projekt aufsetzen
> das er ein paar Jahre spaeter nicht mehr uebersetzen kann.

Ist auch Teil des MCC Melody als offline Tool.

von Richard W. (richardw)


Lesenswert?

Wozu Logikschaltungen grafisch entwerfen? Für den Arbeitsalltag im Team 
und das automatisierte Bauen von Firmware sind Beschreibungen als 
Quellcode viel besser geeignet und kosten nach entsprechender 
Einarbeitung viel weniger Zeit. Meine Meinung.

von Vanye R. (vanye_rijan)


Lesenswert?

> Für den Arbeitsalltag im Team und das automatisierte Bauen von Firmware
> sind Beschreibungen als Quellcode viel besser geeignet und kosten
> nach entsprechender Einarbeitung viel weniger Zeit.

Das sehe ich genauso. Man koennte ja auch einen Mittelweg gehen
der auf einem grafischen Tool dann den Quellcode generiert,
also alles offen laesst.

Vanye

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.