Forum: FPGA, VHDL & Co. rising_edge(clk) ---> ERROR


von Chris (Gast)


Lesenswert?

ModelSim XE Compiler meldet Error Zeile 21 @ elsif rising_edge(clk) then 
... Meldung: "No feasible entries for subprogram rising_edge". Auf 
Deutsch: "Keine praktikablen Eintragungen für das Unterprogramm 
rising_edge()", die jedoch als Funktion in ieee.std_logic_1164.all 
implementiert und eingebunden ist ?! Meldung erscheint auch wenn 
rising_edge durch ~Äquivalent "else  clk'event and clk = '1' then ..." 
ersetzt wurde.
Möglicherweise hat jemand einen Rat - Danke! Chris


library IEEE;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
------------------------------------------------------------------------
entity kreuztisch is
    port(clk,rst,el,er,eu,eo,tarot    :in bit;   -- std_logic
         al,ar,au,ao                  :out bit); --std_logic
end kreuztisch;
------------------------------------------------------------------------
architecture verhaltensbeschreibung of kreuztisch is

   type zv_type is (init, abfangen, bereit, nach_or, nach_u, nach_l);
   signal zv,zvneu : zv_type;
   begin
   ---------------------------------------------------------------------
   taktung: process (clk,rst)
       begin
           if (rst='1') then
              zv<=init;
           elsif rising_edge(clk) then
              zv<=zvneu;
           end if;
       end process;
   ---------------------------------------------------------------------
   automat: process (zv,tarot,el,er,eu,eo)
       begin
           case zv is
               when init =>
                   if (tarot='0') then
                       al<='0';
                       ar<='0';
                       au<='0';
                       ao<='0';
                       zvneu<=init;
                   else
                       if (el='0') then
                           al<='1';
                           ar<='0';
                           au<='0';
                           ao<='0';
                           zvneu<=init;
                       else
                          if (eu='0') then
                              al<='0';
                              ar<='0';
                              au<='1';
                              ao<='0';
                              zvneu<=init;
                          else al<='0';
                               ar<='0';
                               au<='0';
                               ao<='0';
                               zvneu<=abfangen;
                          end if;
                       end if;
                   end if;
               when abfangen =>
                   if (tarot='1') then
                       al<='0';
                       ar<='0';
                       au<='0';
                       ao<='0';
                       zvneu<=abfangen;
                    else al<='0';
                         ar<='0';
                         au<='0';
                         ao<='0';
                         zvneu<=bereit;
                    end if;
                when bereit =>
                    if (tarot='0') then
                       al<='0';
                       ar<='0';
                       au<='0';
                       ao<='0';
                       zvneu<=bereit;
                    else al<='0';
                         ar<='0';
                         au<='0';
                         ao<='0';
                         zvneu<=nach_or;
                    end if;
                when nach_or =>
                    if (eo='0') then
                        if (er='0') then
                            al<='0';
                            ar<='1';
                            au<='0';
                            ao<='1';
                            zvneu<=nach_or;
                        else al<='0';
                             ar<='0';
                             au<='0';
                             ao<='1';
                             zvneu<=nach_or;
                        end if;
                    else
                        if (er='0') then
                            al<='0';
                            ar<='1';
                            au<='0';
                            ao<='0';
                            zvneu<=nach_or;
                        else al<='0';
                             ar<='0';
                             au<='0';
                             ao<='0';
                             zvneu<=nach_u;
                        end if;
                    end if;
                when nach_u =>
                    if (eu='0') then
                        al<='0';
                        ar<='0';
                        au<='1';
                        ao<='0';
                        zvneu<=nach_u;
                    else al<='0';
                         ar<='0';
                         au<='0';
                         ao<='0';
                         zvneu<=nach_l;
                    end if;
                when nach_l =>
                    if (el='0') then
                        al<='1';
                        ar<='0';
                        au<='0';
                        ao<='0';
                        zvneu<=nach_l;
                    else al<='0';
                         ar<='0';
                         au<='0';
                         ao<='0';
                         zvneu<=bereit;
                    end if;
           end case;
   end process;
   ---------------------------------------------------------------------
end verhaltensbeschreibung;
------------------------------------------------------------------------

von Hans-Ulrich R. (Gast)


Lesenswert?

Ist das nicht "raising_edge()", also mit 'a'?

von Chris (Gast)


Lesenswert?

rising_edge ist stimmt schon, könnte das ggf. was mit dem Datentyp "bit" 
zu tun haben ?

von Joerg W. (joergwolfram)


Lesenswert?

ich bin mir nicht sicher aber ich denke die Bedingung muss in Klammern 
stehen. also

elsif (rising_edge(clk)) then

Gruß Jörg

von Chris (Gast)


Lesenswert?

Hallo Jörg ! Danke für den Tip, doch daran liegt es leider auch nicht.

von Chris (Gast)


Lesenswert?

clk MUSS vom Typ: STD_LOGIC sein !

entity kreuztisch is
    port(clk,rst,el,er,eu,eo,tarot    :in std_logic;
         al,ar,au,ao                  :out std_logic);
end kreuztisch;

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.