Ich habe ein Problem Block RAM mit nicht 2^n Größen in ghdl zu
simulieren. Es gibt immer ein out of bound error. Ich definieren Typen
mit:
1 | type coefficient_t is array (0 to 63) of std_logic_vector(17 downto 0);
|
2 | subtype coeff_address_t is unsigned(5 downto 0);
|
Und dann eine Konstante mit :
1 | constant coeff_i : coefficient_t := (
|
2 | ...
|
3 | );
|
Nun will ich in einer RAM Entity darauf zugreifen mit :
1 | q <= ram_block(to_integer(unsigned(read_address)));
|
Wobei read_address vom Typ coeff_address_t ist. Wenn ich aber das Array
kleiner mache dann bekomme ich immer out of bound Fehler, was logisch
ist, denn der Datentyp für die Adresse kann größer werden. Da ich das
später syntetisieren möchte daher die Frage wie man auf ein Array
benutzen kann wenn der Adresstyp größer als das Array ist? Ich stelle
sicher, dass niemals auf ein nicht existierendes Element zugegriffen
wird.