@fränkie
wie gesagt, ich würde Packages für Funktionen, Prozeduren,
Konstanten usw. nutzen. Beispiel :
Ein 32 bit-Register im FPGA soll von einem uC beschrieben
und gelesen werden können.
Die Typ-Deklaration des Registers erfolgt im Package
als "record", z.B.:
1 | type VERSION_REG_TYPE is
|
2 | record
|
3 | version : integer range 0 to 255;
|
4 | revision : integer range 0 to 255;
|
5 | end record;
|
jetzt schreib ich mir 2 Konvertierungsfunktionen dazu :
1 | function slv2reg ( slv : std_logic_vector(15 downto 0) )
|
2 | return VERSION_REG_TYPE;
|
3 |
|
4 | function reg2slv ( reg : VERSION_REG_TYPE )
|
5 | return std_logic_vector;
|
Im Source-Code kann ich jetzt einfach schreiben
1 | signal version_reg_q : VERSION_REG_TYPE;
|
2 | ...
|
3 | if wr='0' and adr = ADR_VERSION_REG
|
4 | version_reg_q <= slv2reg(uC_datenbus); -- 32 bit datenbus
|
5 | ...
|
jetzt kann ich ganz bequem auf das Register zugreifen und
muss nicht mit einzelnen Bits rumhantieren, eine Änderung
des Registers wird zentral im Package gemacht, das bedeutet
wenig Aufwand
da gibts noch viele Bsp. für die sinnvolle Verwendung von
Packages, man musses nur mal probieren