Forum: FPGA, VHDL & Co. Variable Länge eines std_logic_vector und VIVADO.


von Gustl B. (-gb-)


Lesenswert?

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!

von krawoll (Gast)


Lesenswert?

Das dürfte synthetisierbar sein, ist aber nur ein Teil der Lösung:
1
  gendemux: for i in 12 downto 0 generate
2
    peak_out(i) <= peak_max(bit_high + i - 12);
3
  end generate gendemux;

von Gustl B. (-gb-)


Lesenswert?

Danke! Sowas wollte ich eigentlich vermeiden. Gibt es irgendeine 
Einstellung damit VIVADO das auch kann wie ISE?

von VHDL hotline (Gast)


Lesenswert?

Das Problem hatte ich auch schon mal und ist bekannt:

http://www.xilinx.com/support/answers/52302.html

Damals habe ich es dann als case-Konstrukt beschrieben.

Probier mal die Synthese als VHDL-2008 Datei, dort wurden meinem Gefühl 
nach der Toolchain einige Features hinzugefügt, die nicht nur mit 
VHDL-2008 zu tun haben. Habe es aber für den konkreten Fall nicht 
probiert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.