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


von Chris H. (xkris)


Lesenswert?

Hallo,

kann mir jemand sagen, wo der Unterschied zwischen beiden Datentypen 
liegt:
1
type small_int is range 0 to 31;
2
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.

von AbWickler (Gast)


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.

von Mark (Gast)


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 !

von Chris H. (xkris)


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.

von Mark (Gast)


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;

von Chris H. (xkris)


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,


1
--Integer types            
2
type small_int is range 0 to 1024;
3
type my_word_length is range 31 downto 0;
4
subtype data_word is my_word_length range 7 downto 0;
5
6
--Floating-point types
7
type cmos_level is range 0.0 to 3.3;
8
type pmos_level is range -5.0 to 0.0;
9
type probability is range 0.0 to 1.0;
10
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

von Mark (Gast)


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.

von Joe (Gast)


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 ;)

von Chris H. (xkris)


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

von Joe (Gast)


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.

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.