Hallo, wie kann ich ein Bit rechts oder links hin verschieben?
1 | |
mit
1 | |
zählt er ja Binär hoch. Will aber
1 | |
2 | |
3 | |
4 | |
5 | |
Vielen dank für eure Mühe.
|
Anzeige
|
Bit verschieben VHDLHallo, wie kann ich ein Bit rechts oder links hin verschieben?
mit
zählt er ja Binär hoch. Will aber
Vielen dank für eure Mühe. Hallo,
Zum rechtsschieben:
Falls die 1 beim achten Shift nach links rausfallen soll:
Danke euch! Es kommen aber jetzt mehr fragen auf:
Was heißt das X"01"; ?
Das nur dann machen wenn das bit schon ganz links ist? http://www.vhdl-online.de/tutorial/deutsch/t_87.htm
Wenn ich rol und ror benutzen will kriege ich diese Fehlermeldung: Line 58. rol can not have such operands in this context. hi, also x"01" ist hexadezimalschreibweise. und wenn du das bit zu weit nach links oder rechts schiebst, dann "fällt" es raus. verhindern sollte dies der befehl ROR, der das zu weit geschobene bit auf der anderen seite wieder anfügt. ich habe den befehl noch nie benutzt, und kann deshalb auch nix zu beisteuern woran es liegen könnte. geht rol evtl. nur mit einem bit_vector? du hast da standardlogic verwendet. an der uni wird uns beigebracht, das man std_logic immer meiden soll wenn man es nicht unbedingt benötigt(bin aber auch nich so der vhdl crack um das beurteilen zu können) Richard B. wrote: > >
> Das nur dann machen wenn das bit schon ganz links ist?
Nein, ständig wenn du willst, dass die 1 nach dem achten Takt nicht mehr
vorhanden ist.
Ich verstehe mein Problem nicht. Wo ist der Fehler?
Irgendwie leuchten alle LEDs nach einer kleinen Zeit. Achja und was ist der unterschied zwischen bit_vector und STD_LOGIC_VECTOR? Mit dem bit_vector kann ich nicht bit_vector <= bit_vector + 1 rechnen und mit dem STD_LOGIC_VECTOR kann ich nicht STD_LOGIC_VECTOR <= STD_LOGIC_VECTOR rol 1 machen. Wieso? Welches soll man wann nehmen? hi, also mit standard_logic kann man tristate verhalten erlangen. du kannst den ausgang damit auf 1, 0 oder hochohmig setzen. bit_vector ist nur 0 oder 1 zum programmieren von solchen countern braucht vhdl aus irgendeinem grund auch std_logic. wieso das so ist, das kann ich dir jedoch nicht erklären. hier mal dein program ein wenig verändert... du musst den counter z.b. auch wieder auf null setzen. wenn du einen vergleich auf die x"10" machst, dann muss die vektorlänge auch übereinstimmen...du hattest da ja vorher eine länge von 24 oder sowas
hattest du das ganze mal simuliert? ich kann dir da nur modelsim empfehlen(kenne nur das) dann sieht man schon eher wo es hakt. achso: Clock z.b. muss eigentlich nie std_logic sein, sondern immer bit! Desweiteren ist es wichtig ein ResetBit zu haben. Zu Anfang gibt es ja keinen definierten Zustand, sondern alles hängt irgendwie in der Luft rum
Gast
#889522
@Axel Preuss: Also auf der Uni haben wir nur std_logic Typen verwendet und in der Arbeit habe ich in inzwischen einigen 10k Zeilen VHDL Source Code von unseren Leuten, Zulieferern oder auch einfach wenn man so im Netz schmökert nie bit oder bit_vector gesehen. Diesen Datentyp sehe ich eigentlich immer nur in Büchern. Was ist die Begründung dafür, dass man bit und bit_vector verwenden soll? moin, wenn ich std_logic benutze ohne das es einen Grund dafür gibt, dann kriege ich das von meinem Prof. um die Ohren geknallt. :) Wie ich schon sagte, ich bin nicht so der VHDL Crack um das beurteilen zu können, aber evtl. ist bit_vector ne Ecke resourcenschonender?? Auf nem Mikrocontroler verwende ich ja auch nur Variablen mit dem kleinst möglichen Wertebereich und benutze nicht für alles long oder float, obwohl das natürlich genauso gehen würde. Aber vielleicht sagt da auch jemand was zu der mehr Ahnung von VHDL hat, was da sinnvoll ist. Eigentlich verwendet niemand im FPGA-Design bit oder bit_vector, nicht zuletzt weil die U und X-Zustände in der Simulation sehr nützlich sind. Direkt mit std_logic_vector zu rechnen (mit Hilfe von std_logic_(un)signed) ist kein guter Stil, dafür gibt es die Typen signed und unsigned (siehe Rechnen in VHDL). Auf die Ressourcen kann es nicht ankommen, am Schluss landet ein Clock-Signal typischerweise eh im Clock-Netzwerk. Ich schaue mir grad den Draft für die Konventionen für synthetisierbares VHDL durch, da steht: "The allowed types for clock signals shall be: BIT, STD_ULOGIC and their subtypes (e.g. STD_LOGIC) with a minimum subset of '0' and '1'. Only the values ‘0’ and ‘1’ from these types shall be used in expressions representing clock levels and clock edges (See 6.1.2)." Insofern kann man argumentieren, dass man es bei std_logic leichter falsch machen kann, als bei zb bit, weil man da auch ein 'H' in der Clock haben könnte. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|