Forum: FPGA, VHDL & Co. Xilinxs Fehlermeldung CPLD


von batch (Gast)


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.

von batch (Gast)


Lesenswert?

nach dem process kommt noch eine Zeile

PORT_EXT <= Port;

von Markus J. (markusj)


Lesenswert?

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

mfG
Markus

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


Lesenswert?

Das sind doch keine Fehlermeldungen. Das sind doch nur Warnungen... ;-)

Das gibt aber garantiert einen Syntaxfehler:
1
  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.

von Harald F. (hfl)


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!

von batch (Gast)


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.
1
process (<clock>,<async_reset>)
2
begin  
3
   if <async_reset> = '1' then
4
      <statements>;
5
   elsif (<clock>'event and <clock> = '1') then
6
      if <sync_reset> = '1' then
7
         <statements>;
8
      else
9
         <statements>;
10
      end if;
11
   end if;
12
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?
1
process (<clock>,<async_reset>)
2
begin  
3
   if (<clock>'event and <clock> = '1') then
4
      if <async_reset> = '1' then
5
      <statements>;
6
      elsif <sync_reset> = '1' then
7
         <statements>;
8
      else
9
         <statements>;
10
      end if;
11
   end if;
12
end process;

Ich habe den Code mal in VHDL "übersetzt" (nur im Editor geschrieben, 
ohne Test, ohne Syntaxhighlighting :-D)
1
signal port_oe std_logic;
2
signal port_value std_logic_vector (3 downto 0);
3
4
5
6
process 
7
begin
8
  wait until rising_edge(CLK);
9
  if (error1 = '1' or error2 = '1') then
10
    port_oe <= '0';  //Flipflop
11
  else
12
    port_oe <= '1';
13
    if (Schalter = '1') then
14
      port_value <= Eingang1;
15
    else
16
      port_value <= Eingang2;
17
    end if; //Multiplexer
18
  end if;
19
end process;
20
21
PORTXXX <= port_value when (port_oe = '1')
22
      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

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


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:
1
process 
2
begin
3
  wait until rising_edge(CLK);
4
  if (Schalter = '1') then
5
      port_value <= Eingang1;
6
  else
7
      port_value <= Eingang2;
8
  end if;
9
end process;
10
11
-- Port hochohmig bei Fehler
12
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).

von batch (Gast)


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
1
--gehighlighted--
 Versprochen :-D

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.