mikrocontroller.net

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


Autor: Martin Kohler (mkohler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Beim Laden meiner Testbench erhalte ich eine ganze Reihe Warnings 
ähnlich der nachfolgend dargestellten:
#    Time: 0 ps  Iteration: 0  Instance: /kusb_io_flex_testbench_readertest_r1a_mode0/mykusb_io_flex/myreader1/myreaderstepcount
# ** Warning: CONV_INTEGER: There is an 'U'|'X'|'W'|'Z'|'-' in an arithmetic operand, and it has been converted to 0.
#    Time: 0 ps  Iteration: 0  Instance: /kusb_io_flex_testbench_readertest_r1a_mode0/mykusb_io_flex/myreader1/myreaderstepcount
# ** 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: FPGAküchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Martin Kohler (mkohler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann müsste ich also in meinem Modell die Signale wie folgt deklarieren?
    -- clock signals from encoder detect
    signal FWD_CLK_sig          : STD_LOGIC := '0';
    signal BWD_CLK_sig          : STD_LOGIC := '0';

    -- count signals after prescaler
    signal STEP_UP_sig          : STD_LOGIC := '0';
    signal STEP_DOWN_sig        : STD_LOGIC := '0';
    
    -- step counter
    signal STEP_COUNT_sig       : STD_LOGIC_VECTOR(13 downto 0) := (others => '0');
    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

Autor: Henk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin Kohler (mkohler)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
entity CAPTURELogic is
    port (
        -- System
        INT_CLK                             : in    STD_LOGIC;
        INT_RESET                           : in    STD_LOGIC;
        -- CAPTURE Enable
        CAPTURE_ENABLE                      : in    STD_LOGIC;
        -- CAPTURE Window Enable
        CAPTURE_WIN_ENABLE                  : in    STD_LOGIC;
        -- CAPTURE Window
        CAPTURE_WINDOW_START                : in    STD_LOGIC_VECTOR(31 downto 0);
        CAPTURE_WINDOW_END                  : in    STD_LOGIC_VECTOR(31 downto 0);
        -- CAPTURE Input
        CAPTURE_INPUT_impuls                : in    STD_LOGIC;
        -- Counter Input
        STEP_COUNT                          : in    STD_LOGIC_VECTOR(31 downto 0);
        -- CAPTURE Request          
        CAPTURE_REQUEST                     : out   STD_LOGIC;
        CAPTURE_REQUEST_reset               : in    STD_LOGIC;
        -- CAPTURE Wert
        CAPTURE_VALUE                       : out   STD_LOGIC_VECTOR(31 downto 0);
        -- CAPTURE Count
        CAPTURE_COUNT                       : out   STD_LOGIC_VECTOR(7 downto 0);
        CAPTURE_COUNT_reset                 : in    STD_LOGIC
    );
end CAPTURELogic;
Innerhalb des Moduls werden diese Signale definiert:
    -- signals
    signal CAPTURE_impuls                   : STD_LOGIC;
    signal CAPTURE_REQUEST_save             : STD_LOGIC;
    signal WINDOW_INVERS_sig                : STD_LOGIC;
    signal IN_WINDOW_NONINV_sig             : STD_LOGIC;
    signal IN_WINDOW_INV_sig                : STD_LOGIC;
    signal IN_WINDOW_sig                    : STD_LOGIC;
    signal CAPTURE_OVERALL_ENABLE_sig       : STD_LOGIC;
    signal CAPTURE_ALLOW_WINDOW_sig         : STD_LOGIC;
    signal CAPTURE_ENABLE_sig               : STD_LOGIC;
    -- step counter
    signal CAPTURE_COUNT_uv                 : unsigned(7 downto 0);
    -- Capture Wert
    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:
#    Time: 0 ps  Iteration: 0  Instance: /kusb_io_flex_testbench_readertest_r1a_mode0/mykusb_io_flex/mycapture/mycapturelogicfall
# ** Warning: There is an 'U'|'X'|'W'|'Z'|'-' in an arithmetic operand, the result will be 'X'(es).
#    Time: 0 ps  Iteration: 0  Instance: /kusb_io_flex_testbench_readertest_r1a_mode0/mykusb_io_flex/mycapture/mycapturelogicrise
# ** 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin Kohler (mkohler)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin Kohler (mkohler)
Datum:

Bewertung
0 lesenswert
nicht 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

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.