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.