Forum: FPGA, VHDL & Co. arduino Platine mit microCore und 100baseT


von Klaus S. (kschleisiek)


Lesenswert?

blub schrieb in Beitrag "microCore, ein Echtzeitprozessor in VHDL für FPGAs"

> -Arduino Formfaktor und Pinout
> -FPGA bereits fertig programmiert (schlüsselfertig)
> ...
> Ich hab mich mal ein bisschen bei MicroSemi umgesehen,
> es gibt den M2GL010-TQG144I.
> IGLOO2, 84 I/O, 933.888 kbit RAM, 12.084 LUTs im 144-LQFP-Gehäuse

Ich habe mal Synthese und Place&Route von microCore ohne die angedachte 
Peripherie gemacht und die Ergebnisse sind ermutigend:

16-bit Daten:
interne 16k Datenspeicher, 8k Programmspeicher, 30% der LUTs, clock 45 
MHz.

32-bit Daten:
interne 4k Datenspeicher, 16k Programmspeicher, 40% der LUTs, clock 30 
MHz.

Der IGLOO2-FPGA hat:
1. Sehr geringer Stromverbrauch.
2. Flashzellen direkt im Fabric für die Konfiguration, so dass der Chip 
sofort nach dem Einschalten betriebsbereit ist.

> -ADC, ca 10 bit, 10kS/s, 4 Kanäle

Besser 12-bit, 10kS/s, 8 Kanäle mit seriellem SPI-Interface.
Zuletzt habe ich den ADC128S102 benutzt. Das ist ein HiRel Teil und 
somit unnötig teuer. Ich bitte um Vorschläge.

> -ca 32k RAM/ROM

Da finde ich schon ein SRAM.
Zusätzlich ein I2C E2prom 128kB als Parameter- und Programmspeicher, der 
beim Booten in den microCore Programmspeicher kopiert wird.

> -ca 10 I/O auf 3.3V oder 5V

Die "5V Inputtoleranz" werde ich durch Serienwiderstände herstellen :)

Wird noch eine sonstige Pinprotection gebraucht?

> -ca. 2x PWM, 2x SPI, 2x I2C

Da brauche ich mal Daten des Arduino, wie diese Interfaces konfiguriert 
werden.

> -(special) 2x EXCEPTION/PAUSE-Eingänge, 2x Interrupt-Ein.

Es ist wohl einfacher, prinzipiell jeden Eingang interruptfähig zu 
machen. Da brauche ich auch mal Daten, wie das beim Arduino aussieht und 
dann ist halt die Arduinokonfiguration die "Defaultkonfiguration".

Pause würde ich extern nicht anbieten, weil externe Peripherie das 
Signal nicht erzeugt. Es darf nämlich nur dann aktiviert werden, wenn 
jeweils ein bestimmtes Bauteil memory-mapped gelesen oder geschrieben 
wird. Das ist leider trotz Transputer noch immer ein völlig neues 
Konzept, das von ASICs nicht unterstützt wird.

> -Spannungsversorgung und Programmierung über USB (FTDI)

Ganz kritisches Thema. Stromversorgung ist natürlich kein Problen, aber 
die Konfiguration. Da will der M2GL gerne JTAG-Signale haben. Gibt's da 
einen IC, der das macht, und den ich auch noch ohne Klimmzüge ins Libero 
integriert bekomme?

Leider ist FTDI fürs UART-Interface unproblematisch aber Scheisse, weil 
einzelne Bytes nur mit (ich glaube) 10 ms Verzögerung geschickt werden, 
weil "es könnten ja noch mehr Bytes zum Übertragen zusammenkommen". Da 
nützt das Erhöhen der Baudrate gar nichts und macht das Debuggen 
manchmal etwas langsam. Prolific USB<->UART ist da wesentlich flotter, 
aber solche ICs habe ich bisher nicht gefunden, nur fertige Dongles.

> -100baseT Interface

Da suche ich noch nach dem "Industriestandard" 10/100baseT PHY.

Damit wird es UDP geben, auf jeden Fall IPV4. Wie wichtig wäre IPV6?

Oh ja, und dann noch ein paar LEDs, weil man ja beim Debuggen nicht GANZ 
blind sein will. Irgendwo rot, gelb, grün in 0604 auf der Platine.

: Bearbeitet durch User
von Gustl B. (-gb-)


Lesenswert?

Wie viel Stück musst du davon verkaufen damit der Preis unter 100 € 
sinkt?

Als Lernbastelprojekt finde ich das gut, wenn das ein Produkt werden 
soll, dann gucke dich vorher um was es schon zu kaufen gibt. Nicht dass 
du dann enttäuscht wirst.

