Forum: FPGA, VHDL & Co. Shiften in VHDL.


von peter (Gast)


Lesenswert?

Wie kann bitte dieses Shiften gemäss CounterX in einem Zug bei VHDL 
durchführen?

1 << CounterX[2:0]

Danke.
Gruss

von P. K. (pek)


Lesenswert?

CounterX[2:0] & '0'

von bezzerwizzer (Gast)


Lesenswert?

peter schrieb:
> 1 << CounterX[2:0]

CounterX[2:0]<<1

muss es heißen!

von vielleicht hat er's auch so gemeint (Gast)


Lesenswert?

1
case (CounterX) is 
2
      when "000" =>
3
         out <= "00000001";
4
      when "001" =>
5
         out <= "00000010";
6
      when "010" =>
7
         out <= "00000100";
8
      when "011" =>
9
         out <= "00001000";
10
      when "100" =>
11
         out <= "00010000";
12
      when "101" =>
13
         out <= "00100000";
14
      when "110" =>
15
         out <= "01000000";
16
      when "111" =>
17
         out <= "10000000";
18
      when others =>
19
         out <= "00000000";
20
   end case;

elegantere Methoden sind wohl noch möglich. obiges in einen process 
gepappt, dürfte zielführend sein...

Gruss

von Sepp (Gast)


Lesenswert?

1 << CounterX[2:0] würde ich als Dekoder ala

output <= "00000001" WHEN input = "000" ELSE
          "00000010" WHEN input = "001" ELSE
          "00000100" WHEN input = "010" ELSE
          "00001000" WHEN input = "011" ELSE
          ....
          "10000000" WHEN input = "111" ELSE
          "XXXXXXXX";

machen. Wobei es vermutlich eine elegantere Lösung gibt...

von Sepp (Gast)


Lesenswert?

Sorry, war zeitgleich ;-)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

bezzerwizzer schrieb:
> peter schrieb:
>> 1 << CounterX[2:0]
> CounterX[2:0]<<1
> muss es heißen!
Weder noch...

Es wird hier offenbar nicht ein Wert um 1 geshiftet, sondern es wird 
eine 1 um einen Wert zwischen 0 und 7 geshiftet. Und ein Shift einer 1 
um einen variablen Wert ist ein Multiplexer oder auch ein Binärdecoder.

Was ist der Typ des Ergebnisses? Was passiert mit den restlichen Bits 
des Ergebnisvektors?

In VHDL würde ich das als Prozess schreiben:
1
Process (counterx) begin
2
  Ergebnis <= x"00";
3
  Ergebnis(to_integer(counterx)) = '1';
4
und process;

: Bearbeitet durch Moderator
von Fpgakuechle K. (Gast)


Lesenswert?

Sepp schrieb:
> 1 << CounterX[2:0] würde ich als Dekoder ala
>
> output <= "00000001" WHEN input = "000" ELSE
>           "00000010" WHEN input = "001" ELSE
>           "00000100" WHEN input = "010" ELSE
>           "00001000" WHEN input = "011" ELSE
>           ....
>           "10000000" WHEN input = "111" ELSE
>           "XXXXXXXX";
>
> machen. Wobei es vermutlich eine elegantere Lösung gibt...

Konstantes array 8x8bit deklarieren .

MfG,

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Oder 2**to_integer(counterx) rechnen.
Oder eine Funktion schreiben.

Wie gesagt: kommt auf den Zieltyp an...

von peter (Gast)


Lesenswert?

So steht es in Verilog beim VGA-Text,mit deinem Vorschlag kommt die 
Darstellung
vom Text durcheinander, nur Pixelsalat, keine Buchstaben.

-----------------------
1 << CounterX[2:0]
-----------------------


Gruss

von peter (Gast)


Lesenswert?

Als Anfänger komme ich hier ins schlingern, trotzdem danke.

Gruss

von peter (Gast)


Angehängte Dateien:

Lesenswert?

Hier ist die Verilog in der Zip. Die Ram/Rom-Inhalte sind als Textdatei 
fertig für ein Array in VHDL, muss noch der Type-Kopf reingesetzt 
werden.

Ich steige da jetzt nicht mehr durch!!!

Müsste doch für euch Spezialisten eine kleine Sache aus dem Handgelenk 
sein, das mal umzusetzen in VHDL. Da könnte man dann auch sehen welche 
Vorschläge von oben jetzt diese VGA-Text zum laufen bringt.

Danke.
Gruss

von peter (Gast)


Lesenswert?

Vielleicht könnte Lothar das dann in seine VHDL-Sammlung mit aufnehmen?
Da würde auch sein RS232 und Tastatur-Treiber im VGA-Text reinpassen um 
das ganze dann abzurunden.

Danke.
Gruss

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

peter schrieb:
> Vielleicht könnte Lothar das dann in seine VHDL-Sammlung mit aufnehmen?
Lass mal Winter werden. Jetzt ist gerade Erntezeit, da ist nicht viel 
über für Spielereien...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.