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?
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?
Was bedeutet "Zeiteinheit" ? In einem Takt? Wenn ja, wie schnell ist der Takt?
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"?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.