Forum: FPGA, VHDL & Co. integer in integer array wandeln


von Stefan Z. (derdespot)


Lesenswert?

Hallo Leute,
ich habe folgendes Problem:

Ich möchte eine 4bit lange variable vom typ integer in eine variable vom 
typ integer array wandeln. dabei soll das msb des array die 1000er 
stelle haben und das lsb die 1er stelle. Wenn ich einfach eine zuweisung 
mache, meckert er beim synthetisieren. Könnt ihr mir helfen?

hier der Beispiel Code:

...
  process...
     ...
     type integer_array is array (3 downto 0)of integer;
     variable dezimal: integer := 1234;
     variable dezimal_array: integer_array := "0000";
     begin
     dezimal_array := dezimal; <-- Fehler
     ...

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


Lesenswert?

>     variable dezimal_array: integer_array := "0000";
Eigentlich könnte hier schon ein Fehler auftauchen  :-/

Du solltest den Speicherplatz innerhalb des Arrays angeben (den Index)
z.B.
     dezimal_array(0) := dezimal;
oder
     dezimal_array(2) := dezimal;
An welchen Array-Platz sollte denn sonst der dezimal-Wert gespeichert 
werden?

von Stefan Z. (derdespot)


Lesenswert?

Mein Ziel ist es eine dezimale Zahl (max. 9999) auf 4 7Segment Anzeigen 
darzustellen. Dazu brauche ich ich jeden Wert der Dezimal Zahl extra, 
damit ich die 1er 10er 100er 1000er auf den Anzeigen darstellen kann. 
Man könnte es auch so machen:

if(dezimal < 10) then
1000er = 0
100er = 0
10er = 0
1er = dezimal
...
if(deziaml <20) then
....

Aber das würde riesigen Tippaufwand bedeuten, deshalb will ich die 1er 
10er 100er und 1000er aus nem 4 bit breiten array abgreifen. Deshalb 
muss ich halt meine dezimal zahl in ein array wandeln.

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


Lesenswert?

> muss ich halt meine dezimal zahl in ein array wandeln.
Sooo billig wirst du das nicht bekommen.
Sieh dir deine Binärzahl (das ist deine dezimalzahl eigentlich) mal 
genauer an. Du kannst ohne Division oder Subtraktion nicht aus einer 
Binärzahl eine BCD-Zahl (eine Binär Codierte Dezimalzahl, das willst du 
nämlich) machen.

Such mal hier im FPGA-Forum, irgendwo habe ich das schon mal 
beschrieben.

von Stefan Z. (derdespot)


Lesenswert?

nene, wir reden aneinander vorbei:
meine 7segmentanzeige benötigt natürlich 8 binäre werte (7 + Punkt). Das 
realisiere ich mit einem case statement:

1. 7Segmentanzeige (1er)

....
case dezimal
  when 1 -> SEG_OUT = "0000101010" (z.B.)
...

aber ich will z.B. die einerstelle folgendermaßen realisieren

....
case dezimal(0) <-- deshalb brauche ich ein array um auf die 1er 
zuzugreifen
  whem 1 --> ....
...


Ich brauche also aus meiner 4bit breiten dezimalzahl die 
niederwertigste(1er) und dann geh ich in mein case statement um sie 
auszugeben! genauso ist es mit der 10er 100er 1000er

von Gast (Gast)


Lesenswert?

Ihr redet nicht wirklich aneinander vorbei, Lothar hat schon das gesagt, 
was du brauchst.

Ein iteger array bedeutet dicht, dass die Ziffern einzeln gespeichert 
werden, sondern dass du darin mehrere Integerwerte speichern kannst.
Natürlich kannst du entsprechend auch die Ziffern als einzelne 
Integerwerte darin speichern. Um die zu erhalten, musst du die 
Integerzahl aber umrechnen, so wie schon gesagt wurde.

von Stefan Z. (derdespot)


Lesenswert?

Achso, danke an euch beide!Also komm ich nicht um die Tipparbeit herum?

if(dezimal < 10) then
1000er = 0
100er = 0
10er = 0
1er = dezimal
...
if(deziaml <20) then
....

von Gast (Gast)


Lesenswert?

So kannst du das zwar machen, weiß ja nicht was du vorhast und wie groß 
die Zahlen werden. Du musst dran denken, du beschreibst Hardware und die 
baut dir nach deiner Variante einen Haufen Vergleicher und Multiplexer.
Wie gesagt, schau mal nach BCD.

Eigentlich macht man es über einen Algorithmus, z.B. so lange 1000 
abziehen bis man negativ wird und dabei mitzählen, dann hast du die 
1000er-Stelle.
Von dem Ergebnis was als letztes positiv war dann die 100er abziehen 
usw. .

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.