Intel® Quartus® Prime Software
Intel® Quartus® Prime Design Software, Design Entry, Synthesis, Simulation, Verification, Timing Analysis, System Design (Platform Designer, formerly Qsys)

Need help fixing errors!

Altera_Forum
Honored Contributor II
1,037 Views

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;
0 Kudos
1 Reply
Altera_Forum
Honored Contributor II
353 Views

Hi, 

 

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

 

Mark.
0 Kudos
Reply