www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Multisource


Autor: frager (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

leider habe ich ein Problem mit der CPLD Programmierung. Ständig bekomme 
ich die Fehlermeldung
"ERROR:Xst:528 - Multi-source in Unit <shift> on signal <PO<17>>
ERROR:Xst:528 - Multi-source in Unit <shift> on signal <PO<16>>
ERROR:Xst:528 - Multi-source in Unit <shift> on signal <PO<15>>
ERROR:Xst:528 - Multi-source in Unit <shift> on signal <PO<14>>
ERROR:Xst:528 - Multi-source in Unit <shift> on signal <PO<13>>
ERROR:Xst:528 - Multi-source in Unit <shift> on signal <PO<12>>
ERROR:Xst:528 - Multi-source in Unit <shift> on signal <PO<11>>
ERROR:Xst:528 - Multi-source in Unit <shift> on signal <PO<10>>
ERROR:Xst:528 - Multi-source in Unit <shift> on signal <PO<9>>
ERROR:Xst:528 - Multi-source in Unit <shift> on signal <PO<8>>
ERROR:Xst:528 - Multi-source in Unit <shift> on signal <PO<7>>
ERROR:Xst:528 - Multi-source in Unit <shift> on signal <PO<6>>
ERROR:Xst:528 - Multi-source in Unit <shift> on signal <PO<5>>
ERROR:Xst:528 - Multi-source in Unit <shift> on signal <PO<4>>
ERROR:Xst:528 - Multi-source in Unit <shift> on signal <PO<3>>
ERROR:Xst:528 - Multi-source in Unit <shift> on signal <PO<2>>
ERROR:Xst:528 - Multi-source in Unit <shift> on signal <PO<1>>
ERROR:Xst:528 - Multi-source in Unit <shift> on signal <PO<0>>"



wie kann ich diese verhindern? Manchmal half die after Syntax, leider 
klappt das nicht. Ich hoffe ihr könnt mir helfen!
entity shift is 
  port(C, SI, inc : in  std_logic;
        PO : out std_logic_vector(17 downto 0));
end shift;

architecture archi of shift is
  signal tmp: std_logic_vector(17 downto 0);
  signal ct: std_logic_vector(4 downto 0):="00000";
  begin
  process (C)
  begin 
    if (C'event and C='1') then 
    ct<=ct+1;
    if(ct<18 AND ct>0) then
      tmp <= tmp(16 downto 0)& SI; --Das verursacht die Fehlermeldung
    else
       ct<="00000";
     end if;
   end if;
  end process;
  ------------------------
  process (inc)
  begin
    if (inc'event and inc='1') then
       if(ct=0) then
         tmp<=tmp+5 after 100 ms;
      end if;
    end if;
  end process;
   PO <= tmp;
  
end archi;

Autor: Klaus Falser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du darfst das Signal tmp (= P0) nur in EINEM Prozess zuweisen, nicht 
aber in zwei.
Du mußt die Increntierung um 5 in den ersten Prozess hineinziehen.
Ist C das Taktsignal?

Klaus

Autor: frager (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,

ja wie könnte ich das denn reinziehen?
c ist clk... und ist das Tacktsignal, das hast du richtig erkannt...

Grüße

Autor: Klaus Falser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht so ähnlich:
process (C)
  begin 
    if rising_edge(C) then 
       ct<=ct+1;
       if ct = 0 then 
          if inc = '1' then 
             tmp <= tmp + 5;
          end if; 
       elsif ct<18 then
          tmp <= tmp(16 downto 0)& SI; --Das verursacht die Fehlermeldung
       else
          ct<="00000";
       end if;
    end if;
end process;

  

Autor: frager (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vielen dank für Deine Hilfe.

Jedoch soll inc unabhängig von C laufen. Und so bräuchte man den Tackt 
von C.

Hat jemand ein Wunderheilmittel gegen Multisource? Das ist immer mein 
Kälberstrick.

Viele Grüße

Autor: Jörn Kaipf (joern)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Multisource läßt sich mit Tristatetreiber bzw. Multiplexern erschlagen. 
Wobei die Tristatevariante vom Synthesewerkzeug durch Multiplexer 
ersetzt wird.

Autor: Klaus Falser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Hat jemand ein Wunderheilmittel gegen Multisource? Das ist immer mein
> Kälberstrick.

Ein paar Hardware-Kenntnisse wirken da Wunder.
Vielleicht solltest ein bischen lernen was da im FPGA/CPLD passiert und 
wie es aufgebaut ist.
Dann verstehst Du vielleicht auch warum bei synthetisierbaren Designs 
ein Signal nur von einem Prozess getrieben werden kann (naja, sollte).

Klaus

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.