Forum: FPGA, VHDL & Co. Case-When Fehlermeldung brauche Hilfe


von Christian Fischer (Gast)


Lesenswert?

Hi ich weiss momentan nichtmehr weiter bei dieser Fehlermeldung ,
er soll bei einen Uebergegeben Bitvector "B" die erste stelle 
ueberpruefen per Fallunterscheidung und dann dementsprechend reagieren!
Also bei einer 1 von der ersten Bitstelle bei B den Vektor A ind H 
kopieren und bei einer 0 dann H mit nullen auffuellen.

Mfg. !

PP1: process (A,B,H)
begin
case B(0)
when B(0)= '1'
=> H(0)<=A(0);
=> H(1)<=A(1);
=> H(2)<=A(2);
=> H(3)<=A(3);
when others => H <=(others=>'0');
end case;
end process PP1;


FEHLERMESSAGE :

ERROR:HDLParsers:164 - "C:/MU.vhd" Line 51. parse error, unexpected 
WHEN, expecting IS

von Iulius (Gast)


Lesenswert?

PP1: process (A,B,H)
begin

case B(0) is
when '1' =>
H(0)<=A(0);
H(1)<=A(1);
H(2)<=A(2);
H(3)<=A(3);
when others => H <=(others=>'0');
end case;

end process PP1;


nicht geprüft, sollte aber klappen.

von Christian Fischer (Gast)


Lesenswert?

Huhu,
Vielen Dank schonmal!

Nun setzt er da keine Fehler mehr, jedoch sagt er nun

Error Signal H has a multi source.

Wobei das Signal so deklariert wurde :

signal H : bit_vector ( 7 downto 0 );

von Christian Fischer (Gast)


Angehängte Dateien:

Lesenswert?

Hier mal die komplette Datei

Der Background ist das ein 4x4 Multiplizierer mithilfe eines 
Ripple-Carry-Adders realisiert werden soll.


Mfg

von Iulius (Gast)


Lesenswert?

Signal h hat in dem von dir verlinkten Code keine multiple drivers, 
compiliert bei mir auch ohne probleme wenn ich die 3 anderen 
case-statements(pp2-4) rausnehme die noch falsch beschrieben sind.


Ich würde das zwar ohnehin anders beschreiben :

H <= A when B(0)='1' else (others => '0');

aber du hast explizit nach dem "case" gefragt...



allgemein solltest du Vektoren auch Vektoren zuweisen und nicht alle 
Strippen einzeln ziehen :

statt

L(0)<= SUM1(0);
...
L(7)<= SUM1(7);

einfach L <= Sum1;



weitere tipps :

als Library verwendet man heute aktuellere :

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;


und damit dann auch "std_logic_vector" oder am besten gleich "unsigned" 
anstatt bit_vector.

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.