Einstellung zu Xilinx ISE gesucht

Gast #1146713
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
Moderator (Firma: Titel) Persönliche Seite #1146753
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.
Gast #1148713
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";

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