Forum: FPGA, VHDL & Co. PowerPC PPC 440 Taktfrequenz


von Cihan K. (lazoboy61)


Lesenswert?

Hallo Leute,

habe eine kleine Frage zu der Geschwindigkeit des PowerPCs 440.
Ich habe demnächst ein Projekt, indem ich Daten alle 50 ns (20 MHz) 
auslesen muss. Zu Testzwecken habe ich über XPS ein einfaches Projekt 
mit dem PPC erstellt und als PPC-Takfrequenz 400 MHz ausgewählt. Nach 
dem Export in die SDK Software habe ich in C folgendes kleines 
Programmbeispiel geschrieben:
1
#include <stdio.h>
2
#include "xparameters.h"
3
#include "xil_cache.h"
4
#include "xstatus.h"
5
#include "xgpio.h"
6
#include "gpio_header.h"
7
8
#define GPIO_DEVICE_ID    XPAR_XPS_GPIO_INTERRUPT_DEVICE_ID
9
#define GPIO_CHANNEL     1
10
11
u8 x,y;
12
/********************************************************************/
13
14
int main() 
15
{
16
   Xil_ICacheEnable();
17
   Xil_DCacheEnable();
18
19
   x=0;
20
   while (1) {
21
     x++;
22
     y=(x&1);
23
     XGpio_DiscreteWrite(&GpioOutput, GPIO_CHANNEL, y);
24
   }
25
26
   Xil_DCacheDisable();
27
   Xil_ICacheDisable();
28
29
   return 0;
30
}

Das Programm toggelt einfach nur einen GPIO Output, welches ich dann auf 
dem Oszilloskop mir betrachte. Dort messe ich dann, wie lange er für das 
Invertieren des Output Signals braucht. Die Zeit die er zum toggeln 
braucht beträgt ca. 230 ns (ca. 4,3 MHz).

Warum ist die Taktfrequenz so langsam, der SPLB Bus ist mit 100 MHz 
getaktet und der PPC mit 400 MHz. Gibt es irgendwelche Einstellungen in 
XPS mit dem ich die while-Schleife schneller hinbekomme.

Als Ausblick nebenbei, später wenn ich das Projekt aufsetze, wird 
natürlich mit einem Interrupt ein 20MHz Input-Signal abgetastet, um die 
ankommenden Daten dann im Ram abzuspeichern.

Würde mich auf jede Antwort sehr freuen

mfg Cihan

von Klaus F. (kfalser)


Lesenswert?

Cihan Kalayci schrieb:
> Interrupt ein 20MHz Input-Signal abgetastet,

Kannste vergessen, alle 50 ns einen Interrupt ??

von Peter (Gast)


Lesenswert?

x++; und y=(x&1); brauchen etwas Zeit!

XGpio_DiscreteWrite() ist vermtlich ein Funktionsaufruf der noch viel 
mehr zeit benötigt.

u8 x,y;  => Kannst getrost u32 nehmen, für einen 32Bit CPU

Beschreibe als Test direkt das entsprechende GPIO-Register, abwechselnd 
mit zwei konstanten Werten, so dass das gewünschte IO-Signal toggelt. so 
ca 50 MHz müssten schon drinnliegen

>Kannste vergessen, alle 50 ns einen Interrupt ??
Damit hat Klaus recht!

von Cihan K. (lazoboy61)


Lesenswert?

Danke erstmal für die schnellen Antworten.

wie müsste ich denn dann das Problem angehen. Alle 50ns sind neue Daten 
in bereitgestellt. Die Daten werden in einer von mir entwickelten 
IP-Core bereitgestellt. Eigentlich hatte ich vor danach die Daten auf 
der SDK Software zu überprüfen und im Ram zu speichern.

Wäre es lieber besser die Daten direkt im IP-Core im Ram abzuspeichern? 
Und auf Anfrage über die SDK Software in C, die Daten auszulesen?

Was meint ihr wie die Vorgehensweise sein muss

gruß cihan

von franke (Gast)


Lesenswert?

mach's im FPGA...

Was immer du auch machen musst, den PPC nur über das Ergebnis 
informieren.

Cheers...

von Uwe (Gast)


Lesenswert?

Ein FIFO bzw. ein dual port RAM ins FPGA und Signal dort speichern. Dann 
ein ganzes Paket mit dem PPC auslesen.

von Cihan K. (lazoboy61)


Lesenswert?

Die Daten sollen ja in den DDR2 Ram Speicher des ML507 
Entwicklungsboards von Xilinx geschrieben werden. Dafür habe ich einen 
MPMC-Controller in mein XPS Projekt eingebunden und die nötigen 
Konfigurationen via youtube-Tutroial von Silica (ADDING MPMC...) 
durchgeführt.

Nun sind die ganzen Pins des DDR2 Ram Speichers in der UCF und in der 
MHS vorhanden. Meine Custom IP, der die Daten empfängt ist ebenfalls in 
den beiden Dateien integriert.

Nun ist meine Frage, kann ich direkt von der Custom IP die ankommenden 
in den Ram speichern? Brauche ich für solch einen Vorgang dann einen 
Fifo bzw. dual port RAM? Würde mich freuen wenn ihr mir in diesem Punkt 
weiterhelfen könntet.

Mein wunsch wäre es ja, wenn daten ankommen direkt in den DDR2 Speicher 
schreiben zu können, deswegen wäre es ja auch sehr sinnvoll, direkt von 
meiner Custom IP den Schreib- und Lesevorgang des DDR2´s durchführen zu 
können. Gibt es dazu evtl. sogar Beispielcodes, -links, etc. die mir 
weiterhelfen können? Wie müsste ich mein Vorhaben weiterführen?

Gruß Cihan

PS: youtube-Tutorial von Silica (3 parts):
http://www.youtube.com/watch?v=D5ZbuNFuyyo&feature=plcp
http://www.youtube.com/watch?v=pH4g9bIKi2g&feature=plcp
http://www.youtube.com/watch?v=Jfw39n47oP4&feature=plcp

von Cihan K. (lazoboy61)


Lesenswert?

keine Antwort :-(

von Christian R. (supachris)


Lesenswert?

Soweit ich mich erinnere, geht das. Du musst ein NPI oder LocalLink 
Interface zum DMA Transfer und ein PLB Interface zum parametrieren 
deines Cores an bauen. Dann kann der MPMC Daten direkt von deinem Core 
in den DDR2 schaffen, nachdem er vom PPC enrsprechend parametriert 
wurde. Das LocalLink ist ein relativ simples FIFO-style Interface, das 
ist dafür sicher gut geeignet. Deine Logik selber wird auf den Speicher 
keinen Zugriff haben, denn die Arbitrierung macht der MPMC. Natürlich 
kannst du auch einen FSL-FIFO zwischen PLB und Logik hängen, das ist 
aber langsam und nicht DMA-fähig. Oder ein dual ported BRAM an den PLB, 
aber dann muss der PPC auch alle Daten selber da rüber schaufeln.

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.