Forum: FPGA, VHDL & Co. HILFE, ich finde nicht raus wo der Fehler liegt!


von Gabriel (Gast)


Angehängte Dateien:

Lesenswert?

Liebe Kollegen!

Ich bekomme beim simulieren immer den Fehler

There is an U'X'.... in an arithmetic operand, the result will be X

Ich hab alles schon x mal durchgesehen und finde nichts, was mache ich 
falsch?


D A N K E
Gabriel

von Gabriel (Gast)


Angehängte Dateien:

Lesenswert?

Anbei noch die Testbench!

von Gabriel (Gast)


Lesenswert?

Gefunden, danke!!!!

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Wie lautet den der Fehler genau? Meist kommt eine Entsprechende WARNUNG 
das zum Zeitpunkt 0ns solch ein Zustand auftritt soblad du aber einmal 
Werte zuweiss ist das Egal..

von Gabriel (Gast)


Lesenswert?

**Warning: There is an 'U'|'X'| .. in an arithmetic operand, the result 
will be 'X'(es)

Fehler besteht doch noch.

von SuperWilly (Gast)


Lesenswert?

Nimm doch mal entsprechende Signal-Initialisierungen vor.


z.B.

signal ls_counter : integer range 0 to 15  := 0;

Gruß,
SuperWilly

von Gabriel (Gast)


Lesenswert?

Ja, war eine gute Idee, s_ledcounter ist jetzt im Reset drinnen.

Ich hab herausgefunden, dass s_ctr = xxxxxxxx ist obwohl ich ihn im 
Reset habe. ????

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> **Warning: There is an 'U'|'X'| .. in an arithmetic operand, the result
> will be 'X'(es)
Sieh dir z.B. mal deinen s_ledctr an.


Abhilfe: gib gleich bei der Definition von Signalen jedem einen 
Defaultwert an.
1
signal s_ctr : std_logic_vector (7 downto 0) := (others => '0'); -- da auf einen Ausgang nicht zugegriffen werden darf.    
2
signal s_ledctr : std_logic_vector (25 downto 0) := (others => '0');
3
constant C_1HZ : std_logic_vector(25 downto 0):= "10110111000110110000000000"; --48M Dezimal
4
signal s_led : std_logic_vector (7 downto 0) := (others => '0');
5
signal s_rep : std_logic := '0';


BTW:
> if reset_n ='1' then --asynchroner Reset
Sowas ist böse:
Ich hätte da (wegen ***_n) einen low-aktiven Reset vermutet    :-o

Sieh dir mal das numeric_std Package an (statt der std_logic_arith Lib).

Wenn du deinen s_ledctr als integer range 0 to 48000000 anlegst, 
kannst du direkt auf 48000000 vergleichen, ohne irgendwelche 
Bitumrechenereien zu machen.

von Gabriel (Gast)


Lesenswert?

Nein, das wars nicht. Ich hab immer noch bei s_crt xxxxxxxx stehen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Du weist s_ctr aus zwei Prozessen etwas zu (einmal getaktet, einmal 
kombinatorisch). Das geht natürlich nicht. Das kommt von der 
Zwei-Prozess-Schreibweise. Pech gehabt :-/

Abhilfe: s_ctr wird nur im getakteten Teil manipuliert.

von Gabriel (Gast)


Lesenswert?

reset_n ist inzwischen auch low active

von Gabriel (Gast)


Lesenswert?

schaut gut aus. Ich hab´s beim 2. Prozess übersehen. DANKE, ich hoffe 
jetzt funktioniert der Rest.


D A N K E ! ! !

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.