--
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity D_flip_flop is
port (
D : in STD_LOGIC;
Q : inout STD_LOGIC;
Q_tonos : out STD_LOGIC;
CLK : in STD_LOGIC;
RST : in STD_LOGIC
);
end D_flip_flop;
architecture Behavioral of D_flip_flop is
begin
process_flip_flip: process
begin
wait until CLK'EVENT AND CLK = '1';
if(RST='1') then
Q <= '0';
else
Q <= D;
end if;
Q_tonos <= not Q;
end process process_flip_flip;
end Behavioral;
-------------------------
--testbench
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY test_flip_flop IS
END test_flip_flop;
ARCHITECTURE tb OF test_flip_flop IS
COMPONENT D_flip_flop
PORT(
D : IN std_logic;
Q : INout std_logic;
Q_tonos : OUT std_logic;
CLK : IN std_logic;
RST : IN std_logic
);
END COMPONENT;
signal D : std_logic ;
signal CLK : std_logic ;
signal RST : std_logic ;
signal Q : std_logic;
signal Q_tonos : std_logic;
constant CLK_period : time := 10 ns;
signal stopClk : boolean;
BEGIN
-- Instantiate the Unit Under Test (UUT)
dut: D_flip_flop PORT MAP (
D => D,
Q => Q,
Q_tonos => Q_tonos,
CLK => CLK,
RST => RST
);
CLK_process :process
begin
while not stopClk loop
CLK <= '0';
wait for CLK_period/2;
CLK <= '1';
wait for CLK_period/2;
end loop;
wait;
end process CLK_process;
-- Stimulus process
stim_proc: process
begin
-- insert stimulus here
D <= '0';
RST <= '1';
wait for 100 ns;
D <= '0';
RST <= '0';
wait for 100 ns;
D <= '1';
RST <= '0';
wait for 100 ns;
D <= '1';
RST <= '0';
wait for 100 ns;
wait;
end process;
END;
Antwort
Sie eine Zeile in der Testbench fehlen, denke ich:
D <= '1';
RST <= '0';
wait for 100 ns;
stopClk <= TRUE; -- add this line
wait;
end process;
END;
http://www.edaplayground.com/x/56Mm
auf diese Weise, wenn der Test ist beendet, schaltet die Uhr stopClk
Signal den Taktgenerator aus und die Simulation wird beendet. Es endet, weil es einen Zustand Ereignisverknappung erreicht. Jedes Mal, wenn eine Codezeile ausgeführt wird, die eine Signalzuweisung enthält, wird den Simulatoren Ereigniswarteschlange (ihre "Aufgabenliste") ein Ereignis hinzugefügt. Wenn Sie eine Situation erstellen, in der solche Zeilen nicht weiter ausgeführt werden, wird die Ereigniswarteschlange leer. Das ist Ereignismangel. Der Simulator erkennt dies und die Simulation stoppt. (Wenn Sie darüber nachdenken, was könnte es noch tun?)
Ohne diese zusätzliche Zeile läuft die Simulation für immer, da der Taktgenerierungsprozess Signalzuweisungen für immer ausführt, so dass die Ereigniswarteschlange nie leer ist.
nicht wirklich eine Antwort, aber: mit wenn rising_edge (CLK) oder vielleicht wenn CLK = '1' und CLK'event statt warten, bis betrachten. Nicht alle synthesis Werkzeuge unterstützen diese Art von Code und es ist selten, es in der professionellen Welt zu sehen;)
p.s. stopClk Signal ist nicht (oder war es?) Ihre TB-Uhr ist möglich, aber ich denke, es bleibt 'u' für die gesamte Simulation. Wenn in der Simulation nicht erzwungen.
- 1. Warum ist dieser Code nicht konstant?
- 2. Warum ist dieser Code nicht undicht?
- 3. Warum ist dieser Code nicht eindeutig?
- 4. Warum ist dieser Opencl-Code nicht deterministisch?
- 5. Warum funktioniert dieser Code nicht?
- 6. Warum ist dieser Code ausnutzbar?
- 7. Warum ist dieser Code in Python langsam?
- 8. Warum blockiert dieser Code nicht?
- 9. Warum funktioniert dieser Code nicht?
- 10. Warum blockiert dieser Code in Node.js nicht?
- 11. Warum kompiliert dieser Code nicht in g ++
- 12. Warum dieser Code wirft 'Sammlung wurde geändert', aber wenn ich etwas davor iteriere, ist es nicht?
- 13. Warum ist dieser CATiledLayer/PDF-Code langsam?
- 14. Warum ist dieser Elixier-Code so langsam?
- 15. Warum ist dieser Code für char * schnell?
- 16. Warum funktioniert dieser PHP-Code nicht?
- 17. Warum funktioniert dieser JQuery-Code nicht?
- 18. Warum ist dieser Openmp + Mpi-Code hängen
- 19. Warum wird dieser Jquery-Code nicht ausgeführt?
- 20. Warum kompiliert dieser C++ Template-Code nicht?
- 21. Ist mit dieser Abfrage etwas nicht in Ordnung?
- 22. Warum funktioniert dieser angularjs-Code nicht?
- 23. Warum funktioniert dieser Code nicht? FCTRL2
- 24. Warum funktioniert dieser Ruby-Code nicht?
- 25. Warum druckt dieser Code nicht den Verzeichnisinhalt?
- 26. Warum funktioniert dieser JavaScript-Code nicht?
- 27. Warum funktioniert dieser einfache jQuery-Code nicht?
- 28. Warum funktioniert dieser SQL-Code nicht?
- 29. Warum funktioniert Python dieser Code nicht?
- 30. Warum dieser Code nicht Stackoverflow Ausnahme
Sie haben Ihr Problem nicht wirklich beschrieben. Was willst du * diesen Code tun und was tut er stattdessen? –
es soll ein d-flipflop in vhdl sein, aber wenn ich simuliere, um die Diagramme zu sehen gibt mir nichts und ich weiß nicht, was falsch ist .. die Uhr funktioniert auch nicht und ich weiß nicht, was ist falsch mit dem Code .. –
Wenn die Uhr funktioniert nicht, dann reduziere bitte deinen Code, so dass nur noch der Uhrprozess und die erforderlichen Signaldeklarationen übrig sind. Dann wird der Fehler deutlicher. –