Forum: FPGA, VHDL & Co. Shiften und Rollen.CPU und FPGA


von peter (Gast)


Lesenswert?

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

von Georg A. (georga)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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.

von Georg A. (georga)


Lesenswert?

Ich dachte eher an "billige" CPUs, keine Mainframe-Dinger...

von greg (Gast)


Lesenswert?

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.

von peter (Gast)


Lesenswert?

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

von Georg A. (georga)


Lesenswert?


von Thomas R. (Firma: abaxor engineering) (abaxor)


Lesenswert?

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

von peter (Gast)


Lesenswert?

Georg A. ich habe gelesen das die SRL usw aus der library IEEE; 
effektiver sind wie die selbstgestrickten.

GRuss

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von peter (Gast)


Lesenswert?

Aus der "use IEEE.NUMERIC_STD.ALL";

GRuss

von peter (Gast)


Lesenswert?

--------------------------------------
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

von peter (Gast)


Lesenswert?

-------------------------------
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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
von Georg A. (georga)


Lesenswert?

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

von peter (Gast)


Lesenswert?

Hmm..., da steht nur der Kopf aber finde den Ablauf nicht in VHDL.

Gruss

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

peter schrieb:
> da steht nur der Kopf aber finde den Ablauf nicht in VHDL.
Ich schon. Ich habe einfach ein wenig weitergesucht...

von peter (Gast)


Lesenswert?

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

von Klaus F. (kfalser)


Lesenswert?

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...

von peter (Gast)


Lesenswert?

------------------------------
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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von peter (Gast)


Lesenswert?

---------------------------
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

von Georg A. (georga)


Lesenswert?

> 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
Noch kein Account? Hier anmelden.