Par:228 - At least one timing constraint is impossible to meet because component delays.

Persönliche Seite #1202415
Lesenswert?

Mein "Ziel": Ich möchte ne Status LED für die RS232 Kommunikation, 
welche Lustig vor sich hinblinkt. Leider kriege ich beim "verbinden" des 
Ausgabe Ports einene Fehler:
1
Par:228 - At least one timing constraint is impossible to meet because component delays alone exceed the constraint.

Meine Portdefinition sieht folgendes vor
1
Port ( CLK_50M : in  STD_LOGIC;
2
SW             : in STD_LOGIC_vector(3 downto 0);
3
FPGA_AWAKE     : out std_logic;
4
RS232_DCE_TXD  : out  STD_LOGIC);

Mittels eines Signals (tx_out), lege ich die RS232 Daten auf den 
Ausgang:
1
RS232_DCE_TXD <= tx_out;
was sich auch einwandfrei übersetzen läßt.
Weise ich jezt aber in einem Prozess dieses Sigal auch der LED zu kommt 
obiger Fehler
1
txtest: process(CLK_50M)
2
    begin
3
        if rising_edge(CLK_50M) then
4
           FPGA_AWAKE <= tx_out;
5
            tx_data <= "01010101" XOR "0000"&SW;
6
            if (tx_full = '0') then
7
                tx_write <= '1';
8
            else
9
               tx_write <= '0';
10
            end if;
11
       end if;
12
    end process;

Die Konstraints sind aus dem Userguide für das Board (Sparta-3A Starter) 
entnommen:
1
NET "CLK_50M"       LOC = "E12"  | IOSTANDARD = LVCMOS33 | PERIOD = 20.000 ;
2
OFFSET = IN  10.000 VALID 20.000 BEFORE "CLK_50M" ;
3
OFFSET = OUT 20.000 AFTER "CLK_50M" ;
4
NET "FPGA_AWAKE" LOC = "AB15" | IOSTANDARD = LVTTL | SLEW = QUIETIO | DRIVE = 4;
5
NET "RS232_DCE_TXD" LOC = "F15"  | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;
Das Place Tool schlägt vor das ich die Konstraints lockern soll, das 
scheint mir auf den ersten Blick aber keine Gute Lösung zu sein 
schließlich haben diese sicherlich ihre Bewandnis.

Gibt es hierfür eine Lösung (außer Hardverdrahtung) oder ist meine 
Anforderung in irgeneiner Weise "Hardwareinkompatibel", prinzipiell seh 
ich erstmal keinen Grund warum das nicht gehen sollte-
Persönliche Seite #1202432
Lesenswert?

Habs jezt dadurch lösen könne das ich die Konstraints angepaßt habe:
1
NET "FPGA_AWAKE" LOC = "AB15" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW;
2
NET "RS232_DCE_TXD" LOC = "F15"  | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW;
Hat das irgenwelche Nachteile? Ich mein der LED sollte es nicht schaden, 
aber die bei Xilinx werden sich bei der Ursprünglichen Definition was 
gedacht haben...
Moderator (Firma: Titel) Persönliche Seite #1202458
Lesenswert?

Wenigstens den Takt solltest du einschränken (constrainen):
1
NET "CLK_50M"       LOC = "E12"  | IOSTANDARD = LVCMOS33 | PERIOD = 20.000 ;
Wenn das dann immer noch schiefgeht (aber 50MHz sind noch gar nicht 
sooooo arg schnell), solltest du einen Blick in die Statische 
Timinganalyse werfen. Dort wird dir der langsamste Pfad angegeben. 
Üblicherweise kannst du da dann mit geringen Anpassungen schnell noch 
ein paar MHz rausholen.
Persönliche Seite #1202730
Lesenswert?

Äh ja die Taktkonstraints hab ich natürlich belassen, habe nur die 
Konstraints für die LED an die des UART angegelichen. Der Konstraint der 
nicht erfüllt werden kann war der für den Takt wenn ich den Report 
richtig verstanden habe.

Also entweder die sache mit dem SLEW oder DRIVE war wohl untereiander so 
unverträglich das er da durcheinader gekommen ist.
Moderator (Firma: Titel) Persönliche Seite #1202872
Lesenswert?

> Kann man QUIETIO dann überhaupt sinnvoll bei der Taktfrequenz einsetzen?
> Vermutlich dann nicht in nem getakteten Prozess..
Nicht, wenn du eine externe Komponente angeschlossen hast, die mit dem 
selben Takt wie das FPGA betrieben wird...

Wie gesagt, du kannst durchaus auch an ein FF mit 50MHz einen 
QUIETIO-Pin anschliessen, nur muß dann der Signalpfad vom 
Takt-Constraint herausgenommen werden.

> ich denk der LED ist es egal :)
Genau für sowas ist das QUIETIO auch gemacht: zeitlich unkritische 
Signale.
Gast #1203732
Lesenswert?

Dies nennt sich in Synthese-Neu-Deutsch dann "False Path";
nun aus dem "ise92-constraints guide" Seite 63 hierher kopiert:
"False Paths by Pin
You can define false paths for all paths that pass through a particular 
instance pin using the
following UCF syntax:
PIN “instance.pin_name” TIG;"

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren