Eine Variante ist wie von dir vorgeschlagen die Überladung.
Vorteil du kannst gleichzeitig alle Speicherbreiten benutzen, da ja alle
Funktionen zur Verfügung stehen.
Weitere Variante ist, im Package Konstanten zu definieren für die
Breiten, diese Konstanten kannst du in der Recorddefinition benutzen.
Nachteil, pro Design ist so nur eine Breite möglich.
Dritte Variante, VHDL2008.
Wichtitg, zuerst abklären ob deine Tools damit umgehen können. Für
deinen Speichertester würde der Simulator schon reichen.
VHDL2008 erlaubt es Records etc. Unconstrained zu definieren und erst
bei der Signal deklaration einzuschränken.
Somit hast du nur eine procedure die von den übergebenen Daten immer
brav alle 'Length Attribute beachtet.
Z. B. sowas:
1 | type DualPortRamOutputPort_type is record
|
2 | Data : std_logic_vector;
|
3 | Interrupt : std_logic;
|
4 | end record DualPortRamOutputPort_type;
|
und dann so ein Signal deklarieren:
1 | signal PortAOut : DualPortRamOutputPort_type(Data(7 downto 0));
|
VHDL2008 kennt auch den Datentyp "type", somit könntest du deiner
procedure den zu verwendenden Typ als weiteren Parameter mitgeben.
Sind sehr schöne Features, die ich nicht mehr hergeben möchte. Aber
Prüfe deine Tools und die deiner Kunden/Zweigstelle/andere Abteilung ob
die schon VHDL2008 können.