2016-03-23 4 views
1

Ich habe einen einfachen Zähler von 0 bis 255 in VHDL implementiert. Es funktioniert wie erwartet auf der FPGA-Platine, aber wenn ich es in Modelsim simuliere, wird der Zähler nicht hinzugefügt, wenn ich erzwinge key(0) zu ändern. Irgendwelche Gedanken?Zähler wird nicht inkrementiert, wenn Signaländerungen gesteuert werden

library IEEE; 
use ieee.std_logic_1164.all; 
use ieee.numeric_std.all; 

ENTITY PROC_TEST  IS 
    PORT(
    CLOCK_50: IN STD_LOGIC; 
    KEY: IN STD_LOGIC_VECTOR(3 DOWNTO 0); 
    LEDR: OUT STD_LOGIC_VECTOR(9 DOWNTO 0) 
    ); 
END PROC_TEST; 

ARCHITECTURE MAIN OF PROC_TEST IS 
    SIGNAL COUNTER: INTEGER RANGE 0 TO 255; 
BEGIN 

    LEDR(7 DOWNTO 0)<= STD_LOGIC_VECTOR (TO_UNSIGNED(COUNTER,8)); 

    PROCESS (CLOCK_50) 
    BEGIN 
    IF (KEY(0)'EVENT AND KEY(0) = '0')THEN 
     COUNTER<=COUNTER + 1; 
    END IF; 
    END PROCESS; 
END MAIN; 
+0

Ich verschönerte Ihren Code und verbesserte Ihren Text, hoffe, es war in Ordnung. Laden Sie die Seite einfach in Ihren Browser oder klicken Sie auf den Hinweis über Ihrer Frage. –

+0

danke, ich konnte die Änderungen nicht sehen, die Sie gemacht haben. – luffyKun

Antwort

1

Das Signal KEY(0) fehlt in der Prozessempfindlichkeitsliste. Dies wird normalerweise durch eine Warnung angezeigt, wenn Sie Ihren Code für einen FPGA synthetisieren.

Verfahren nur ausgeführt/fortgesetzt:

  • einmal nach dem Simulationsstart
  • , wann immer eines der Signale in der Empfindlichkeits Liste ändert.

So kann Ihr Prozess wird nur ausgeführt, wenn CLOCK_50 verändert sich, aber nicht, wenn Sie eine Änderung im Simulator auf KEY(0) erzwingen. So müssen Sie Ihren Code ändern: Nach dieser Änderung

PROCESS (KEY(0)) 

, die Simulationsausgabe ist mit einem Takt von 10 MHz folgt angewendet KEY(0):

simulation output


Weitere Anmerkungen:

Wie Sie in meinem Simulationsbild sehen, sind die Signale LEDR(9) und LEDR(8) haben einen undefinierten Wert ('U'). Dies geschieht, weil Sie vergessen haben, sie in Ihrer Architektur zuzuordnen. Dies sollte auch durch Synthese angezeigt werden. Oft ist der Synthesizer zuweisen nur ‚0‘ (logisch niedrig) mit den Ausgängen, die sich explizit mit erreicht werden kann:

LEDR(9 downto 8) <= "00"; 

Die anderen Eingangssignale haben einen nicht definierten Wert in meiner Simulation, da diese nicht benutzte Eingänge sind, und ich habe nicht hat irgendeine Wellenform darauf angewendet.