記事一覧

ルーレットを作る ~ 10進カウンタ

2013年06月15日(土)21時29分

ルーレットで使用する10進カウンタをつくります。
roullet.vhd

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity ROULLET is
    port(
        DIV_CLK    : in  std_logic;
        RESET      : in  std_logic;
        STOP_IN    : in  std_logic;    -- ルーレットのストップ信号(入力)
        STOP_OUT   : out std_logic;    -- ルーレットが止まっているかどうか
        HIT        : out std_logic_vector(3 downto 0)    -- ルーレットで出た数字
    );
end ROULLET;

architecture RTL of ROULLET is

signal HIT_TMP    : std_logic_vector(3 downto 0);    

begin
    process(DIV_CLK, RESET)
    begin
        if (RESET = '0') then
            HIT_TMP <= (others => '0');
        elsif (DIV_CLK'event and DIV_CLK = '0') then
            if (STOP_IN = '0') then    -- STOP_IN(=ENABLE)
                if (HIT_TMP = "1001") then
                    HIT_TMP <= (others => '0');
                else
                    HIT_TMP <= HIT_TMP + 1;
                end if;
            end if;
        end if;
    end process;
    
    HIT <= HIT_TMP;
    STOP_OUT <= STOP_IN;

end RTL;

動作の概要
DIV_CLKの周期で0-9までカウントアップ
STOP_INに1が入った時のカウント数字をHITとして出力

STOP_OUTはルーレットが止まっているかどうかの状態出力です。リーチ、ビンゴの判定に使用します。