Forum: FPGA, VHDL & Co. Mit FPGA möglich?


von Thorsten F. (tfol)


Lesenswert?

Hi,

ich habe vor Jahren eine Platine gebaut, die seriell von einem PC bis zu 
12 Werte von 1 - 256 bekommt. Diese Zahlen werden in Bits gewandelt und 
in ein serielles Schieberegister gegeben.
Es gibt ein negatives Startbit und dann 256 positive Bits, von denen 
halt die bis zu 12 übermittelten gesetzt werden sollen. Das ganze mit 
9kHz.
Das ganze läuft bisher sehr zuverlässig mit CControl2, 4*64Bit 
Schieberegister und vielen Logikbausteinen.

Ich möchte es jetzt neu bauen, da es erweitert werden muss.
Ausserdem kann die Gegenstelle auch Bits setzen, die ich gerne 
ausgewertet haben möchte. Bisher kann ich nur 4 auswerten über feste 
Vergleicher. Das soll dann über die serielle angefragt werden können.

Jetzt die Frage ob es mit einem FPGA machbar ist. Ich habe ein Testboard 
mit Spartan 3 und spiele damit bisher nur etwas rum.

Muss ich dafür einen Microprozessor ins FPGA mit einbinden?

Weis halt nicht wie ich die 256Bits einfach detektieren kann, evtl. über 
einen mitlaufenden Zähler und ob es überhaupt so viele FlipFlops gibt 
für den Schieber.

Hoffe ich habe mich verständlich ausgedrückt und vielleicht kann mit 
einer Auskunft geben.

Gruß
Thorsten

von Falk B. (falk)


Lesenswert?

@  Thorsten F. (tfol)

>Jetzt die Frage ob es mit einem FPGA machbar ist.

Sicher. Aber der FPGA wird sich tödlich langweilen. Selbst ein kleiner 
AVR wird das tun. Die paar Bits raus und rein klimpern ist Peanuts.

>Muss ich dafür einen Microprozessor ins FPGA mit einbinden?

Nö. Eine einfacher UART + bissel Logik reicht.

>Weis halt nicht wie ich die 256Bits einfach detektieren kann, evtl. über
>einen mitlaufenden Zähler und ob es überhaupt so viele FlipFlops gibt
>für den Schieber.

Weder noch. Nimm den klassischen UART, dann klappt auch die PC-Anbindung 
problemlos.

MFG
Falk

von Thorsten F. (tfol)


Lesenswert?

Falk Brunner schrieb:
> Sicher. Aber der FPGA wird sich tödlich langweilen.

Hi,

ich habe kein Problem damit wenn sich einer langweilt, besser als heiss 
vor Stress.
Ich möchte halt die Platine so klein wie möglich halten.
Schieberegister, Ladeumschaltung für den Schieber, Takterzeugung, und 
Rest wären schon wieder mehrere Bausteine die ich vermeiden wollte...

Thorsten

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Es gibt ein negatives Startbit und dann 256 positive Bits, von denen
> halt die bis zu 12 übermittelten gesetzt werden sollen.
Ich habe das Protokoll nicht kapiert... :-/

> Ich möchte halt die Platine so klein wie möglich halten.
> Schieberegister, Ladeumschaltung für den Schieber, Takterzeugung, und
> Rest wären schon wieder mehrere Bausteine die ich vermeiden wollte...
Aber auch das Wegführen vieler Leitungen von einem zentralen Baustein 
(FPGA) braucht Platz auf der Platine...

Und die Schieberegister könntest du mit einer geeigneten Gehäuseform 
(TSOP und kleiner) schön skalieren.

Für diese (etwas undurchsichtige) Schieber-Ladeumschaltung kannst du ja 
dann ein CPLD nehmen.

von mki (Gast)


Lesenswert?

