2016-05-21 46 views
1

4ビットアップ/ダウンモジュロ10カウンタを作成しようとしています。 Button1 - カウントアップ、Button2 - カウントダウン。私はrising_edgeコマンドを使用してそれをしようとしているが、私はボタンで押されたと定義することはできません2つの信号。ですから、プログラムの次のバージョンではif文を使ってボタンを検出したいと思います。VHDL:2つのボタンを持つアップ/ダウンカウンタ

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; 

Quartusプログラムはエラーなしでコンパイルされますが、シミュレーションでは機能しません。 私は助けに非常に素晴らしいだろう。あなたは同様に、クロック信号とbutton2を信号sensitivyあなたのプロセスに入れなければならない。この後

clock : in std_ulogic; 

::)

+0

は、あなたのセンシティビティリストに 'button2'を追加してみてください。 – Maria

+0

これをプログラムし、FPGAに取り込もうとしていますか?そうであれば、あなたはあなたが必要とするところから遠く離れています。 –

+0

私はFPGA開発キットを持っていないので、今はシミュレーションを実行したいと思います。私は感度リストにbutton2を追加しましたが、シミュレーションはまだ動作しません。 – bastik

答えて

0

あなたはrising_edgeを使用するためにクロック信号を使用する必要があり、私はあなたのエンティティにクロック信号を作成しましたこの条件でのシミュレーションは正しく動作します。私がbutton1を押すとカウントが上がり、button2のカウントが下がってしまいます。

完全なアーキテクチャ:

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; 
関連する問題