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;
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
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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.