von Jonas B. (jibi)


Lesenswert?

Tolle Idee Klaus!

>Besser 12-bit, 10kS/s, 8 Kanäle mit seriellem SPI-Interface.
>Zuletzt habe ich den ADC128S102 benutzt. Das ist ein HiRel Teil und
>somit unnötig teuer. Ich bitte um Vorschläge.

Was hälst du von dem Purschen:

https://www.digikey.de/product-detail/de/microchip-technology/MCP3208T-CI-SL/MCP3208T-CI-SLTR-ND/319446

Gruß J

von Blub B. (googoo)



Lesenswert?

Hier habe ich mal die Pinbelegung vom Arduino Uno r3, auf welchen auch 
viele ,,Shields" aufsetzten also Funktionserweiterungsboards für 
Motorik, Sensorik, Displays, Kommunikation, etc...
Wenn man also eine exakte Kopie hinbekäme wären viele der Shields ohne 
weiteres nutzbar. Dazu bräuchte man halt mindestens 3.3 Volt Pegel oder 
sogar 5V.

Analogpins sind auch Digitalpins gleichzeitig.

Digitalpins werden eingestellt auf Eingang, Ausgang oder Eingang mit 20k 
Pullup.
Der Modus wird durch einen Unterfunktionsaufruf eingestellt

Die Funktionen wie i2c/spi/uart sind an festgelegten Pins verortet und 
werden ebenfalls über eine Unterfunktion eingeschaltet mit Angabe von 
Modus, Geschwindigkeit(Taktteiler),Polarität, Stopbits, etc..

Hier ist ein Beispielprogramm welches SPI und Interrupts verwendet:

https://circuits4you.com/2019/01/03/arduino-spi-communication-example/

Die Pins sollten schon narrensicher sein, Arduino ist recht 
kurzschlusstolerant und kann auch bis 40mA pro Ausgang treiben.

IPv4 wird ja noch gerne benutzt, v6 setzt sich wohl nicht so durch.

FTDI wird von allen Linuxkernels erkannt und es läuft auf fast jedem 
Gerät und auch auf Windows/Mac.
Ich schätze das ist der Grund warum das so eine Art Standart inzwischen 
ist.

