Forum: FPGA, VHDL & Co. VHDL: Assert mit mehreren String-Vergleichen?


von Christian R. (supachris)


Lesenswert?

Ich brauche auch mal Hilfe, wahrscheinlich sehe ich den Wald vor lauter 
Bäumen nicht.
Ich steuere mit String-Generics die Synthese von unterschiedlichen 
Features. Das klappt einwandfrei mit generate.
Ich will nun aber noch ein assert einbauen, das testet ob der generic 
String einer der drei erlaubten ist. Die erlaubten Strings haben dabei 
unterschiedliche Länge, ob das das Problem ist?
Jedenfalls evaluiert sowas wie
1
assert FEATURES = "TEST" or FEATURES = "HALLO" or FEATURES = "GUCKGUCK"
2
report "blublubb" severity error;
immer zu false, so dass der Sythesizer da nie drüber kommt.
Hat jemand eine Idee?

von Sigi (Gast)


Lesenswert?

Schreib doch einfach eine Funktion (mit Argument
FEATURE und einem der Keywords), die zuerst die
Länge der Argumente prüft, und falls erfolgreich,
alle Zeichen bis zu dieser Länge alle Zeichen
vergleicht.

von User (Gast)


Lesenswert?

Also in Modelsim 6.6d funktioniert das.

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Kannst du mal ein komplettes Minimalbeispiel posten und den zugehoerign 
Synthese Report? Und welche Synthese Software verwendest du?

von Christian R. (supachris)


Lesenswert?

Moin,

Tatsache, in Modelsim klappt das (PE 2019.1). Nicht aber in VIVADO.
Muss mal schauen, ob ich da in den Sythese Optionen noch was finde...

Vollständiges Minimal-Beispiel wäre sowas:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.NUMERIC_STD.ALL;
4
5
entity tb_assert is
6
generic(
7
  VARIANT : string := "TEST");
8
end tb_assert;
9
10
architecture Behavioral of tb_assert is
11
  
12
begin
13
  
14
  assert VARIANT = "TEST" or VARIANT = "BLAHBLAH" or VARIANT = "ABC"
15
    report "Unknown variant!" severity error;
16
  
17
  assert false
18
    report "Using variant: " & VARIANT severity note;
19
end;

von Christophz (Gast)


Lesenswert?

1
assert false
2
  report "Using variant: " & VARIANT severity note;

Nur nebenbei: report ist direkt nutzbar und hat dann per default 
severity note. (default severity von assert ist error)

Das reicht also:
1
report "Using variant: " & VARIANT;

von Christian R. (supachris)


Lesenswert?

Argh...ich habs raus bekommen. Ich hatte nur in den VIVADO Settings in 
der GUI das Generic falsch gesetzt. Im Build Script war es korrekt, 
nämlich auch bei Strings ohne "", das haben die bei 2015.x mal 
geändert 
(https://forums.xilinx.com/t5/Synthesis/Vivado-Synthesis-string-GENERIC-setting/td-p/655227). 
Jetzt scheint es zu klappen. Lustigerweise zeigt der Project Navigator 
nur bei Angabe des String.generic mit "" korrekt die jeweils generierten 
Module an, bei Angabe ohne "" aber nicht. Daher hab ich das nicht gleich 
mitbekommen. Verrückt.

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Christian R. schrieb:
> Argh...ich habs raus bekommen. Ich hatte nur in den VIVADO Settings in
> der GUI das Generic falsch gesetzt.

Genau soetwas hatte ich vermutet, daher auch das Minimalbeispiel. Dein 
obiges Beispiel haette daher sowohl in Modelsim, als auch in Vivado 
funktionieren muessen. Damit faellt der Fehler dann eigentlich auf.

Kleiner Tipp:

Um sowas zu debuggen kannst du als report einfach den Assert Kontext 
mitgeben, z.B.:
1
  assert VARIANT = "TEST" or VARIANT = "BLAHBLAH" or VARIANT = "ABC"
2
    report "Unknown variant! VARIANT is " & VARIANT
3
    severity error;

Dann siehst du sofort gegen was geprueft worde.

von Christian R. (supachris)


Lesenswert?

Tobias B. schrieb:
> Dann siehst du sofort gegen was geprueft worde.

Das habe ich sogar so im Quelltext hier. Hatte aber die dann doppelten 
"" nicht für voll genommen, bzw. erst mal auf die Ausgabe von VIVADO 
geschoben.
Zumal der mir ja im Project Manager die richtigen per generate 
instanziierten Module anzeigt wenn man das Generic per z.B. "TEST" rein 
reicht. Macht man es korrekt, zeigt er das nicht an. Nun ja. Xilinx und 
Software. Das wird nie ;)

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.