Xilinx timing constraints

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Setzen von timing constraints für Xilinx

Problem

Hallo ich habe folgenden VHDL Code:

architecture VERHALTEN of TEST is
signal Di : STD_LOGIC_VECTOR(7 downto 0);
begin

  process (CLK,RESET)
  begin
    if RESET = '0' then
      Di <= (others => '0');
    elsif CLK = '1' and CLK'event then
      Di <= not Di;
    end if;
  end process;

  O <= to_bitvector(std_logic_vector(Di));

end VERHALTEN;

Und wenn ich das Timing erstelle (generate Timing) bekomme ich zwei Warnungen die ich mir nicht erklären kann:

WARNING:Cpld:310 - Cannot apply TIMESPEC TS1000 = PERIOD:PERIOD_CLK:0.000 nS WARNING:Cpld:2 - Cannot apply TIMESPEC AUTO_TS_F2F =

Wenn ich anstatt "Di <= not Di;" ersatzweise "Di <= Di + 1;" einsetze bekomme ich keine Warnungen mehr.

Antwort

Hm, da man nicht viel weiss muß man qualifiziert raten. Ich nehmen an, du baust einen CPLD und hast keine Timingconstraints angegeben (.ucf file wäre hier hilfreich).

Ein Timing-constraint besteht aus drei Teilen:

  1. der Name des constraints
  2. Pfade(Netze) die constraint (eine Randbedingung erhalten) werden
  3. eine Grenze die die Signallaufzeit nicht verletzen darf (die Randbedingung)

Die Warning ("cannot apply ...") heisst : (2) ist nicht gegeben also es gibt im Design keine Pfade die auf dieses constraint passen (also es gibt keine Netze mit diesen Namen, oder keine Netze zwischen diesen Primitiven).

Die angemeckerten constraints scheinen automatisch erzeugt, also hat sich der Entwickler nicht überlegt, ob diese Pfade überhaupt in diesem Design vorkommen können.

Im Design mit der Warning schalten die FF jeden Takt um, sie toggeln. Bei CPLD's wird daher die FF in den Toggle-mode konfiguriert. Die Logik der Makrozelle und die switch matrix wird nicht genutzt.

Im zweiten Design ohne die Warnings werden die FF in jedem Takt mit einem neuen Wert geladen. Dieses Wert wird durch Kombinatorik (NAND-Gatter etc) gewonnen. Heisst in diesem design ist sehr wohl die Makrocell Logik und wahrscheinlich auch die switchmatrix genutzt. Die FF werden wohl im Modus, D_FF mit Enable und synchronen Set/Reset genutzt. Also es gibt etliche genutzte Pfade mehr in dem Counterdesign.

Damit findet im zweiten design der timinganalyzer sehr wohl Pfade, auf die die Timingconstraints zutreffen und hat somit keinen Grund die Warnung "cannot apply ..." auszugeben.

Wahrscheinlich kannst du die warnings ignorieren, du hast nur mehr constraints vorgegeben als (in disem design) überprüfbar sind. Obwohl lieber ein constraint zuviel als zuwenig.

Du musst auf jeden fall überprüfen, was die angemeckerten constraints bedeuten:

  • Sind sie automatisch generiert?
  • Welche Pfade werden durch die constraints geprüft?
  • Werden diese Pfade in deinem Design genutzt?

Weiterführende Links

Timing Constraits sehr gut erklärt (englisch)