Ich hab gerade gelesen dass der Igloo2 sich selbst neu flashen kann 
(,,In Application Programming") also würde das zumindest theoretisch aus 
der forth-shell heraus gehen (mit Umweg über das externe spi-flash)

Für den Notfall braucht es noch einen kleinen JTAG-Header, passend zum 
Programmierkabel des Herstellers.

von Fitzebutze (Gast)


Lesenswert?

Ich kann nur empfehlen, sich ein Beispiel an http://papilio.cc/ zu 
nehmen, bevor ein weiteres *me2*-Arduino-Projekt gestartet wird.
Noch ein paar Anmerkungen:
- 5V-Kompatibilität mit Serienwiderständen: Stromsparende FPGAs leben 
nicht allzulange, wenn man sie über LVCMOS I/O via Clamp-Dioden mit 
Spannung (!) versorgt..
- Apropos: Stromsparend ist spätestens mit einem Ethernet Phy sowieso 
nichts mehr (rechne mit min. 30 mA im Betrieb).
- FT2232H ist de-facto Standard für JTAG-Debugging via openOCD

von Klaus S. (kschleisiek)


Lesenswert?

Gustl B. schrieb:
> wenn das ein Produkt werden
> soll, dann gucke dich vorher um was es schon zu kaufen gibt.

Ich bin für jeden Hinweis auf ein existierendes ähnliches Board dankbar. 
Muss ja nicht unbedingt IGLOO2 sein, andere Technologien sind auch ok, 
solange

1. Arduine Formfaktor/Pinout
2. das FPGA groß genug (> 7k LUTS, > 20*18kB blockRAM)
3. mit TCP/IP

von Gustl B. (-gb-)


Lesenswert?

Arty Z7

Klaus S. schrieb:
> 3. mit TCP/IP

Das ist keine Eigenschaft des Boards ausser du erwartest das in 
Hardware. Sonst ist das Software.

Blub B. schrieb:
> Digitalpins werden eingestellt auf Eingang, Ausgang oder Eingang mit 20k
> Pullup.
> Der Modus wird durch einen Unterfunktionsaufruf eingestellt

Klingt interessant, wie könnte man das an einem FPGA realisieren? Zur 
Laufzeit Pullups zuschalten habe ich da noch nicht gesehen.

Fitzebutze schrieb:
> - FT2232H ist de-facto Standard für JTAG-Debugging via openOCD

Nicht nur da, auch die Adapter von Digilent die von Vivado unterstützt 
werden verwenden diesen IC.

Klaus S. schrieb:
> Leider ist FTDI fürs UART-Interface unproblematisch aber Scheisse, weil
> einzelne Bytes nur mit (ich glaube) 10 ms Verzögerung geschickt werden,
> weil "es könnten ja noch mehr Bytes zum Übertragen zusammenkommen".

Bist du dir sicher, dass das kein Softwareproblem ist? Wenn ich hier am 
PC mit Python einzelne Bytes schicke kann ich auch kürzere Abstände 
realisieren.

Aber wenn du wirklich so ein Board baust und das ein Produkt zum 
Verkaufen werden soll, dann such dir ein klares Alleinstellungsmerkmal. 
Wieso sollte man das Board kaufen wollen? Ich finde da z. B. schnelle 
ADCs oder DACs interessant deren Datenrate man in einem uC nicht mehr 
verarbeiten kann. Weil sonst gibt es nicht wirklich einen Grund für 
einen FPGA wenn am Ende darin ein uC sitzt der alles macht.

: Bearbeitet durch User
von Klaus S. (kschleisiek)


Lesenswert?

Gustl B. schrieb:
> Klaus S. schrieb:
>> 3. mit TCP/IP

Sorry, ich meinte 10/100baseT und an Basissoftware wird es UDP geben.
Gibt es eigentlich spezifische 10baseT PHYs, die nicht so viel Strom 
brauchen?

Bei 10 Mbit könnte man den PHY direkt im FPGA machen. Mit 20 MHz 
einsynchronisieren und alles ist gut. Kostet aber leider 
Entwicklungszeit.

> Blub B. schrieb:
>> Digitalpins werden eingestellt auf Eingang, Ausgang oder Eingang mit 20k
>> Pullup.
>> Der Modus wird durch einen Unterfunktionsaufruf eingestellt
>
> Klingt interessant, wie könnte man das an einem FPGA realisieren? Zur
> Laufzeit Pullups zuschalten habe ich da noch nicht gesehen.

Man müsste wohl einen zusätzlichen output pin spendieren, der nur die 
20k zuschaltet gegen VCC oder Z ist. Als Kompromiss würde ich ein 
Steckfeld einbauen, mit dem 20k gegen VCC zugeschaltet werden können. 
Weil: Dynamisch dazuschalten - da fällt mir keine Anwendung zu ein.

> Klaus S. schrieb:
>> Leider ist FTDI fürs UART-Interface unproblematisch aber Scheisse, weil
>> einzelne Bytes nur mit (ich glaube) 10 ms Verzögerung geschickt werden,
>> weil "es könnten ja noch mehr Bytes zum Übertragen zusammenkommen".
>
> Bist du dir sicher, dass das kein Softwareproblem ist? Wenn ich hier am
> PC mit Python einzelne Bytes schicke kann ich auch kürzere Abstände
> realisieren.

Ich habe die Erfahrung mit FT232RL. Erst mit der microCore 
Debugschnittstelle ist mir das aufgefallen, weil da heftigst 
gehandshaked wird. Vier Bytes hin, ein ACK/NACK zurück.

> Aber wenn du wirklich so ein Board baust und das ein Produkt zum
> Verkaufen werden soll, dann such dir ein klares Alleinstellungsmerkmal.
> Wieso sollte man das Board kaufen wollen? Ich finde da z. B. schnelle
> ADCs oder DACs interessant deren Datenrate man in einem uC nicht mehr
> verarbeiten kann. Weil sonst gibt es nicht wirklich einen Grund für
> einen FPGA wenn am Ende darin ein uC sitzt der alles macht.

Diese "schnellen" Teile sitzen dann auf einem Daughterboard.

Die Idee des Boards ist es, der Makercommunity eine Platform für IoT's 
und FPGA-Entwicklung mit microCore und Forth zur Verfügung zu stellen. 
Da bei microCore sogar der Befehlssatz unkompliziert zu erweitern ist, 
wird die Ehrfurcht vor der Priesterschaft der CPU Architekten 
untergraben.

Jedenfalls lag meine Motivation, es zu entwickeln, primär darin, dass 
ich - lang ist's her - einen TMS320C32 eingesetzt habe, als der RTX2000 
abgekündigt wurde. Da waren die lustigsten Fehler drin - einen kannte TI 
noch gar nicht. Und da habe ich mir geschworen: NieNieNie wieder von 
einer Chipküche abhängig zu sein, sondern Hard- und Software voll unter 
Kontrolle zu haben.

von Gustl B. (gustl_b)


Lesenswert?

Klaus S. schrieb:
> Die Idee des Boards ist es, der Makercommunity eine Platform für IoT's
> und FPGA-Entwicklung mit microCore und Forth zur Verfügung zu stellen.

Also geht es primär nicht um die Leute die was mit FPGA lernen wollen, 
sondern es soll eine uC Platine werden die aber etwas flexibel ist, bei 
der man den uC auch austauschen oder erweitern kann.

Ja, das könnte ein lohnenswertes Ziel sein, könnte aber auch sehr viel 
Arbeit sein bis das so bequem funktioniert wie Arduino oder so. Und dann 
bleibt die Kostenfrage und die Alleinstellungsmerkmale.

Jedenfalls wenn du das gemacht hast hast du eine Menge gelernt, egal ob 
das dann ein Produkt wird oder nur ein Einzelstück bleibt.

von Gustl B. (-gb-)


Lesenswert?

Und noch ein paar Boards:

Einmal "nur" mit FPGA:

Intel® Cyclone® 10 LP FPGA Evaluation Kit, 100 $:
https://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=253&No=1140&PartNo=2

Und hier zwei mit SoC FPGA, da ist das Ethernet jeweils am HPS (Hard 
Processor System) angebunden:

DE10-Nano Kit, 135 $:
https://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=167&No=1046&PartNo=2
DE0-Nano-SoC Kit/Atlas-SoC Kit, 100 $:
https://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=167&No=941&PartNo=2

von Klaus S. (kschleisiek)


Lesenswert?

Blub B. schrieb:
> Hier ist ein Beispielprogramm welches SPI und Interrupts verwendet:
>
> https://circuits4you.com/2019/01/03/arduino-spi-communication-example/

Hier mal ein Beispiel, wie es jetzt beim Arduino aussieht, und wie es in 
Forth aussehen würde:

1. in C:
1
 #include <SPI.h>
2
3
void setup (void) {
4
   Serial.begin(115200); //set baud rate to 115200 for usart
5
   digitalWrite(SS, HIGH); // disable Slave Select
6
   SPI.begin ();
7
   SPI.setClockDivider(SPI_CLOCK_DIV8);//divide the clock by 8
8
}
9
void loop (void) {
10
   char c;
11
   digitalWrite(SS, LOW); // enable Slave Select
12
   // send test string
13
   for (const char * p = "Hello, world!\r" ; c = *p; p++) 
14
   {
15
      SPI.transfer (c);
16
      Serial.print(c);
17
   }
18
   digitalWrite(SS, HIGH); // disable Slave Select
19
   delay(2000);
20
}
2. in microForth:
1
library peripherals.fs
2
3
init: setup  ( -- )        
4
   &115200 baud            \ set baud rate to 115200 for usart
5
   #ss Ctrl-reg !          \ disable Slave Select
6
   8 spi-clock-divider !   \ divide the clock by 8
7
   spi-begin               \ was auch immer das noch tun muss
8
;
9
Create Hello ," Hello, world!"
10
11
: loop ( -- )              \ blöder Name, Hello>spi wäre aussagekräftiger
12
   #ss not Ctrl-reg !      \ disable Slave Select
13
   Hello count spi-type 
14
   #ss Ctrl-reg !          \ disable Slave Select
15
   &100 ms sleep           \ wenn das überhaupt nötig sein sollte
16
;

#ss ist eine Bitmaske des Control-registers und das Bit (der Pin) kann 
mit
"#ss Ctrl-reg !" gesetzt und mit "#ss not Ctrl-reg !" rückgesetzt 
werden.

spi-type ist in der peripherals.fs Bibliothek enthalten und dort so 
definiert:
1
: spi-type ( addr length -- ) ?FOR  ld swap spi-emit 1+  NEXT drop ;
Das "init: init-spi" definiert Code, der vom cross-compiler automatisch 
in den Bootcode eingebaut wird, ohne das man sich da weiter drum kümmern 
muss.

: Bearbeitet durch User
von Jonas B. (jibi)


Lesenswert?

1
library peripherals.fs
2
init: setup  ( -- )        
3
   &115200 baud            \ set baud rate to 115200 for usart
4
   #ss Ctrl-reg !          \ disable Slave Select
5
   8 spi-clock-divider !   \ divide the clock by 8
6
   spi-begin               \ was auch immer das noch tun muss
7
;
8
Create Hello ," Hello, world!"
9
: loop ( -- )              \ blöder Name, Hello>spi wäre aussagekräftiger
10
   #ss not Ctrl-reg !      \ disable Slave Select
11
   Hello count spi-type 
12
   #ss Ctrl-reg !          \ disable Slave Select
13
   &100 ms sleep           \ wenn das überhaupt nötig sein sollte
14
;
Alter Falter, das sieht aber sehr kryptisch aus. Kein Wunder das es so 
gut wie ausgestorben ist - da sind ja selbst die neusten C++ Ergüße noch 
logischer in der Syntax. NoFront! Aber das wird keiner benutzen.

von Klaus S. (kschleisiek)


Lesenswert?

Jonas B. schrieb:
> Alter Falter, das sieht aber sehr kryptisch aus.
Ja leider. Aber als ich das erstemal sowas gesehen habe
1
for (const char * p = "Hello, world!\r" ; c = *p; p++)
fand ich das auch erklärungsbedürftig.

Erstmal zwei generelle Eigenschaften von Forth:
1. Syntaktische Elemente, Prozedur- und Variablennamen werden "Worte" 
genannt und sind voneinander durch Leerzeichen getrennt. D.h.: Jeder 
Zeichenstring, der durch Leerzeichen begrenzt ist, ist ein Wort. Im 
Klartext: Wortnamen können sämtliche Sonderzeichen enthalten. Das 
erweitert die Möglichkeiten, über den Namen semantische Information zu 
transportieren.
2. Forth ist die Programmiersprache einer virtuellen Stackmaschine, die 
im Falle von microCore eine reale Maschine geworden ist. Insofern ist 
Forth der Assembler von microCore. Und weil es eine Stackmaschine ist, 
deren zwei Stacks (Daten- und Returnstack) explizit programmiert werden, 
gilt die "Reverse Polish Notation" (RPN) und man muss '1 2 +' statt '1 + 
2' schreiben - wie bei den alten HP Taschenrechnern mit RPN. Weil immer 
der Operator NACH den Operanden kommt, braucht man die ( ) Klammern 
nicht, um die Präzedenz von Operationen zu klären. Deshalb können die 
Klammern in Forth für Kommentare benutzt werden.

Nun zum Code des vorletzten Beitrags:
1
init: setup  ( -- )
'init: setup' legt in der Symboltabelle, die in Forth "Wörterbuch" 
heißt, wie jede "colon definition" einen Eintrag mit dem Namen "setup" 
an und beginnt den folgenden Code bis zum abschließenden ; zu 
compilieren. (Init: ist insofern eine Besonderheit, dass der definierte 
Code vom Crosscompiler automatisch in die Bootroutine eingebunden wird.) 
Darauf folgt dann '( -- )'. Das ist ein Kommentar, der den Stackeffekt 
von setup anzeigt. Vor -- stehen die Eingabewerte, dahinter die 
Ausgabewerte. Wir sehen, dass setup den Stack nicht verändert.
1
&115200 baud
Offenbar wollen wir mit dezimal (&) 115200 baud kommunizieren.
1
#ss Ctrl-reg !
Das sieht nur kryptisch aus. #ss ist nichts anderes als der Name einer 
Konstante, die das ss-bit (was immer das ist) gesetzt hat. Und es ist 
meine Konvention, dass Konstanten der Klarheit halber in der Regel mit # 
anfangen, das in diesem Falle nicht Hash sondern Number ausgesprochen 
wird. #ss legt also lediglich eine Bitmaske auf den Stack.
Ctrl-reg ist die Adresse des Controlregisters, mit dem einzelne 
Bits/Pins gesetzt oder rückgesetzt werden können. Diese Adresse wird 
auch auf den Stack gelegt, über den Wert von #ss.
! ist wirklich kryptisch und wird in Forth "store" ausgesprochen. D.h. 
#ss wird im Ctrl-reg gespeichert und dadurch werden die beiden Elemente 
wieder vom Stack entfernt.
Noch eine Anmerkung zum Ctrl-reg: Es ist auf die Bitverarbeitung 
spezialisiert und in Abhängigkeit vom Vorzeichenbit wird ein bestimmtes 
Bit entweder gesetzt oder rückgesetzt. Gesetzt mit '#ss Ctrl-reg !', 
rückgesetzt mit '#ss not Ctrl-reg !', wie es dann in dem Wort loop 
genutzt wird.
1
8 spi-clock-divider !
dürfte jetzt schon klar sein: Es wird 8 im spi-clock-divider register 
gespeichert.
1
spi-begin
Naja, da wird zum in der Bibliothek peripherals.fs als ': spi-begin ( -- 
) .... ; definierten Wort ein Unterprogrammaufruf ins setup 
hineincompiliert und mit
1
;
 ist die Definition von setup beendet und das System geht vom 
