SRAM reagiert nicht

Gast #1312660
Lesenswert?

Hallo zusammen,

ich versuche ein SRAM auf einem Spartan 3 Eval. board anzusprechen. Nur 
leider gelingt es mir nicht, dem SRAM eine Antwort zu entlocken. In der 
Simulation sieht es OK aus. Anbei einen kleinen Demo Code, der 8 Bytes 
Schreibt, und danach wieder einliest.


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


entity memorytest is
port (         clk   : in    STD_LOGIC;
            sram_adr : out   STD_LOGIC_VECTOR (17 downto 0);
           sram_1_io : inout STD_LOGIC_VECTOR (15 downto 0);
        sram_1_o  : out   STD_LOGIC_VECTOR (15 downto 0);
           sram_2_io : inout STD_LOGIC_VECTOR (15 downto 0);
             sram_oe : out   STD_LOGIC;
             sram_we : out   STD_LOGIC;
           sram_1_ce : out   STD_LOGIC;
           sram_1_ub : out   STD_LOGIC;
           sram_1_lb : out   STD_LOGIC;
           sram_2_ce : out   STD_LOGIC;
           sram_2_ub : out   STD_LOGIC;
           sram_2_lb : out   STD_LOGIC);

end memorytest;

architecture Behavioral of memorytest is

signal counter: std_logic_vector ( 4 downto 0) :="00000";

begin

process (clk) begin
  if rising_edge (clk) then
    counter <= counter + 1;
  end if;
end process;

sram_1_ce <= '0';  -- chip 1 enable (low aktiv)
sram_1_ub <= '0';  -- oberes Byte enable (low aktiv)
sram_1_lb <= '0';  -- oberes Byte enable (low aktiv)

sram_2_ce <= '1';
sram_2_ub <= '1'; -- chip 2 disable
sram_2_lb <= '1';


process (clk) begin
  if rising_edge (clk) then
    sram_adr <= "000000000000000" & counter ( 3 downto 1);
    sram_oe  <=  not counter(4);  -- outout enable (low aktiv)
   sram_we  <=  not counter(4) and counter (0);
  end if;
end process;

process (clk) begin
  if rising_edge (clk) then
    if counter(4) = '0' then
       sram_1_io <= "0000000000000" & counter (3 downto 1);
    else
        sram_1_io <= (others => 'Z');
    end if;
  end if;
end process;

sram_1_o <= sram_1_io;

end Behavioral;
Angehängte Dateien:
Gast #1312755
Lesenswert?

Der Baustein heisst IS61LV25616AL  Alle Steuer Signale sind low aktiv.
Das Timing stimm mit dem Timing im Datenblatt überein.

Ich hab aber im Chipscope einen fehler gemacht.
Mein Demo programm klappt nun, jetzt werd ich versuchen, das richtige 
programm ans laufen zu bekommen, das will ich aber nicht vollständig 
posten, weil es einfach zu gross ist.
Gast #1313021
Lesenswert?

So hab den fehler gefunden, ich habe das datenblatt falsch 
interpretiert.
Ich binn davon ausgegangen, das die Daten mit steigender Flanke 
Übernommen werden (grüner kreis) Tatsächlich ist die fallende Flanke 
entscheident (roter kreis). Interesannterweise müssen die Daten erst 2 
ns nach der Fallenden Flanke gültig sein.
Angehängte Dateien:
#1313026
Lesenswert?

Michael Sauron schrieb:

> Ich binn davon ausgegangen, das die Daten mit steigender Flanke
> Übernommen werden (grüner kreis) Tatsächlich ist die fallende Flanke
> entscheident (roter kreis). Interesannterweise müssen die Daten erst 2
> ns nach der Fallenden Flanke gültig sein.

Da dies ein asynchrones SRAM ist, sind es nicht die Flanken die 
interessant sind, sondern die Pegel.
Du kannst also jederzeit die Daten ändern, die Daten die zuletzt vor der 
steigenden Flanke (unter Beachtung der Writetime) angelegen haben, 
stehen nachher im SRAM.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren