Hallo Leute, Ich habe ein kleines Datenübertragungsmodel erstellt. (Sender, Empfänger und FIFO als Pufferspeicher). Daten werden vom Sender erzeugt dann ans FIFO gesendet und zwischengelagert. Der Empfänger kann dann die Daten auslesen. was ich aber nicht verstehe ist, dass wenn ich den reset bei der Testbench nicht auf 1 setze, der Ausgang des Empfänger den wert 'U' zugeschrieben bekommt wenn ich den rst direkt zu beginn auf 1 setze taucht das 'U' nicht auf. Habe erst vor ne woche mit VHDL begonnen, deswegen kenne ich mich noch nicht so gut damit aus
Sei bitte so gut und poste Deinen Code (ggf. als Anhang). Unsere Glaskugeln sind alle beim polieren.
Hier ist die Testbech, wobei sich das entscheidende im Stimulus process abspielt, ENTITY Top_tb IS END Top_tb; ARCHITECTURE behavior OF Top_tb IS -- Component Declaration for the Unit Under Test (UUT) COMPONENT TOP PORT( clk : IN std_logic; rst : IN std_logic; enable_w : IN std_logic; enable_r : IN std_logic; d_out : OUT std_logic_vector(17 downto 0) ); END COMPONENT; --Inputs signal clk : std_logic := '0'; signal rst : std_logic := '0'; signal enable_w : std_logic := '0'; signal enable_r : std_logic := '0'; --Outputs signal d_out : std_logic_vector(17 downto 0); -- Clock period definitions constant clk_period : time := 10 ns; BEGIN -- Instantiate the Unit Under Test (UUT) uut: TOP PORT MAP ( clk => clk, rst => rst, enable_w => enable_w, enable_r => enable_r, d_out => d_out ); -- Clock process definitions clk_process :process begin clk <= '0'; wait for clk_period/2; clk <= '1'; wait for clk_period/2; end process; -- Stimulus process stim_proc: process begin -- hold reset state for 100 ns. wait for 10 ns; rst <= '1'; wait for 100 ns; rst <= '0'; wait for 50 ns; enable_w <= '1'; wait for 50 ns; enable_r <= '1'; wait for 50 ns; enable_w <= '0'; wait for 50 ns; enable_r <= '0'; wait for clk_period*10; -- insert stimulus here wait; end process; END;
Hi, in der Testbench hab ich jetzt den Fehler so auf die Schnelle nicht gesehen. Aller Warscheinlichkeit nach, weil es sich ja hier auch um den Audgang des FIFOs handelt, wird der Fehler im DUT liegen. Kann es sein, dass du auf die steigende Flanke deines Resets reagierst, bzw. dass es sich um einen High-Active Reset handelt? Gruß Helfer
Ich bin mir nicht sicher was die genaue Definition von 'U' bei VHDL ist. Aber grundsätzlich gehst du einem solchen Problem am einfachsten auf den Grund in dem du die Leitungen von deinem unerwünschten Zustand nach oben tingelst und erst mal die genaue Stelle identifizierst wo das 'U' zum ersten mal Auftritt. Dazu musst du halt in der Sim mehr Leitungen hinzufügen, als erstes mal alle statements die d_out erzeugen. Dann kannst du das auf eine Zeile Code eingrenzen und meisstens sehr schnell den Fehler finden. Was auch immer sehr hilfreich ist: alle Inputs in dein DUT in der Sim anzeigen, falls du Signale im TB falsch verbunden hast.
eingast schrieb: > Ich bin mir nicht sicher was die genaue Definition von 'U' bei VHDL ist. Von https://www.cs.sfu.ca/~ggbaker/reference/std_logic/1164/std_logic.html 'U': uninitialized. This signal hasn't been set yet. 'X': unknown. Impossible to determine this value/result. '0': logic 0 '1': logic 1 'Z': High Impedance 'W': Weak signal, can't tell if it should be 0 or 1. 'L': Weak signal that should probably go to 0 'H': Weak signal that should probably go to 1 '-': Don't care. Alle nicht initialisierten std_logic Signale sind am Anfang 'U'.
Also wieder mal das Übliche: Der Fragesteller weiss ganz genau wo das Problem liegt, kann seine Ansicht aber nicht begründen oder daraus eigene Schlüsse ziehen; fühlt sich aber dennoch dazu veranlasst, denjenigen die er um Rat fragt den Rest des Codes vorzuenthalten. Herzlich willkommen in meinem CSS-File und ein schönes Leben noch.
Wenn ich das rst von Beginn auf '1' setze, was ich auch immer mache, gibt es keine Probleme. Die Frage ist eher was ist der Sinn eines asynchronen reset signals im Allgemeinen?
Dout ist zu Beginn nicht initialisiert. Also dem Simulator unbekannt : 'U'nknown Beim Reset wird Dout beschrieben und hat dann einen Wert. Sinn eines Reset ist das zurücksetzen der Register damit sich das Gerät in einen definierten Zustand befindet. In synchronen Schaltungen sollte man Resets synchron loslassen. Man kann aber asynchron darauf reagieren.
rub schrieb: > Dank dir!! Auf so ne Antwort habe ich gewartet Man wartet nicht auf Antworten - man sucht sie. SCNR,
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.