Sicher ist das möglich. Schieberegister bzw. FlipFlops sind genügent 
vorhanden. Wenn man einen ganzen Softcore in einem FPGA rein bekommt, 
dann doch wohl auch deine "kleine" Schaltung. Ein Softcore ist dabei 
kein muß - erleichtert aber unter Umständen die Arbeit.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Sicher ist das möglich. Schieberegister bzw. FlipFlops sind genügent
> vorhanden.
Aber die Frage mit dem Takt wäre noch zu klären...

> Wenn man einen ganzen Softcore in einem FPGA rein bekommt,
> dann doch wohl auch deine "kleine" Schaltung.
Ein Rennwagen, der locker 300 fährt, ist nicht unbedingt auch für den 
gemächlichen Stadtverkehr geeignet...

von Christian R. (supachris)


Lesenswert?

ich hab zwar auch nicht alles von der Aufgabenstellung verstanden, denke 
aber die Logik durch ein CPLD zu erstzen wäre hier sinnvoller, da 
wahrscheinlich nicht massenhaft FlipFlops sondern eher viele I/Os 
benötigt werden. Viel mehr als ein FF pro Eingang scheint nicht nötig zu 
sein. Vielleicht kannst du nochmal genauer beschreiben, was das Ding 
machen soll...

von Thorsten F. (tfol)


Lesenswert?

Hi,

also die Platine steuert ein Gerät, wobei 256 Befehle gesendet werden 
können.

Es gibt eine Clock-Leitung und eine für die Befehle.
Clock 9kHz
Bits gibt es ein negatives Startbit und dann sollen bis zu 12 Bits von 
meiner Platine gesetzt werden.
Heisst ich sende am PC 9, 45, 72 seriell rüber, dann soll das Startbit 
kommen, dann 8 takte nichts, 1 takt high, 35 low, 1 high, usw.
Das dann über ein Schieberegister, das es schön zuverlässig kommt.

Ausserdem kann das externe Gerät z.B. die Bits 40, 48 setzten, das muss 
ich dann zur Anzeige bringen an den PC.
Achja, und über I2C gebe ich es auch an ein Display zur Ansicht.

Es soll halt so sein, das es auch flexibel ist, nicht so wie jetzt mit 
den 1000 festen Gattern.
Evl. einen AVR und CPLD. Schöner wäre es aber alles in einem IC zu 
haben.
Deshalb die Frage ob es machbar wäre bevor ich mich komplett verrenne.

Gruß
Thorsten

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Heisst ich sende am PC 9, 45, 72 seriell rüber, dann soll das Startbit
> kommen, dann 8 takte nichts, 1 takt high, 35 low, 1 high, usw.
Das ist ein Protokollwandler. Dazu nimmst du am besten einen uC.

> Das dann über ein Schieberegister, das es schön zuverlässig kommt.
Für das SR kannst du problemlos und ideal ein CPLD nehmen.

> Evl. einen AVR und CPLD.
Richtig.
> Schöner wäre es aber alles in einem IC zu haben.
Das Thema FPGA bringt dir aber garantiert (!!!) einige Überraschungen.

> Deshalb die Frage ob es machbar wäre bevor ich mich komplett verrenne.
Es ist machbar. Aber es ist nicht sinnvoll.

von Thorsten F. (tfol)


Lesenswert?

Danke Lothar,

werde mir noch mal das CPLD-Board ansehen was in der Firma liegt.
Conrad hat ja auch welche für ein paar Euro.

Müssen halt mindestens 256 FlipFlops drin sein für den Schieber...

Danke für Eure Meinungen, immer wieder anregend.

Gruß
Thorsten

von Thorsten F. (tfol)


Lesenswert?

Thorsten F. schrieb:
> Conrad hat ja auch welche für ein paar Euro.

Ich habe zwar den Versender aus Sande mit R gemeint und auch 
geschrieben, wurde anscheinend editiert.
Keine Ahnung ob Conrad so was auch hat, kaufe da nicht mehr.

Thorsten

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Müssen halt mindestens 256 FlipFlops drin sein für den Schieber...
Das würde ich nicht machen, denn dann brauchst du ja auch 256 IO-Pins 
(wenn ich das richtig verstanden habe) und damit hast du wieder das 
Layout-Problem...

