Trying to compile a VHDL code using GHDL but I am getting a weird error

Guest #3318000
Rate this post
useful
not useful
Hi there,

I have written a code of an FSM using VHDL and used GHDL to compile it.

The error that is prompting is

hello.vhdl:25:50: "<=" or ":=" expected instead of then.

I have attached the file of the code.

Here I paste it too:
1
library IEEE;
2
use IEEE.std_logic_1164.all;
3

4
entity ex19 is
5
  Port(
6
    X, SET: in std_logic;
7
    clk:in std_logic;
8
    Y: out std_logic_vector (0 to 1);
9
    Z2: out std_logic);
10
end ex19;
11

12
architecture ex19arc of ex19 is
13

14
  type stateType is(ST0, ST1, ST2);
15
  Signal PS, NS: StateType;
16

17
  begin
18

19
  sync_proc: process (CLK, NS, SET)
20
    
21

22
    Begin
23
      If (SET = '1') then
24
      PS <= ST2;
25
      elseif (rising_edge(clk)) then
26
      PS <= NS;
27
      else PS <= PS;
28
      end if;
29
    End process sync_proc;
30

31
  comb_proc: process (PS,x)
32
  
33
    Begin
34
    case PS is
35
      when ST0 =>
36
        Z2 <= '0';
37
        if (x = '0') then
38
        NS <= ST0;
39
        else NS <= ST1;
40
        end if;
41
      when ST1 =>
42
        Z2 <= '0';
43
        if (x = '0') then
44
        NS <= ST0;
45
        else
46
        NS <= ST2;
47
        end if;
48
      when ST2 =>
49
        if (x = '0') then
50
        NS <= ST0;
51
        Z2 <= '0';
52
        else
53
        NS <= ST2;
54
        Z2 <= 1;
55
        end if;
56
      
57
    end case;
58
    end process;
59

60
  with PS select
61
    Y <=  "00" when ST0,
62
      "10" when ST1,
63
      "11" when ST2,
64
      "00" when others;
65
end ex19arc;
Attached files:
Moderator (Company: Titel) #3318251
Rate this post
useful
not useful
dose wrote:
> elseif  is not a vhdl reserved word
With a editor capable of syntax highlighting (or even up there in the 
posted VHDL code) this can be seen by the different color of the 
keyword.

After having corrected the error and indented the source code there 
remains one big question:
1
      If (SET = '1') then
2
          PS <= ST2;
3
      elsif rising_edge(clk) then
4
          PS <= NS;
5
      else 
6
          PS <= PS;
7
      end if;
Where the heck did you see that kind of descritpion with an else clause 
after a rising_edge?
Moderator (Company: Titel) #3319013
Rate this post
useful
not useful
Ahmed Yousif wrote:
> 1. How can I control the ports using ghdl? Can I change the values of
> the inputs? I need this to test the program.
Just flip your book (the one from the second post) over to the chapter 
"vhdl testbench"...

Its fairly easy: you write a VHDL entity without any ports in the entity 
declaration. Inside this module you invoke your ex19 as a component and 
additionally implement your stimuli signals for that module.

See this (its German, but maybe google translator helps out):
http://www.lothar-miller.de/s9y/archives/80-Hello-World!.html

BTW: you should name the entity not very different than the file.
Its fairly confusing to find a "ex19" in a "hello.vhdl"...

Reply

Please log in before posting.

or

Log in with Google account

Registration is free and takes only a minute.

Register now