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
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?"
> 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 ;)
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?