von Thorsten F. (tfol)


Lesenswert?

Hi,

der XC2C384 hat 386 Macrozellen (und FlipFlops) und 114 Pins auf 3*3 cm.
http://www.xilinx.com/publications/prod_mktg/CPLD_CoolRunnerII_table.pdf

Wenn es ein einfaches Schieberegister-IC als SMD gibt mit 256 Bit würd 
ich auch den nehmen und einen kleineren CPLD.

Kennt einer so ein IC? Google bringt mich da nicht wirklich weiter.

Thorsten

von Falk B. (falk)


Lesenswert?

Gibt es nicht.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Thorsten F. schrieb:
> der XC2C384 hat 386 Macrozellen (und FlipFlops) und 114 Pins auf 3*3 cm.
Und kostet bei digikey stattliche 20 Euronen...
Auf der selben Fläche (9cm²) kann ich locker 114/8 = 14 Schieberegister 
für 20 Cent verbauen: 74HCT165 Gehäuse SOT763-1 2.5 x 3.5mm von NXP... 
:-o

Wenn du wirklich so ausschliesslich auf den Platz fixiert bist, warum 
nimmst du dann nicht ein BGA-Gehäuse?  :-/

von Falk B. (falk)


Lesenswert?

@Lothar Miller (lkmiller) Benutzerseite

>Wenn du wirklich so ausschliesslich auf den Platz fixiert bist, warum
>nimmst du dann nicht ein BGA-Gehäuse?  :-/

Loser! Ein richtiger Mann (tm) nimmt einen blanken Die ;-)

von Thorsten F. (tfol)


Lesenswert?

Falk Brunner schrieb:
> Loser! Ein richtiger Mann (tm) nimmt einen blanken Die ;-)

Ich habe leider keine Erfahrung mit dem Golddraht um den dann zu 
verdrahten.. ;)

Also Platzbedarf und Preis sind nicht der Hauptfaktor, es geht mir 
hauptsächlich darum flexibel zu bleiben für die nächsten Jahre und 
Projekte.
Will da auch 20 Platinen von bauen.

Deshalb will ich so wenig Bauteile für die Logik wie möglich haben.

Alle Eingänge mache ich über Optokoppler, Ausgänge über Treiber-IC.

Ein Microprozessor, z.B. AVR 2560 und dann viele Pins mit dem dem CPLD 
verbinden scheint mir eine gute Maßnahme zu werden.

Ich muss mich noch mal in die ISE einarbeiten und schauen wie ich das 
mit dem Schieberegister am einfachsten mache.

Thorsten

von Falk B. (falk)


Lesenswert?

@Thorsten F. (tfol)

>Deshalb will ich so wenig Bauteile für die Logik wie möglich haben.

Dann nimm einen Mikrocontroller.

>Alle Eingänge mache ich über Optokoppler, Ausgänge über Treiber-IC.

So wirklich klar ist dein Problem aber nicht. Willst du 256 Signale per 
Optokoppler ausgeben? Dann ist der Platzbedarf für ein paar 
Schieberegister wohl keine Thema.

>Ein Microprozessor, z.B. AVR 2560 und dann viele Pins mit dem dem CPLD
>verbinden scheint mir eine gute Maßnahme zu werden.

Nöö, das ist reine Panik. Wenn du nichtmal ansatzweise weißt, was du 
willst, und wie man das sinnvoll umsetzt, bringt dir das auch nix.

>Ich muss mich noch mal in die ISE einarbeiten und schauen wie ich das
>mit dem Schieberegister am einfachsten mache.

Nöö, du musst mal was über Netiquette lesen und dein Problem 
gründlicher darstellen. Dann kann man dir helfen.

MFG
Falk

von Thorsten F. (tfol)


Lesenswert?

