Forum: Mikrocontroller und Digitale Elektronik Theoretische Machbarkeit Multicore Avr ?


von Klaus (Gast)


Lesenswert?

Hallo
Ich hatte heute mal wieder das Problem das mein Avr nicht schnellgenug 
war und hab mir überlegt das ein Multicore Avr nett währe.

Theoretischer ansatz
Ich nehme 2 oder 3 Normale Avrs m128 oder auch xmega und ein Ram. Dann 
mit einem Cpld jeweils einem Avr nach dem anderen ein Takt signal (Am 
Clock anstelle vom Quarzoszillator) und dem jeweils getaktetem Avr wird 
dabei der Ram zugeschaltet.

Somit müsste es doch möglich sein das ein Avr daten aus dem Ram liest 
während ein anderer schreibt?

Wie gesagt nur Theoretischer gedankengang. Das es nicht viel sinn machen 
würde ist mir bewust :)

von holger (Gast)


Lesenswert?

>Somit müsste es doch möglich sein das ein Avr daten aus dem Ram liest
>während ein anderer schreibt?

Wegwerfen, funktioniert nicht.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Es gibt Dual Port RAMs die du einfach von zwei AVRs aus gleichzeitig 
nutzen könntest.

von Klaus (Gast)


Lesenswert?

Also sie würden ja nicht zeitgleich arbeiten sondern durch den Takt 
versetzt nacheinander.
Wenns nicht geht woran würde es scheitern ?

von Michael H. (mueckerich)


Lesenswert?

holger schrieb:
> funktioniert nicht

Warum? Mit einem Dual-Port-RAM (DPRAM)ist das sehr wohl möglich.

von spontan (Gast)


Lesenswert?

Was hindert Dich dran eine leistungsfähigere Hardware zu verwenden?
PIC32, intern mit 80 MHz, kosten weniger als 5 Euro.

von .... (Gast)


Lesenswert?

Wenn man es richtig macht, so kann dieses Konzept sicher und stabil 
funktionieren.

Das grösste Problem ist es, diesen Takt zu erzeugen. Natürlich ist es 
mit einem CPLD kein Problem, einen Takt durch zwei, drei, vier, ... zu 
teilen und jeweils versetzt auszugeben. Als Taktsignal taugt dieses von 
der Logik generierte Signal aber nicht, da man z.B. die Gefahr von 
Glitches hat oder die Laufzeitunterschiede Probleme machen können. 
Deshalb wird es in der Praxis sehr heikel sein, sowas zu implementieren. 
Ausser man nimmt spezielle Takterzeugungs-Schaltkreise (PLL etc.), aber 
das ist dann wieder ein anderes Thema...

Auf jeden Fall birgt der Vorschlag auf allen Ebenen mindestens 1001 
Problem, in der Praxis wird man sowas also ganz sicher nicht machen, 
sondern einen grösseren Controller nehmen. Selbst als einfacher Bastler 
macht man sowas nur, wenns Selbstzweck sein soll.

von amateur (Gast)


Lesenswert?

Wenn Du Probleme hast die voneinander unabhängig sind, ist schon seit 
Langem Multitasking in. Im Westen nix Neues.

Ist aber das Resultat mehrerer Probleme mit dem Endstatus verknüpft, so 
müssen die Grübler querverknüpft sein. Sozusagen Demokratie auf 
Prozessorebene.

Der Aspekt der Ressourcen steht dabei oft an zweiter, meist monetärer, 
Stelle.

von Klaus (Gast)


Lesenswert?

was mich daran hindert ist auch das was mich auf diese idee gebracht 
hat.

Mal eben schnell was ausprobieren, keinen Passenden Controller im haus, 
Überlegen wie man es aus teilen die man hat machen könnte.

Also aus den Posts erlese ich das es im grunde mit viel aufwand schon 
gehen sollte. Aber ok was ich wirklich nicht bedacht hab lesen und 
schreiben ins ram ist ja auch auslastend, so das das ergebnis vermutlich 
kaum schneller währe.

Trozdem danke :)

von Default (Gast)


