Ich möchte eine Eingangs-Vektor-Länge berechnen bzw. von XST vor der
Synthese berechnen lassen, und zwar über eine Logarithmusfunktion:
1 | constant max : integer := 19;
|
Um eine 19 darzustellen benötigt man 5 Bit ->
1 | entity Komp1 is
|
2 | port(
|
3 | input : in std_logic_vector(log2(max) downto 0);
|
4 | );
|
5 | end Komp1;
|
Dies ist mit der Funktion LOG2 auf math_real möglich. Alternativ eine
Selbstbaulösung:
1 | function log_2 (x : integer) return integer is
|
2 | variable x_v, cnt_v : integer;
|
3 | begin
|
4 | x_v := x;
|
5 | cnt_v := 0;
|
6 | while x_v > 0 loop
|
7 | x_v := x_v / 2;
|
8 | cnt_v := cnt_v + 1;
|
9 | end loop;
|
10 | return cnt_v;
|
11 | end log_2;
|
Beides funktioniert im Simulator, in beiden Fällen erzeugt XST aber eine
Komponente Komp1 mit einem Eingangsvektor von der Größe 9999 downto 0.
Wie kann ich XST bei der Berechnung helfen?