kompilierenden wieder in den interpretierenden Zustand über, in dem 
durch Eingabe von 'setup<cr>' der compilierte Code sofort ausgeführt und 
mit 'trace setup<cr>' single-gesteppt werden kann.

Auf Wunsch werde ich auch noch die Zeile
1
Hello count spi-type
 erklären, aber ich glaube, das reicht jetzt erstmal.

: Bearbeitet durch User
von Jonas B. (jibi)


Lesenswert?

>2. Forth ist die Programmiersprache einer virtuellen Stackmaschine, die
>im Falle von microCore eine reale Maschine geworden ist. Insofern ist
>Forth der Assembler von microCore. Und weil es eine Stackmaschine ist,
>deren zwei Stacks (Daten- und Returnstack) explizit programmiert werden,
>gilt die "Reverse Polish Notation" (RPN) und man muss '1 2 +' statt '1 +
>2' schreiben - wie bei den alten HP Taschenrechnern mit RPN. Weil immer
>der Operator NACH den Operanden kommt, braucht man die ( ) Klammern
>nicht, um die Präzedenz von Operationen zu klären. Deshalb können die
>Klammern in Forth für Kommentare benutzt werden.

Das macht es dem Compiler (oder Interpreter:)) einfacher, ich mag es 
halt lieber, wenn es dem Programmierer einfacher gemacht wird. Den 
Aufwand für den Compiler muss ich ja nur einmal betreiben.