Lothar Miller schrieb:
> Auf der selben Fläche (9cm²) kann ich locker 114/8 = 14 Schieberegister
> für 20 Cent verbauen: 74HCT165 Gehäuse SOT763-1 2.5 x 3.5mm von NXP...
> :-o

Der 74HCT165 ist nur 8 Bit, davon würde ich ja 32 benötigen...
da nehme ich lieber 4 * 64Bit Shift Register, z.B. den CD4031.

Thorsten

von Thorsten F. (tfol)


Lesenswert?

Falk Brunner schrieb:
> Dann nimm einen Mikrocontroller.

habe ich doch vor, zusammen mit einem CPLD für die Logik

> So wirklich klar ist dein Problem aber nicht. Willst du 256 Signale per
> Optokoppler ausgeben? Dann ist der Platzbedarf für ein paar
> Schieberegister wohl keine Thema.

Nein, es ist ein serielles Protokoll, das dauernd gesendet werden muss.
Es gibt eine Leitung, mit der Clock und eine Leitung mit den Daten, die 
werden hier Bits genannt.
Habe ich oben mindestens 2 mal schon beschrieben.
Ausserdem Optokoppler für Eingangssignale, nicht für das erzeugte 
Signal.

Deshalb will ich einen 256Bit ShiftRegister mit 256Bits setzten und das 
dann dauernd mit der Clock ausgeben, so lange bis ein anderes Datenwort 
gesendet werden muss.

> Nöö, das ist reine Panik. Wenn du nichtmal ansatzweise weißt, was du
> willst, und wie man das sinnvoll umsetzt, bringt dir das auch nix.

Ich weis genau was ich will, habe es ja schon konventionell am laufen, 
nur ist es nicht flexibel und muss dauernd an den Platinen was ändern.

> Nöö, du musst mal was über Netiquette lesen und dein Problem
> gründlicher darstellen. Dann kann man dir helfen.

Danke, aber wenn ich andere Beiträge mit meinem Vergleiche schneide ich 
schon sehr gut ab was Umgangston und Bedürfnis zur Erklärung betrifft.

Es ist halt nicht immer leicht, Sachen die für mich klar sind für andere 
greifbar zu machen. Kann ja auch nicht für andere lesen, wenn die nur 
überfliegen oder sich sofort ihr eigenes Bild machen...

Thorsten

von Falk B. (falk)


Lesenswert?

@  Thorsten F. (tfol)

>Der 74HCT165 ist nur 8 Bit, davon würde ich ja 32 benötigen...
>da nehme ich lieber 4 * 64Bit Shift Register, z.B. den CD4031.

Und was machst du dann mit deinen 64 Bit IM IC? Dort kommt man nur 
wieder seriell ran. Dashalb ist es höchste Eisenbahn, dass du mal konret 
dein Vorhaben beschreibst. Sonst wird wieder mal endlos aneinander 
vorbeigeredet.

MFG
Falk

von Thorsten F. (tfol)


Lesenswert?

Falk Brunner schrieb:

> Und was machst du dann mit deinen 64 Bit IM IC? Dort kommt man nur
> wieder seriell ran. Dashalb ist es höchste Eisenbahn, dass du mal konret
> dein Vorhaben beschreibst. Sonst wird wieder mal endlos aneinander
> vorbeigeredet.

Seriell laden, umschalten, dauerhaft seriell ausgeben.

bis neues Wort ausgegeben werden soll, dann über PC Daten empfangen, 
umwandeln, seriell in den Schieber, umschalten und dauerhaft seriell 
ausgeben.
Clock 9KHz.

Thorsten

von Thorsten F. (tfol)


Lesenswert?

@ Falk Brunner

Mein erster Beitrag ganz oben, erster Satz:
Thorsten F. schrieb:
> Hi,
>
> ich habe vor Jahren eine Platine gebaut, die seriell von einem PC bis zu
> 12 Werte von 1 - 256 bekommt. Diese Zahlen werden in Bits gewandelt und
> in ein serielles Schieberegister gegeben.

