mikrocontroller.net

Forum: FPGA, VHDL & Co. Xilinxs Fehlermeldung CPLD


Autor: batch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo kann mir jemand etwas zu den folgenden Warnungen von Xilinxs 
Webpack sagen?

Werde daraus einfach nicht schlau

habe quasi nur einen process auf dem Ding (XC9572) laufen

ungefähr so

process (Error1, Error2, CLK)
begin
     if (Error1 = '1' or Error2 = '1') then
  PORT <= (others => z);
     elsif (CLK'event and CLK = '1') then
  if (Schalter = '1') then
     PORT <= EINGANG1;
  else
     PORT <= EINGANG2;
end if;
end if;


Meldungen

WARNING:Cpld:310 - Cannot apply TIMESPEC TS1000 =
   PERIOD:PERIOD_SYS_CLOCK_EXT:0.000 nS because of one of the following: 
(a) a signal name was not found; (b) a signal was removed or renamed due 
to
   optimization; (c) there is no path between the FROM node and TO node 
in the TIMESPEC.
WARNING:Cpld:310 - Cannot apply TIMESPEC AUTO_TS_F2F =
   MAXDELAY:FROM:FFS(*):TO:FFS(*):0.000 nS because of one of the 
following: (a)
   a signal name was not found; (b) a signal was removed or renamed due 
to
   optimization; (c) there is no path between the FROM node and TO node 
in the
   TIMESPEC.

Autor: batch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nach dem process kommt noch eine Zeile

PORT_EXT <= Port;

Autor: Markus J. (markusj)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn man sich das komplette Log ansieht, steht da sogar welche Signale 
er nicht gefunden hat hust

mfG
Markus

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

Bewertung
0 lesenswert
nicht lesenswert
Das sind doch keine Fehlermeldungen. Das sind doch nur Warnungen... ;-)

Das gibt aber garantiert einen Syntaxfehler:
  PORT <= (others => z);

Diese Resetzuweisung ist (mal abgesehen davon, dann man keine 
kombinatorischen asynchronen Resets verwenden sollte) vermutlich nicht 
sinnvoll synthetisierbar.
Denn mal angenommen, der Reset erzwingt ein 'Z' auf den IOs. Nachdem der 
Reset dann weg ist, muss dieses 'Z' bis zum nächsten Takt gespeichert 
werden. Ich kann mir vorstellen, dass die Tools das irgendwie hinbiegen 
könnten, aber so wird i.A. kein Tristate an den Pins realisiert.

