記事一覧

ルーレットをつくる ~ ビンゴアシストの作成

2013年06月21日(金)19時13分

リーチの時にビンゴのタイミングでLEDが点灯するようにします。
目押しができないので、つくってみました。ズルと言われれば、それまでですが(^_^;)

reach.vhd を利用しています。

bingo_ast.vhd

-- BINGO ASSIST
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity BINGO_AST is
    port(
        STOP1       : in  std_logic;    -- ルーレットが 0:動 1:止
        STOP2       : in  std_logic;    -- ルーレットが 0:動 1:止
        STOP3       : in  std_logic;    -- ルーレットが 0:動 1:止
        HIT1        : in  std_logic_vector(3 downto 0);
        HIT2        : in  std_logic_vector(3 downto 0);
        HIT3        : in  std_logic_vector(3 downto 0);
        BINGO_ASSIST: out std_logic    -- BINGO_ASSIST
    );
end BINGO_AST;

architecture RTL of BINGO_AST is

component REACH
    port(
        STOP1       : in  std_logic;    -- ルーレットが 0:動 1:止
        STOP2       : in  std_logic;    -- ルーレットが 0:動 1:止
        HIT1        : in  std_logic_vector(3 downto 0);
        HIT2        : in  std_logic_vector(3 downto 0);
        REACH_STATUS: out std_logic    -- リーチ状態 0:× 1:○
    );
end component;

signal REACH_TMP        : std_logic; -- リーチ 0:× 1:○
signal BINGO_TMP        : std_logic; -- ビンゴ 0:× 1:○
signal BINGO_ASSIST_TMP : std_logic;
signal REACH_STATUS     : std_logic_vector(2 downto 0);

begin
    -- どれかの組合せがリーチの時 = リーチ
    REACH_TMP <= REACH_STATUS(0) or REACH_STATUS(1) or REACH_STATUS(2);

    -- 全ての組合せがリーチの時 = ビンゴ
    BINGO_TMP <= REACH_STATUS(0) and REACH_STATUS(1) and REACH_STATUS(2);

    process(BINGO_TMP,REACH_TMP,HIT1,HIT2,HIT3)
    begin
        if(BINGO_TMP = '1') then --ビンゴの時はビンゴアシストのLEDは消す
            BINGO_ASSIST_TMP <= '0';
        else
            if (REACH_TMP = '1' and HIT1 = HIT2 and HIT2 = HIT3) then
                BINGO_ASSIST_TMP <= '1';
            else
                BINGO_ASSIST_TMP <= '0';
            end if;
        end if;
    end process;
    
    -- LEDは負論理なので、反転
    BINGO_ASSIST <= not BINGO_ASSIST_TMP;
    
    U1 : REACH    port map (STOP1, STOP2, HIT1, HIT2, REACH_STATUS(0)); 
    U2 : REACH    port map (STOP2, STOP3, HIT2, HIT3, REACH_STATUS(1)); 
    U3 : REACH    port map (STOP3, STOP1, HIT3, HIT1, REACH_STATUS(2));     
    
end RTL;