Hallöchen allerseits, ich habe ein kleines Problem! ISE schmeißt beim "advanced Synthesize" Schritt Latche raus, weil ein Signal seinen Zustand nicht ändert. ======================================================================== = * Advanced HDL Synthesis * ======================================================================== = WARNING:Xst:1293 - FF/Latch <pwon_data_2> has a constant value of 0 in block <TOPDisplay>. This FF/Latch will be trimmed during the optimization process. WARNING:Xst:1896 - Due to other FF/Latch trimming, FF/Latch <pwon_data_3> has a constant value of 0 in block <TOPDisplay>. This FF/Latch will be trimmed during the optimization process. INFO:Xst:2261 - The FF/Latch <pwon_data_1> in Unit <TOPDisplay> is equivalent to the following FF/Latch, which will be removed : <display_enable> ======================================================================== = Ich benötige das pwon_data<2:1> Signal im weiteren Projektverlauf, und jetzt zum Testen einer Initialisierung. Während der Initialisierung ändert sich das Signal halt nicht, brauche es aber trotzdem. Wie kann man ISE sagen, dass es an dieser Stelle nicht optimieren soll ? Danke im Vorraus :) Gruß Charakterlos
> ISE schmeißt beim "advanced Synthesize" Schritt Latche raus, weil ein > Signal seinen Zustand nicht ändert. Klar, macht Sinn, wozu auch weiter durchfüttern? > Wie kann man ISE sagen, dass es an dieser Stelle nicht optimieren soll ? Sorg dafür, dass es nicht wegoptimiert werden kann. Dazu mußt du ein Flip-Flop erzeugen, und dem Reset-Zweig den invertierten Pegel als Defaultwert geben. Xilinx macht sowas im PCI-IP-Core Interface:
1 | if RST = '1' then |
2 | COMPLETE <= '0'; |
3 | M_WRDN <= '1'; |
4 | :
|
5 | elsif (CLK'event and CLK='1') then |
6 | -- ordnungsgemaesses Abschalten der Initiator-Funktionen
|
7 | COMPLETE <= '1'; |
8 | M_WRDN <= '0'; |
9 | :
|
10 | end if; |
Es reicht aber auch aus, "nur" den inversen Defaultwert vorzugeben:
1 | signal doint : std_logic := '0'; -- invertierter Defaultwert |
2 | :
|
3 | :
|
4 | process (clk) begin |
5 | if rising_edge(clk) then |
6 | doint <='1'; -- Defaultwert |
7 | end if; |
8 | end process; |
Aber i.A. ist das nur nötig, wenn du aus Geschwindigkeitsgründen ein FF willst/brauchst.
Danke Lothar! Ich habe jetzt nicht extra ein flipflop aufgebaut, sondern einfach das signal genommen, ein not dahinter geklemmt und an 'ne LED ausgegeben.
Ich glaube, du hast da noch einen Denkfehler: Nicht das komplette Signal wird entfernt, sondern nur das FF, das es speichert. Stattdessen wird einfach überall wo du dieses Signal verwendest direkt der zugehörige Wert angelegt.
Danke Jan! Das habe ich mittlerweile auch herausgefunden. Es is ja auch logisch, wenn sich das Signal als solches nicht ändert, dann kann man den vorgegebenen Anfangswert des Signals auch direkt durchschleifen. (mit Anfangswert meine ich die Signaldeklarierung in der architekture:) signal pwon_data : std_logic_vector(3 downto 0) := x"0";
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.