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