2016-05-21 11 views
1

Ich versuche, einen 4-Bit-up/down-Modulo10-Zähler zu machen. Button1 - zählt hoch, Button2 - zählt runter. Ich versuche es mit dem Befehl rising_edge zu tun, aber für zwei Signale, die ich nicht definieren kann, wurde eine Taste gedrückt. Also in der nächsten Version des Programms möchte ich Knopf mit if-Anweisung erkennen.VHDL: Vor-/Rückwärtszähler mit zwei Tasten

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

ENTITY counter is 
generic (n:natural :=4); 
port(
button1:  in std_logic; 
button2:  in std_logic; 
clear: in std_logic; 
C        : out std_logic; 
OUT1       : out std_logic_vector(n-1 downto 0) 
); 
END counter; 

ARCHITECTURE beh of counter is 
begin 

p0:process (button1, clear) is 
variable count: unsigned (n-1 downto 0); 
begin 
     if clear = '1' then 
     count:= (others=>'0'); 
       elsif button1='1' then 
       count:=count+1; 
         elsif count=10 then 
           count:=(others=>'0'); 
           C<='1'; 
           else C<='0'; 
         end if; 

      if button2='1' then 
        count:=count-1; 
        if count=0 then 
         count:=(others=>'1'); 
         C<='1'; 
         else C<='0'; 
        end if; 
        end if; 
     OUT1<=std_logic_vector(count); 
end process p0; 
end architecture beh; 

In Quartus Programm wird ohne Fehler kompiliert, aber in der Simulation funktioniert nicht. Ich wäre sehr dankbar für Hilfe. :)

+0

Versuchen 'Hinzufügen in Ihrer Empfindlichkeit Liste button2'. – Maria

+0

Wollen Sie damit programmieren und FPGA? Wenn ja, dann sind Sie weit weg von wo Sie sein müssen. –

+0

Ich habe kein FPGA-Entwicklungskit, also möchte ich für jetzt Simulationen durchführen. Ich habe Button2 zur Empfindlichkeitsliste hinzugefügt, aber die Simulation funktioniert immer noch nicht. – bastik

Antwort

0

Sie sollen ein Taktsignal verwenden rising_edge zu verwenden, habe ich ein Taktsignal in Ihrem Unternehmen:

clock : in std_ulogic; 

Danach sollten Sie sensitivy das Taktsignal und das button2 Signal in Ihrem Prozess setzen, wie dies:

p0:process (button1, button2, clear, clock) is 

Meine Simulation mit diesen Bedingungen korrekt arbeiten, wenn ich drücke button1 die Zählung nach oben geht, wenn ich button2 Zählung drücken geht.

Die gesamte Architektur:

ARCHITECTURE beh of counter is 
begin 

p0:process (button1, button2, clear, clock) is 
variable count: unsigned (n-1 downto 0); 
begin 
     if rising_edge(clock) then 
      if clear = '1' then 
       count:= (others=>'0'); 
      end if; 
      if (button1='1') then 
       count:=count+1; 
      elsif (count=10) then 
       count:=(others=>'0'); 
       C<='1'; 
      else 
       C<='0'; 
      end if; 

      if (button2='1') then 
        count:=count-1; 
      if count=0 then 
        count:=(others=>'1'); 
        C<='1'; 
      else 
      C<='0'; 
      end if; 
      end if; 
     end if; 
     OUT1<=std_logic_vector(count); 
end process p0; 
end architecture beh;