mikrocontroller.net

Forum: FPGA, VHDL & Co. XST ERROR - Timing Constraints


Autor: Thomas R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus!

Ich habe folgendes Problem.
Wenn ich versuche folgendes Design zu synthetisieren bekomme ich Errors
(Siehe am ende des Beitrags).

Woran liegt es, am Sourcecode oder in der Constraints Spezifikation?

Weiß leider im Moment nicht wo ich ansetzen soll, denn bei der
Simulation hat es wunderbar geklappt.

mfg & Besten Dank im Voraus
Thomas
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity keyboard is

  port (
    clock     : in  std_logic;                      -- 50 MHZ Board
Frequency
    reset_n    : in  std_logic;                      -- Active High
Reset
    ps2clock_i : in  std_logic;                      -- PS2 Clock
Input
    ps2data_i  : in  std_logic;                      -- PS2 Data Input
    led_o      : out std_logic_vector(8 downto 0));  -- Output to
LED's

end keyboard;
          
architecture RTL of keyboard is

signal ps2clock1 : std_logic;
signal ps2clock2 : std_logic;
signal ps2clock  : std_logic;
signal scancode  : std_logic_vector(8 downto 0);
signal bitcnt    : std_logic_vector(2 downto 0);

begin  -- RTL

  P_SYNCRONIZER_FF : process (clock, reset_n)
  begin  -- process P_SYNCRONIZER_FF
    if reset_n = '1' then                     -- asynchronous reset
(active low)
      ps2clock1 <= '0';
    elsif clock'event and clock = '1' then  -- rising clock edge
      ps2clock1 <= ps2clock_i;
    end if;
  end process P_SYNCRONIZER_FF;

    P_EDGEDETECT_I : process (clock, reset_n)
  begin  -- process P_EDGEDETECT_I
    if reset_n = '1' then                     -- asynchronous reset
(active low)
      ps2clock2 <= '0';
    elsif clock'event and clock = '1' then  -- rising clock edge
      ps2clock2 <= ps2clock1;
    end if;
  end process P_EDGEDETECT_I;


  P_EDGEDETECT_II : process (clock, reset_n)
  begin  -- process P_EDGEDETECT_II
    if reset_n = '1' then                     -- asynchronous reset
(active low)
      ps2clock <= '0';
    elsif clock'event and clock = '1' then  -- rising clock edge
      ps2clock <= ps2clock2 xor ps2clock1;
    end if;
  end process P_EDGEDETECT_II;

  S_READ_PS2DATA : process (clock, reset_n)
  begin  -- process S_READ_PS2DATA
    if reset_n = '1' then                     -- asynchronous reset
(active low)
      led_o                <= (others => '0');
      bitcnt               <= (others => '0');
      scancode             <= (others => '0');
    elsif clock'event and clock = '1' then  -- rising clock edge
      if ps2clock = '1' then
        if ps2clock1 = '0' then             -- rising edge of PS2
Clock
          scancode(CONV_INTEGER(bitcnt)) <= ps2data_i;
          bitcnt           <= bitcnt + 1;
          if(bitcnt = "1000")then
            led_o          <= scancode;
            bitcnt         <= (others => '0');
          end if;
        end if;
      end if;
    end if;
  end process S_READ_PS2DATA;

end RTL;

Timing constraints file:
----------------------------------------------------------------

NET "clock" TNM_NET = "clock";
TIMESPEC "TS_clock" = PERIOD "clock" 50 MHz HIGH 50 %;

NET "clock"     LOC = "T9";
NET "reset_n"      LOC = "L14";
NET "ps2data_i"   LOC = "M15";
NET "ps2clock_i"  LOC = "M16";

NET "led_o<0>" LOC = "P11";
NET "led_o<1>" LOC = "P12";
NET "led_o<2>" LOC = "N12";
NET "led_o<3>" LOC = "P13";
NET "led_o<4>" LOC = "N14";
NET "led_o<5>" LOC = "L12";
NET "led_o<6>" LOC = "P14";
NET "led_o<7>" LOC = "K12";
NET "led_o<8>" LOC = "R11";
-----------------------------------------------------------------

XILINX XST WARNINGS - ERRORS

Checking timing specifications ...
WARNING:XdmHelpers:625 - No instances driven from the following signals
or pins
   are valid for inclusion in TNM group "clock". A TNM property on a
pin or
   signal marks only the flip-flops, latches and/or RAMs which are
directly or
   indirectly driven by that pin or signal.
   signal "clock"
WARNING:XdmHelpers:644 - No appropriate elements were found for the TNM
group
   "clock". This group has been removed from the design.
ERROR:XdmHelpers:650 - The period specification "TS_clock" is invalid
because
   the "clock" group was removed.
Checking expanded design ...

Autor: Thomas R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
problem hat sich vorerst erledigt.
statt:
signal bitcnt    : std_logic_vector(2 downto 0);
muss es natürlich heißen:
signal bitcnt    : std_logic_vector(3 downto 0);

Aber wiese da eine meldung mit timing constraints kommt begreife ich
immer noch nicht..


mfg
thomas

Autor: FPGAküchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, also wenn ich das recht verstehe, ist clock das pin nicht der Name
des Taktnetzwerkes. Das kommt wohl daher das das Taktsignal über das
pin an einen Taktnetzwerktreiber (BUFG oder BUFGMUX) und dann ist es
ein takt. (DCM etc. die zw. Pin und BUFGMUX sein können, lassen wir mal
aus). Also der Name ist falsch. (Obwohl Xilinx sagt, das constraint
wurde durch "propagiert" also durch den clockbuffer durchgereicht.

Oder du versuchts statt einem Timingname einen Pinnamen zu verwenden.
Hm, die tools sagen dir was sie als Taktnamen erkennen, zum beispiel im
Report des placers.

Hm, bricht der Toolflow ab an dieser Stelle?. XST sollte eh nicht viel
mit constraints anfangen können (persönliche meinung).

Mal codeschnipsel:
für die Angebe das das Pin mit 77 MHz getrieben wird tippe ich
im ucf file

#Pinname
NET  "CLK77in"  LOC = "A8"  ;  #clkin

#netz einen Namen für den Timing analyzer geben
NET "clk77in"                 TNM_NET = "TN_CLK77in";

#jetzt endlich der Timinganalyse sagen das das Takt von 77MHz ist
TIMESPEC "TS_clk77"  = PERIOD "TN_CLK77in"                  12 ns
HIGH 50 %;


wahrscheinlich ist bei dir das Problem das der netzname erst einen
Timingnamen bekommen muss.

Autor: FPGAküchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aehm hab erst jetzt deinen ucf auszug gesehen, da scheint alles korrekt.
Vielleicht kommen die tools durcheinander, das das Pin clock nach dem
TMN_net definiert wird und das das TNM_NET den gleichen Namen wie das
Pin hat.

Autor: Thomas R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Mühe - also ich habe nochmals analysiert: Der Clock Pfad
wurde einfach wegoptimiert, wegen eines Fehlers im Design......


mfg

Autor: FPGAküchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BTW: Dein lowaktiver Reset reset_n ist high aktiv.

Autor: Thomas R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja das passt schon so. Arbeite auf zwei verschiedenen
Entwicklungsboards, bei einem ist er active high, beim anderen active
low.....

mfg und besten dank für die mühe
Thomas R.

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.