Forum: FPGA, VHDL & Co. Einstellung zu Xilinx ISE gesucht


von Charakterlos (Gast)


Lesenswert?

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

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


Lesenswert?

> 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.

von Charakterlos (Gast)


Lesenswert?

Danke Lothar!

Ich habe jetzt nicht extra ein flipflop aufgebaut, sondern einfach das 
signal genommen, ein not dahinter geklemmt und an 'ne LED ausgegeben.

von Jan M. (mueschel)


Lesenswert?

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.

von Charakterlos (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.