selbstdefinierte datentypen in VHDL

OP #894712
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.
Gast #894726
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.
Gast #894758
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 !
OP #894910
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
Gast #894936
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.
OP #895222
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
Gast #895682
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

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