Hallo, Habe ein paar Probleme mit dem bubblesort Algorithmus. Soll einen Algorithmus in VHDL schreiben, der einen Bubblesort macht und zwar mit Integerwerten. Ich weiss nur nicht, wie ich ein Integer Array erzeuge. Der Code sieht bis jetzt folgendermaßen aus: n := in'length; vertauscht <= '1'; while vertauscht = '1' and n > 1 loop vertauscht <= '0'; for i in in'range loop if in(i) > in(i+1) then temp <= in(i); in(i) <= in(i+1); in(i+1) <= temp; vertauscht <= '1'; end if; end loop; n <= n - 1; end loop; Ich habe als Array Defintion gedacht: type array_type1 is array (8 downto 0) of integer; Vielleicht kann ja mal jemand drüberschauen. Gruß paul
Soll das irgendwann mal synthetisiert werden? Bedenke: Auf dem Silizum gibt es kein 'Nacheinander', Schleifen werden gnadenlos ausgerollt!
Hallo, nein soll es nicht. Soll eine Klausurvorbereitungsaufgabe sein, also alles rein theoretisch. Gruß paul
> Habe ein paar Probleme mit dem bubblesort Algorithmus. > Soll einen Algorithmus in VHDL schreiben, der einen Bubblesort macht und > zwar mit Integerwerten. Ich weiss nur nicht, wie ich ein Integer Array > erzeuge. Ich muss zugeben, dass ich das Problem noch nicht so recht verstehe. Der Code sieht doch gut aus (ohne jetzt ganz genau hingesehen zu haben). Typdefinition ist auch vorhanden. BTW: Wieso gerade (8 downto 0), ist das eine "beliebige" Größe zum Ausprobieren? Liegt das Problem darin, "in" anzulegen? Dann musst du dir Überlegen, ob es eine Variable (interner Zwischenwert eines Prozesses) oder ein Signal (Kommunikation zwischen Prozessen und Entities) sein soll. Hängt vom Kontext bzw. von der Aufgabenstellung ab. Weitere Anmerkung: Bin jetzt gerade nicht sicher, aber evtl. ist "in" ein reserviertes Schlüsselwort. Wenn es dazu unerklärliche Syntaxfehler gibt, versuch mal einen anderen Namen.
paul schrieb: > also alles rein theoretisch. Glück gehabt... > type array_type1 is array (8 downto 0) of integer; Probier mal die Reihenfolge umzukehren... paul schrieb: > Der Code sieht bis jetzt folgendermaßen aus: Da fehlt noch einiges drumrum: soll da ein Takt involviert sein? Falls nein: dann lass die Signale raus und mach alles mit Variablen, denn Signale werden erst am Ende eines Prozesses zugewiesen, bis dahin wird der "alte" Wert des signals verwendet... Das hier läuft in deinem Fall auf jeden Fall in eine Bereichsverletzung: for i in in'range loop if in(i) > in(i+1) then in'range ist 0..8 Was passiert, wenn i=8 ist? Seis drum. Im Anhang eine mögliche Lösung...
Vielen Dank für eure Hinweise. Jetzt weiss ich auch wo so eine Type Anweisung hinkommt, das fehlte mir bis jetzt. Ich wusste nich, das man das so machen kann. Gruß
paul schrieb: > Jetzt weiss ich auch wo so eine Type Anweisung hinkommt Sie muß nur in ein Package, wenn sie im Port der Entity auftauchen soll. Sonst kannst du logischerweise gern auch irgendwo mittendrin an einer passenden Stelle so einen Typ definieren. Z.B. wie dort das ROM in der Architecture: http://www.lothar-miller.de/s9y/archives/37-DDFS-mit-BROM.html Oder auch in einem Prozess: http://www.lothar-miller.de/s9y/archives/38-DDFS-mit-Distributed-ROM.html
Okay, super, vielen Dank. Eine Frage habe ich aber noch, wieso geht die for Schleife bis length-2 und nicht bis length-1 ? Und, das Array ist jetzt von links an beginnend mit Index 0 steigend? Oder umgekehrt? Wenn ich davon ausgehe, das links der niedrigste Index ist wird von links nach rechts aufsteigend sortiert, richtig? Gruß
paul schrieb: > Wenn ich davon ausgehe, das links der niedrigste Index ist wird von > links nach rechts aufsteigend sortiert, richtig? Ja. paul schrieb: > Eine Frage habe ich aber noch, wieso geht die for Schleife bis length-2 > und nicht bis length-1 ? for i in 0 to din'length-2 loop if din(i) > din(i+1) then Wenn din'range = 0..9 ist, dann ist din'length=10, daber das letzte Element ist din(9). Dann steht da also: for i in 0 to 8 loop if din(i) > din(i+1) then Und damit ist bei i=8 das letzte Element din(i+1) = din(8+1) = din(9)...
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.