Hallo Leser des Forums, ich lerne gerade VHDL mit Quartus 2 von Altera. Für ein kleines, theoretisches, Projekt möchte ich die lpm_ram_io-Funktion benutzen, um auf den Speicher eines APEX20KC zuzugreifen. Den Code findet ihr im Anhang. Compilieren lässt er sich, nur bei der Simulation mittels Waveform-Diagramm kommt Schwachsinn raus. Ich kann weder in den Speicher schreiben noch auslesen, obwohl laut Compilerreport die entsprechenden Speicherzellen reserviert wurden. Was mache ich falsch? Liegts am Code oder Simuliere ich falsch? Danke, Henrik
Hallo Henrik Deine Zuweisungen, wie Adressen. und Daten-Breite, funktionieren nicht, diese musst du mit einem "generic map" festlegen. Am besten siehst du dier dazu den Anhang an. Zudem solltest du dir die neuste Version vom Quartus besorgen. gruss xman
@xman: Ersmal Danke. Die "Generic Map"-Zuweisung hat gut funktioniert, löste aber leider mein Problem nicht. Ich habe den Quellcode geändert, Compiliert und Simuliert. Das Ergebniss der Simulation war leider das Gleiche wie vorher. Siehe Screenshot im Anhang und der der komplette Code. Es gab noch eine Warnung: "Converted TRI buffer to OR Gate or removed OPNDRN". Ich weis aber nicht, wie ich die enfernen kann. Meine Version von Quartus habe ich erst vor 3 Wochen runtergeladen. (Gibts wieder ne neue?) Gruss Henrik
Sorry, fehler beim Upload, hier der Screenshot...
Ich war da mit meiner Behauptung ein bisschen voreilig. Man kann anscheinent die Grössen in der Dekleration festlegen, mir ist das neu. Das Problem in deinem Code liegt an dieser Stelle: data<=dat_sig when(Enabled='1') else "ZZZZ"; Welchen Wert hat data_sig beim schreiben? Diese Zeile kannst du weglassen, das Ram mach das intern schon richtig. Die Altera FPGA's kennen elektrisch keinen hochohmigen Zustand (intern), alle mehrfachen Zuweisungen werden über Multiplexer implementiert. Daher wird vermutlich in der Simulation auch der Zweite Bus dargestellt. Da du keine Mehrfachzuweisung machst, kommt beim Fitten die Warnung. gruss xman
Ich habe es zuerst auch ohne diese Zeile versucht, so stand es auch in einem Beispielcode (für MAX2..) aus den Internet. Das Schreiben ins Ram funktionert ganz gut damit, nur das Auslesen nicht (siehe Bild). Da wo der rote Kreis ist, sollte doch eigendlich auch "0A" stehen, also genau das, was auf "data~result" steht. Oder interpretiere ich das falsch?. Ich nehme an, das ich an "data" keine Daten auslesen kann, weil dieser nur hochohmig ist. Ich habe es auch schon über Signale versucht, führte aber auch nicht zum gewünschten Ergebniss. Entweder mache ich etwas falsch, oder ich interpretiere das Diagramm falsch. Die Lösung kann nur recht simpel sein, aber komme einfach nicht drauf. Gruss Henrik
Hier der Beispielcode aus dem Netz für MAXPlUS, unterscheidet sich eigendlich nicht von dem, den ich ausprobiert habe.
Es ist ein bisschen verwirrend. Um die Ausgabe der Simulation verstehen zu können, musst du auch wissen wie inout Busse im FPGA implementiert werden. Angenommen, wenn der Fitter nur ein Bus für inout implementieren würde, hätte man mehr als einen Treiber der auf den Bus schreibt. Die Folge währe, dass beim schreiben, alle anderen Treiber in den Hochohmigen Zustand geschaltet werden müssten. Das geht aber bei den Altera FPGA's intern nicht (bei den Pins sieht das natürlich anders aus). Daher werden die inout Busse immer mindestens als zwei Leitungspaaren implementiert, in deinem Beispiel als data und data~result. Wenn du also einem Bus 'Z' zuweist, wird nichts in den hochohmigen Zustand geschaltet, es wird nur der Multiplexer umgeschaltet. Dein Beispiel funktioniert also, die Busse data und data~result werden bei der Zuweisung an einen bidirektionalen Pin wieder zusammengefasst. Probiere doch mal den Datenbus als, einen In. und einen Out-Bus zu implementieren, das Ergebnis der Simulation sollte das gleiche sein. Gruss xman
Danke xman, hat funktioniert. Nun gehts weiter, bis Anfang des Semesters möchte ich in VHDL und Quartus fit sein ;-) Henrik
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.