Lesenswert?

Wie hoch der Kommunikationsaufwand zwischen den CPUs für das Problem ?

von Hu (Gast)


Lesenswert?

Einfacher wäre ein Master-uC, der Arbeitspakete über einen Bus an die 
anderen uCs verteilt und die Ergebnisse wieder einsammelt.

von drt (Gast)


Lesenswert?

>Es gibt Dual Port RAMs die du einfach von zwei AVRs aus gleichzeitig
>nutzen könntest.

dann  stellen  wir  uns  mal  dumm   und  fragen

woher  weiss  CPU1  von  den Daten  der  CPU2  usw.

von c-hater (Gast)


Lesenswert?

spontan schrieb:
> Was hindert Dich dran eine leistungsfähigere Hardware zu verwenden?
> PIC32, intern mit 80 MHz, kosten weniger als 5 Euro.

Und leistet nicht wirklich mehr als ein AVR bei 20MHz.

Nur Idioten gucken allein nach dem Takt. Kenner verstehen die Hardware.

von sfe (Gast)


Lesenswert?

Die AVRs sind doch hoffnungslos veraltet. Zum gleichen Preis gibt es 
32bit µC mit FPU und DMA. Da hat der µC nicht mal angefangen irgendwas 
zu tun, da gerät der AVR schon ins Schwitzen. ;-)

Atmegas werden nur noch aus Nostalgiegründen (Redesign zu teuer) oder 
Bequemlichkeit (Umstieg kostet Zeit und Nerven) verwendet. Das 
Preis/Leistungsverhältnis ist so schlecht, da gibt es einfach keinen 
anderen vernünftigen Grund mehr.

von Hans M. (Gast)


Lesenswert?

sign und ^^

von Hu (Gast)


Lesenswert?

drt schrieb:
> dann  stellen  wir  uns  mal  dumm   und  fragen
>
> woher  weiss  CPU1  von  den Daten  der  CPU2  usw.

Jede CPU bekommt einen Speicherbereich zugewiesen, in den nur sie 
schreiben darf. Lesen dürfen den aber alle. Wäre eine Möglichkeit.
Oder die CPUs können einen Speicherbereich für sich sperren, während sie 
darin schreiben. Danach geben sie ihn wieder frei für die anderen.

von amateur (Gast)


Lesenswert?

>Einfacher wäre ein Master-uC, der Arbeitspakete über einen Bus an die
>anderen uCs verteilt und die Ergebnisse wieder einsammelt.

       Vorher
    +-----------+
    |           |
----+     ?     +----
    |           |
    +-----------+

       Nachher            +-----------+
                          |           |
                     +----+     ?     +----+
                     |    |           |    |
    +-----------+    |    +-----------+    |    +-----------+
    |           |    |                     |    |           |
----+     #     +----+                     +----+     ?     +----
    |           |    |                     |    |           |
    +-----------+    |    +-----------+    |    +-----------+
                     |    |           |    |
                     +----+     ?     +----+
                          |           |
                          +-----------+

... ich weis ja nicht

von Thomas E. (thomase)


Lesenswert?

Klaus schrieb:
> Ich hatte heute mal wieder das Problem das mein Avr nicht schnellgenug
> war und hab mir überlegt das ein Multicore Avr nett währe.
Wenn ich gemein wäre, würde  ich jetzt schreiben, daß dein Programm 
einfach nur nichts taugt und man das mit effizientem Code ganz sicher 
hinbekommen würde. Aber ich bin heute nicht gemein.

Ausserdem ist deine Idee kein Multicore- sondern ein 
Multiprozessorsystem.

Der Atmega128 verfügt zwar über ein externes Speicherinterface aber mehr 
auch. Für ein Multiprozessorsystem braucht man aber einen gemeinsamen 
Bus. Somit ist Bus-Arbitration aber für den ein Fremdwort. Das ist aber 
das Zauberwort für Multiprocessing.

mfg.

von Mark L. (m2k10) Benutzerseite


Lesenswert?

Das ist nicht nur theoretisch machbar, auch praktisch:
http://www.mmk64.de

