mikrocontroller.net

Forum: FPGA, VHDL & Co. selbstdefinierte datentypen in VHDL


Autor: Chris H. (xkris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

kann mir jemand sagen, wo der Unterschied zwischen beiden Datentypen 
liegt:
type small_int is range 0 to 31;
type small_int is range 31 downto 0;

In beiden Fällen definiere ich einen Typ der bestimmte Integerwerte 
annehmen kann. Ich verstehe nicht, was das downto für einen Sinn machen 
soll. Bei Binärzahlen wo ich die Anzahl der Binärstellen angebe ist es 
mir ja klar, aber hier nicht, da hier nur ein Wertebereich definiert 
wird.

Autor: AbWickler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nahja die Attribute 'left 'right liefern andere Rückgabewerte, ebenso 
andere Werte. Möglichweise werden die Vergleichsoperatoren beeinflusst 
(<; >). Ferner die Frage nach dem Rückgabewert eines 
nichtinitialisierten signals, der kleinste?, der rechte?, der linke?.
Daher lässt man bereiche im gesamtem VHDL-Code gern immer in derselben 
Richtung laufen (meist downto) um nicht irgendwo überrascht zu werden.

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Kristian,

faktisch legst Du 2 verschiedene Typen an, der eine läuft eben von 0 bis 
31, der andere von 31 bis 0.
Du kannst diese Typen z.B. verwenden um Signale vom Typ std_logic_vector 
anzulegen die jeweils bit 31 oder bit 0 als MSB haben.

Du kannst mal 2 Signale von jeweils einem dieser Typen anlegen. Eine 
zuweisung von sig1 auf sig2 ist nicht möglich, da es sich um 
verschiedene Typen handelt !

Autor: Chris H. (xkris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

versteh ich nicht.
Es handelt sich hier um Integertypen mit einem eingeschränkten 
Wertebereich. Es gibt keine Bits und somit auch keine LSB oder MSB.

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Kristian,

wo steht Integer? Du hast ranges definiert. Mit Integer würde man 
schreiben:

subtype small_int is integer range 0 to 31;

Autor: Chris H. (xkris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mark wrote:
> Hi Kristian,
>
> wo steht Integer? Du hast ranges definiert. Mit Integer würde man
> schreiben:
>
> subtype small_int is integer range 0 to 31;

Hab ich aus einem Tutorial:


"One can introduce new types by using the type declaration, which names 
the type and specifies its value range. The syntax is

type identifier is type_definition;

Here are a few examples of type definitions,



--Integer types            
type small_int is range 0 to 1024;
type my_word_length is range 31 downto 0;
subtype data_word is my_word_length range 7 downto 0;

--Floating-point types
type cmos_level is range 0.0 to 3.3;
type pmos_level is range -5.0 to 0.0;
type probability is range 0.0 to 1.0;
subtype cmos_low_V is cmos_level range 0.0 to +1.8;

usw..."

Ich bin davon ausgegangen, dass der Compiler automatisch erkennt, um 
welchen Datentyp es sich handelt.

Der Link zum Tutorial ist hier:

http://www.seas.upenn.edu/~ese201/vhdl/vhdl_primer.html

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Kristian,

OK, Du hast recht, es wurden 2 verschiedene Integer-Typen definiert.
to oder downto legen fest ob die Elemente aufwärts oder abwärts laufen.
Zurück zu Deiner Frage:
hat das downto einen Sinn? Kommt auf Deine Anwendung an, manchmal ist
die Zählweise eben umgekehrt. Was solls ...
Wenn man es nicht braucht, muss man es nicht verwenden, die Sprache
gibt Dir aber die Möglichkeit.

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Es handelt sich hier um Integertypen mit einem eingeschränkten
>Wertebereich. Es gibt keine Bits und somit auch keine LSB oder MSB.

In der HW gibt es immer Bits ;)

Autor: Chris H. (xkris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joe wrote:
>>Es handelt sich hier um Integertypen mit einem eingeschränkten
>>Wertebereich. Es gibt keine Bits und somit auch keine LSB oder MSB.
>
> In der HW gibt es immer Bits ;)


@Joe: Du meinst, dass der Integerwert intern als Binärwert dargestellt 
ist. Das ist zwar richtig, hat aber nichts mit dem Thema zu tun.


@Mark: Mit der Antwort kann ich leben. Ist ja im Grunde das, was 
Abwickler in seiner Antwort bereits geschrieben het.

Danke für eure Hilfe.

gruß
kristian

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>@Joe: Du meinst, dass der Integerwert intern als Binärwert dargestellt
>ist. Das ist zwar richtig, hat aber nichts mit dem Thema zu tun.

Doch hat es schon, wandle den Integer z.B. auf unsigned und greife auf 
die einzelnen Bits zu. Da wirst du merken das die Bitorder anders ist 
MSB bzw. LSB first.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.