Forum: FPGA, VHDL & Co. Datensätze sortieren in VHDL


von Frank (Gast)


Lesenswert?

Aufgrund eines Auftrages im Begreich der Datenübertragung auf Low Lievel 
bei dem es besonders schnell gehen muss (Ausführungsgeschwindigkeit) 
stelle ich mir die Frage, wie man mit VHDL oder Verilog schnell 
sortieren könnte.

Es geht um Datenblöcke von je 1023 Daten mit jeweils 8-10 Buchstaben und 
Zahlen, für die man ein Kriterum hat, was die Prio angibt. Dieses 
Kriterium bildet aus den 8-10 characters einen Wert - die Formel ist 
gegeben. Datensätze mit hohen Prios sollen früh, andere später gesendet 
werden.

Problem: Es kommen je Zeiteinheit immer 1023 neue Daten rein, die 
ebenfalls abgearbeitet werden müssen. Daten, deren Prio höher ist, als 
die aus der alten Gruppe, müssen überholen, wobei das maximal über 4 
Blöcke geht: Daten aus Block n dürfen erst gesendete werden, wenn alle 
alten aus BLock n-4 schon weg sind, egal, welche Prio.

Alternative: Je Zeiteinheit werden die Prios alter Blöcke erhöht, um 
vorzugseise alte Daten die nur etwas weniger wichtig sind, als neue, 
zuerst zu senden.

Das Senden wird von 1-1023 gesteigert um in einen eingeschwungenen 
Zustand zu kommen.

Einen C Code habe ich und erarbeitet auch.

Könnte man sowas in VHDl besser machen?

von Frank (Gast)


Lesenswert?

Ich mache am Besten noch mal ein Beispiel:

Sagen wir vereinfachend, es kommen immer nur 4 Daten (A-Z) rein, deren 
Blocknummer 1,2,3 ... und Prio f(X) mit dranhängt.

Bestand (t=1)  A1-3, B1-2, C1-5, D1-2

gesendet wird ein Datum und zwar konkret C1 wegen Prio 5, dann werden 
die Prios hochgezählt und neue Daten aus Block 2 addiert:


Bestand (t=2) A1-4, B1-3, D1-3,      E2-5, F2-2, G2-3, H2-3

gesendet werden jetzt 2 Daten und zwar E2 und dann A1,
dann wieder hochzählen und neue Daten addieren


Bestand (t=3) B1-4, D1-4, F2-3, G2-4, H2-4,   I3-2, J3-6, K3-3, L3-4

gesendet werden jetzt 3 Daten und zwar J3, B1 und D1


Bestand (t=4) F2-4, G2-5, H2-5, I3-3, K3-4, L3-5, M4-1, O4-3, P4-5, Q4-7

gesendet werden ab jetzt immer 4 Daten - konkret: Q4, G2, H2, L3


Bestand (t=4) F2-4, I3-3, K3-4, M4-2, O4-3, P4-5, R5-6, S5-7, T5-8, U5-9

gesendet werden alle neue wegen Prio


Bestand (t=5) F2-5, I3-4, K3-5, M4-3, O4-4, P4-6, V6-6, W6-7, X6-8,Y6-2

ab hier greift dann so langs die regel, dass erst mal die alten aus der 
2er und 3er Gruppe weg müssen, bevor die neuen dürfen.


Wie gesagt, einen Code dafür habe ich. Die Frage wäre, bekommt man das 
in VHDL durch paralleles Verarbeiten und schlagartiges Umsortieren 
schneller hin?


Lohnt es, sich da dran zu machen?

von Hans (Gast)


Lesenswert?

Was bedeutet "Zeiteinheit" ?
In einem Takt? Wenn ja, wie schnell ist der Takt?

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


Lesenswert?

Frank schrieb:
> Dieses Kriterium bildet aus den 8-10 characters einen Wert
Was passiert dann mit dem Wert?

> Könnte man sowas in VHDl besser machen?
Das könnte man auch in VHDL machen, nur: Warum?
Was ist das Problem mit deinem C-Code?
Soll der Algorithmus dann auf einem FPGA laufen?
Falls ja: wie sieht die Speicheranbindung aus?
Wie kommen die Daten rein?
Wie ist die Hardware bisher realisiert?
Was ist "eine Zeiteinheit"?

von Edi M. (Gast)


Lesenswert?

Die Entscheidung, welches Datum gesendet werden muss, würde ja bis zu 4 
Blöcke umfassen, wegen des Altervorrangs. Bei Dir sind das 4096 Daten, 
die betrachtet werden müssten. Wenn das gleichzeitig passieren soll 
brauchts Du eine Menge Logik. Du könntest versuchen, 1024 Durchläufe zu 
machen, die nacheinander die zu sendenden Daten suchen.

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.