Forum: FPGA, VHDL & Co. Vererbung von Integer-Range bzw. Daten-Größen


von Marius S. (lupin) Benutzerseite


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?

von Schlumpf (Gast)


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.

von Marius S. (lupin) Benutzerseite


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?

von Schlumpf (Gast)


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..

von Schlumpf (Gast)


Lesenswert?

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

Also um´s GANZ korrekt auszudrücken:
Die Component hat ein Generic, welches die Breite vorgibt und dieses 
Generic wird über eine Konstante, welche in einem Package festgelegt 
ist, im Toplevel über "generic map" gesetzt.

von dito (Gast)


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.

von Fpgakuechle K. (Gast)


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

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.