integer in integer array wandeln

OP #1113824
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
     ...
OP #1113843
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.
Moderator (Firma: Titel) Persönliche Seite #1113847
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.
OP #1113881
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
Gast #1113912
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.
Gast #1113982
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. .

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