negation in der port map

Gast #1692976
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?
1
component GATES_AND
2
    generic(HL : time;
3
            LH : time);
4
    port(INPUT1 : in  std_logic;
5
         INPUT2 : in  std_logic;
6
         OUTPUT : out std_logic);
7
end component;
8

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

13
AND1 : GATES_AND generic map(1 ps, 1 ps)         
14
                 port map (not CI, B, AND_TMP1);
Gast #1693740
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.
Gast #1693809
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
Gast #1693836
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 :-/
1
module_inst: modul
2
  port map(
3
    clk                => clk,
4
    reset              => reset,
5
    data_in            => std_logic_vector(data), -- geht in XST + Modelsim
6
    unsigned(data_out) => result                  -- geht nur in Modelsim
7
  );

Duke

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren