Hallo zusammen,
Mein Ziel ist es: Memory Controller für 128KB x 8 Baustein mit tAA=45 ns
Nur diese sollte über PCI e bedient werden(also 125 MHz = 8 ns).
Folglich SRAM zu langsam für PCI E Takt.
Aus diesen Grund möchte ich gern 6 Waitstate(6x8= 48 ns) innerhalb meine
vorliegende Memory Controller einfügen. Nur bin ich neu mit dem Thema.
------------------------------------------------------------------------
---
ibrary ieee;
use ieee.std_logic_1164.all;
entity sram_ctrl is
port(
clk, reset: in std_logic;
-- to/from main system
mem: in std_logic;
rw: in std_logic;
addr: in std_logic_vector(16 downto 0);
data_f2s: in std_logic_vector(7 downto 0);
ready: out std_logic;
data_s2f_r, data_s2f_ur: out std_logic_vector(7 downto 0);
-- to/from chip
ad: out std_logic_vector(16 downto 0);
we_n, oe_n: out std_logic;
-- SRAM chip a
dio_a: inout std_logic_vector(7 downto 0);
ce_a_n, ub_a_n, lb_a_n: out std_logic
);
end sram_ctrl;
architecture arch of sram_ctrl is
type state_type is (idle, rd1, rd2, wr1, wr2);
signal state_reg, state_next: state_type;
signal data_f2s_reg, data_f2s_next: std_logic_vector(7 downto 0);
signal data_s2f_reg, data_s2f_next: std_logic_vector(7 downto 0);
signal addr_reg, addr_next: std_logic_vector(16 downto 0);
signal we_buf, oe_buf, tri_buf: std_logic;
signal we_reg, oe_reg, tri_reg: std_logic;
begin
-- state & data registers
process(clk,reset)
begin
if (reset='1') then
state_reg <= idle;
addr_reg <= (others=>'0');
data_f2s_reg <= (others=>'0');
data_s2f_reg <= (others=>'0');
tri_reg <= '1';
we_reg <= '1';
oe_reg <= '1';
elsif (clk'event and clk='1') then
state_reg <= state_next;
addr_reg <= addr_next;
data_f2s_reg <= data_f2s_next;
data_s2f_reg <= data_s2f_next;
tri_reg <= tri_buf;
we_reg <= we_buf;
oe_reg <= oe_buf;
end if;
end process;
-- next-state logic
process(state_reg,mem,rw,dio_a,addr,data_f2s,
data_f2s_reg,data_s2f_reg,addr_reg)
begin
addr_next <= addr_reg;
data_f2s_next <= data_f2s_reg;
data_s2f_next <= data_s2f_reg;
ready <= '0';
case state_reg is
when idle =>
if mem='0' then
state_next <= idle;
else
addr_next <= addr;
if rw='0' then --write
state_next <= wr1;
data_f2s_next <= data_f2s;
else -- read
state_next <= rd1;
end if;
end if;
ready <= '1';
when wr1 =>
state_next <= wr2;
when wr2 =>
state_next <= idle;
when rd1 =>
state_next <= rd2;
when rd2=>
data_s2f_next <= dio_a;
state_next <= idle;
end case;
end process;
-- next-state logic
process(state_next)
begin
tri_buf <= '1'; -- signals are active low
we_buf <= '1';
oe_buf <= '1';
case state_next is
when idle =>
when wr1 =>
tri_buf <= '0';
we_buf <= '0';
when wr2 =>
tri_buf <= '0';
when rd1 =>
oe_buf <= '0';
when rd2=>
oe_buf <= '0';
end case;
end process;
-- to main system
data_s2f_r <= data_s2f_reg;
data_s2f_ur <= dio_a;
-- to sram
we_n <= we_reg;
oe_n <= oe_reg;
ad <= addr_reg;
--i/o for SRAM chip a
ce_a_n <='0';
ub_a_n <='0';
lb_a_n <='0';
dio_a <= data_f2s_reg when tri_reg='0' else (others=>'Z');
end arch;
Meine Frage lauten:
1)
sieht mein SRAM Controller(FSM) funktionsfähig aus da ich nicht zum
Laufen bringen konnte?
2)
Wie soll ich dann 6 Waitstate für PCI Express einfügen?
Wie kann ich da 6 Waitstate
@ Ngii Rayan (fabito) >Mein Ziel ist es: Memory Controller für 128KB x 8 Baustein mit tAA=45 ns >Nur diese sollte über PCI e bedient werden(also 125 MHz = 8 ns). >Folglich SRAM zu langsam für PCI E Takt. Wie kommt man auf die Idee, in einen Porsche (PCIe) eine Dampfmaschine (SRAM 128Kx8) einzubauen? >Aus diesen Grund möchte ich gern 6 Waitstate(6x8= 48 ns) innerhalb meine >vorliegende Memory Controller einfügen. Nur bin ich neu mit dem Thema. Merkt man. PCIe ist was großkalibriges, nix für Anfänger. Fang mit DEUTLICH einfacherern Sachen an, z.B. ein einfacher PWM-Generator.
Falk Brunner schrieb: > Wie kommt man auf die Idee, in einen Porsche (PCIe) eine Dampfmaschine > (SRAM 128Kx8) einzubauen? Die Idee ist nicht neu: http://de.wikipedia.org/wiki/Porsche_Traktor scnr, Duke
Duke Scarring schrieb: > Porsche_Traktor Der Ferdinand war schon ein schlauer Fuchs. Hat einfach das selbe Fahrwerk weiterverwendet... ;-)
Mit PCI Express habe ich schon einiges bisher gemacht: Beispielsweise MSI Interrupt Verwaltung GPIO Ansteuerung Nur ist das Thema Memory Controller für mich unbekannt. Aus diesem Grund bitte ich um Ihr Support. ist es möglich überhaupt oder hat jemand Erfahrung damit?
Wieso nimmst du nicht einen DDR1/2/3-Speicher? Dafür gibt es fertige IP-Cores...
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.