mikrocontroller.net

Forum: FPGA, VHDL & Co. SRAM - wieso bekomm ich warnungen ?


Autor: Michael Sauron (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen, ich habe mir ein Programm geschrieben, was ein SRAM 
ansprechen soll. Dieses Programm klappt auch einwandfrei, jedoch erhalte 
ich eine menge Warnungen, die ich mir nicht erklären kann.
Ich habe mal einen Synthesefähigen Ausschnitt hier eingestellt:



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


entity test is
port (

        write_wrt_1 : in std_logic;
        write_adr_1 : in std_logic_vector(17 downto 0);
        write_dat_1 : in  std_logic_vector (15 downto 0);
        read_adr_1  : in std_logic_vector(17 downto 0);
        
        write_sel_1 : in std_logic;
        clk50       : in std_logic;
        
          sram_adr  : out std_logic_vector (17 downto 0);
        sram_oe   : out std_logic;

          sram_1_ce : out std_logic;
          sram_1_io : inout std_logic_vector (15 downto 0);

          sram_2_ce : out std_logic;
          sram_2_io : inout std_logic_vector (15 downto 0));
        
end test;

architecture Behavioral of test is

begin

process (clk50) begin
  if rising_edge (clk50) then
    if write_wrt_1 = '1' then      -- in den Speicher schreiben
        sram_adr <= write_adr_1;        -- Adresse zum schreiben
        sram_oe <= '1';        -- schreiben beschleunigen durch
      if write_sel_1 = '0' then    -- abschalten der sram ausgänge
        sram_1_ce <= '0';        -- schreiben in
        sram_2_ce <= '1';        -- sram 1 oder sram 2
        sram_1_io  <= write_dat_1;  -- Daten schreiben 
        sram_2_io  <= (others => 'Z');
      else
        sram_1_ce <= '1';        -- Sram 2 
        sram_2_ce <= '0';
        sram_1_io  <= (others => 'Z');-- Daten schreiben 
        sram_2_io  <= write_dat_1;
      end if;  
    
    else --                        Aus speicher lesen
        sram_adr <= read_adr_1;          -- Adresse zum Lesen
        sram_1_io  <= (others => 'Z');    -- IO auf Treestate
        sram_2_io  <= (others => 'Z');
        sram_oe <= '0';
      
      if write_sel_1 = '1' then     
        sram_1_ce <= '0';        -- lesen von 
        sram_2_ce <= '1';        -- sram 1
      else
        sram_1_ce <= '1';        -- Sram 2 
        sram_2_ce <= '0';
      end if;  
    end if;
  end if;
end process;
end Behavioral;



und hier die Warnungen, die ich bekomme, eigentlich ist es nur eine 
Warnung und eine info, die aber für jedes bit von sram_io:


INFO:Xst:2261 - The FF/Latch <Mtridata_sram_1_io_0> in Unit <test> is 
equivalent to the following FF/Latch, which will be removed : 
<Mtridata_sram_2_io_0>

WARNING:Xst:638 - in unit test Conflict on KEEP property on signal 
Mtridata_sram_1_io<0> and Mtridata_sram_2_io<0> Mtridata_sram_2_io<0> 
signal will be lost.


hier wiederholt sich die warnung/info bis Mtridata_sram_2_io<15>


Wieso entstehen diese Warnungen ?

und was bedeutet Mtri ?

Michael Sauron

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Michael Sauron (Gast)

>INFO:Xst:2261 - The FF/Latch <Mtridata_sram_1_io_0> in Unit <test> is
>equivalent to the following FF/Latch, which will be removed :
><Mtridata_sram_2_io_0>

Ist harmlos, wird nur ein doppeltes Signal wegoptimiert.

>WARNING:Xst:638 - in unit test Conflict on KEEP property on signal
>Mtridata_sram_1_io<0> and Mtridata_sram_2_io<0> Mtridata_sram_2_io<0>
>signal will be lost.

Ähnliches Problem.

MFG
Falk

Autor: Michael Sauron (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry für den Doppel Post, mein Browser hat ein wenig gesponnen.

Das da was weg optimiert wird ist mir schon klar, ich verstehe aber 
nicht wo. und was kann ich ändern, um die warnungen zu vermeiden ?

Michael

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> und was bedeutet Mtri ?
Du hast Tristate-Elemente beschrieben.

> Wieso entstehen diese Warnungen ?
So beschreibt man keinen Tristate Bus.

Probiers mal so:
process (clk50) begin
  if rising_edge (clk50) then
    if write_wrt_1 = '1' then      -- in den Speicher schreiben
        sram_adr <= write_adr_1;        -- Adresse zum schreiben
        sram_oe <= '1';        -- schreiben beschleunigen durch
    else --                        Aus speicher lesen
        sram_adr <= read_adr_1;          -- Adresse zum Lesen
        sram_oe <= '0';
    end if;

    -- das ist hier besser aufgehoben ;-)
    if write_sel_1 = '1' then     
        sram_1_ce <= '0';        -- lesen von 
        sram_2_ce <= '1';        -- sram 1
    else
        sram_1_ce <= '1';        -- Sram 2 
        sram_2_ce <= '0';
    end if;  

  end if;
end process;

sram_1_io  <= write_dat_1 when (write_sel_1='0' and write_wrt_1='1') else (others => 'Z');    
sram_1_io  <= write_dat_1 when (write_sel_1='1' and write_wrt_1='1') else (others => 'Z');

BTW:
>-- IO auf Treestate
das ist kein kein Tree, das hat nichts mit Bäumen zu tun ;-)

Autor: Michael Sauron (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt sind die zuweisungen ja nicht mehr im Getakteten Process, entsteht 
dadurch nicht eine verzögerung (durch evtl zusätzliche kombinatorik) ?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael Sauron schrieb:
> Jetzt sind die zuweisungen ja nicht mehr im Getakteten Process,
Richtig. Dadurch ergibt sich u.U. ein anderes Timing.

> entsteht dadurch nicht eine verzögerung
> (durch evtl zusätzliche kombinatorik) ?
Nein, es wird u.U. ein Takt zu früh geschrieben. Dann müsste das 
Steuersignal für den Tristate-Buffer noch einmal getaktet werden. Aber 
eine Simulation wird dir das zeigen.

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.