Background
VHDL Implementation on an Altera DE1 FPGA:
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity ERSPrac3 is port ( CLOCK_50 : IN std_logic; SW : in std_logic_vector(9 DOWNTO 0); LEDR : out std_logic_vector(9 DOWNTO 0); LEDG : out std_logic_vector(7 DOWNTO 0); KEY : in std_logic_vector(3 DOWNTO 0); HEX0 : OUT std_logic_vector(6 DOWNTO 0); HEX1 : OUT std_logic_vector(6 DOWNTO 0); HEX2 : OUT std_logic_vector(6 DOWNTO 0); HEX3 : OUT std_logic_vector(6 DOWNTO 0) ) ; end ERSPrac3; architecture behaviour of ERSPrac3 is type stateType is (S_HoldR, S_HoldL, RL1, RL2, RL3, RL4, RL5, RL6, RL7 , RR1,RR2,RR3,RR4,RR5,RR6, RR7, WINL, WINR); signal currentState : stateType; signal nextState: stateType; signal clk_1 : std_logic; signal scoreL : unsigned(3 DOWNTO 0) := "0000"; signal scoreR : unsigned(3 DOWNTO 0) := "0000"; signal outvector : std_logic_vector(7 DOWNTO 0); begin clock_gen : process(CLOCK_50) variable count : natural; begin if rising_edge(CLOCK_50) then clk_1 <= '0'; count := count + 1; if count = 12500000 then clk_1 <= '1'; count := 0; end if; end if; end process; statereg : process(clk_1) -- state: begin -- state register logic stuff if (SW(9) = '1') then currentState <= S_HoldR; elsif (rising_edge(clk_1) and SW(9) = '0') then currentState <= nextState; end if; end process; next_statelogic: process (currentState) begin case currentState is when S_HoldL => if (KEY(3) = '1') then nextState <= RR1; else nextState <= S_HoldL; end if; when S_HoldR => if (KEY(0) = '1') then nextState <= RL1; else nextState <= S_HoldR; end if; when RL1 => nextState <= RL2; when RL2 => nextState <= RL3; when RL3 => nextState <= RL4; when RL4 => nextState <= RL5; when RL5 => nextState <= RL6; when RL6 => nextState <= RL7; when RL7 => if (KEY(3) = '0') then nextState <= S_HoldL; else -- SCORE INCREASE, SERVE FROM RIGHT AGAIN, RIGHT PLAYER WINS A POINT nextState <= WINR; end if; when RR1 => nextState <= RR2; when RR2 => nextState <= RR3; when RR3 => nextState <= RR4; when RR4 => nextState <= RR5; when RR5 => nextState <= RR6; when RR6 => nextState <= RR7; when RR7 => if (KEY(0) = '0') then nextState <= S_HoldR; else -- SCORE INCREASE LEFT PLAYER, SERVE FROM RIGHT AGAIN nextState <= WINL; end if; when WINL => nextState <= S_HoldR; when WINR => nextState <= S_HoldR; scoreR <= scoreR + 1; end case; end process; out_logic : process (currentState) begin LEDR(9 DOWNTO 0) <= (others => '0'); case currentState is when S_HoldR => outvector <= "00000001"; when S_HoldL => outvector <= "10000000"; when RL1 => outvector <= "00000010"; when RL2 => outvector <= "00000100"; when RL3 => outvector <= "00001000"; when RL4 => outvector <= "00010000"; when RL5 => outvector <= "00100000"; when RL6 => outvector <= "01000000"; when RL7 => outvector <= "10000000"; when RR1 => outvector <= "01000000"; when RR2 => outvector <= "00100000"; when RR3 => outvector <= "00010000"; when RR4 => outvector <= "00001000"; when RR5 => outvector <= "00000100"; when RR6 => outvector <= "00000010"; when RR7 => outvector <= "00000001"; when WINL => outvector <= "11111111"; LEDR(9 DOWNTO 0) <= (others => '1'); when WINR => outvector <= "11111111"; LEDR(9 DOWNTO 0) <= (others => '1'); end case; LEDG(7 DOWNTO 0) <= outvector(7 DOWNTO 0); end process; score_disp : process(clk_1) begin if (rising_edge(clk_1)) then CASE scoreL IS WHEN "0000"=>HEX3<="1000000"; WHEN "0001"=>HEX3<="1111001"; WHEN "0010"=>HEX3<="0100100"; WHEN "0011"=>HEX3<="0110000"; WHEN "0100"=>HEX3<="0011001"; WHEN "0101"=>HEX3<="0010010"; WHEN "0110"=>HEX3<="0000010"; WHEN "0111"=>HEX3<="1111000"; WHEN "1000"=>HEX3<="0000000"; WHEN "1001"=>HEX3<="0011000"; WHEN OTHERS=>HEX3<="1111111"; END CASE; CASE scoreR IS WHEN "0000"=>HEX0<="1000000"; WHEN "0001"=>HEX0<="1111001"; WHEN "0010"=>HEX0<="0100100"; WHEN "0011"=>HEX0<="0110000"; WHEN "0100"=>HEX0<="0011001"; WHEN "0101"=>HEX0<="0010010"; WHEN "0110"=>HEX0<="0000010"; WHEN "0111"=>HEX0<="1111000"; WHEN "1000"=>HEX0<="0000000"; WHEN "1001"=>HEX0<="0011000"; WHEN OTHERS=>HEX0<="1111111"; END CASE; HEX1 <= (others => '1'); HEX2 <= (others => '1'); end if; end process; end behaviour;
Can you post the contraints file ?
ReplyDelete