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


von gabs (Gast)


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
1
entity mehrBitAdder is
2
    Port ( a : in  unsigned (31 downto 0);
3
           b : in  unsigned (31 downto 0);
4
           cout : out  unsigned (31 downto 0);
5
           controlBit : in  STD_LOGIC);
6
end mehrBitAdder;
7
8
architecture behavior of mehrBitAdder is
9
10
begin
11
    process(controlBit)
12
begin
13
if controlBit ="0" then
14
    cout <= a+b;
15
  else controlBit ="1" then
16
    cout <= a-b;
17
end if;
18
    end process;
19
end behavior;

von Muggel (Gast)


Lesenswert?

Hi,

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

Grüße, Muggel

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

von Florian V. (Gast)


Lesenswert?

gabs schrieb:
> else controlBit ="1" then

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

von gabs (Gast)


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.


1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
4
use IEEE.NUMERIC_STD.ALL;
5
6
-- Uncomment the following library declaration if instantiating
7
-- any Xilinx primitives in this code.
8
--library UNISIM;
9
--use UNISIM.VComponents.all;
10
11
entity mehrBitAdder is
12
    Port ( a : in  unsigned (31 downto 0);
13
           b : in  unsigned (31 downto 0);
14
           cout : out  unsigned (31 downto 0);
15
           controlBit : in  STD_LOGIC);
16
end mehrBitAdder;
17
18
architecture behavior of mehrBitAdder is
19
20
begin
21
    process(controlBit,a,b)
22
begin
23
if controlBit ='0' then
24
    cout <= a+b;
25
(44)  else controlBit ='1' then
26
    cout <= a-b;
27
end if;
28
    end process;
29
end behavior;

von gabs (Gast)


Lesenswert?

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

von nicht Gast (Gast)


Lesenswert?

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

doch Gast

von Duke Scarring (Gast)


Lesenswert?

Probier mal:
1
end architecture behavior;

Duke

von Hans (Gast)


Lesenswert?

wie wärs mit elsif statt else in zeile 44

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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...

von gabs (Gast)


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...:/

von Muggel (Gast)


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

von gabs (Gast)


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...

von Muggel (Gast)


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

von gabs (Gast)


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

von Muggel (Gast)


Angehängte Dateien:

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

von user (Gast)


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;

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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'... ;-)

von pedro (Gast)


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;

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.