Forum: FPGA, VHDL & Co. Mehrfach unconstrained Arrays in VHDL möglich?


von Christian W. (clupus)


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

von Duke Scarring (Gast)


Lesenswert?

Christian Wolf schrieb:
> bekomme ich einen Compiler-Fehler.
Kannst Du den konkreten Fehler hier posten?

Duke

von Christian W. (clupus)


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

von Christian W. (clupus)


Lesenswert?

Quartur II sagt
1
Error (10294): VHDL Type Declaration error at SMZ_Generics.vhd(22): element type for array type cannot be unconstrained

Christian

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Christian Wolf schrieb:
> Quartur
Ist damit Quartu-s- von Altera gemeint?

von Christian W. (clupus)


Lesenswert?

Lothar Miller schrieb:
> Christian Wolf schrieb:
>> Quartur
> Ist damit Quartu-s- von Altera gemeint?

Äähm, ja. Sorry. Tippfehler.

Christian

von Andreas (Gast)


Lesenswert?

Hallo,

der Post ist zwar schon etwas älter, aber ich habe genau das gleiche 
Problem.
Hat wer einen Prototypen für ein zwei dimensional unconstraintes array?

Viele Grüße,
Andreas

von Gustl B. (-gb-)


Lesenswert?


von Andreas (Gast)


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.

von Christoph Z. (christophz)


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

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.