Forum: FPGA, VHDL & Co. Synthese verweigert 8Bit Latch


von Robert D. (hdldum)


Lesenswert?

Hallo zusammen,
ich versuche verzweifelt ein 8Bit Latch hinzubekommen,
verwende ISE 13.3 Webpack und ein CoolRunner2 Demoboard.

Code:
  signal data_from_isa : std_logic_vector (7 downto 0);
  signal data_latch: std_logic_vector (7 downto 0);
  signal cs_sysport_wr: std_logic;
   ...
   ...
   ...
  process (cs_sysport_wr, data_from_isa)
  begin
    if (cs_sysport_wr = '1') then
      data_latch <= data_from_isa;
    end if;
  end process;

  sysport_out <= data_latch;


XST meldet: " Xst:653 - Signal <data_latch> is used but never assigned. 
This sourceless signal will be automatically connected to value 
00000000"

Was meint der Compiler mit "sourceless signal" ?
Im RTL Schematic erkenne ich das er den gedachten Ausgangsport 
sysport_out
tatsächlich auf GND legt. Und in weiterer Folge die Leitung 
cs_sysport_wr mit allem drum und drann wegoptimiert.

Explizit die Datenspeicherung angeben wie ich es in einem Skriptum 
gelesen habe, funktioniert auch nicht, also die selbige Warnung und 
Wegoptimierung von data_latch:

 process (cs_sysport_wr, data_from_isa)
   begin
     if (cs_sysport_wr = '1') then
       data_latch <= data_from_isa;
     else
       data_latch <= data_latch;
     end if;
   end process;

   sysport_out <= data_latch;

Bitte mir auf die Sprünge zu helfen da ich irgenwie schon anstehe.
Danke

von Sebastian B. (Gast)


Lesenswert?

Deine Signale data_from_isa und data_latch müssen auch irgendwie benutzt 
werden...

Z.b. als Ein-/Ausgang im top level entity. Wenn sie nirgendwo 
angeschlossen sind, werden sie verworfen.

Sebastian

von Christian R. (supachris)


Lesenswert?

Also an dem Code liegts nicht. Der geht einwandfrei. Da muss davor 
irgendwo das data_from_isa dauerhaft auf 0x00 liegen. Latches im 
CPLD/FPGA sind böse. Gibts denn keinen Takt?

von Robert D. (hdldum)


Lesenswert?

Hi, Danke für die schnelle Antworten.

Es ist ein einziges Modul, Takt habe ich keinen.
Auch wenn ich aus dem transparenten Latch ein flankengesteuertes mache
macht der Compiler das gleiche.

"data_from_isa" wird vom I/O Port "isa_sd" beschrieben welcher in der 
Entity vom Modul steht.

  isa_sd : inout std_logic_vector (7 downto 0);
  ...
  ...
  data_from_isa <= isa_sd;

"data_latch" ist der Wert den er selber speichern soll, da habe ich 
keinen
initialen Wert dafür...

von Robert D. (hdldum)


Lesenswert?

Christian R. schrieb:
> Also an dem Code liegts nicht. Der geht einwandfrei. Da muss davor
> irgendwo das data_from_isa dauerhaft auf 0x00 liegen. Latches im
> CPLD/FPGA sind böse. Gibts denn keinen Takt?

Danke für den Hinweis, im RTL Schematic finde ich tatsächlich kein 
"data_from_isa" mehr ......

von bko (Gast)


Lesenswert?

Habs mal ausprobiert, ISE 13.3 meckert zwar:
>Found 8-bit latch for signal <data_latch>. Latches may be generated from
>incomplete case or if statements. We do not recommend the use of latches
>in FPGA/CPLD designs, as they may lead to timing problems.
>Unit <trial_top> synthesized.

Aber es optimiert bei diesem Code nichts weg:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
4
entity trial_top is
5
port (
6
        data_from_isa : in  std_logic_vector (7 downto 0);
7
  cs_sysport_wr : in  std_logic;
8
  sysport_out   : out std_logic_vector (7 downto 0)
9
);
10
end trial_top;
11
12
architecture Behavioral of trial_top is
13
14
 signal data_latch: std_logic_vector (7 downto 0);
15
 
16
begin
17
  
18
  process (cs_sysport_wr, data_from_isa)
19
  begin
20
    if (cs_sysport_wr = '1') then
21
      data_latch <= data_from_isa;
22
    end if;
23
  end process;
24
25
  sysport_out <= data_latch;
26
27
end Behavioral;

von Robert D. (hdldum)


Lesenswert?

Dank für die Mühe.
Ich habs geschafft das das 8Bit Latch generiert wird, mit der üblichen 
Warnungsmeldung. Dazu hab ich die Hälfte Code rundherum gelöscht, wo 
genau der Knackpunkt ist muss ich noch rausfinden. Lösung ist es keine, 
der gelöschte Code muss in seiner Funktion wieder zurück.

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


Lesenswert?

Robert D. schrieb:
> der gelöschte Code muss in seiner Funktion wieder zurück.
Dann steckt das Problem vermutlich in diesem Code (es könnte ja sein, 
dass das data_latch niemals aktiv wird). Zeig den kompletten Code doch 
mal. Sonst kann man stat Raten nur Raten...

von Harry (Gast)


Lesenswert?

Kannst du das latch-Verhalten nicht ersetzen durch ein synchrones 
Registern?

von Robert D. (hdldum)


Lesenswert?

Hallo, hab den Fehler gefunden. Das Signal "cs_sysport_wr", welches das 
Latch ansteuert, hab ich in einem Process verwurschtelt so dass es einen 
konstanten Wert hatte.

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


Lesenswert?

Robert D. schrieb:
> Hallo, hab den Fehler gefunden.
Gut so.
> Das Signal "cs_sysport_wr" ... einen konstanten Wert hatte.
Das war mein Verdacht. Blöderweise habe ich den Namen falsch kopiert, 
denn dieses Signal meinte ich eigentlich statt des /data_latch/:
>>> es könnte ja sein, dass das data_latch niemals aktiv wird

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.