Aus dem Rest will ich nicht schlau werden, meine Hardware brauch die 
Erde auch nie verlassen ;). Wie gesagt, NoFront! ich bin da leider 
einfach nur zu blöd für.

Gruß J

von Klaus S. (kseege)


Lesenswert?

Bin ich der Einzige auf der Welt, der an so einer Platine Interesse 
hätte?

Oder dauert es jetzt einfach nochmal 20 Jahre? Solange habe ich auf 
Forth-ev.de gelesen: Microcore Dokumentation demnächst hier! ;-)

Gruß Klaus (der soundsovielte)

von -gb- (Gast)


Lesenswert?

Ja nun, es gibt schon viele Platinen mit FPGA. Sogar in billig. Und auch 
mit CPU und Ethernet wenn man will.

Weitere Boards müssen entweder ein Alleinstellungsmerkmal besitzen oder 
billiger oder besser (mehr Features bei gleichem Preis) sein.
Die letzten Beiden sind nur bei großer Stückzahl machbar.

von Klaus S. (kseege)


Lesenswert?

-gb- schrieb:
> Ja nun, es gibt schon viele Platinen mit FPGA. Sogar in billig. Und auch
> mit CPU und Ethernet wenn man will.
>
> Weitere Boards müssen entweder ein Alleinstellungsmerkmal besitzen oder
> billiger oder besser (mehr Features bei gleichem Preis) sein.
> Die letzten Beiden sind nur bei großer Stückzahl machbar.

