Vererbung von Integer-Range bzw. Daten-Größen

Persönliche Seite #3470117
Lesenswert?

Ich habe mehrere beschränkte Datentypen, seien es Integers oder 
STD_LOGIC_VECTOR Typen.

Wenn ich z.B. im Top-Level Entity einen Integer mit einem Range 
definiere, muss ich dann, wenn ich diesen Integer in einem Sub-Modul 
nutzen möchte, den Integer im Sub-Modul mit exakt den gleichen Range 
definieren?

Wie macht man das sinnvoller weise? Kann man irgendwo (im Top-Level oder 
im Sub-Modul) die Größenangabe weg lassen?

Die gleiche Frage habe ich auch bei STD_LOGIC_VECTOR Typen - muss ich 
überall die Länge angeben? Im Moment schleppe ich die Größe immer über 
Generics mit. Aber eventuell ist es sinnvoller in den Sub-Modulen mit 
uneingeschränkten Typen zu arbeiten und dann die Attribute zu nutzen?
Gast #3470374
Lesenswert?

Marius S. schrieb:
> Wenn ich z.B. im Top-Level Entity einen Integer mit einem Range
> definiere, muss ich dann, wenn ich diesen Integer in einem Sub-Modul
> nutzen möchte, den Integer im Sub-Modul mit exakt den gleichen Range
> definieren?

Nein.. die Synthese "kappt" die Breite des Integers sowieso auf den 
maximal erreichbaren Wert.

Bei std_logic_vector allerdings muss zumindest die Breite passen.
Wobei die Grenzen nicht übereinstimmen müssen.

Also ein (15 downto 0) kann an einen (31 downto 16) "übergeben" werden, 
aber nicht an einen (14 downto 0).

Ich mache das bei std_logic_vector auch immer über generics, die ich in 
einem Package "global" festlege.
Persönliche Seite #3470397
Lesenswert?

Schlumpf schrieb:
> Nein.. die Synthese "kappt" die Breite des Integers sowieso auf den
> maximal erreichbaren Wert.

Also bei Integer-Werten gar keinen Range angeben?
Will man der Synthese da wirklich vertrauen? :-)


Schlumpf schrieb:
> Ich mache das bei std_logic_vector auch immer über generics, die ich in
> einem Package "global" festlege.

Mit "generics" meinst du Konstanten, oder?
Gast #3470403
Lesenswert?

Marius S. schrieb:
> Will man der Synthese da wirklich vertrauen? :-)

Man kann ja nachher mal im Report nachlesen, was sie draus gemacht hat. 
:-)
Aber wenn du im Toplevel einen range angegeben hast und im 
darunterliegenden Level den integer nicht begrenzt, dann wird die 
Synthese dir den begrenzten Integer sicher nicht wieder "aufblasen".

Marius S. schrieb:
> Mit "generics" meinst du Konstanten, oder?

Ja genau..falsch ausgedrückt von mir..
Gast #3470437
Lesenswert?

Marius S. schrieb:
> Also bei Integer-Werten gar keinen Range angeben?

Ich meine mal gehört/gelesen zu haben, dass man extra für die Synthese 
die range angeben soll, weil sonst 32 Bit verwendet werden. Falls du 
keine range angibst, wird moderne Synthesetools die nicht verwendeten 
Bits wahrscheinlich trotzdem erkennen und wegoptimieren, aber verlassen 
würde ich mich nicht darauf.
Gast #3470558
Lesenswert?

Marius S. schrieb:
> Ich habe mehrere beschränkte Datentypen, seien es Integers oder
> STD_LOGIC_VECTOR Typen.
>
> Wenn ich z.B. im Top-Level Entity einen Integer mit einem Range
> definiere, muss ich dann, wenn ich diesen Integer in einem Sub-Modul
> nutzen möchte, den Integer im Sub-Modul mit exakt den gleichen Range
> definieren?
>
> Wie macht man das sinnvoller weise? Kann man irgendwo (im Top-Level oder
> im Sub-Modul) die Größenangabe weg lassen?
>
> Die gleiche Frage habe ich auch bei STD_LOGIC_VECTOR Typen - muss ich
> überall die Länge angeben? Im Moment schleppe ich die Größe immer über
> Generics mit. Aber eventuell ist es sinnvoller in den Sub-Modulen mit
> uneingeschränkten Typen zu arbeiten und dann die Attribute zu nutzen?

Designspezifische subtypen definiert man in einem package, das man dan 
mit use einbindet. Mit generic kann man keine sub-type weiterreichen.

bsp, package mit subtype: 
http://www.mikrocontroller.net/svnbrowser/redz0mb1e/src/vhdl/bm100_pkg.vhd?revision=158&view=markup

nutzung des packages:
http://www.mikrocontroller.net/svnbrowser/redz0mb1e/src/vhdl/charrom.vhd?revision=15&view=markup

MfG,

MfG

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