Hallo, guten Tag. Wie shiftet oder rollt eine CPU6502 zb ? Wie kann man am sparsamsten shiften/rollen mit dem FPGA? Ich könnte mir vorstellen mit einem 10-Bit-Register zu spielen, wo in der Mitte das Datenbyte sitzt und rechts/links je 1 Bit bereitsgestellt ist fürs rollen/shiften? Oder....? Danke. GRuss
Am sparsamsten geht es mit einem Bit pro Takt... Frühere CPUs hatten zwar fast immer Schiebebefehle mit n>1 als Anzahl, die haben dann aber auch n Takte gedauert... Für alles in einem Takt braucht es einen Barrelshifter. Also n hintereinandergeschaltetet Shifter für 2^i (i=0 bis n-1=höchstes Bit des Schiebeanzahlregisters). Die entweder um 2^i schieben oder gar nicht, je nachdem, ob das entsprechende Bit der Schiebenanzahl 1 oder 0 ist. Dann gehts auch in einem Takt. Kostet aber Logik, das kam erst Mitte der 80er auf, wo man nicht mehr um jeden Transistor kämpfen musste.
Georg A. schrieb: > gehts auch in einem Takt. Kostet aber Logik, das kam erst Mitte der 80er > auf, wo man nicht mehr um jeden Transistor kämpfen musste. In den 60ern machte man das mangels ICs eben mit Einzeltransistoren. In 60 Bits Breite.
Wenn's nicht sparsam sondern schnell sein soll, dann gibt's dafür extra Primitiven im FPGA. Da die aber ggf. brach liegen, wenn man sie nicht nutzt, ist es gar keine so schlechte Idee, sie zu nutzen. Das macht die Synthese aber normalerweise automatisch.
Hmm.. Ich benutze diesen hier: signal ct : integer range 0 to 4 := 1; mit: shift_r <= std_logic_vector(unsigned(shift_r) srl ct); Nur mit SRA SLA funktioniert es nicht so , wenn ich es dort oben reinsetze. Wozu braucht man SRA und SLA? GRuss
Georg A. schrieb: > Für alles in einem Takt braucht es einen Barrelshifter. Also n > hintereinandergeschaltetet Shifter für 2^i (i=0 bis n-1=höchstes Bit des > Schiebeanzahlregisters). Das geht wunderbar mit einem Multiplizierer/DSP-Core oder wie das auch immer in der jeweiligen Technologie heißt. Denn Linksschieben ist eine Multiplikation und Rechtsschieben eine Division jeweils mit einer Konstanten. Rollen wird wahrscheinlich auch damit gehen, das habe ich aber so noch nicht gemacht. Tom
Georg A. ich habe gelesen das die SRL usw aus der library IEEE; effektiver sind wie die selbstgestrickten. GRuss
peter schrieb: > Georg A. ich habe gelesen das die SRL usw aus der library IEEE; Aus welcher der IEEE libs? > effektiver sind wie die selbstgestrickten. Wo hast du das gelesen? Wenn du dir einfach mal den VHDL Code dieser Funktionen aus "der" Bibliothek ansiehst, dann wirst du diese Behauptung in Frage stellen. Und ausserdem liesse sich das ganz einfach selber mal ausprobieren. Zwanzig Zeilen Code und 10 Minuten später ist man schlauer und kennt seine Toolchain noch ein wenig besser... Letzlich wird ein dynamischer Barrelshifter immer als Multiplexer aufgebaut. Und ein statischer Shift wird gar nicht aufgebaut, sondern ist schlicht und einfach nur eine andere Verdrahtung.
-------------------------------------- Wenn du dir einfach mal den VHDL Code dieser Funktionen aus "der" Bibliothek ansiehst, dann wirst du diese Behauptung in Frage stellen. --------------------------------------- Warum helft ihr nicht, die IEEE-Standards zu verbessern ? Die Möglichkeit ist da. Gruss
------------------------------- Wenn du dir einfach mal den VHDL Code dieser Funktionen aus "der" Bibliothek ansiehst, dann wirst du diese Behauptung in Frage stellen. ------------------------------ Ich habe den Sourcetext nicht gefunden vom IEEE.NUMERIC_STD.ALL wie er als Standard eingebundne ist. Bitte mal ein Hinweis. Danke.
peter schrieb: > Ich habe den Sourcetext nicht gefunden vom IEEE.NUMERIC_STD.ALL wie er > als Standard eingebundne ist. > > Bitte mal ein Hinweis. Zuviele Töpfe auf dem Herd? Du überblickst "deine" Threads nicht mehr... Siehe dort den Link im Beitrag "Re: Links schieben geht nicht, warum?"
:
Bearbeitet durch Moderator
> Das geht wunderbar mit einem Multiplizierer/DSP-Core oder wie das auch > immer in der jeweiligen Technologie heißt. Klar, wenn ich einen Nagel in die Wand schlagen will, geht das auch mit einer Dampframme ;)
peter schrieb: > da steht nur der Kopf aber finde den Ablauf nicht in VHDL. Ich schon. Ich habe einfach ein wenig weitergesucht...
Hmmm.., jetzt habe ich den Wirrwarr gefunden. Steige da nicht durch, welches jetzt in der IEEE ist die ich einbinde. Da stehen mehrere drin "nicht kompatibel usw... steht da teilweise. Als Anfänger nehme ich die erstmal die in der IEEE drin sind. Ihr als Profi die ihre Familie damit ernähren müssen , kann ich verstehen wenn die im Konkurrenzkampf stehen um ihre Sachen zu Verkaufen das die verbessert werden. Sonst würde euer Betrieb bald nicht mehr auf der Liste stehen. Gruss
peter schrieb: > Steige da nicht durch, welches jetzt in der IEEE ist die ich einbinde. Um die Verwirrung komplett zu machen: Die Library IEEE wird weder bei der Simulation noch bei der Synthese so eingebunden, sondern steht nur aus formalen Gründen da. Bei der Simulation hat jeder vernünftige Simulator eine optimierte Version für die Behandlung von std_logic. Std_logic ist in den Simulator fest eingebaut, der original Quellcode wird nur zur Vollständigheit mitgeliefert. Bei der Synthese ebenso. Der Compiler kennt die in dem IEEE Libraries verwendeten Funktionen und generiert entsprechende Netzlisten. Es ist deshalb egal, ob man shiften mit den IEEE Funktionen beschreibt, oder explizit hinschreibt, solange sich beides VHDL-mäßig identisch verhält. peter schrieb: > Ihr als Profi die ihre Familie damit ernähren müssen , kann ich > verstehen wenn die im Konkurrenzkampf stehen um ihre Sachen zu Verkaufen > das die verbessert werden. Sonst würde euer Betrieb bald nicht mehr auf > der Liste stehen. Oh je Peter, müssen diese Kommentare sein...
------------------------------ Std_logic ist in den Simulator fest eingebaut, der original Quellcode wird nur zur Vollständigheit mitgeliefert. ----------------------------- Und wie kommt man an den Sourcecode für den jeweiligen Simulator ? Gruss
peter schrieb: > Und wie kommt man an den Sourcecode für den jeweiligen Simulator ? Man nimmt einen Open-Source-Simulator oder kauft den Hersteller des Simulators. Warum sollte es interessant sein, WIE der Sourcecode aussieht? Hauptsache er macht, was das numeric_std Modell beschreibt.
--------------------------- kauft den Hersteller ---------------------------- Ich werde dem amerikanischem Ausländer kein Geld in den Rachen schmeißen, nur weil sie den Sourcode nicht freigeben. Ich bin zur Zeit Nordamerikafeindlich... ----------------------------------- Hauptsache er macht, was das numeric_std Modell beschreibt. ------------------------------------ Mich interssiert das schon, wie das aktuelle Modul aussieht. GRuss
> Mich interssiert das schon, wie das aktuelle Modul aussieht. Glaubst du ernsthaft, dass das noch in VHDL beschrieben ist? Ein (üblicher) Weg der Übersetzung von VHDL für die Simulation ist der, den VHDL-Code irgendwie in eine "normale" Hochsprache (zB. C/C++, ADA etc.) zu bringen und zu compilieren. Das ist aber nicht mehr wirklich lesbar, weil alles automatisch generiert wird. Dann wird da noch ein dicker Unterbau zur Runtime-Unterstützung dazugelinkt (also das, was zB. die Einzelprozesse hintereinander startet, den Austausch der Signale realisiert, Funktionen zur Nachbildung von std_logic&co, Wrapper für VHDL-IO, etc.). Was dann rauskommt, ist ein "normales" Executable, das für die Simulation noch genügend Schnittstellen für Singlestep oder auch Traces hat. Und wenn du wirklich wissen willst, wie es zB. ghdl macht: http://sourceforge.net/p/ghdl-updates/code/ci/ghdl_0.31dev/tree/evaluation.adb#l624 Zeilen 624-729. Und nein, das ist nicht VHDL, auch wenn's so ähnlich aussieht ;) Jetzt besser?
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.