Shiften und Rollen.CPU und FPGA

Gast #3654710
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
#3654732
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.
Gast #3654816
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.
Gast #3654821
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
(Firma: abaxor engineering) #3654933
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
Moderator (Firma: Titel) Persönliche Seite #3654950
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.
Gast #3655276
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
Gast #3655281
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.
Gast #3655650
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
#3655681
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...
Gast #3655777
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
Gast #3656186
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
#3656226
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?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.