Erweiterung:

und werden dann dauerhaft seriell ausgegeben.

Thorsten

von Falk B. (falk)


Lesenswert?

@  Thorsten F. (tfol)

>Nein, es ist ein serielles Protokoll, das dauernd gesendet werden muss.
>Es gibt eine Leitung, mit der Clock und eine Leitung mit den Daten, die
>werden hier Bits genannt.
>Habe ich oben mindestens 2 mal schon beschrieben.

Sehr bruchstückhaft.

>Ausserdem Optokoppler für Eingangssignale,

Wieviele?

> nicht für das erzeugte Signal.

>Deshalb will ich einen 256Bit ShiftRegister mit 256Bits setzten und das
>dann dauernd mit der Clock ausgeben, so lange bis ein anderes Datenwort
>gesendet werden muss.

Das kann ein kleiner AVR mit 8 Pins locker. Deine 256 Bit = 64 Byte 
liegen als Daten im RAM.

>Ich weis genau was ich will, habe es ja schon konventionell am laufen,

Aber deine Beschreibung ist für Aussenstehende unverständlich und 
unvollständig.

>Danke, aber wenn ich andere Beiträge mit meinem Vergleiche schneide ich
>schon sehr gut ab was Umgangston und Bedürfnis zur Erklärung betrifft.

Ich habe nicht deinen Umgenagston bemängelt, lediglich den Umfang und 
die Verständlichkeit deiner Problembeschreibung.

>Es ist halt nicht immer leicht, Sachen die für mich klar sind für andere
>greifbar zu machen.

Tja, das ist aber notwednig, wenn dir andere helfen sollen.

> Kann ja auch nicht für andere lesen, wenn die nur
>überfliegen oder sich sofort ihr eigenes Bild machen...

Geh mal davon aus, dass Leute wie ich das nicht nur überfliegen. Aber 
Rätselraten, Vermuten und in die Glaskugel schauen mache ich auch nicht.

MfG
Falk

von Falk B. (falk)


Lesenswert?

Ich fasse mal zusammen so wie ich es verstanden haben.

Es gibt eine Verbindung zu PC (UART/RS232?), von dort werden 12 Bytes an 
Daten empfangen
Es gibt ein paar Eingänge per Optokoppler
Aus den Daten vom PC und den Signalen der Optokoppler wird ein 256 Bit 
Datenstrom generiert, welcher permanent mit 9 kHz als Takt und Daten 
ausgegeben wird.

Das alles macht dir ein kleiner AVR mühelos. In einem einzigen IC. Was 
willst du mehr?

Ein ATtiny2313 sollte reichen. Der hat 2kB Flash und einen 
Hardware-UART. Kann man easy in C programmieren, ist hier vollkommen 
ausreichend. Dazu ein FT232 als Verbindung zum PC und fertig ist die 
Laube.

MFG
Falk

von Thorsten F. (tfol)


Lesenswert?

Falk Brunner schrieb:
> Ich fasse mal zusammen so wie ich es verstanden haben.
>
> Es gibt eine Verbindung zu PC (UART/RS232?), von dort werden 12 Bytes an
> Daten empfangen
> Es gibt ein paar Eingänge per Optokoppler
> Aus den Daten vom PC und den Signalen der Optokoppler wird ein 256 Bit
> Datenstrom generiert, welcher permanent mit 9 kHz als Takt und Daten
> ausgegeben wird.

Zusammenfassung ist schon sehr gut. Seriell per RS232.

Eingang über Optokoppler ist hier eigendlich nur das Bitwort, das ich 
selber rausgebe und vom externen Gerät erweitert werden kann, wenn dort 
z.B. Fehler auftreten.

Clock lese ich auch wieder ein, falls es zu einem Kurzschluss auf der 
Leitung kommt.

Dann gibt es noch Reset-Eingang und Status.

Es wird erst ein negativer Puls als Startpuls erzeugt, dann kommen die 
256 Takte, in denen die Bits gesetzt werden können, dann beim 256. 
negativen Takt wieder der nagative Startimpuls. usw.

