Wenn du der Meinung bist, dass das fehlerhaften Verhalten von Variablen
verursacht wird, dann versuche zuerst, diese zu beseitigen ;)
In diesem Fall sind es aber, soweit ich das bei kurzen drübersehen
feststellen kann, die Zuweisungen zu bcd und hex_src in der Schleife:
1 | bcd := bcd(11 downto 1) & hex_src(7) ;
|
2 | hex_src := hex_src(7 downto 1) & '0';
|
ist äquivalent zu
1 | bcd(0) := hex_src(7);
|
2 | hex_src(0) := '0';
|
Das wird jetzt zwar mehrmals in der Schleife ausgewertet, verwendet wird
aber immer nur das 7. Bit von hex_src, die restlichen werden nie
gelesen.
Wenn du den Vektor als 7 downto 0 deklarierst, dann hat das linke
Element den Index 7 und das rechte den Index 0.
Wenn du tatsächlich schieben willst, dann muss das so aussehen:
1 | vec := '0' & vec(7 downto 1); --Shift nach rechts
|
2 | vec := vec(6 downto 0) & '0'; --Shift nach links
|
Schreib dir eine Testbench und mach das ganze mit Signalen. In den
meisten Simulatoren kannst du auch interne Signale untersuchen, da fällt
dann sofort auf, dass nicht geschoben wird.