Ja, genau darum gehts. Ich brauche eine Platine, deren 
Leistungsfähigkeit ich einschätzen kann (was ich bei microcore kann) und 
die industrietauglich ist.
Da nach meinen Halbwissen Klaus Schleisik Geräte für Unterwasserbetrieb 
baut, ist er mit widrigen Umweltbedingungen vertraut. Das sind für mich 
schon zwei Alleinstellungsmerkmale. Der offene Punkt für mich ist nur 
noch VHDL bzw. Verilog, das hab ich bisher vermeiden können.

Bei allen anderen Platinen habe ich 3 Unbekannte. Wenn jemand eine 
Platine kennt, die industrietauglich ist und einen Softcore in der 
Leistungsklasse des MSP430 oder 80166 bietet, wäre ich interessiert, 
davon zu hören. Ist mir bisher nur noch nicht über den Weg gelaufen.

Gruß Klaus (der soundsovielte)

von -gb- (Gast)


Lesenswert?

Klaus S. schrieb:
> Der offene Punkt für mich ist nur noch VHDL bzw. Verilog, das hab ich
> bisher vermeiden können.

Wieso denn dann überhaupt einen FPGA?

Klaus S. schrieb:
> ist er mit widrigen Umweltbedingungen vertraut.

Ja nun, das ist oft nicht Sache von der Elektronik, sondern der 
Mechanik.

Klaus S. schrieb:
> Ich brauche eine Platine, deren Leistungsfähigkeit ich einschätzen kann

Klaus S. schrieb:
> Leistungsklasse des MSP430 oder 80166 bietet

