-- VHDL code position: p257_ex8_37_experiment8_3_ballctrl
-- Note : This is code file of tennis play
-- See Also: example 8_35(top module), 8_36, 8_37, 8_38, 8_39, 8_40, 8_41, 8_42
-- Debug : no debug
---------------------------------------------------------------------------------
--总控制模块
library ieee;
use ieee.std_logic_1164.all;
entity ballctrl is
port ( clr : in std_logic; -- 系统复位
bain : in std_logic; -- 左球拍
bbin : in std_logic; -- 右球拍
serclka : in std_logic; -- 左拍准确接球或发球
serclkb : in std_logic; -- 右拍准确接球或发球
clk : in std_logic; -- 乒乓球灯移动时钟
bdout : out std_logic; -- 球拍接球脉冲
serve : out std_logic; -- 发球状态信号
serclk : out std_logic; -- 球拍正确接球信号
ballclr : out std_logic; -- 乒乓球灯清零信号
ballen : out std_logic -- 乒乓球灯使能
);
end entity ballctrl;
architecture ful of ballctrl is
signal bd : std_logic;
signal ser : std_logic;
begin
bd <= bain OR bbin;
ser <= serclka OR serclkb;
serclk <= ser; -- 球拍正确接球信号
bdout <= bd; -- 球拍接球脉冲
process ( clr, clk, bd )
begin
if ( clr = '1' ) then -- 系统复位
serve <= '1'; -- 系统处在发球状态
ballclr <= '1'; -- 乒乓球灯清零
else -- 系统正常
if( bd = '1' ) then -- 球拍发球或接球时
ballclr <= '1'; -- 乒乓球灯清零
if ( ser = '1' ) then -- 球拍发球或准确接球
ballen <= '1'; -- 乒乓球灯使能允许
serve <= '0'; -- 系统处在接球状态
else -- 接球
ballen <= '0';
-- 乒乓球灯被禁止
serve <= '1'; -- 系统处在发球状态
end if;
else -- 没发球或接球时
ballclr <= '0'; -- 乒乓球灯不清零
end if;
end if;
end process;
end architecture ful ;