Forum: FPGA, VHDL & Co. Warnings bei ModelSIM XE II 5.8c


von Martin K. (mkohler)


Lesenswert?

Hallo,
Beim Laden meiner Testbench erhalte ich eine ganze Reihe Warnings 
ähnlich der nachfolgend dargestellten:
1
#    Time: 0 ps  Iteration: 0  Instance: /kusb_io_flex_testbench_readertest_r1a_mode0/mykusb_io_flex/myreader1/myreaderstepcount
2
# ** Warning: CONV_INTEGER: There is an 'U'|'X'|'W'|'Z'|'-' in an arithmetic operand, and it has been converted to 0.
3
#    Time: 0 ps  Iteration: 0  Instance: /kusb_io_flex_testbench_readertest_r1a_mode0/mykusb_io_flex/myreader1/myreaderstepcount
4
# ** Warning: There is an 'U'|'X'|'W'|'Z'|'-' in an arithmetic operand, the result will be 'X'(es).

Ist das ein Problem für die Implementation?
Wenn ja - wie können die Warnings vermieden werden?

Gruss, Martin

von Falk B. (falk)


Lesenswert?

@ Martin Kohler (mkohler)

>Ist das ein Problem für die Implementation?

Nein. Aber einige Siganle sind nicht iitialisiert und sind somit U 
(undefined). Eine Operation mit U ergibt immer U, logisch. Darüber 
meckert Modelsim.

>Wenn ja - wie können die Warnings vermieden werden?

Signale initialisieren. Entweder mit Reset im Design, oder per Zuweisung 
im Script im Modelsim (Force Modus deposite).

MFG
Falk

von FPGAküchle (Gast)


Lesenswert?

Nö, sollte kein Prob sein, du hast halt irgendwo eine 
Konverteierung/Operation std_gic_vector auf mit integer. dein vektor 
kann neben '0' '1' auch 'X' 'u' etc aufweisen, die kann er nicht als 
zahlen interpretieren und ersetzt sie durch '0'. Sowas passiert wenn man 
für die Simu die busse nicht initialisiert (als signal fgfg: 
std_logic_vector(7 downto 0) := (others => '0'); (das mit := ist die 
initalisierung).

von Martin K. (mkohler)


Lesenswert?

Dann müsste ich also in meinem Modell die Signale wie folgt deklarieren?
1
    -- clock signals from encoder detect
2
    signal FWD_CLK_sig          : STD_LOGIC := '0';
3
    signal BWD_CLK_sig          : STD_LOGIC := '0';
4
5
    -- count signals after prescaler
6
    signal STEP_UP_sig          : STD_LOGIC := '0';
7
    signal STEP_DOWN_sig        : STD_LOGIC := '0';
8
    
9
    -- step counter
10
    signal STEP_COUNT_sig       : STD_LOGIC_VECTOR(13 downto 0) := (others => '0');
11
    signal COUNT_PRESCALER_sig  : integer range 0 to 255; -- 2^8-1 := 0;

Interessant... man lernt wohl nie aus ;-).

Ist es denn sinnvoll, signals generell einen Initialwert zuzuweisen oder 
kann das zu Konflikten führen?

Gruss, Martin

von Henk (Gast)


Lesenswert?

Scheinen tatsächlich nicht initialisierte Signale zu sein. Wenn du die 
offen lassen möchtest, bis die Schaltung sie eindeutig belegt, kannst du 
sie ausdrücklich mit "U" initialisieren.

von Martin K. (mkohler)


Angehängte Dateien:

Lesenswert?