> Das alles macht dir ein kleiner AVR mühelos. In einem einzigen IC. Was
> willst du mehr?
>
> Ein ATtiny2313 sollte reichen. Der hat 2kB Flash und einen
> Hardware-UART. Kann man easy in C programmieren, ist hier vollkommen
> ausreichend. Dazu ein FT232 als Verbindung zum PC und fertig ist die
> Laube.

Das Problem ist, wenn ein neues Wort gesendet wird per PC über RS232 und 
ich es umwandeln muss, dann ausgebe als serielles Wort und dann noch per 
I2C das Display neue schreibe, es zu Problemen auf der Datenleitung 
kommt.
Die Bits müssen exakt mit der Clock gesetzt werden, bei genau 9kHz.

Da gab es immer wieder Probleme, deshalb das Schieberegister.
Dann will ich die eingehenden Bits ja auch auswerten.

Ich setzte z.B. Bit 9, 52, 75, 78, 90, 212
das Gerät draussen Bit 40, 48

Dann muss der Prozessor die 2 Bits erkennen und ausgeben.
Das habe ich bisher nicht sauber hinbekommen, es kam immer wieder zu 
ausreissern, deshalb die normalen Logikbausteine. Das läuft seid Jahren 
ohne Probleme, täglich stundenlang.

Der Prozessor darf sich bei mir ruhig langweilen.
FT232 nutze ich jetzt auch schon.

Frage war ja nur ob es mit dem FPGA sinnvoll machbar wäre. Es ist kein 
Spielzeug was ruhig mal ausfallen darf. Es steuert teure Geräte die 
zuverlässige Signale benötigen. Denen möchte ich halt was flexibles 
neues gönnen.

Thorsten

von Falk B. (falk)


Lesenswert?

@  Thorsten F. (tfol)

>Das Problem ist, wenn ein neues Wort gesendet wird per PC über RS232 und
>ich es umwandeln muss, dann ausgebe als serielles Wort und dann noch per
>I2C das Display neue schreibe, es zu Problemen auf der Datenleitung
>kommt.
>Die Bits müssen exakt mit der Clock gesetzt werden, bei genau 9kHz.

Nichts leichter als das. Der Timer und seine Output Compare Funktion 
sind deine Freunde. Das ganze mit dem Interrupt garniert, und fertig 
ist die Laube.

>Da gab es immer wieder Probleme, deshalb das Schieberegister.

Man muss "nur" richtig programmieren, dann geht das locker ohne 
Schieberegister.

>Dann will ich die eingehenden Bits ja auch auswerten.

>Ich setzte z.B. Bit 9, 52, 75, 78, 90, 212
>das Gerät draussen Bit 40, 48

>Der Prozessor darf sich bei mir ruhig langweilen.
>FT232 nutze ich jetzt auch schon.

Wie fein.

>Frage war ja nur ob es mit dem FPGA sinnvoll machbar wäre.

Nein.

> Es ist kein Spielzeug was ruhig mal ausfallen darf.

Das FPGA ist schon sehr zuverlässig, hier aber massiv überdimensioniert.

MFG
Falk

von Thorsten F. (tfol)


Lesenswert?

Falk Brunner schrieb:
> Das FPGA ist schon sehr zuverlässig, hier aber massiv überdimensioniert.

Deshalb bin ich ja schon auf den CPLD umgeschwenkt.
Ich bin halt ein gelernter Elektroniker (KEFU), der die Logik liebt und 
auch gerne einsetzt. Hat für mich was zuverlässigeres als ein paar 
Zeilen Code.
Verbinde natürlich auch gerne beides miteinander.
Meine letzten Platinen hatten eigentlich immer einen Prozessor mit 
drauf.

Ich werde mir mal was auf Papier zusammenstricken, vielen Dank für die 
konstuktive Kritik und der netten Hilfe.

Thorsten

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.