Hallo, ich habe leider noch nicht viel Erfahrung was FPGA anbelangt. Leider bin ich hier in der 3 Mann Firma der einzige der sich mit VHDL ansatzweise auskennt, so dass ich niemanden fragen kann. Deswegen hoffe ich auf eure Hilfe... Ich habe eine Box vorgesetzt bekommen, die Daten getriggert misst (analog & digital) und auch analoge & digitale Daten getriggert ausgibt. Es ist ein DDR2 Ram angeschlossen und die ganze Box wird über USB2 (FX2) an den PC angeschlossen. In meinen (noch unerfahrenen) Augen, ist der Ansatz von meine Vorgänger nicht gut, so dass ich mir Gedanken mache dies alles komplett zu ersetzten (wenn ich dafür Zeit bekomme). Sein Quellcode ist mit wenig wiederverwendbaren Modulen. Er hat viel mit Copy & Paste gearbeitet, so dass Änderungen an vielen Stellen geändert werden müssen. Herzstück ist ein Wishbone-bus, den er nicht wirklich verwendet(nur USB<-> RAM), sondern alles klassisch? parallel. Dreh und Angelpunkt sind eigentlich die internen FIFOs. Ausgänge: Über USB werden daten in ein RAM-FIFO geschrieben. Diese werden in ein BRAM-FIFO geschrieben um sofortigen zugriff zu erhalten. Eingägne: Eingänge kommen in ein BRAM-FIFO die in das RAM-FIFO geschriben werden. RAM-FIFO weil viel Platz. BRAM-FIFO weil schnell. Wie ist jetzt der beste Ansatz/das beste Konzept um möglicht hohen Durchsazt zu bekommen? Problem: das Memmory-Interface hat nicht genügent Ports um jedem FIFO ein Port zuweisen zu können. Wahrscheinlich sollten die Daten möglichst im Burst-Modus übertragen werden, damit nicht unnötig Takte vergeudet werden. Ich hatte mir überlegt ein FIFO-Baustein zu programmieren, dass den RAM-FIFO und den BRAM-FIFO vereint. Den könnte man dann immer wieder verwenden und Sie würden die Vorteile von beiden vereinen. Im Augenblick ist das alles einzeln und sehr verstrickt, was einige Problem mit sich bringt. Sollten Wishbone-RAM-FIFO-Slaves/Masters programmiert werden die auf ein Wishbone-RAM-SLAVE zugreifen? Aber die würden sich dann gegenseitig blockieren beim Shared-Bus. Hätte aber den Vorteil, dass eine einfache Wiederverwendbarkeit gewährleistet wäre und x-beliebig viele slaves/master auf den RAM zugreigen könnten. Oder sollten alle RAM-Ports parallel verwendet werden. Aber es gibt nicht genügend Ports... Ich bin mal gespannt auf eure Anregungen. Vielen Dank schon mal im Voraus. Grüße Torsten
Ich möchte Dir nicht zu nahe tretten, aber das ist typisch Anfänger ;-): gleich Sachen ändern, obwohl man davon keine Ahnung hat... Ernsthaft, aus Post geht nicht hervor, wieso Du überhaupt daran was ändern sollst, funktioniert es denn nicht? Wenn alles läuft, dann ist gut. Im bestehenden Code "rumzupfuschen" ist sehr selten eine gute Idee. Überlege es Dir genau, was und weshalb Du ändern möchtest. Und vergiss auch nicht die betriebswirtschaftliche Seite des Projekts. Ansonsten habe ich nicht wirklich verstanden, worum es geht, sorry ;-) Grüße, Kest
Hallo Kest Ja es läuft schon. Ich soll nur Änderungen/Erweiterungen einpflegen. Da aber mein Vorgänger viel mit Copy & Paste gearbeitet hat, ist es extrem aufwendig und fehlerträchtig es an x stellen anzupassen... Sei ruhig ehrlich. Ich zähle mich zu den Anfängern und kann nur lernen... Eine Frage ist: "klassische VHDL-Programmierung" ein Memorykontroller mit vielen Ports, die aber nicht ausreichen also auch nochmal ihrgendwie aufgesplittet werden müssen oder ein Memorykontroller über Wishbone. Was ist sinnvoller hinsichtlich Wartung - Erweiterung und Geschwindigkeit? Torsten
Kannst Du mal von dem Ding einen Schaltplan posten und den Source? Ich kann mir jetzt Dein Problem so garnicht vorstellen!
DDR2 immer kaufen! um himmelswillen nicht selber bauen. Und damit bist du schon auf den Core der Herstellers gebunden. Du brauchst ausreichend große Entkoppel-FIFOs um die Clock-Domains zu trennen, bzw um Refreshs des DDR2 abzufangen. Aber wie gesagt, erstmal schaun welchen IP, und dann weiterlaufen. PS .. Deine Formulieren "Copy und Paste" hört sich doch sehr abwerten an... unterschätz das mal nicht, einen DDR2 zum laufen zu bringen ist nicht banal und den USB2 zu füttern auch nicht, das war garantier kein "Copy & Paste", höchsten Reuse von IP Blöcken... was wirklich nicht das gleiche ist...
Als erstes würde ich Übersicht verschaffen -- RTL Plan erstellen und da sieht man, was da alles passiert. Danach würde ich die "Copy & Paste" Sachen einfach in Module packen -- aber um Gottes Willen nichts ändern/optimieren! Wenn das dann läuft, würde ich den Flaschenhals suchen (FIFO Größe/Anzahl und so weiter). Wenn Du erstmal damit durch bist, dann wirst Du gute Vorstellung haben, wieso Dein Vorgänger genau so und nicht anders gemacht hat. Und nun zur Frage mit Wartung/Erweiterung/Sicherheit: Ich weiß nicht, in welcher Position Du bist. Deshalb sagte ich ja auch -- denk' auch wirtschaftlich! Ich habe so oft erlebt, dass neue Studis, die gerade anfagen zwar die genialsten Ideen haben und alles ändern wollen, doch die Zeit/Kosten aus dem Blickfeld verlieren. Jeder Arbeitstag zählt. Und wenn man gegenrechnet, dann wird einem auch klar, ob es sich lohnt da was zu machen oder nicht. Oft erlebte ich auch solche Ansagen wie:"hier ist der code -- optimiere den mal" Damit kann ich überhaupt nichts anfangen... soll ich jetzt eine Woche lang optimieren? Bezüglich was optimieren? Dass der Source Code schön aussieht? Weniger Zeilen im Code? Baustein? Taktrate? Ich sage nur, man bewegt sich bald in eine Sackgasse, wenn man keine klare Ziele hat. Wishbone oder nicht -- am Ende ist alles Latte, wenn es funktioniert und Du einen Plan ist, was da abläuft. Und wenn es nicht funktioniert, dann sollte man auch eine ungefähre Ahnung haben, woran das liegt. So, das war mein Senf dazu :-) Ich wünsche Dir viel Erfolg bei der Bewältigung der Aufgabe! Hier findest Du immer Hilfe. Versuch die Fragen klarer und kürzer zu formulieren, dann bekommst Du auch mehr Resonanz ;-) Grüße, Kest
Sowas kenn ich. Sachen neu in ein Design eines anderen bauen ist nicht ganz leicht. Ich hatte das auch zu tun, erschwerend kam hinzu, dass das Ursprungsdesign in Schematic gemacht und so gut wie überhaupt nicht dokumentiert war. Ich hab dann die Funktion Modul für Modul analysiert und in VHDL neu geschrieben, dabei die ganzen Anfängerfehler wie asynchrone Resets usw. rausgemacht. Aber du solltest dir erst mal ansehen, wie die Kiste funktioniert, alles durch simulieren und dann schauen, was du verwenden kannst. Copy-Paste ist nicht immer zu verteufeln, gerade wie schon gesagt wurde bei der DDR2 Ansteuerung, und dann noch als FIFO. Da der FX2 eh nur max. 40MB/s kann, sollte eigentlich genügend Zeit sein, die Daten blockweise aus dem DDR2 RAM in den Ausgabe-FIFO vor dem USB zu kopieren. Und alleine mit dem FX2 wirst du als Anfänger schon jede Menge Spaß haben. Ich hab da auch eine Weile gekämpft, das Timing ist einfach gruselig.
Christian R. schrieb: > und so gut wie überhaupt nicht > dokumentiert war. Die Standardsituation in deutschen Entwicklungsabteilungen.
Hallo danke für eure Rückmeldung. der DDR2 Kontroller ist mittels Core-Generator von Xilinx erstellt. Der wird nicht angefasst, wenn nicht umbedingt nötig. Die FX2-Wishbone Schnittstelle wird auch nicht angefasst. Das zu übernehmen ist ja völlig in Ordnung. Was ich mit Copy & Paste meine ist, wenn man in eine Entity alle Fifos mit Copy & Paste einfügt, die aber die gleichen Funktionalitäten haben. So hatte ich zum Beispiel das Problem, dass ich die FIFOs zurücksetzen musste. Da ich jeweils den RAM-FIFO und den BRAM-FIFO zurücksetzen muss, damit beide leer sind und dass an x stellen einpflegen muss, weil der Code mit Copy&Paste immer wieder verwendet wurde, dann finde ich das nicht optimal... (Die RAM-Fifos sind auch keine richtigen FIFOs, wie man sie sich vorstellt, sondern RAM mit Pointern und man muss die Pointer manuell anpassen. Lesepointer: FPGA / Schreibpointer: Host-Rechner bzw. andersrum) Wenn ich jetzt ein neues Modul hinzufügen möchte, muss ich auch wieder Copy&Paste machen anstatt eine neue Instanz anzulegen... Außerdem sollen die FIFOS auch zu Ringbuffern (mit/ohne auto-repeat)umwandelbar sein. Das muss ich für jedes Modul einzeln anpassen. Ich stell mir da eher ein Modul vor, was BRAM-FIFOs & RAM-FIFOs enthält und einstellbar ist. Diese Modul kann ich dann immer wieder verwenden und muss es nur einmal anpassen, wenn es Änderungen gibt... und die Änderung ist in allen Instanzen dann drin... Ich hoffe ich konnte mich verständlich machen, was ich mit Copy&Paste meine... und ich hoffe ihr stimmt mir da auch zu... :-) Frage ist jetzt nur wie binde ich x Module am besten am RAM an? Es gibt ja nicht genügend Ports...
Bei mir war leider auch so gut wie nix dokumentiert... :-)
achso... real programmers don't comment code... it was hard to write, it should be hard to read
G. M. schrieb: > Christian R. schrieb: >> und so gut wie überhaupt nicht >> dokumentiert war. > Die Standardsituation in deutschen Entwicklungsabteilungen. Kommt drauf an, welche Strategie man verfolgt. Solange der Code lesbar und sinnvoll gegliedert ist, braucht man nur für die Schnittstellen nach außen Doku. Wir halten das bei uns so, dass es klar definierte Schnittstellen gibt, und im Code keine Kommentare, sondern alle Variablennamen usw. so eindeutig, dass man weiß, was da passiert. Außerdem möglichst kleine Module, um die Sache übersichtlich zu halten. Dann braucht man keine großartige Doku.
Was haelt dich denn ab so ein BRAM-FIFO & RAM-FIFO zu schreiben und in dein geaendertes Design einzubauen. Da du den ganzen Quellcode hast kannst du ja immer wieder auf den jetzigen Stand zurueck. Ich wuerde, wenn ueberhaupt, so ein Modul schreiben und einmal an einer Stelle einbauen. Danach simulieren und testen, ob noch alles funktioniert und dann an weiteren Stellen einbauen. Das ist alles sehr langwierig und ich wuerde immer nur kleine Aenderungen machen. Aber wie Kest schon geschrieben hat. Man darf nie die wirtschaftliche Seite aus den Augen verlieren. Gruss Ralf
Das ist wohl das beste, wenn ich das einfach mal ausprobiere... Ich denke auf dauer wird es schon wirtschaftlicher, da das VHDL-Design wesentlich einfacher zu warten und einfacher zu erweitern ist. Außerdem müüste der Host nicht mehr die FIFO-POINTER anpassen. Der Host-Programmierer meinte auch, dass viel wegfallen würde und es viel einfacher werden würde...
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.