Forum: FPGA, VHDL & Co. Binär => Thermometer-Code


von Andi (loopy83)


Lesenswert?

Hallo zusammen,

ich möchte gerne einen binären Code in den Thermometer-Code
wandeln.

Gibt es da effektive und platzsparende Algorithmen, die das machen?

Oder muss ich mir anhand des digitalen Wertes meinen Thermometer-Vektor
händisch zusammenbauen, oder gar eine LUT verwenden?

Bei ein paar Bit mag das ja noch gehen... aber bei höheren Bitzahlen 
wird es dann schon wieder schwierig...

z.B. 4bit binär => 15bit Thermometer-Code
1
0000 - 000000000000000
2
0001 - 000000000000001
3
0010 - 000000000000011
4
0011 - 000000000000111
5
0100 - 000000000001111
6
0101 - 000000000011111
7
0110 - 000000000111111
8
0111 - 000000001111111
9
1000 - 000000011111111
10
1001 - 000000111111111
11
1010 - 000001111111111
12
1011 - 000011111111111
13
1100 - 000111111111111
14
1101 - 001111111111111
15
1110 - 011111111111111
16
1111 - 111111111111111

Vielen Dank!
Andi

von Peter II (Gast)


Lesenswert?

In welcher Form liegen die Daten vor? als int oder bit array?

= (wert ^ 2) -1

von Troll (Gast)


Lesenswert?

if(input>15)
ERROR
bool[] return={false 15 mal};
for(int i=0;i<input;i++)
return[i]=true;

von Klaus (Gast)


Lesenswert?

= (2^wert) - 1

von Andi (loopy83)


Lesenswert?

Hallo,

Peter II schrieb:
> In welcher Form liegen die Daten vor? als int oder bit array?

Als std_logic_vector, müsste also irgendwie die Daten konvertieren...

Ansonsten ist natürlich = (2^wert) - 1 wieder so simpel und einfach, 
dass ich einfach nicht drauf gekommen bin *Kopf => Tisch*

DANKE!

von Andi (loopy83)


Lesenswert?

Hallo,

über 5 Bit am Eingang gibt es dann aber Probleme, oder?

Bei 2**31 klappt alles noch, aber bei 2**32 ist dann Ende...

Muss ich dann ab 6Bit am Eingang doch alles wieder händisch machen?

Vielen Dank!
Andi

von MaWin (Gast)


Lesenswert?

Nö, nur einem 64-bit Prozessor verwenden.

Aber wieso konnten schon 8 bit Prozessoren problemlos bis 65536 zählen ?

von Andi (loopy83)


Lesenswert?

Hallo,

MaWin schrieb:
> Nö, nur einem 64-bit Prozessor verwenden.
Wenn das wirklich der Grund ist, habe ich scheinbar keinen...

> Aber wieso konnten schon 8 bit Prozessoren problemlos bis 65536 zählen ?
Das weiß ich nicht, aber ich hoffe, du wirst es mir erzählen? :)

Muss ich wohl den Umweg über signed/unsigned gehen... mmpf...

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


Lesenswert?

Das geht beliebig breit. Ich hätte da mal diesen Vorschlag zu Anregung:
1
signal i : std_logic_vector(6 downto 0);  -- 64 Stellen
2
signal o : std_logic_vector(63 downto 0); 
3
:
4
:
5
 process (i) 
6
 variable h : std_logic_vector(63 downto 0); 
7
 begin
8
   for k in 0 to 63 loop
9
     if k>=to_integer(unsigned(i)) then  h(k) := '0';
10
     else                                h(k) := '1';
11
     end if;
12
   end loop;
13
   o <= h;
14
 end process;

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.