Wenn du das nicht findest, was spricht dagegen eine Nummer größer zu 
nehmen?

von Klaus S. (kseege)


Lesenswert?

-gb- schrieb:
> Wieso denn dann überhaupt einen FPGA?

Um vorher nicht eingeplante I/O-Subsysteme per Software auf eine 
existierende Platine zu bekommen. Hardwareänderung durch Software, 
weniger Vorratshaltung durch weniger Versionen. Die CPU im FPGA um keine 
eigene Platine entwickeln zu müssen.

-gb- schrieb:
> Wenn du das nicht findest, was spricht dagegen eine Nummer größer zu
> nehmen?

Solange es unter dem Preis für einen Hutschienen-Raspi bleibt, nichts. 
Deswegen frage ich ja nach konkreten Hinweisen. Ich sehe immer wieder 
mal Hinweise, daß es da was gäbe. Aber wenn ich dann konkret 
nachforsche, gibt es zwar preiswerte Platinen, aber einen Riesenaufwand 
für die Entwicklung. Bei mir muß halt die Summe aus Hardware und 
Entwicklung mit nur einer Maschine wieder hereinkommen. Papilio wäre 
vermutlich was für mich gewesen, aber da bin ich wohl 10 Jahre zu spät 
drauf aufmerksam geworden. Exptech hat nur noch zwei klägliche Reste.

Gruß Klaus (der soundsovielte)

von -gb- (Gast)


Lesenswert?

Klaus S. schrieb:
> Bei mir muß halt die Summe aus Hardware und
> Entwicklung mit nur einer Maschine wieder hereinkommen.

Also eine sehr teure Maschine.

von Klaus S. (kseege)


Lesenswert?

-gb- schrieb:
> Also eine sehr teure Maschine.

Nein, zwischen 10 und 100KEuro typisch. Das ist für Sondermaschinen im 
Produktionsbereich normal. Teuer war für mich eine 2MEuro-Maschine, die 
ich mal neu programmieren durfte, weil der Hersteller sie nicht unter 
Kontrolle gebracht hatte. Das ist der Bau außerhalb meiner Reichweite. 
Alter Grundsatz: Nie Maschinen mit mehr als dem halben Jahresumsatz 
bauen!

Gruß Klaus (der soundsovielte)

von -gb- (Gast)


Lesenswert?

Gut, Preis ist noch nicht der Gewinn. So eine FPGA Platine oder eine mit 
uC und daneben einem FPGA kostet aber nicht so irre viel. Ich würde 
sagen auch < 1k€ wenn man die selber entwickelt.

von Martin S. (strubi)


Lesenswert?

Klaus S. schrieb:
> Bei allen anderen Platinen habe ich 3 Unbekannte. Wenn jemand eine
> Platine kennt, die industrietauglich ist und einen Softcore in der
> Leistungsklasse des MSP430 oder 80166 bietet, wäre ich interessiert,
> davon zu hören. Ist mir bisher nur noch nicht über den Weg gelaufen.

Diese Nische wurde schlicht von Herstellern in 'billig' nie bedient. 
Arduino und Industrie ohne Haftungsbeschraenkung beisst sich nun mal 
arg.
Interessanterweise habe ich dafuer auch anfangs die Papilio-Dinger 
eingesetzt, dann wurde aufgrund der Netzwerk-Anforderungen und in 
'industrietauglich' was eigenes gemacht um PLCs aus den 90ern mit 
verbesserter Safety zu 'emulieren'. Kann ich in Einzelstuecken auch noch 
bei Interesse aus dem Eichhoernchenversteck loseisen, groessere Chargen 
gibt's aber wohl mit dem FPGA (Spartan6) nicht mehr, und die Preise 
liegen definitiv ueber Raspi-Niveau.

Der SoC-Builder dazu dazu ist grundsaetzlich offengelegt und hat Support 
fuer neo430 (Stefan Noltings msp430 Nachbau), div. RiscV und ZPU/ZPUng 
cores mit etwas mehr Power. Die etwas aufwendigeren IP-Cores wie ADMA 
sind dann allerdings kommerziell.

> Papilio wäre
> vermutlich was für mich gewesen, aber da bin ich wohl 10 Jahre zu spät
> drauf aufmerksam geworden. Exptech hat nur noch zwei klägliche Reste.

Jack Gasset @gadgetfactory scheint seit Jahren abgetaucht. Allerdings 
tat sich die Community auch irgendwie mit der Software-Unterstuetzung 
etwas schwer.

Ein paar alte Papilios mit Spartan3 liegen auch noch im Keller. Bei 
Interesse gerne PM, kann aber dauern.

