> also die range von for-schleife muss in integer sein.
Viel schlimmer: die Werte der For-Schleife müssen konstant sein. Nur
dann kann das Design synthetisiert werden.
> Aber möchte ich jetzt die range(Amplitude) als Eingangsignal definieren,
> dann läuft die Schleife nicht mehr.
Die Amplitude wird nicht in der For-Schleife geändert, sondern der Wert
einfach vor der Ausgabe skaliert.
1 | if (Sign1='1')
|
2 | then
|
3 | for Amplitude in 0 to 25
|
4 | loop D_out1 <= std_logic_vector(to_unsigned(127,8)+ unsigned(Result1)*Amplitude/128); end loop;
|
5 | else
|
6 | for Amplitude in 0 to 25
|
7 | loop D_out1 <= std_logic_vector (to_unsigned(127,8)- unsigned(Result1)*Amplitude/128); end loop;
|
8 | end if;
|
Die Schleife hier ist völlig unnötig, ich habe keine Ahnung, was die
soll...
Wenn du das hast:
1 | Result1 <= Sinus_Rom (to_integer(Address1));
|
2 | Result2 <= Sinus_Rom (to_integer(Address2));
|
3 | Result3 <= Sinus_Rom (to_integer(Address3));
|
Dann reicht das aus:
1 | port ( amplitude : std_logic_vector(6 downto 0);
|
2 | :
|
3 | Result1 <= Sinus_Rom (to_integer(Address1));
|
4 | :
|
5 | if (Sign1='1') then
|
6 | D_out1 <= std_logic_vector(to_unsigned(127,8) + (unsigned(Result1)*unsigned(Amplitude))/128);
|
7 | else
|
8 | D_out1 <= std_logic_vector(to_unsigned(127,8) - (unsigned(Result1)*unsigned(Amplitude))/128);
|
9 | end if;
|