mikrocontroller.net

Forum: FPGA, VHDL & Co. Was ist falsch ?=) (kurz)


Autor: gabs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

habe seit einer std die fehlermeldungen:

ERROR:HDLCompiler:806 Line 48: Syntax error near "=".
ERROR:HDLCompiler:9  Line 46: Found 0 definitions for operator "=".
ERROR:HDLCompiler:854  Line 41: Unit <behavior> ignored due to previous 
errors.

ich weiss nicht mehr wirklich weiter...

hilfe ?:/  danke schonmal
entity mehrBitAdder is
    Port ( a : in  unsigned (31 downto 0);
           b : in  unsigned (31 downto 0);
           cout : out  unsigned (31 downto 0);
           controlBit : in  STD_LOGIC);
end mehrBitAdder;

architecture behavior of mehrBitAdder is

begin
    process(controlBit)
begin
if controlBit ="0" then
    cout <= a+b;
  else controlBit ="1" then
    cout <= a-b;
end if;
    end process;
end behavior;

Autor: Muggel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

versuch mal anstatt controlBit ="0" controlBit = '0' zu schreiben. Das 
gleiche gilt dann auch für die "1"

Grüße, Muggel

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gabs schrieb:
> process(controlBit)
Zudem fehlen in der Sensitivliste die Signale a und b...

Autor: Florian V. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gabs schrieb:
> else controlBit ="1" then

Da sollte sicherlich ein "elsif" anstatt ein "else" hin.

Autor: gabs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mh... ist schon weniger aber nun bekomm ich noch diese fehlermeldungen.



ERROR:HDLCompiler:806 Line 48: Syntax error near "=".
ERROR:HDLCompiler:854  Line 41: Unit <behavior> ignored due to previous 
errors.


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

use IEEE.NUMERIC_STD.ALL;

-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity mehrBitAdder is
    Port ( a : in  unsigned (31 downto 0);
           b : in  unsigned (31 downto 0);
           cout : out  unsigned (31 downto 0);
           controlBit : in  STD_LOGIC);
end mehrBitAdder;

architecture behavior of mehrBitAdder is

begin
    process(controlBit,a,b)
begin
if controlBit ='0' then
    cout <= a+b;
(44)  else controlBit ='1' then
    cout <= a-b;
end if;
    end process;
end behavior;

Autor: gabs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
line 48 im fehlerbericht = line 44 im quelltext . hab den text 
eingerückt sry=)

Autor: nicht Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du solltest zwischen = und ' ein Leerzeichen machen!!!!!!!!!!!!!!
(Post von 14:54)

doch Gast

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier mal:
end architecture behavior;

Duke

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie wärs mit elsif statt else in zeile 44

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Duke Scarring schrieb:
> end architecture behavior;
Das ist nicht nötig...
nicht Gast schrieb:
> Du solltest zwischen = und ' ein Leerzeichen machen!!!!!!!!!!!!!!
Auch das ist nicht nötig...

Die Fehlerursache wurde schon genannt:
Florian V. schrieb:
> Da sollte sicherlich ein "elsif" anstatt ein "else" hin.

gabs schrieb:
> mh... ist schon weniger aber nun bekomm ich noch diese fehlermeldungen.
Naja....
Kauf dir mal das Buch "VHDL-Synthese" oder leih es dir aus...

Autor: gabs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ duke  bringt nichts,selbe fehlermeldungen.
@ gast  bringt  ebenso keine veränderung.

... ich verstehs nich. hab den syntax von if-caluses in vhdl ein paar 
mal gegooglet...der scheint richtig...:/

Autor: Muggel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuchs mal so:

begin
    process(controlBit,a,b)
begin
if controlBit ='1' then
    cout <= a-b;
else
    cout <= a+b;
end if;
    end process;
end behavior;

Grüße, Muggel

Autor: gabs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hatte zu anfang elseif benutzt anstatt elsif und mich gewundert wieso 
xilinx es nich als schlüsselwort erkannte...

hat das problem aber nicht gelöst. ...

hab tutorials durchgeschaut und finde :

process (sel, a, b)
begin
  if sel = '1' then
    f <= a;
  else
    f <= b;
  end if;
end process;

sieht nich unbedingt sehr anders zu meinem aus...

Autor: Muggel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, immerhin fehlt die Abfrage hinter dem else, die man eigentlich nur 
dahinschreibt, wenn man mit einem elsif arbeiten möchte.

Hast du es denn mal auspropiert?

Grüße, Muggel

Autor: gabs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hey muggel,

hab deine idee probiert, spuckt aber auch nur fehler aus. hab mir nun 
ein buch gesucht.vllt hilft das weiter... meld mich zurück falls ich 
eine lösung hab=)

lg

Autor: Muggel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi gabs,

ich habs bei mir nochmal durch die ISE laufen lassen und der 
Syntax-Check spuckt mir nen ok aus. Ich poste hier nochmal alles so, wie 
ich es stehen habe, denn soweit müsste das eigentlich hinhauen.

Grüße, Muggel

Autor: user (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
begin
    process(controlBit,a,b)
begin
if controlBit ='0' then
    cout <= a+b;
elseif controlBit ='1' then -- hier elsif!
    cout <= a-b;
end if;
    end process;

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
user schrieb:
> elseif controlBit ='1' then -- hier elsif!
Das gibt für die Simulation aber ein Latch, weil die andern 7 Zustände 
von STD_LOGIC nicht verwendet werden. In der Hardware gibts zum Glück 
aber nur '0' und '1'... ;-)

Autor: pedro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gabs schrieb:
> else controlBit ='1' then


ein else erwartet keinen vergleich, also ohne "controlBit = '1' then"

else machts automatisch wenn vorher if nicht true war.

if var = '1' then
   cout <= a+b;
else --und hier kommt nichts...
   cout <= a-b;
end if;

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.