Autor: Harald Flügel (hfl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit Verilog und VHDL kann man Systeme abstrakt beschreiben, aber wenn 
man Bitpopelei betreibt, dann muss man schon etwas darüber nachdenken, 
was in Hardware denn überhaupt so möglich ist. Und ein Flipflop 
speichert sicher kein 'z'. Also, was soll das Ganze denn mal werden?

wenn Error1 = '1' oder Error2 = '1' dann schalte PORT hochohmig
ansonsten wenn steigende Flanke am Clock dann
    wenn Schalter 1 ist, dann übernimmt PORT den Wert von EINGANG1
    ansonsten den Wert von EINGANG2

Das sind offensichtlich zwei Flipflops, ein Tristate-Buffer und ein 
Multiplexer. Dann beschreibe das auch so. Als Hilfestellung in Verilog:

=====8<-----
wire    port;       // signal to be generated
reg     port_oe;    // output enable flipflop
reg     port_val;   // binary value flipflop

always @(posedge clk or posedge error1 or posedge error2)
    begin
    if (error1 || error2)
        port_oe <= 0;
    else
        begin
        port_oe     <= 1;
        port_val    <= schalter ? eingang1 : eingang2;
        end
    end

assign port = port_oe ? port_val : 1'bz;
=====8<-----

p.s. Nimm den Hinweis von Lothar ernst: Keine kombinatorischen 
asynchronen Resets!

Autor: batch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke für eure Antworten.
Als ich den Beitrag geschrieben habe, hatte ich den Code nicht 
vorliegen.. deswegen die Syntaxfehler...

Zum asynchronen Reset. Ich habe mich hier an einem Code Template von 
Xilinxs orientiert.
process (<clock>,<async_reset>)
begin  
   if <async_reset> = '1' then
      <statements>;
   elsif (<clock>'event and <clock> = '1') then
      if <sync_reset> = '1' then
         <statements>;
      else
         <statements>;
      end if;
   end if;
end process;

Ich "dachte" mir wenn ein Fehler auftritt, dann sollen die Ports so 
schnell wie möglich hochohmig geschaltet werden... ist wahrscheinlich 
Quatsch.

Als ich gestern noch einen weiteren Prozess dazugepackt habe (einfach 
eine im Fehlerfall blinkende Led) war die Warnung weg.

Ich merke mir, keine asynchronen Resets! Könnt ihr mir erklären warum...
Sollte man das dann lieber so machen?
process (<clock>,<async_reset>)
begin  
   if (<clock>'event and <clock> = '1') then
      if <async_reset> = '1' then
      <statements>;
      elsif <sync_reset> = '1' then
         <statements>;
      else
         <statements>;
      end if;
   end if;
end process;

Ich habe den Code mal in VHDL "übersetzt" (nur im Editor geschrieben, 
ohne Test, ohne Syntaxhighlighting :-D)
signal port_oe std_logic;
signal port_value std_logic_vector (3 downto 0);



process 
begin
  wait until rising_edge(CLK);
  if (error1 = '1' or error2 = '1') then
    port_oe <= '0';  //Flipflop
  else
    port_oe <= '1';
    if (Schalter = '1') then
      port_value <= Eingang1;
    else
      port_value <= Eingang2;
    end if; //Multiplexer
  end if;
end process;

PORTXXX <= port_value when (port_oe = '1')
      else (others => 'Z'); //Buffer
Ich habe mir wirklich keine Gedanken darüber gemacht, wie das 
letztendlich in Hardware aussieht. Auf jeden fall noch mal Danke, ich 
habe wieder was gelernt. Für weitere Hinweise bin ich offen :-D

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

Bewertung
0 lesenswert
nicht lesenswert
> Ich "dachte" mir wenn ein Fehler auftritt, dann sollen die Ports so
> schnell wie möglich hochohmig geschaltet werden...
Woher kommt der Fehler?
> ist wahrscheinlich Quatsch.
Wahrscheinlich hast du recht... ;-)

> die Ports so schnell wie möglich hochohmig geschaltet werden...
Wenn die von aussen kommen, dann lass die Errors doch einfach direkt das 
OE steuern:
process 
begin
  wait until rising_edge(CLK);
  if (Schalter = '1') then
      port_value <= Eingang1;
  else
      port_value <= Eingang2;
  end if;
end process;

-- Port hochohmig bei Fehler
PORTXXX <= port_value when (error1 = '0' and error2 = '0')  else (others => 'Z'); // Buffer


> Zum asynchronen Reset. Ich habe mich hier an einem Code Template von
> Xilinxs orientiert.
Und auch die meisten Bücher beschreiben das noch so. Dabei ist hier ein 
Seitenblick auf die Zielarchitektur unbedingt nötig. Siehe dazu den 
Beitrag "Xilinx und die Resets"

BTW:
mit den Tags [ vhdl ] und [ /vhdl ] ohne die Leerzeichen wird der 
Quelltext schön syntaxgehighlighted (cooles Wort).

Autor: batch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Lothar,

danke für die schnelle Antwort...

Jetzt habe ich es kapiert. Besonderst der folgende Beitrag von dir ist 
super.
Beitrag "Re: Hardware mit VHDL "richtig" beschreiben."

Die Fehlersignale kommen von außerhalb.
Danke für deine super Tips...das nächste mal kommt der Code richtig
--gehighlighted--
 Versprochen :-D

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.