Forum: FPGA, VHDL & Co. AVR SoC - Interface Moeglichkeiten


von Bastler (Gast)


Lesenswert?

Hallo liebes Forum,

ich moechte gerne ein Projekt mit einem mega128 starten. Einige 
Berechnungen wuerde ich aber gerne in einen co-processor auslagern. Das 
ganze soll dann auf einem FPGA laufen.

Mich interessieren die Interfacemoeglichkeiten. Zum einen gibt es die 
ports und das SPI. Liesse sich mit auch der RAM des AVR mit einem 
co-prozessor teilen?

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


Lesenswert?

Bastler schrieb:
> Liesse sich mit auch der RAM des AVR mit einem co-prozessor teilen?
Welches RAM? Das im AVR eingebaute? Da kommst du nicht ran...

Mein Standpunkt:
Bevor du einen billigen 8-Bit-uC mit einem externen FPGA "aufbohrst" 
kauf besser einen ARM. Der hat Leistung satt und kostet nicht mehr als 
der AVR alleine...

von hjk (Gast)


Lesenswert?

Lothar Miller schrieb:
> Welches RAM? Das im AVR eingebaute? Da kommst du nicht ran...

Warum nicht?

FPGA fragt Adresse an und der AVR liefert den Wert. Ist natürlich nicht 
besonders schnell, aber grundsätzlich geht es schon.

Fraglich bleibt trotzdem ob sich das lohnt. Ein Softcore mit ähnlicher 
Leistung ist warscheinlich mit unter 1000 Lut/FF möglich.

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


Lesenswert?

hjk schrieb:
> Warum nicht?
> FPGA fragt Adresse an und der AVR liefert den Wert.
Das ist nicht das, was ich als "Zugriff aufs RAM" bezeichnen würde.

> Ist natürlich nicht besonders schnell, aber grundsätzlich geht es schon.
Ich habe gemeint, per DMA und oder Cycle-Stealing mit halbwegs 
vertretbarer Geschwindigkeit von aussen direkt ans RAM zu kommen...

Man könnte natürlich das RAM des FPGAs als "externes asynchrones RAM" an 
den AD-Bus (Ports A, C und G) des AVR anschliessen, dann hätte der 
direkten Zugriff auf das FPGA.

> Ein Softcore mit ähnlicher Leistung ist warscheinlich mit unter 1000
> Lut/FF möglich.
Und trotzdem garantiert teurer als ein ARM.

von Bastler (Gast)


Lesenswert?

Ich wuerde den AVR mit auf dem FPGA laufen lassen, als softcore.

von hosentraeger (Gast)


Lesenswert?

Ich wuerde mit so einem Quatsch gar nicht anfangen,
und den Vorschlag von lkmiller nehmen. Ein ARM Prozessor
und eventl. ein FPGA am Memory Interface des Prozessors.

hosentraeger

von hjk (Gast)


Lesenswert?

Lothar Miller schrieb:
> Und trotzdem garantiert teurer als ein ARM.

Das bezweifle ich nicht.

Eher ist es doch so das es, gerade bei Hobbyprojekten wo es nicht auf 
cent/stück ankommt, genug Platz im FPGA für den Softcore gibt, ein Board 
mit µC UND FPGA zu realisieren aber deutlich mehr Aufwand Bedarf.

Außer der µC reicht sowieso alleine, dann wird man sich die FPGA 
Entwicklung wohl eh nicht antun wollen.

von Bastler (Gast)


Lesenswert?

hjk schrieb:
> Eher ist es doch so das es, gerade bei Hobbyprojekten wo es nicht auf
> cent/stück ankommt, genug Platz im FPGA für den Softcore gibt, ein Board
> mit µC UND FPGA zu realisieren aber deutlich mehr Aufwand Bedarf.

Ganz genau. Es gab mal das FPSLIC, das war µC UND FPGA, dazu gab es 
sogar eine eigene IDE. Die FPGAs sind mittlerweile jedoch so gross das 
man ohne weiteres einen µC als softcore nehmen kann. (Ich vermute das 
ist der Grund warum das FPSLIC nicht weiter etnwicklt wurde.)

Ich habe mal mit dem 8051 experimentiert. Der 8051 kennt externen und 
internen RAM, wobei sich der externe wunderbar mit einem co-processor 
teilen laesst.
Idelaerweise uebertraegt man eine ganze reihe an bytes zwischen externem 
RAM und co-prozessor und macht dazu einen einzelnen handshake ueber die 
ports. So braucht man nicht fuer jedes uebtertragene byte einen eigenen 
handshake.

Beim mega128 bin ich nicht so sicher wie gut sowas geht oder ob etwas 
anderes mehr sinn macht.

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


Lesenswert?

Bastler schrieb:
> Beim mega128 bin ich nicht so sicher wie gut sowas geht oder ob etwas
> anderes mehr sinn macht.
Du kannst das FPGA wie einen externen RAM-Baustein an den ATmega128 
anschließen, die Daten dort speichern, und über einen Interrupt 
signalisieren, wenn die Berechung fertig ist...

von Georg A. (georga)


Lesenswert?

Ich hab sowas gemacht, und zwar deswegen, weil der AVR mit einer SD dann 
bequem das FPGA booten kann. Im FPGA läuft dann ein Microblaze, der dann 
wiederum den AVR als eine Art IO-Expander für die SD und AD-Wandler 
nutzt. Als Interface werden die Pins für das Slave-parallel-IF des FPGAs 
und der gemuxte 8Bit AD-Bus des AVRs genommen (+ALE/RD/WR).

Im (gebooteten) FPGA hängt dann daran ein Dual-Port-RAM, dass vom 
Microblaze über verschiedene IO-Adressen angesprochen werden kann. Eine 
bildet das uart-lite-Verhalten nach, d.h. der AVR macht RS232-IO. Hat 
den Vorteil, dass AVR und FPGA-Ausgaben über dieselbe Schnittstelle 
laufen. Dann gibts noch ein Sektor-read/write-IF (ähnlich IDE), worüber 
das MB-Linux dann sein SD-IO abwickelt. Die AD-Werte stehen auch drin, 
eine Doorbell-Interrupt in beide Richtungen gibts auch.

Der Bootvorgang sieht so aus, dass der AVR via FAT-FS auf der SD-Karte 
das "neueste" FPGA-Image findet (man kann per RS232 manuell auch was 
anderes wählen) und damit das FPGA konfiguriert. Das dann startende 
MB-Bios fordert vom AVR den im selben Ordner liegenden 
Linux-Kernel+Initrd an, der AVR hangelt sich dabei (wie beim Bitstream) 
noch selbst durch die FAT. Wenn das Linux gestartet ist, wird für die 
SD-Karte nur noch das Sektor-IF benutzt, der Linuxtreiber dazu ist recht 
trivial, er muss ja nur die Sektornummer weiterreichen...

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.