Hallo zusammen,
ich habe ein hoffentlich triviales Problem, aber ich durchblicke es
einfach nicht. Wie sagt man so schön, ich sehe den Wald vor lauter
Nullen und Einsen nicht mehr :)
Es geht um ein einfaches 4bit Schieberegister, in das serielle Daten
geladen werden. Wenn 4bit neue Daten geladen wurden, wird ein Signal
"full" auf 1 gesetzt und die 4bit neuen Daten werden an den Ausgang
gelegt.
Hier ist der Code dazu:
1 | SR_4bit: process (CLOCK_SR)
|
2 | begin
|
3 | if rising_edge(CLOCK_SR) then
|
4 | if (RESET_SR = '1')
|
5 | then AUSGANG <= (others => '0');
|
6 | COUNT_INT <= 0;
|
7 | else
|
8 | AUSGANG(0) <= DATA_IN_SR;
|
9 | AUSGANG(1) <= AUSGANG(0);
|
10 | AUSGANG(2) <= AUSGANG(1);
|
11 | AUSGANG(3) <= AUSGANG(2);
|
12 | if (COUNT_INT < 3)
|
13 | then COUNT_INT <= COUNT_INT + 1;
|
14 | FULL_INT <= '0';
|
15 | DATA_OUT_SR <= "0000";
|
16 | elsif (COUNT_INT = 3) then
|
17 | COUNT_INT <= 0;
|
18 | FULL_INT <= '1';
|
19 | DATA_OUT_SR <= AUSGANG;
|
20 | end if;
|
21 | end if;
|
22 | end if;
|
23 | end process SR_4bit;
|
Im Anhang habe ich die Simulation dazu angehängt.
Ich verstehe nicht, wieso nach dem vierten Takt am Ausgang (data_out_sr)
quasi der vorletzte Schritt anliegt und nicht die 4 neuen bits.
Ich schifte doch alles noch einmal um ein Bit nach links. Da wird dann
ebenfalls der Counter auf 3 abgefragt und die Ausgangsdaten an den
Ausgang gelegt. Wieso braucht es einen Takt mehr, um die Daten an den
Ausgang zu legen?
Wie könnte ich das Problem lösen?
Ich möchte quasi 4 neue Bits laden und diese dann ausgaben. Das Full
Signal dient als Schreibtakt eines Fifos, in das natürlich nur neue
Daten geschrieben werden sollen.
Ich hoffe es gibt eine Lösung für das Problemchen.
Den Counter einfach von 3 auf 4 setzen und abfragen geht leider nicht,
da im 5. Takt schon wieder neue Daten anliegen, die gespeichert werden
sollen... ich habe also wirklich nur 4 Takte zum parallelisieren und
ausgeben.
DANKE!!
MfG Andi