www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Xst:528 Finde den Fehler nicht


Autor: Tobboss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag.
Ich habe eine Parkhausschaltung programmiert, die bei Ein- und Ausfahrt 
die Zahl der freien Plätze hoch und runterzählt. Nun bekomme ich 
folgenden Fehler:
ERROR:Xst:528 - Multi-source in Unit <Parkhaus> on signal <ae<3>>; this 
signal is connected to multiple drivers.
Das gleiche halt noch für <ae<2>>, 1 und 0.
Mein ae (Ausgangsbus für die Einerstelle an LEDs) taucht nur in der 
entity und in einer Nebenläufigen Bedingung auf mit ae<=ze; wobei ze 
mein internes Ausgangssignal des niederwertigen BCD-Zählers ist.
Ich kopier euch mal den ganzen Quelltext, hoffe ihr könnt mir da helfen.

Ich bedanke mich im vorraus!



entity Parkhaus is
    Port ( clk : in  STD_LOGIC;
           north : in  STD_LOGIC;
           east : in  STD_LOGIC;
           south : in  STD_LOGIC;
           west : in  STD_LOGIC;
           e : in  STD_LOGIC_VECTOR (3 downto 0);
           az : out  STD_LOGIC_VECTOR (3 downto 0);
           ae : out  STD_LOGIC_VECTOR (3 downto 0);
           led_rot : out  STD_LOGIC;
           led_gruen : out  STD_LOGIC;
        --Testbench Flankenerkennung
        flanke_e : out std_logic;
        test_x : out std_logic;
        test_vr : out std_logic);

end Parkhaus;

architecture Verhalten of Parkhaus is
-- Signaldeklarationen
    signal x, ci_e, ze_zl, vr, zz_zl, ci_z : STD_LOGIC :='0';
    signal ze, zz : STD_LOGIC_VECTOR (3 downto 0) :="0000";

-- Deklaration für Flankenerkennung
type ZUSTAENDE is (A,B,C);
signal ZUSTAND, FOLGEZUSTAND : ZUSTAENDE;


begin
-- Pinbelegung Eingänge
  ze_zl <= south;
  zz_zl <= north;
  vr   <= east;        --bei vr=0 vorwärts, bei vr=1 rückwärts
  x    <= east xor west; --Signal für die Flankenerkennung

-- Flankenerkennung des ci_e am niederwertigen Zähler
    FLANKENERKENNUNG:  process (x, ZUSTAND)
    begin
      case ZUSTAND is
          when A=> if x='1' then FOLGEZUSTAND <=A;
                      else FOLGEZUSTAND <=B;
                      end if;
                      ci_e <= '0';
          when B=> if x='1' then FOLGEZUSTAND <=C;
                      else FOLGEZUSTAND <=B;
                      end if;
                      ci_e <= '0';
          when C=> if x='1' then FOLGEZUSTAND <=A;
                      else FOLGEZUSTAND <=B;
                      end if;
                      ci_e <= '1';
      end case;
    end process FLANKENERKENNUNG;

    ZUSTANDSWECHSEL: process (clk)
    begin
        if rising_edge(clk) then ZUSTAND<=FOLGEZUSTAND;
        end if;
    end process ZUSTANDSWECHSEL;

-- Niederwertiger BCD Zähler (Einer)
    BCD_LOW: process (clk, ci_e, ze_zl, e, vr, ze)
    begin

        if rising_edge(clk) then
          if ze_zl='1' then
              if e>9 then ze<="0000";
              else ze<=e;
              end if;
          else
              if ci_e='0' then ze<=ze;
              else
                  if vr='1' then
                      if ze=0 then ze<="1001";
                      else ze<=ze-1;
                      end if;
                  else
                      if ze=9 then ze<="0000";
                      else ze<=ze+1;
                      end if;
                  end if;
              end if;
          end if;
        end if;
    end process BCD_LOW;

-- Übertrag und Ausgabe
    ci_z<='1' when (ze="1001" and vr='0') or (ze="0000" and vr='1') else 
'0';
    ae<=ze;

-- Höherwertiger BCD Zähler (Zehner)
    BCD_HIGH: process (clk, ci_z, zz_zl, e, vr, zz)
    begin

        if rising_edge(clk) then
          if zz_zl='1' then
              if e>9 then ze<="0000";
              else zz<=e;
              end if;
          else
              if ci_z='0' then zz<=zz;
              else
                  if vr='1' then
                      if zz=0 then zz<="1001";
                      else zz<=zz-1;
                      end if;
                  else
                      if zz=9 then zz<="0000";
                      else zz<=zz+1;
                      end if;
                  end if;
              end if;
          end if;
        end if;
    end process BCD_HIGH;

-- Ampel

led_rot  <='1' when (zz="0000" and ze<"0101") else '0';
led_gruen<='1' when (zz/="0000" or ze>="0101") else '0';


-- Anzahl freier Plätze Zehnerstelle
  az<=zz;

-- Testbench
flanke_e<=ci_e;
test_x<=x;
test_vr<=vr;


end Verhalten;

Autor: Marcus W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem ist nicht ae, sondern ze. (ae wird wegoptimiert)

Du darfst ze nicht in zwei Prozessen neue Werte zuweisen.

Gruß

Autor: Marcus W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach, ich seh grad, das ist nur ein Tippfehler :)
if e>9 then ze<="0000";

Sollte vermutlich so heißen:
if e>9 then zz<="0000";

Und in Zukunft solch langen Code bitte als Anhang, ist übersichtlicher.

Autor: Tobboss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AH also hab ich die ganze Zeit das falsche gesucht. Vielen Dank! Ja 
nächstes mal als Anhang, sorry.

Problem gelöst :)

Autor: Dr. Prof. Meu*** (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na dann sind wir froh, dass wir ihnen helfen konnten. Immer diese 
Labore...

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.