Aber, nunja, ohne durchgetakteten Hardcore-Assembler-Code kannst du das 
vergessen, wenn du auch die volle parallele Leistung ausreizen willst.

Wenn du nur mal schnell was ausprobieren möchtest, nimm besser irgend 
einen moderneren/schnelleren Prozessor.

Grüße
Mark

von Fallobst (Gast)


Lesenswert?

sfe schrieb:
> Die AVRs sind doch hoffnungslos veraltet. Zum gleichen Preis gibt es
> 32bit µC mit FPU und DMA.
> [...]

Käse.
Beispiel bitte: 32bit+FPU+DMA für 1€.

von Thomas E. (thomase)


Lesenswert?

Fallobst schrieb:
> Beispiel bitte: 32bit+FPU+DMA für 1€.
Lass es.

sfe schrieb:
> Die AVRs sind doch hoffnungslos veraltet.
Das ist einfach nur dämliches Bla-bla von einem, der einen 32-Bitter 
braucht, um eine Led zum Leuchten zu bringen. Zum Blinken braucht er 
dann schon einen 64-Bitter.

mfg.

von c-hater (Gast)


Lesenswert?

sfe schrieb:
> Die AVRs sind doch hoffnungslos veraltet. Zum gleichen Preis gibt es
> 32bit µC mit FPU und DMA.

Tatsächlich? Welche?

Im übrigen sind sowohl 32Bit Integer-Verarbeitungsbreite als auch eine 
FPU alles andere als sichere Indikatoren für mehr Leistung. Das sind sie 
naturgemäß bestenfalls dann, wenn derartige Verarbeitungsbreiten auch 
tatsächlich benötigt werden, was im typischen µC-Bereich eher selten der 
Fall ist. Für die Verarbeitung eines Bit ist nämlich auch ein Byte schon 
unnötig breit. So simpel ist das eigentlich.

von c lover (Gast)


Lesenswert?

c-hater schrieb:
> spontan schrieb:
>> Was hindert Dich dran eine leistungsfähigere Hardware zu verwenden?
>> PIC32, intern mit 80 MHz, kosten weniger als 5 Euro.
>
> Und leistet nicht wirklich mehr als ein AVR bei 20MHz.
>
> Nur Idioten gucken allein nach dem Takt. Kenner verstehen die Hardware.

LOL.

Für diese Aussage hast du bestimmt stichfeste Belege...

von H.Joachim S. (crazyhorse)


Lesenswert?

Habe keine Berührungsängste mit dickeren Schiffen, aber in 80% meiner 
Anwendungen laufen AVRs. Und die tun das, was sie sollen. Und die meiste 
Zeit schlafen sie sogar.
Wenns ans Eingemachte geht, d.h. Rechenleistung und/oder Datendurchsatz 
gefordert ist, dann versuch ich nicht, dass irgendwie in einen AVR zu 
quetschen, der dann am Limit hangelt. Mit ein wenig Erfahrung sieht man 
schnell, wo es hingeht bzw. hingehen muss.

von Star K. (starkeeper)


Lesenswert?

Der Wille mancher hier auf Teufel komm raus einen Controller von Atmel 
zu verbauen ist schon erstaunlich. Es gibt da draußen noch mehr als nur 
Atmel und i.d.R. gibt es für jede Anwendung schon einen passenden 
Controller ohne, dass man gewagte Winkelzüge vornehmen muss.

von Christian B. (casandro)


Lesenswert?

Also shared memory Multiprozessorsysteme sind immer noch in einigen 
Bereichen populär. Wenn Du einen Mehrkern-Prozessor hast, dann macht das 
das so. Das ist aber eine Sackgasse und skaliert nicht wirklich. 
(Speicherbandbreite zu gering)

Verbinde lieber die Prozessoren über definierte Schnittstellen zwischen 
denen Du Botschaften austauscht. Sprich verbinde die zum Beispiel über 
SPI und lass sie synchron laufen. Damit kannst Du alle 18 Taktzyklen ein 
Byte austauschen lassen.

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.