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


von Michael Sauron (Gast)


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:



1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.STD_LOGIC_ARITH.ALL;
4
use IEEE.STD_LOGIC_UNSIGNED.ALL;
5
6
7
entity test is
8
port (
9
10
        write_wrt_1 : in std_logic;
11
        write_adr_1 : in std_logic_vector(17 downto 0);
12
        write_dat_1 : in  std_logic_vector (15 downto 0);
13
        read_adr_1  : in std_logic_vector(17 downto 0);
14
        
15
        write_sel_1 : in std_logic;
16
        clk50       : in std_logic;
17
        
18
          sram_adr  : out std_logic_vector (17 downto 0);
19
        sram_oe   : out std_logic;
20
21
          sram_1_ce : out std_logic;
22
          sram_1_io : inout std_logic_vector (15 downto 0);
23
24
          sram_2_ce : out std_logic;
25
          sram_2_io : inout std_logic_vector (15 downto 0));
26
        
27
end test;
28
29
architecture Behavioral of test is
30
31
begin
32
33
process (clk50) begin
34
  if rising_edge (clk50) then
35
    if write_wrt_1 = '1' then      -- in den Speicher schreiben
36
        sram_adr <= write_adr_1;        -- Adresse zum schreiben
37
        sram_oe <= '1';        -- schreiben beschleunigen durch
38
      if write_sel_1 = '0' then    -- abschalten der sram ausgänge
39
        sram_1_ce <= '0';        -- schreiben in
40
        sram_2_ce <= '1';        -- sram 1 oder sram 2
41
        sram_1_io  <= write_dat_1;  -- Daten schreiben 
42
        sram_2_io  <= (others => 'Z');
43
      else
44
        sram_1_ce <= '1';        -- Sram 2 
45
        sram_2_ce <= '0';
46
        sram_1_io  <= (others => 'Z');-- Daten schreiben 
47
        sram_2_io  <= write_dat_1;
48
      end if;  
49
    
50
    else --                        Aus speicher lesen
51
        sram_adr <= read_adr_1;          -- Adresse zum Lesen
52
        sram_1_io  <= (others => 'Z');    -- IO auf Treestate
53
        sram_2_io  <= (others => 'Z');
54
        sram_oe <= '0';
55
      
56
      if write_sel_1 = '1' then     
57
        sram_1_ce <= '0';        -- lesen von 
58
        sram_2_ce <= '1';        -- sram 1
59
      else
60
        sram_1_ce <= '1';        -- Sram 2 
61
        sram_2_ce <= '0';
62
      end if;  
63
    end if;
64
  end if;
65
end process;
66
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

von Falk B. (falk)


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

von Michael Sauron (Gast)


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

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


Lesenswert?

> und was bedeutet Mtri ?
Du hast Tristate-Elemente beschrieben.

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

Probiers mal so:
1
process (clk50) begin
2
  if rising_edge (clk50) then
3
    if write_wrt_1 = '1' then      -- in den Speicher schreiben
4
        sram_adr <= write_adr_1;        -- Adresse zum schreiben
5
        sram_oe <= '1';        -- schreiben beschleunigen durch
6
    else --                        Aus speicher lesen
7
        sram_adr <= read_adr_1;          -- Adresse zum Lesen
8
        sram_oe <= '0';
9
    end if;
10
11
    -- das ist hier besser aufgehoben ;-)
12
    if write_sel_1 = '1' then     
13
        sram_1_ce <= '0';        -- lesen von 
14
        sram_2_ce <= '1';        -- sram 1
15
    else
16
        sram_1_ce <= '1';        -- Sram 2 
17
        sram_2_ce <= '0';
18
    end if;  
19
20
  end if;
21
end process;
22
23
sram_1_io  <= write_dat_1 when (write_sel_1='0' and write_wrt_1='1') else (others => 'Z');    
24
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 ;-)

von Michael Sauron (Gast)


Lesenswert?

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

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


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.

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.