Hallo,
ich erzeuge einen Messwert, das sind 24 Bits. Und davon will ich 13 Bits
auf IOs ausgeben.
Welche zusammenhängenden 13 Bits das aus den 24 Bits sind, soll man
auswählen können.
Ausserdem soll der Wert (die 13 Bits) nicht ausgegeben werden, wenn
höherwertige Bits als die Ausgwählten '1' sind oder wenn der Wert 0 ist.
geschrieben habe ich das so:
1 | if to_integer(unsigned(peak_max(23 downto bit_high -12))) > 8191 or to_integer(unsigned(peak_max(23 downto bit_high -12))) = 0 then
|
2 | wr_not <= '1';
|
3 | else
|
4 | wr_not <= '0';
|
5 | peak_out <= peak_max(bit_high downto bit_high -12);
|
6 | end if;
|
Vorher hatte ich:
1 | if (bit_high < 23 and to_integer(unsigned(peak_max(23 downto bit_high+1))) > 0) or to_integer(unsigned(peak_max(bit_high downto bit_high -12))) = 0 then
|
signal peak_max: std_logic_vector(23 downto 0):=(others => '0');
signal peak_out: std_logic_vector(12 downto 0):=(others => '0');
signal bit_high: integer range 12 to 23:=23;
Jedenfalls: Beide if Abfragen werden von ISE korrekt umgesetzt, mit
VIVADO, das ich aber verwenden muss weil kleiner Artix bekomme ich:
[Synth 8-561] range expression could not be resolved to a constant
Fällt Euch eine schöne synthetisierbare Beschreibung ein?
Vielen Dank!