selbstdefinierte datentypen in VHDL

OP #894712
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
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
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
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
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.
Gast #895081
>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 ;)
OP #895222
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
>@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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.