serielle daten in ein schieberegister einlesen

#1062299
Lesenswert?

So dann hole ich jetzt mal den Thread hier aus der Versenkung:

Daniel R. wrote:
1
 shiftregister <= shiftregister(breite-2 downto 0) & dateneingang;

Wie funktioniert diese Anweisung von der Logik her? Also was hier mit 
dem Signal geschieht ist mir klar und das er funktioniert hab ich auch 
schon getestet, aber ich kann mir nicht Vorstellen wie der "Ablauf" ist 
-wie das Signal durch den Block läuft, vorallem wie sich der "Zähler 
eins weiter stellt-.

Vom Verständnis her müsste der Code doch ähnlich funktionieren wie 
folgendes:
1
signal q : std_logic_vector (3 downto 0)
2
signal reset :  std_logic;
3

4
begin
5

6
process (clk, reset)
7

8
   if reset = '1' then q <= "0000";
9
      elseif (rising_edge) then
10
        q(0) <= daten;
11
        q(1) <= q(0);
12
        q(2) <= q(1);
13
        q(3) <= q(2);
14
      end if;
15

16
end process;

Gruß Mark
Gast #1062314
Lesenswert?

> aber ich kann mir nicht Vorstellen wie der "Ablauf" ist
> -wie das Signal durch den Block läuft, vorallem wie sich der "Zähler
> eins weiter stellt-.

Da gibt es keinen Zähler. Der Code beschreibt eine Kette von Registern, 
und bei der Taktflanke holt sich jedes den Wert vom Nachbarn mit der 
Nummer eins kleiner. Weil das alles gleichzeitig passiert geht auch kein 
Wert verloren.

> Vom Verständnis her müsste der Code doch ähnlich funktionieren wie
> folgendes:

Ja, das macht genau das selbe und ist nur in lang ausgeschrieben. Und 
syntaktisch nicht ganz einwandfrei ;)
#1063382
Lesenswert?

Morin wrote:

> Da gibt es keinen Zähler. Der Code beschreibt eine Kette von Registern,
> und bei der Taktflanke holt sich jedes den Wert vom Nachbarn mit der
> Nummer eins kleiner. Weil das alles gleichzeitig passiert geht auch kein
> Wert verloren.

Ja ok das ist ja wenigstens schon ein wenig einsichtlicher. Aber warum 
soll die breite dann breite -2 sein ?

> Ja, das macht genau das selbe und ist nur in lang ausgeschrieben. Und
> syntaktisch nicht ganz einwandfrei ;)

Ging ja nur ums Prinzip O:-)
Gast #1063479
Lesenswert?

Ja ok das ist ja wenigstens schon ein wenig einsichtlicher. Aber warum
soll die breite dann breite -2 sein ?

breite ist zb. bei einem 8-Bit register 7 (ergibt Bit 7,6,5,4,3,2,1,0), 
also 8-Bit.

Nun willst ja etwas an dein Register ranhängen, aber hinterher müssen es 
immer noch 8 Bit sein.

Deshalb

shiftregister <= shiftregister(breite-2 downto 0) & dateneingang;

oder auch

shiftregister <= shiftregister(breite-1 downto 1) & dateneingang;

den Unterschied müsstest du selbst erkennen.
Tip: LSB, MSB

Volker
Moderator (Firma: Titel) Persönliche Seite #1063534
Lesenswert?

Wobei
1
 shiftregister <= shiftregister(breite-1 downto 1) & dateneingang;
recht sinnfrei ist, denn das könnte ich auch so schreiben:
1
 shiftregister(0) <= dateneingang;


Evtl. war sowas gemeint:
1
 shiftregister <= dateneingang & shiftregister(breite-1 downto 1);
Damit hat "shiftregister" dann auch wieder seinen Namen verdient ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren