3

私は VHDL の初心者で、Altera Cyclone II でかなり基本的なことを行う方法を理解しようとしています。FPGA には 4 つのプッシュ ボタンがあります。そのうちの 2 つは、選択したレジスタ (0 ~ F) を増減するようにプログラムする必要があります。そのレジスタ。これが私がこれまでに持っているものです:

entity raminfr is
    port (
        clk : in std_logic;
        we : in std_logic;
        a : in unsigned(3 downto 0);
        di : in unsigned(7 downto 0);
        do : out unsigned(7 downto 0)
    );
end raminfr;

architecture rtl of raminfr is
type ram_type is array (0 to 15) of unsigned(7 downto 0);
signal RAM : ram_type;
signal read_a : unsigned(3 downto 0);

begin

process (clk)
begin
    if rising_edge(clk) then
        if we = '1' then
            RAM(to_integer(a)) <= di;
        end if;
        read_a <= a;
    end if;
end process;

do <= RAM(to_integer(read_a));

end rtl;

押しボタンのプログラミング方法に関する基本的なサンプル コードを提供してもらえますか?

4

1 に答える 1

11

クロックされた で簡単なエッジ検出を行ってprocessから、立ち上がりエッジに反応するだけです。例えば:

signal lastButtonState    : std_logic := '0';

process(clk)
begin
  if(rising_edge(clk)) then
    if(buttonState = '1' and lastButtonState = '0') then      --assuming active-high
      --Rising edge - do some work...
    end if;
    lastButtonState <= buttonState;
  end if;
end process;

ただし、すべてを正しく機能させるには、プッシュボタンが何らかの方法でデバウンスされていることを確認する必要があります。多くの開発ボードには、このためのハードウェア RC 回路がありますが、それ以外の場合は、コードでそれを行う必要があります (それほど難しいことではありません。ネット上にはこの例がたくさんあるはずです)。

于 2013-01-24T07:31:08.383 に答える