Forum: FPGA, VHDL & Co. Integer-Ziffernfolge in Array speichern


von andy (Gast)


Lesenswert?

Hallo,

gibt es in VHDL die Möglichkeit eine Integer-Ziffernfolge (z.B 1234)
in ein Array oder Vektor zu speichern, sodass das erste Element die 1, 
das zweite Elemt die 2, das dritte Element die 3 usw... ist ?????

Hoffe Ihr könnt mir helfen

von andy (Gast)


Lesenswert?

mit Integer Ziffernfolge meine ich natürlich die Zahl 1234, deren 
Ziffernfolge ich in ein Array oder Vektor packen möchte um die einzelnen 
Ziffern später einzeln zu addressieren.

von user (Gast)


Lesenswert?

du meinst so?

type mytype is array(1 to 4) of integer;
signal mysignal : mytype = (1 => 1, 2 => 2, 3 => 3, 4 => 4);

von Jimbo (Gast)


Lesenswert?

Synthese oder Simulation?

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


Lesenswert?

@ andy (Gast)
Ich sehe das so, dass du eine Integer Zahl in die einzelnen Stellen 
aufdröseln willst, um sie z.B. auf einer Anzeige darzustellen. Richtig?

Dann brauchst du etwas, das dir diese Zahl in einzelne BCD-Darstellung 
wandelt: http://www.lothar-miller.de/s9y/categories/44-BCD-Umwandlung

von Andy (Gast)


Lesenswert?

Danke an alle für die Ratschläge.
Leider steht der Abgabezeitraum meines Schulprojektes kurz bevor, daher 
habe ich es (aus Gründen meines Unverständnisses) so gelößt:

Möchte mich für mein Unwissen schon im Vorab entschuldigen (Bin halt 
totaler Anfänger)

so:

if temp >= 10000000 then
  temp := temp - 10000000;
  Dezimal8 := Dezimal8 +1 ;
end if;
if temp >= 1000000 then
  temp := temp - 1000000;
  Dezimal7 := Dezimal7 +1 ;
end if;
if temp >= 100000 then
  temp := temp - 100000;
  Dezimal6 := Dezimal6 +1 ;
end if;
if temp >= 10000 then
  temp := temp - 10000;
  Dezimal5 := Dezimal5 +1 ;
end if;
if temp >= 1000 then
  temp := temp - 1000;
  Dezimal4 := Dezimal4 +1 ;
end if;
if temp >= 100 then
  temp:= temp - 100;
  Dezimal3 := Dezimal3 +1;
end if;
if temp >= 10 then
  temp:= temp - 10;
  Dezimal2 := Dezimal2 +1;
end if;
Dezimal1 :=  temp;



Die Ziffern der Zahl sind Dezimal8 + Dezimal7 + Dezimal6 + Dezimal5 + 
Dezima4 + Dezimal3 + Dezimal2 + Dezimal1

Besteht die Möglichkeit, diese If-Anweisungen mit Case Statements zu 
realisieren oder sind bei Case Statemts Operatoren wie >=, <= illegal 
???

Beispielcode..........

case temp is
 when >= 10 =>
  temp:= temp - 10;
  Dezimal2 := Dezimal2 +1;
end case;

.........führt zu einem Error

Möchte das so machen weil "Generate Programming File" eeeeewig dauert 
und ich woanders gehört habe, mann könne dies optimieren in dem man case 
statements statt if-statements benutzt.....oder ist das Mumpitz????

von PittyJ (Gast)


Lesenswert?

Spiel doch mal durch:
nimm eine Zahl, z.B. 6000

if temp >= 10000000 then
  temp := temp - 10000000;
  Dezimal8 := Dezimal8 +1 ;
end if;

temp = 6000 , Dezimal8 = 0

if temp >= 1000000 then
  temp := temp - 1000000;
  Dezimal7 := Dezimal7 +1 ;
end if;

temp = 6000 , Dezimal7 = 0

if temp >= 100000 then
  temp := temp - 100000;
  Dezimal6 := Dezimal6 +1 ;
end if;

temp = 6000 , Dezimal6 = 0


if temp >= 10000 then
  temp := temp - 10000;
  Dezimal5 := Dezimal5 +1 ;
end if;

temp = 6000 , Dezimal5 = 0


if temp >= 1000 then
  temp := temp - 1000;
  Dezimal4 := Dezimal4 +1 ;
end if;

temp = 5000 , Dezimal4 = 1

if temp >= 100 then
  temp:= temp - 100;
  Dezimal3 := Dezimal3 +1;
end if;

temp = 5900 , Dezimal3 = 1


if temp >= 10 then
  temp:= temp - 10;
  Dezimal2 := Dezimal2 +1;
end if;

temp = 5890 , Dezimal2 = 1


Dezimal1 :=  temp;


Dezimal1 = 5890




Scheint mir nicht sinnvoll zu sein.
Fazit: du brauchst Schleifen, und die gehen in VHDL nur mit 
Zustandsautomaten.

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


Lesenswert?

PittyJ schrieb:
> Fazit: du brauchst Schleifen, und die gehen in VHDL nur mit
> Zustandsautomaten.
Wenn das eine Schulaufgabe ist, dann reicht es evtl. aus, wenn die 
Simulation funktioniert. Und dann kann man da schon ein paar Schleifen 
reinbasteln. Murks bleibt Murks...  ;-)

Mich packt schon das Grauen, wenn Anfänger mit Variablen rumhantieren...

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.