Forum: FPGA, VHDL & Co. Fehler bei der Synthese eines Tristate-Drivers


von Tobias (Gast)


Lesenswert?

Hallo zusammen!

Ich versuche einen ganz einfahen Tristate-Driver zu synthetisieren.

Sieht folgendermaßen aus:

entity tristate_driver is
  port(  enable : in std_logic;
      data_signal: in std_logic;
      reset: in std_logic;
      clk: in std_logic;
      output: out std_logic := '0');
end tristate_driver;

architecture Behavioral of tristate_driver is
begin

process (enable, clk)
begin
  if (reset = '1') then
    output <= '0';
  elsif (clk'event and clk='1') then
    if enable='1' then
      output <= 'Z';
    end if;
  end if;
end process;

end Behavioral;


Das enable hängt dabei von zwei Signalen ab und wird so festgelegt:

tri : process (int_en, spi_en)
begin
  if clk'event and clk = '1' then
    if spi_en = '0' and int_en = '0' then
      enable_tristate <= '1';
    else
      enable_tristate <= '0';
    end if;
  end if;
end process;


In der Simulation im ISE Webpack funktioniert das wunderbar, wenn ich 
die Synthese durchführen will, kommt folgender Fehler dabei heraus, auf 
den ich mir keinen Reim machen kann:

"FATAL_ERROR:Xst:xstrtlviewer.c:2417:1.85 - Unsupported macro type 
(LPM_LATCH_) in FillNodePropFromMacroBas  Process will terminate. For 
technical support on this issue, please open a WebCase with this project 
attached at http://www.xilinx.com/support.";


Woran könnte es liegen? Für Hilfe wäre ich sehr dankbar!


Gruß Tobias

von Der Besucher (Gast)


Lesenswert?

Hallo,

könnte dadran liegen, dass du ein Latch bauen willst mit 
Tristate-Ausgang.
Das gibs wohl nicht in der Bibliothek :D

Probiere mal sowas:

output <= 'Z' when enable_tristate = '1' else ausgabesignal;

ausgabe signal könnte nach deinem code so aussehen:

ausgabesignal <= not(reset);

Aber willst du das wirklich?

Normalerweise schaltet man den Ausgang auf 'Z' wenn enable = '0' ist. 
Aber kann man natürlich auch anders machen.

Der Besucher

von Der Besucher (Gast)


Lesenswert?

Ach, und die Sensitivity-Listen sind in beiden Prozessen falsch.
RTL-Simulation und Simulation des Syntheseergebnisses werden so nicht 
zusammenpassen.

Der Besucher

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.