www.mikrocontroller.net

Forum: FPGA, VHDL & Co. SRAM reagiert nicht


Autor: Michael Sauron (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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;

Autor: Michael Sauron (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Und das hier habe ich mit Chipscope gemessen. Ist schon merkürdig, das 
hier nur 4 Byte auftauchen, und dann die 3 einfach stehen bleibt, io 
standart ist lvcmos.

Michael Sauren

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Setz mal WE\ beim Lesen auf high.

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

Bewertung
0 lesenswert
nicht lesenswert
Output-Enable und Write-Enable dürfen am SRAM normalerweise nicht 
gleichzeitig aktiv sein. Zu welchem SRAM passt dein Timing?

Üblicherweise sind diese Signale zudem low-Aktiv. Sieh dir mal das DB 
von deinem RAM nochmal an.

Autor: Michael Sauron (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael Sauron (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

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.