Forum: FPGA, VHDL & Co. Einfacher Video Recorder für SATA Speicher


von Wolfgang R. (wolfi089)


Lesenswert?

Hallo Forum,

ich komme mit einer Anfängerfrage, bin aber um
jeden Link für weitere Infos dankbar.

In meinem Projekt sollen Vidoesignale von einer
speziellen Kamera aufgezeichnet werden. Sie
kommen über eine eigene Hardware und werden in
dual ported RAM auf einem lokalen Bus angeboten.

Auf der anderen Seite sollen sie auf einer SATA
SSD gespeichert werden. Alles weitere Processing
ist offline. Die Datenrate der Quelle ist 100Hz
* 1 MB.

Momentan ist vorgesehen, dazwischen ein PowerPC
Board zu nutzen. Mir erscheint es aber recht heftig,
einen PowerPC in C oder Assembler für so eine
einfache Aufgabe zu programmieren.

Im Umfeld eines SATA Controllers sollte man doch
das geringe Processing unterbringen können, um die
Daten abzuholen und blockweise abzuspeichern?

Welche einfachen Lösungswege gibt es hier?

Vielen Dank
Wolfgang R.

von Kest (Gast)


Lesenswert?

Es gibt diverse IDE IP-Cores, wo man Festplatten oder CF-Karten 
dranhängen kann (zumindest bei Altera). Es gibt auch ein Paar S-ATA zu 
IDE Converter (Chips) z.B. JM20330
http://www.jmicron.com/Product_JM20330.htm

Man schmeiße alles zusammen, umrühren und mit etwas Magie kommt dabei 
vielleicht etwas Brauchbares raus ;-)


Grüße,
Kest

von Wolfgang R. (wolfi089)


Lesenswert?

Ja Danke, geht in die richtige Richtung.

Gruß
Wolfgang R.

von Bernhard R. (barnyhh)


Lesenswert?

Ich denke, daß die Hauptaufgabe dieses Projektes nicht darin besteht, 
die Kamera und die SATA SSD miteinander zu verbinden. Was spricht also 
dagegen, für diesen Teil des Gesamtprojektes eine solide, einfache, 
primitive Lösung zu wählen, nämlich das PowerPC Board! Andere Lösungen - 
speziell FPGA-Lösungen, wie sie in diesem Forum diskutiert werden - 
erfordern einen erheblich höheren Entwicklungsaufwand (Zeit, Risiko, 
...). Im übrigen liegt eine Datenrate von 100 MB / sec durchaus in dem 
Bereich, in dem man einen PPC einsetzen kann.

Bernhard

von Wolfgang R. (wolfi089)


Lesenswert?

Ich hab auch ein PPC Evaluierungsboard und beginne
gerade mich einzuarbeiten. Wenn es den Durchsatz schafft,
ist das auch ok. Hatte nur vorab das Gefühl, der Durchsatz
ist kritisch. Werde ich aber auf jeden Fall testen.

Gruß
Wolfgang R.

von Christian Leber (Gast)


Lesenswert?

Eine SSD garantiert aber nicht unbedingt immer 100 MB/s.

Eine Moeglichkeit ware ein spezieller flash controller.

Wenn es nicht auf Stromverbrauch/Groessen ankommt, dann waere es 
vielleicht am einfachsten einen PC/Laptop zum Speichern zu benutzen. 
Einfach die Kamera mit PCIe anbinden, dann hat man gleich ganz bequem 
einen 4 oder 8 GB buffer.
(falls die SSD mal pause macht oder man kann sogar einfach 2 HDDs 
benutzen)

von Wolfgang R. (wolfi089)


Lesenswert?

Hallo Christian,

wachse mit jedem Tag etwas mehr in das Thema rein.
In meinem ersten Post war ein kleiner Typo. Es geht genauer um 200Hz * 
0,65 MB ;)

Damit habe ich dann einen geforderten minimalen Durchsatz von 131 MB/s 
in Richtung Festplatte(n).

Ein paar erste Tests mit standard Linux auf einem PowerPC Board 
(MPC8377)
habe ich gestern gemacht. Zwei Barracuda Drives sind über SATA II 
angeschlossen. Mit zwei Jobs
cat /dev/zero > file
komme ich auf 2 * 60 MB/s. Der top zeigt aber 2 * 40% Last für die CPU.
Damit ist ein einfaches high Level Programmieren in dieser Umgebung 
nicht
möglich. Embedded PowerPC Boards wg. dem Umfeld sind die erste Wahl.

Ich beschäftige mich nun näher mit der Leistungsfähigkeit des Boards
weiter low Level.

Es muß doch etwas im Umfeld der SATA Controller geben?

Hier hatte ich mal die Idee etwas ausführlicher beschrieben.

Gruß
Wolfgang R.
------------------------
Our information source is a video converter providing frame data within 
a dual-port-RAM.
Three banks of about 1 MB will be available. It will be written 
round-robin and should finally be stored on an SATA/SSD drive, readable 
by Linux. All formatting and other stuff could be done offline by the 
Linux machine.

The missing piece in between should shuffle 1h of input data 
sequentially to the SATA drives.

Each bank will be organized by two status cells first  and all the rest 
is raw data

0x000000  WRITE_STATUS
0x000002  READ_STATUS
0x000004  Pixel_1
....
0xffffff    Pixel_ffffff

The pseudo code for the driver looks like

loop forever
  if WRITE_STATUS == END
    close disk
     exit loop
  else if WRITE_STATUS == DATA_UNDER_UPDATE || IDLE
    continue
  else if WRITE_STATUS == DATA_READY
    READ_STATUS = READING_DATA
    shuffle all raw data to SATA disk
    READ_STATUS = DATA_READ_FINISHED
  end if
end loop

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Wenns auf geschwindigkeit ankommt schalte doch einfach mehrere 
Festplatten als RAID parrallel.

von Wolfgang R. (wolfi089)


Lesenswert?

Ich befürchte der Processor/Board mit dem Linux Stack schafft den 
Durchsatz nicht
... (s.o.)
cat /dev/zero > file
komme ich auf 2 * 60 MB/s. Der top zeigt aber 2 * 40% Last für die CPU.
...

Wenn der top für die CPU 100% anzeigt, wäre ich hochgerechnt bei 130 
MB/s output. Ich gehe mal davon aus, dass dieser cat sehr effizient 
implementiert ist. Meine geschriebenen Tests mit fwrite() waren 
wesentlich langsamer (~20MB/s). Bin aber erst ganz am Anfang von dem 
Optimierungsthema in Linux.

Gruß
Wolfgang R.

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.