www.mikrocontroller.net

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


Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
------------------------------------------------------------------------

Autor: Hans-Ulrich R. (Gast)
Datum:

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

Autor: Chris (Gast)
Datum:

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

Autor: Joerg Wolfram (joergwolfram)
Datum:

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

elsif (rising_edge(clk)) then

Gruß Jörg

Autor: Chris (Gast)
Datum:

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

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.