Mehrfach unconstrained Arrays in VHDL möglich?

OP #2951707
Lesenswert?
• ▲
▼
Hallo allerseits,

ich habe hier einen VHDL Block, der mir einen PWM-Counter realisieren 
soll. Bisher habe ich in einem separaten Package definiert:
1
CONSTANT PWM_SIZE : positive := 3;
2
SUBTYPE PWM_COUNTER_VALUE IS unsigned(PWM_SIZE - 1 DOWNTO 0); -- Typ für den Zähler
3

4
CONSTANT NUM_PWM_CHANNELS : positive := 8;
5
TYPE PWM_DC_VALUES IS ARRAY (NUM_PWM_CHANNELS - 1 DOWNTO 0) OF PWM_COUNTER_VALUE; -- Typ für die Vergelichswerte

Ich brauche jetzt aber zwei Blöcke mit unterschiedlichen Werten für 
Breite der Zähler und Anzahl Kanäle.

Meine Idee war die Verwendung von GENERICs. Dazu muss ich die Typen ja 
als unconstrained arrays definieren.
Wie kann ich die Struktur PWM_DC_VALUES abbilden? Wenn ich schreibe
1
TYPE PWM_DC_VALUES IS ARRAY (positive range <>) OF unsigned (positive range <>);
bekomme ich einen Compiler-Fehler. Gleiches bei
1
TYPE PWM_DC_VALUES IS ARRAY (positive range <>) OF unsigned;

Wie kann ich nun diese Datenstruktur abbilden? Das einzige was ich mir 
vorstellen könnte, wäre eine Wandlung (manuell) zu
1
std_logic_vector(positive range <>, integer range <>)
oder eben verschiedne PWM-Blöcke verwenden (ungünstig wegen der 
Wartung).

Irgendwelche anderen Lösungsvorschläge, wie ich das generisch 
hinbekommen kann?

Christian
OP #2951792
Lesenswert?
• ▲
▼
Hallo,

für
1
TYPE TEST_TYPE IS ARRAY (positive range <>) OF unsigned (positive range <>);
 bekomme ich
1
** Error: Y:/User/S-Wolfc/SA/Quartus/FPGA/Version_1/SMZ_Generics.vhd(22): near "<>": syntax error
.
Für
1
TYPE TEST_TYPE IS ARRAY (positive range <>) OF unsigned;
 bekomme ich
1
** Error: Y:/User/S-Wolfc/SA/Quartus/FPGA/Version_1/SMZ_Generics.vhd(22): Array element type can not be unconstrained array type ieee.numeric_std.unsigned.
.

Jeweils mit ModelSim übersetzt (für Simulation). Quartur II habe ich 
noch nicht ausprobiert.

Christian
Gast #6480391
Lesenswert?
• ▲
▼
Gustl B. schrieb:
> Irgendwie so?

Wenn ich das richtig sehe ist das eine constrainte variante, so etwas 
habe ich schon am laufen:
1
type tMyArr is array(0 to 1, 0 to 1) of string(1 to 3);
2

3
constant myArr : tMyArr = ( ("abc", "def"), ("ghi", "jkl") )

Ich hätte nun gerne das array und Begrenzung, damit ich die Grenzen beim 
definieren der Konstante festlegen kann.
#6480934
Lesenswert?
• ▲
▼
Andreas schrieb:
> Hat wer einen Prototypen für ein zwei dimensional unconstraintes array?

Das was original gefragt wurde, geht mit VHDL2008:
https://www.doulos.com/knowhow/vhdl/vhdl-2008-small-changes/#composite

Je nach Synthesizer/Simulationstool musst du VHDL2008 Support extra 
einschalten. Teilweise können das Tools bis heute nicht (also 2015 
konnte der Lattice Logic Analyser das z. B. nicht. Alle anderen Tools in 
Lattice Diamond schon).

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 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.