von Klaus S. (kseege)


Lesenswert?

-gb- schrieb:
> Ich würde sagen auch < 1k€ wenn man die selber entwickelt.

Ich habe CPLDs/FPGAs im Blick seit FPSLIC und Ulrich Redemanns 
Experimentierplatine mit 9536 drauf. Es hat sich aber bisher noch nie 
ein Problem eingefunden, das sich nur damit hätte lösen lassen. Und zum 
prophylaktischen Rumspielen für zukünftige Lösungsmöglichkeiten gilt 
eher die Portokassengrenze, also Arduino- und Raspi-Klasse, da muß für 
1KEuro erst ein akut zu lösendes Problem auftauchen.


Martin S. schrieb:
> Arduino und Industrie ohne Haftungsbeschraenkung beisst sich nun mal arg

Das ändert sich ja gerade, Arduino Portenta läßt grüßen. Warten wirs ab. 
Bisherige Versuche wie "Anduino" sind wohl eingegangen, aber die Barth 
Kleinsteuerungen scheint es noch zu geben.


Martin S. schrieb:
> Bei Interesse gerne PM, kann aber dauern.

Mache ich gern, danke für das Angebot. Geht bei mir auch langsam, da 
gerade wieder eine Machine fertigwerden soll. Das Xilinx Webpack, das 
ich vor 10 Jahren nicht zu ergattern geschafft habe, liegt seit einem 
halben Jahr schon  in mehreren Versionen in meiner Vorratskiste.


Gruß Klaus (der soundsovielte)

von -gb- (Gast)


Lesenswert?

Klaus S. schrieb:
> Ich habe CPLDs/FPGAs im Blick seit FPSLIC und Ulrich Redemanns
> Experimentierplatine mit 9536 drauf. Es hat sich aber bisher noch nie
> ein Problem eingefunden, das sich nur damit hätte lösen lassen.

Ah, ich sehe jetzt erst, dass du ein anderer Klaus als der TO bist. Der 
hatte nämlich nach etwas mit FPGA gefragt.
Wenn du gar keinen FPGA brauchst dann nimm was mit uC.

von Bitnibbler (Gast)


Lesenswert?

Mir ist keine Komplettlösung bekannt, die so einfach wie Arduino 
programmierbar ist. Papilio scheint eingegangen. Ich bräuchte ansich 
eine Lösung,  die Fernwartung erlaubt und einige ADCs bedient 
(Temperaturüberwachung) und Anbindung exotischer Schnittstellen bietet 
und Labview ansteuerbar ist. Mit NI Rio geht das schon, aber ist teuer 
und unfleexibel.

von Martin S. (strubi)


Lesenswert?

Bitnibbler schrieb:
> Mir ist keine Komplettlösung bekannt, die so einfach wie Arduino
> programmierbar ist.

'Leider' muss man die Arduino-Frage immer wieder erlaeutern:
In einer Safety-Umgebung ist das schnell mal ein explodierender 
Blindgaenger. Wer damit Schaufensterwerbung programmieren will, kann das 
aber genau wie beim Papilio auch tun, die IDE ist ja auf eigene Targets 
anpassbar.

Der Gag an solchen vermeintlich exotischen Forth-Systemen ist gerade, 
dass man damit die Safety im Blick hat, zudem bieten die Stack-Maschinen 
per se eine deutlich bessere Prozessorsicherheit als z.b. ein ARM oder 
gar PIC, siehe Stichwort 'Nische'. Die kann man nicht fuer den 
Arduino-Preis haben.

> Papilio scheint eingegangen. Ich bräuchte ansich
> eine Lösung,  die Fernwartung erlaubt und einige ADCs bedient
> (Temperaturüberwachung) und Anbindung exotischer Schnittstellen bietet
> und Labview ansteuerbar ist. Mit NI Rio geht das schon, aber ist teuer
> und unfleexibel.

Wenn du keine auf dem FPGA laufenden VI-Bloecke brauchst (somit der PC 
nur Monitoring oder einfache Logik macht), gibt es eine recht kompakte 
Methode via Python und OpenG.
Du musst halt irgend eine RPC-Bibliothek deiner Wahl wrappen. Gibt's 
alles auch fertig (C sources), dann traegst du in LabVIEW nur noch den 
Identifier eines 'Property', wie `Cooler.Temperature` ein.
Auch hier wieder das Uebliche: Entweder selber aus Lego ein System 
aufbauen, was du selber programmieren kannst, oder dich in die 
(zeitweise bequeme) Abhaengigkeit von NI und Konsorten begeben.

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.