Intel® Quartus® Prime Software
Intel® Quartus® Prime Design Software, Design Entry, Synthesis, Simulation, Verification, Timing Analysis, System Design (Platform Designer, formerly Qsys)
Announcements
Intel Support hours are Monday-Fridays, 8am-5pm PST, except Holidays. Thanks to our community members who provide support during our down time or before we get to your questions. We appreciate you!

Need Forum Guidance? Click here
Search our FPGA Knowledge Articles here.
15547 Discussions

Can someone please help me. I cant seem to figure out what is causing this error: Error (10500): VHDL syntax error at mult_control_ex.vhd(58) near text "END"; expecting "begin", or a declaration statement

JRamo9
Beginner
871 Views

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.numeric_std.all;

 

entity mult_control is port(

 

      clk, reset_a, start : in std_logic;

      count : in unsigned (1 DOWNTO 0);

      input_sel, shift_sel : out unsigned(1 DOWNTO 0);

      state_out : out unsigned(2 DOWNTO 0);

      done, clk_ena, sclr_n : out std_logic

   );

end mult_control;

 

-architecture logic of mult_control is

 

   type state_type is (idle, lsb, mid, msb, calc_done, err);

 

   signal current_state: state_type;

   signal next_state: state_type;

 

 begin

 

   process (clk, reset_a) begin

      if reset_a = '1'; then

         current_state <= idle;

      else rising_edge(clk) then

         current_state <= next_state;

      end if;

   end process;

 

 

   process (current_state, start, count) begin

 

      case current_state is

         when idle =>

            if start = '1' then

               next_state <= lsb;

            else

               next_state <= idle;

            end if;

 

         when lsb =>

            if start = '0' then

            if (count = "00") then

               next_state <= mid;

            else

               next_state <= err;

            end if;

 

         when mid =>

            if start = '0' then

            if (count = "01") then

               next_state <= mid;

            elsif start = '0' then

            if (count = "10") then

               next_state <= msb;

            else

               next_state <= err;

            end if;

 

         when msb =>

            if start = '0' then

            if (count = "11") then

               next_state <= calc_done;

            else

               next_state <= err;

            end if;

 

         when calc_done =>

            if start = '0' then

               next_state <= idle;

            else

               next_state <= err;

            end if;

 

         when err =>

            if start = '0' then

               next_state <= err;

            else

               next_state <= lsb;

            end if;

         end case;

   end process;

 

0 Kudos
2 Replies
SAR
Novice
229 Views

HI,

 

First of all you can maintain some coding standards or at least by giving spacing /Tab which will help in eliminating many errors.

 

I can see many syntax error few are listed below

 

Statements Syntax error

  • -architecture logic of mult_control is -> -
  • if reset_a = '1' ; then -> ;
  • else rising_edge(clk) then -> else or elsif
  • architecture is not ended. ->No architecture logic;
  • few Conditional Control are missing end statements by having spacing/Tab we can eliminate such.

 

KhaiChein_Y_Intel
229 Views

Hi JRamo9,

Kindly check if the functionality of the edited version is correct

 

library IEEE;

 

use IEEE.std_logic_1164.all;

 

use IEEE.numeric_std.all;

 

 

 

entity mult_control is port(

 

 

 

   clk, reset_a, start : in std_logic;

 

   count : in unsigned (1 DOWNTO 0);

 

   input_sel, shift_sel : out unsigned(1 DOWNTO 0);

 

   state_out : out unsigned(2 DOWNTO 0);

 

   done, clk_ena, sclr_n : out std_logic

 

  );

 

end mult_control;

 

 

 

architecture logic of mult_control is

 

 

 

  type state_type is (idle, lsb, mid, msb, calc_done, err);

 

 

 

  signal current_state: state_type;

 

  signal next_state: state_type;

 

 

 

 begin

 

 

 

  process (clk, reset_a) begin

 

   if reset_a = '1' then

 

     current_state <= idle;

 

   elsif rising_edge(clk) then

 

     current_state <= next_state;

 

   end if;

 

  end process;

 

 

 

 

 process (current_state, start, count) begin

 

 

 

   case current_state is

 

     when idle =>

 

      if start = '1' then

 

        next_state <= lsb;

 

      else

 

        next_state <= idle;

 

      end if;

 

 

 

     when lsb =>

 

      if start = '0' then

 

      if (count = "00") then

 

        next_state <= mid;

 

      else

 

        next_state <= err;

 

end if;

end if;

 

 

 

     when mid =>

 

      if start = '0' then

 

if (count = "01") then

 

next_state <= mid;

 

elsif (count = "10") then

 

next_state <= msb;

else

 

next_state <= err;

end if;

      end if;

 

 

 

     when msb =>

 

      if start = '0' then

 

if (count = "11") then

 

next_state <= calc_done;

 

else

 

next_state <= err;

 

end if;

      end if;

 

 

 

     when calc_done =>

 

      if start = '0' then

 

        next_state <= idle;

 

      else

 

        next_state <= err;

 

      end if;

 

 

 

     when err =>

 

      if start = '0' then

 

        next_state <= err;

 

      else

 

        next_state <= lsb;

 

      end if;

 

     end case;

 

  end process;

end logic;

 

Thanks

Reply