mikrocontroller.net

Forum: FPGA, VHDL & Co. CPLDFit funktioniert nicht mehr Xilinx ISE


Autor: david (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo wenn ich versuche mit Xilinx ISE mein Projekt zu übersetzen, 
steigt CPLD Fit mit einer Fehlermeldung aus. CPLD Fit funktioniert nicht 
mehr,...(windows fehlermeldung)

Hattet ihr das Problem auch schon ?

Hier der Code:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.NUMERIC_STD.ALL;


entity topsound is
    Port ( 
           clk     : in  STD_LOGIC;
           button   : in  STD_LOGIC_Vector(4 downto 1);
        led      : out STD_logic_Vector(8 downto 1 );
           audio_out : out  STD_LOGIC := '0';
        ramAddress: out STD_LOGIC_VECTOR (16 downto 0 );
        ramData  : inout STD_LOGIC_VECTOR (7 downto 0 );
        ramNWE    : out STD_LOGIC;   -- write enable            (beide low aktiv)
        ramNOE    : out STD_LOGIC;   -- ram data output enable
        top_rs232_rxd : in std_logic;     -- RS232 RxD
        top_rs232_txd : out std_logic      -- RS232 TxD
           );
end topsound;

architecture Behavioral of topsound is

component RS232_Interface is

  port(  clk                : in std_logic;                    -- Systemtakt
      rs232_rxd            : in std_logic;                    -- RS232 RxD
      rs232_tra_en          : in std_logic;                    -- Byte soll auf TxD abgesetzt werden
      rs232_dat_in          : in std_logic_vector(7 downto 0);        -- auf TxD abzusetzendes Byte
      rs232_txd            : out std_logic := '1';                -- RS232 TxD
      rs232_rec_en          : out std_logic := '0';                -- Byte wurde über RxD empfangen
      rs232_txd_busy          : out std_logic;                    -- RS232 TxD besetzt
      rs232_dat_out          : out std_logic_vector(7 downto 0)        -- empfangenes Byte
      );
end component;

component Sound_PWM is
    Port ( value_in : in  STD_LOGIC_VECTOR (7 downto 0);
           clk : in  STD_LOGIC;
           pwm_out : out  STD_LOGIC);
end component;
 
component dbg is
    Port ( 
          clk       : in  STD_LOGIC;
          vec_out     : out  STD_LOGIC_VECTOR (7 downto 0);
           vec_in     : in  STD_LOGIC_VECTOR (7 downto 0);
           ram_address   : out  STD_LOGIC_VECTOR (16 downto 0);
           ram_data_in   : in  STD_LOGIC_VECTOR (7 downto 0);
        ram_data_out : in  STD_LOGIC_VECTOR (7 downto 0);
        val_out    : out  STD_LOGIC_VECTOR (7 downto 0);
           ram_nwe     : out  STD_LOGIC;
           ram_noe     : out  STD_LOGIC
       );
end component;

signal s_rs232_tra_en  : std_logic;                    -- Byte soll auf TxD abgesetzt werden
signal s_rs232_dat_in  : std_logic_vector(7 downto 0);        -- auf TxD abzusetzendes Byte
signal s_rs232_dat_out  : std_logic_vector(7 downto 0);        -- empfangenes Byte
signal s_rs232_rec_en  : std_logic;                      -- Byte wurde über RxD empfangen
signal s_rs232_txd_busy  : std_logic;                    -- RS232 TxD besetzt
signal s_value          : std_logic_vector(7 downto 0);  
signal s_mem_data_out  : std_logic_vector(7 downto 0);
signal s_mem_data_in    : std_logic_vector(7 downto 0);
signal s_c_ram_nwe     : std_logic;
signal s_ram_address    : std_logic_vector(16 downto 0);
signal tmp    : std_logic_vector(16 downto 0);

begin

RS232_Interface_impl: RS232_Interface
port map(
      clk        =>    clk,      
      rs232_rxd    =>    top_rs232_rxd,      
      rs232_tra_en  =>    s_rs232_tra_en,  
      rs232_dat_in  =>    s_rs232_dat_in,    
      rs232_txd    =>    top_rs232_txd,    
      rs232_rec_en  =>    s_rs232_rec_en,    
      rs232_txd_busy  =>    s_rs232_txd_busy,    
      rs232_dat_out  =>    s_rs232_dat_out  
);

debug_interface_impl: dbg
port map
   (
  clk       => clk,
   vec_out     => s_rs232_dat_in, 
   vec_in     => s_rs232_dat_out, 
  ram_address => s_ram_address,
  ram_data_out=> s_mem_data_out,
  ram_data_in => s_mem_data_in,
  val_out     => s_value,
  ram_nwe     => s_c_ram_nwe,
  ram_noe     => ramNOE
  );
  
sound_interface_impl: Sound_PWM
port map(
    value_in => s_value,
      clk     => clk,
      pwm_out   => audio_out
    );
  
process (s_mem_data_out, s_c_ram_nwe)
begin
 if s_c_ram_nwe = '0' then
    ramData <= s_mem_data_out;  -- Debug treibt Datenbus
 else 
    ramData <= "ZZZZZZZZ";   -- Debug verhält sich passiv
 end if;
end process;
  

-- Glue Logic

ramNWE         <= s_c_ram_nwe;
s_mem_data_in     <= ramData;
ramAddress        <= s_ram_address;
led(8 downto 1)   <= s_value;


end Behavioral;



Komischerweise tritt das Problem nicht auf, wenn ich ramAdress von 16 
bit auf 8 bit reduziere. Dann läuft auch fit problemlos durch.
Das Board ist das CPLD von Pollin.

Xilinx ISE version 11.3

Autor: david (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich meinte von 17 bit auf 8 reduziere, 9 bit geht auch noch , aber ab 10 
steigt er aus ,.....

Autor: Iulius (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist normal.

Der aktuelle Fitter stürzt gerne mal ab wenn man eine hohe Auslastung 
hat.

Was hilft :

- auf speed optimieren, das crasht seltener
- ISE 6 verwenden, crasht noch viel seltener (erzeugt dafür aber auch 
gelegentlich eine schlechtere Synthese)

Eine Version bei es gar keinen Fitter-crash gibt kenne ich nicht. Häufig 
reicht es aber schon irgentetwas zu ändern, z.b. eine led mit einem 
anderen Signal zu belegen.

Autor: david (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wo bekommt man ise 6 her ?

Autor: david (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also wenn ich nach speed fitte  dann stürzt er auch ab.
wenn ich aber optimal density einstelle dann funktionierts,... nur kann 
ich mir darunter jetzt nichts vorstellen ??!?

Autor: Iulius (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist merkwürdig, bei mir war es genau andersrum.
Letztendlich ist das wohl mehr Zufall...


Was meinst du mit "nichts darunter vorstellen" ?

Bei speed wird halt versucht maximale Taktfrequenz zu erreichen, bei 
density minimale Fläche.

Beide Eigenschaften stehen sich ggü, beispielsweise lässt sich durch 
Mehrfachnutzen von bestimmten Funktionen der Platzverbrauch verringern, 
dafür erhöht sich der Aufwand unterschiedliche Rechenzweige zu der einen 
Recheneinheit zu leiten und der Takt sinkt.

Andersrum lässt sich durch Zusatzlogik der Takt erhöhen.
Ein gutes Beispiel dafür sind etwa die verschiedenen Arten von 
Addierern. Die englische Wikipedia liefert da einen guten Überblick 
falls jemanden sowas interessiert.


Ise 6.1 gibts hier : 
http://www.xilinx.com/webpack/classics/wpclassic/index.htm

Autor: david (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für die info

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.