VHDL Integer Rechnungen

Gast #1292494
Lesenswert?
• ▲
▼
Hallo,

ich habe eine Frage bzgl. Integer Berechnungen.
Und zwar habe ich folgenedes Problem:

Gegeben ist der Anzeigewert (8Bit, bzw. 255 in Integer) und die 
Integerstelle. Ich will nun die 255 aufspalten, damit ich einmal die 5, 
dann die 2.Stelle 5 und die 3.Stelle 2 erhalte. Wie realsiere ich das?

Anhand des 8-Bit Wertes convertiere ich diesen in einen Integer, soweit 
zugut aber dann das Splitten weiß ich nicht wie ich das machen soll.
1
function SegmentValue ( sliderValue : std_logic_vector; SegementPosition: integer) return std_logic_vector is
2
  variable display_value : integer range 0 to 255;
3
  begin
4
    -- SegmentPosition (Stelle) kann 1,2 oder 3 sein.
5
    -- Slider (Gegebener Counter Wert) convetrieren zu integer
6
    display_value = conv_integer(sliderValue); -- Integerwert
7
                -- .... wie kann ich nun dieses display_value splitten ???
8
end

Liebe Grüße
Moderator (Firma: Titel) Persönliche Seite #1292517
Lesenswert?
• ▲
▼
> Ich will nun die 255 aufspalten, damit ich einmal die 5,
> dann die 2.Stelle 5 und die 3.Stelle 2 erhalte. Wie realsiere ich das?
Das ist ein wenig aufwendiger, als du dir jetzt denken wirst :-o

Such hier im FPGA-Forum mal nach BCD, oder sieh auf meiner HP nach:
http://www.lothar-miller.de/s9y/categories/27-Byte-nach-BCD
Oder, wenns etwas mehr als nur ein Byte sein darf:
http://www.lothar-miller.de/s9y/categories/28-Vektor-nach-BCD
Moderator (Firma: Titel) Persönliche Seite #1292552
Lesenswert?
• ▲
▼
> Gibt es nicht eine Funktion, wie z.B. in Java mit der man einen Wert
> Splitten kann?
Sei dir bewusst: du beschreibst Hardware
Das muß also alles mit Logikelementen (FFs, LUTs...) abgebildet werden 
können.

Und auch wenn du es in Java programmierst, wird eine Stelle nach der 
anderen abgearbeitet (nur merkst du nichts davon, weil die Funktion 
schon fertig ist).

Wenn du das "nur" für die Simulation brauchen würdest, wäre der 
Sachverhalt einfacher, dann mußt du dir um Ressourcenverbrauch etc... 
keine gedanken machen. Aber ich habe den Verdacht, das soll auf ein 
FPGA. Oder?

BTW:
Falls du gerade so mit VHDL anfängst, vergiss die Keywords function 
und procedure vorerst mal wieder. Du solltest eher das Denken in 
Komponenten (component) lernen.
Gast #1292563
Lesenswert?
• ▲
▼
Stimmt im Prinzip ist es leichter, wenn man das einfach abtippt.

@Lothar Miller
Ja, das soll auf einen FPGA drauf, und stimmt es ist ja nicht dasselbe 
wie in Java.

BTW:
Auf deiner Seite ist dieser Quellcode... und müsste die erste digit10 
nicht digit1 sein?
1
....
2
begin
3
   -- BROM 
4
   process begin
5
     wait until rising_edge(clk);
6
     addr <= data;
7
   end process;
8
   digits <= BCDRom(to_integer(unsigned(addr)));
9
  
10
   dig10  <= digits (3 downto 0);   <==================== FEHLER?!?!?!
11
   dig10  <= digits (7 downto 4);
12
   dig100 <= digits(11 downto 8);
13
end Behavioral;
14
....
Moderator (Firma: Titel) Persönliche Seite #1292568
Lesenswert?
• ▲
▼
Gast schrieb:
> Stimmt im Prinzip ist es leichter, wenn man das einfach abtippt.
>
> BTW:
> Auf deiner Seite ist dieser Quellcode... und müsste die erste digit10
> nicht digit1 sein?

Sch...
Ja, richtig. Wird gleich korrigiert ;-)


EDIT:
Du kannst den Takt auch weglassen, dann wird das Ganze in LUTs 
abgebildet.
1
begin
2
   digits <= BCDRom(to_integer(unsigned(data)));
3
 
4
   dig1   <= digits (3 downto 0);
5
   dig10  <= digits (7 downto 4);
6
   dig100 <= digits(11 downto 8);
7
end Behavioral;
Ob du dir den Ressourcenverbrauch leisten kannst, musst du selber 
abschätzen.

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