Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
13 years ago

Need help fixing errors!

Error (1): VHDL syntax error at Test.vhd(46) near text "WITH"; expecting "end", or "(", or an identifier ("with" is a reserved keyword), or a sequential statement

Error (2): VHDL syntax error at Test.vhd(47) near text "WHEN"; expecting ";"

Error (3): VHDL syntax error at Test.vhd(65) near text "WITH"; expecting "end", or "(", or an identifier ("with" is a reserved keyword), or a sequential statement

Error (4): VHDL syntax error at Test.vhd(66) near text "WHEN"; expecting ";"

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.all;

USE IEEE.STD_LOGIC_ARITH.all;

USE IEEE.STD_LOGIC_UNSIGNED.all;

ENTITY Test IS

PORT(

SW : IN STD_LOGIC_VECTOR(17 DOWNTO 0);

CLOCK : IN STD_LOGIC;

RESET : IN STD_LOGIC;

LOCKIN : IN STD_LOGIC;

LED : OUT STD_LOGIC_VECTOR(1 DOWNTO 0)

);

END Test;

ARCHITECTURE a OF Test IS

TYPE STATE_TYPE IS (

RESET_GAME,

XTURN,

XCHECK,

XWIN,

OTURN,

OCHECK,

OWIN

);

SIGNAL STATE : STATE_TYPE;

SIGNAL SWX : STD_LOGIC_VECTOR(8 DOWNTO 0);

SIGNAL SWO : STD_LOGIC_VECTOR(8 DOWNTO 0);

BEGIN

SWX <= (SW(8) & SW(7) & SW(6) & SW(5) & SW(4) & SW(3) & SW(2) & SW(1) & SW(0));

SWO <= (SW(17) & SW(16) & SW(15) & SW(14) & SW(13) & SW(12) & SW(11) & SW(10) & SW(9));

PROCESS (STATE,CLOCK,RESET,SWX,SWO)

BEGIN

IF (RESET='1') then

STATE <= RESET_GAME;

ELSIF (RISING_EDGE(CLOCK)) then

CASE state IS

WHEN RESET_GAME =>

LED(0) <= '0';

LED(1) <= '0';

WHEN XTURN =>

IF (LOCKIN='1') THEN

STATE <= XCHECK;

ELSE

STATE <= XTURN;

END IF;

WHEN XCHECK =>

WITH SWX SELECT <-------error 1 here

STATE <= XWIN WHEN SWX="000000111", <-------error 2 here

XWIN WHEN SWX="000111000",

XWIN WHEN SWX="111000000",

XWIN WHEN SWX="001001001",

XWIN WHEN SWX="010010010",

XWIN WHEN SWX="100100100",

XWIN WHEN SWX="100010001",

XWIN WHEN SWX="001010100",

OTURN WHEN OTHERS;

WHEN XWIN =>

LED(1) <= '1';

WHEN Oturn =>

IF (LOCKIN='1') THEN

STATE <= OCHECK;

ELSE

STATE <= XTURN;

END IF;

WHEN OCHECK =>

WITH SWO SELECT <-------error 3 here

STATE <= OWIN WHEN SWO="000000111", <-------error 4 here

OWIN WHEN SWO="000111000",

OWIN WHEN SWO="111000000",

OWIN WHEN SWO="001001001",

OWIN WHEN SWO="010010010",

OWIN WHEN SWO="100100100",

OWIN WHEN SWO="100010001",

OWIN WHEN SWO="001010100",

XTURN WHEN OTHERS;

WHEN OWIN =>

LED(0) <= '1';

END CASE;

END IF;

END PROCESS;

END a;

1 Reply

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Hi,

    You can only use WITH outside a process. Use CASE instead.

    Mark.