www.mikrocontroller.net

Forum: FPGA, VHDL & Co. negation in der port map


Autor: guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich erhalte beim kompilieren folgende Fehlermeldung die sich auf eine 
Negation (CI in der Instanz AND1) in einer port map bezieht:

"Actual (prefix expression) for formal "input1" is not a globally static 
expression."

Kann mal kurz einer erklären wo genau das Problem liegt?

component GATES_AND
    generic(HL : time;
            LH : time);
    port(INPUT1 : in  std_logic;
         INPUT2 : in  std_logic;
         OUTPUT : out std_logic);
end component;

for all : GATES_AND use entity ORDNER.AND2 (BEHAVIORAL)
    generic map(1 ps, 1 ps)
    port map(INPUT1, INPUT2, OUTPUT);

AND1 : GATES_AND generic map(1 ps, 1 ps)         
                 port map (not CI, B, AND_TMP1); 

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Kann mal kurz einer erklären wo genau das Problem liegt?
Das sagt die Meldung. Such mal hier im Forum nach dem Begriff "globally 
static" und "locally static"...

Der Workaround: nimm ein Signal und weise dem den invertierten Wert zu, 
und übergib dann dieses Signal in der Portliste.

Autor: guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Die negation der Signale vor der Zuweisung in der Port Map hatte ich 
bereits verwendet, wollte es nur gerne kompakter haben, daher die Frage 
nach der Interpretation der Fehlermeldung.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> daher die Frage nach der Interpretation der Fehlermeldung.
Dort ist es ein wenig ausführlicher erklärt:
http://www.vhdl.org/comp.lang.vhdl/FAQ1.html#static

> wollte es nur gerne kompakter haben,
VHDL ist eine geschwätzige Sprache.

Autor: SuperWilly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sollte gehen:
port map ("not" (CI), B, AND_TMP1); 


Gruß,
SuperWilly

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das sollte gehen:...
Mit welcher Toolchain?
Was ist der Hintergrund?
Warum sind solche Syntaxverknotungen nötig?

Autor: guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke soweit,

> Dort ist es ein wenig ausführlicher erklärt:
>http://www.vhdl.org/comp.lang.vhdl/FAQ1.html#static

Dort wurden globally und locally static expressions eigentlich gut 
erklärt, jedoch begreif ich nicht wirklich warum die Auswertung von "not 
CI" in der Port Map nicht als globally static gesehen wird.
Laut Definition:
"globally static expression: An expression that can be evaluated as soon 
as the design hierarchy in which it appears is elaborated."

Letztendlich kann die evaluation des Ausdrucks "not CI" doch 
durchgeführt werden wenn das gesamte Desing in dem sich CI befindet vom 
Compiler bearbeitet wurde.

>Das sollte gehen:
>port map ("not" (CI), B, AND_TMP1);

Das geht in der Tat, jedoch wüsste ich auch gerne was der Grund für 
dieses Konstrukt ist bzw. warum es funktioniert.
Eine Lösung hatte ich allerdings bereits, sprich Signale in der 
architecture angelegt und vor Nutzung in der Port Map negiert.

Autor: SuperWilly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Konvertierungen in "Port Maps" sind erlaubt, müssen jedoch als 
Funktionsaufrufe implementiert sein.
Laut dem IEEE-VHDL-LRM müssen diese Konvertierungsfunktionen "globally 
static" sein, folgende Eigenschaften müssen vorhanden sein:

"A function call whose function name denotes a pure function and whose 
actual parameters are each globally static expressions"

Gruß,
SuperWilly

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SuperWilly schrieb:
> Konvertierungen in "Port Maps" sind erlaubt, müssen jedoch als
> Funktionsaufrufe implementiert sein

Sowas wird leider von den Tools auch unterschiedlich betrachtet :-/
module_inst: modul
  port map(
    clk                => clk,
    reset              => reset,
    data_in            => std_logic_vector(data), -- geht in XST + Modelsim
    unsigned(data_out) => result                  -- geht nur in Modelsim
  );

Duke

Autor: SuperWilly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dass Hersteller sich nicht an das IEEE-VHDL-LRM halten, ist ja nichts 
Neues ;O)

Gruß,
SuperWilly

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.