2016-05-23 13 views
0

Quartus2V13.0SP1 DE1board VHDLVHDL, FPGA, 7segment LED mit Taster

Ich bin ein Student der Universität.

Professor sagte "nicht verwenden CLOCK und 'Ereignis".

Gestern habe ich umgekehrte onoff auf 7segmentLED getan.

Ich habe diese Frage viele Dinge heute bearbeitet.

Unten Code1 ist richtiges Verhalten.

Und ich möchte es auf Code2 ohne "Ereignis" tun.

--Code1 
library IEEE; 
use ieee.std_logic_1164.all ; 
use IEEE.std_logic_unsigned.all; 

entity increase is 
    port(
     key0 : in std_logic; 
     hex3 : out std_logic_vector(6 downto 0)); 
end increase; 

architecture RTL of increase is 
    signal hex3c : integer range 0 to 9; 
    begin 
     process(key0, hex3c)begin 
      if(key0' event and key0 = '0') then 
       if(hex3c = 9) then 
        hex3c <= 0;  
       else   
        hex3c <= hex3c + 1;    
       end if; 
      end if; 
     end process;   
    process(hex3c) 
    begin 
    case hex3c is 
     when 0 => hex3 <= "1000000"; 
     when 1 => hex3 <= "1111001"; 
     when 2 => hex3 <= "0100100"; 
     when 3 => hex3 <= "0110000"; 
     when 4 => hex3 <= "0011001"; 
     when 5 => hex3 <= "0010010"; 
     when 6 => hex3 <= "0000010"; 
     when 7 => hex3 <= "1111000"; 
     when 8 => hex3 <= "0000000"; 
     when others => hex3 <= "0010000"; 
     end case; 
    end process; 
end RTL; 

und

--Code2 
library IEEE; 
use ieee.std_logic_1164.all ; 
use IEEE.std_logic_unsigned.all; 

entity increase is 
    port(
     key0 : in std_logic; 
     hex3 : out std_logic_vector(6 downto 0)); 
end increase; 

architecture RTL of increase is 
    signal hex3c : integer range 0 to 9; 
    signal prev : std_logic; 
    begin 
     process(key0, hex3c, prev)begin 
      if(key0 = '0' and prev = '0')then 
       if(hex3c = 9) then 
        hex3c <= 0; 
        prev <= '1'; 
       else   
        hex3c <= hex3c + 1; 
        prev <= '1'; 
       end if; 
      elsif(key0 = '1' and prev = '1')then 
       prev <= '0'; 
      end if; 
     end process;   
    process(hex3c) 
    begin 
    case hex3c is 
     when 0 => hex3 <= "1000000"; 
     when 1 => hex3 <= "1111001"; 
     when 2 => hex3 <= "0100100"; 
     when 3 => hex3 <= "0110000"; 
     when 4 => hex3 <= "0011001"; 
     when 5 => hex3 <= "0010010"; 
     when 6 => hex3 <= "0000010"; 
     when 7 => hex3 <= "1111000"; 
     when 8 => hex3 <= "0000000"; 
     when others => hex3 <= "0010000"; 
     end case; 
    end process; 
end RTL; 

Bitte geben Sie mir, wie dieses Problem zu lösen.

Wirklich können wir das realisieren?

+0

Verwendet "keine Uhr und' 'event'' bedeutet, dass keine Uhr nicht verwendet werden soll oder bedeutet "' rising_edge() ', was besser ist als'' event' '. – Paebbels

+0

Vielleicht kann ich rising_edge und falling_edge in dieser Zuweisung nicht verwenden. Vielleicht ist es auch in dieser Aufgabe nicht in Ordnung. – rararoland

Antwort

0

Sie wollen also einen asynchronen Counter oder suchen Sie nach rising_edge (Clock) anstatt nach if (Clock = '1' AND clock'event)?

+0

Könnte Professor nicht steigende und fallende Kante erlauben. Asynchrone Zähler bedeutet, verwenden Sie Uhr? – rararoland

+0

Mit asynchron ich meinte ohne eine (System-) Uhr hätte ich rein kombinatorisch gesagt. – pietervanderstar

+0

Es tut mir so leid. rein kombinatorisch bedeutet "vorheriges Schlüsselsignal" und "im Moment Schlüsselsignal" richtig? wie Code2? Ja, ich möchte die steigende Flanke und die fallende Flanke fangen, ohne "Clock", "Event", "Rising_edge" und "Falling_edge". Ich habe verstanden, dass es die Aufgabe für uns Student vom Professor ist. – rararoland

0

Ich habe kein Evaluierungsboard in meiner Nähe, um Ihren Code zu testen, aber das Einzige, was für mich ein Problem sein könnte, ist Ihre Empfindlichkeitsliste. Versuchen Sie, count darin zu setzen, damit Ihre Anzeige bei jeder Änderung aktualisiert wird.

Ein anderer Vorschlag, den ich Ihnen geben kann, ist, jeden möglichen Fall - dh. Fügen Sie die else-Anweisung hinzu - in Ihrem Prozess, wenn Sie kombinatorische Prozesse verwenden.

Lassen Sie mich jetzt, wenn es etwas änderte.

+0

Danke. Ich habe es unter dem Code versucht. Aber nichts hat sich geändert. Prozess (key0, count) beginne – rararoland

+0

Ich denke, steigende Flanke Teil oder Anzahl + 1 ist falsch, aber ich weiß nicht, wie es ohne CLOCK und 'Ereignis zu beheben. – rararoland

+0

Ich meinte nicht, die case-Anweisung in den 'else'-Teil zu schreiben. Aber um es nach deiner letzten elsif-Erklärung zu erklären. Wie auch immer, hast du schon mal versucht es zu simulieren? –