Sodele, in der Sache mit den ModelSIM Warnings bin ich nun ein paar 
Schritte weiter gekommen. Bis auf ein Modul habe ich alle Warnings 
wegbekommen. Das "böse" Modul hat folgende Schnittstelle:
1
entity CAPTURELogic is
2
    port (
3
        -- System
4
        INT_CLK                             : in    STD_LOGIC;
5
        INT_RESET                           : in    STD_LOGIC;
6
        -- CAPTURE Enable
7
        CAPTURE_ENABLE                      : in    STD_LOGIC;
8
        -- CAPTURE Window Enable
9
        CAPTURE_WIN_ENABLE                  : in    STD_LOGIC;
10
        -- CAPTURE Window
11
        CAPTURE_WINDOW_START                : in    STD_LOGIC_VECTOR(31 downto 0);
12
        CAPTURE_WINDOW_END                  : in    STD_LOGIC_VECTOR(31 downto 0);
13
        -- CAPTURE Input
14
        CAPTURE_INPUT_impuls                : in    STD_LOGIC;
15
        -- Counter Input
16
        STEP_COUNT                          : in    STD_LOGIC_VECTOR(31 downto 0);
17
        -- CAPTURE Request          
18
        CAPTURE_REQUEST                     : out   STD_LOGIC;
19
        CAPTURE_REQUEST_reset               : in    STD_LOGIC;
20
        -- CAPTURE Wert
21
        CAPTURE_VALUE                       : out   STD_LOGIC_VECTOR(31 downto 0);
22
        -- CAPTURE Count
23
        CAPTURE_COUNT                       : out   STD_LOGIC_VECTOR(7 downto 0);
24
        CAPTURE_COUNT_reset                 : in    STD_LOGIC
25
    );
26
end CAPTURELogic;
Innerhalb des Moduls werden diese Signale definiert:
1
    -- signals
2
    signal CAPTURE_impuls                   : STD_LOGIC;
3
    signal CAPTURE_REQUEST_save             : STD_LOGIC;
4
    signal WINDOW_INVERS_sig                : STD_LOGIC;
5
    signal IN_WINDOW_NONINV_sig             : STD_LOGIC;
6
    signal IN_WINDOW_INV_sig                : STD_LOGIC;
7
    signal IN_WINDOW_sig                    : STD_LOGIC;
8
    signal CAPTURE_OVERALL_ENABLE_sig       : STD_LOGIC;
9
    signal CAPTURE_ALLOW_WINDOW_sig         : STD_LOGIC;
10
    signal CAPTURE_ENABLE_sig               : STD_LOGIC;
11
    -- step counter
12
    signal CAPTURE_COUNT_uv                 : unsigned(7 downto 0);
13
    -- Capture Wert
14
    signal CAPTURE_VALUE_sig                : STD_LOGIC_VECTOR(31 downto 0);
Gemäss dem Waveform Screenshot im Anhang sind alle Signale sauber 
definiert, schon ganz vom Anfang an. ModelSim gibt aber trotzdem einige 
solche Warnungen aus:
1
#    Time: 0 ps  Iteration: 0  Instance: /kusb_io_flex_testbench_readertest_r1a_mode0/mykusb_io_flex/mycapture/mycapturelogicfall
2
# ** Warning: There is an 'U'|'X'|'W'|'Z'|'-' in an arithmetic operand, the result will be 'X'(es).
3
#    Time: 0 ps  Iteration: 0  Instance: /kusb_io_flex_testbench_readertest_r1a_mode0/mykusb_io_flex/mycapture/mycapturelogicrise
4
# ** Warning: There is an 'U'|'X'|'W'|'Z'|'-' in an arithmetic operand, the result will be 'X'(es).
Woher könnten diese Warnungen jetzt noch stammen?
Die einzige

von Falk B. (falk)


Lesenswert?

@ Martin Kohler (mkohler)

>Gemäss dem Waveform Screenshot im Anhang sind alle Signale sauber
>definiert, schon ganz vom Anfang an. ModelSim gibt aber trotzdem einige
>solche Warnungen aus:

>Woher könnten diese Warnungen jetzt noch stammen?

Sind sicher einige interne Signale im Modul, die du nit initialisiert 
hast.

MfG
Falk

von Martin K. (mkohler)


Lesenswert?

Und welche sollten das noch sein?
Im Waveform Screenshot sind alle Signale der Entity sowie alle intern 
definierten signals aufgeführt. Da ist nichts undefiniert.

In den internen processes gibt es auch keine Variablen oder ähnliches, 
da wird nur mit den bestehenden signals gearbeitet.

Gruss, Martin

von Martin K. (mkohler)


Lesenswert?

Das Problem ist gelöst.

Offenbar gilt ein Singal immer noch nicht als definiert, wenn es zwar im 
Wave-Window eindeutig auf 0 definiert dargestellt wird.
Der aus einem anderen Modul kommende unsigned Vektor "step_count" hat 
die Warungen verursacht.

Gruss, Martin

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.