##// END OF EJS Templates
Few fixes....
Few fixes. Whole LFR simulation WIP.

File last commit:

r227:bcb2ddaa68e1 JC
r682:c53e1b6b3045 default
Show More
SSRAM_plugin.vhd
186 lines | 5.7 KiB | text/x-vhdl | VhdlLexer
------------------------------------------------------------------------------
-- This file is a part of the LPP VHDL IP LIBRARY
-- Copyright (C) 2011, Laboratory of Plasmas Physic - CNRS
--
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-------------------------------------------------------------------------------
-- Author : Alexis Jeandet
-- Mail : alexis.jeandet@lpp.polytechnique.fr
-------------------------------------------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
LIBRARY gaisler;
USE gaisler.misc.ALL;
USE gaisler.memctrl.ALL;
LIBRARY techmap;
USE techmap.gencomp.ALL;
USE techmap.allclkgen.ALL;
ENTITY ssram_plugin IS
GENERIC (tech : INTEGER := 0);
PORT
(
clk : IN STD_LOGIC;
mem_ctrlr_o : IN memory_out_type;
SSRAM_CLK : OUT STD_LOGIC;
nBWa : OUT STD_LOGIC;
nBWb : OUT STD_LOGIC;
nBWc : OUT STD_LOGIC;
nBWd : OUT STD_LOGIC;
nBWE : OUT STD_LOGIC;
nADSC : OUT STD_LOGIC;
nADSP : OUT STD_LOGIC;
nADV : OUT STD_LOGIC;
nGW : OUT STD_LOGIC;
nCE1 : OUT STD_LOGIC;
CE2 : OUT STD_LOGIC;
nCE3 : OUT STD_LOGIC;
nOE : OUT STD_LOGIC;
MODE : OUT STD_LOGIC;
ZZ : OUT STD_LOGIC
);
END ENTITY;
ARCHITECTURE ar_ssram_plugin OF ssram_plugin IS
SIGNAL nADSPint : STD_LOGIC := '1';
SIGNAL nOEint : STD_LOGIC := '1';
SIGNAL RAMSN_reg : STD_LOGIC := '1';
SIGNAL OEreg : STD_LOGIC := '1';
SIGNAL nBWaint : STD_LOGIC := '1';
SIGNAL nBWbint : STD_LOGIC := '1';
SIGNAL nBWcint : STD_LOGIC := '1';
SIGNAL nBWdint : STD_LOGIC := '1';
SIGNAL nBWEint : STD_LOGIC := '1';
SIGNAL nCE1int : STD_LOGIC := '1';
SIGNAL CE2int : STD_LOGIC := '0';
SIGNAL nCE3int : STD_LOGIC := '1';
TYPE stateT IS (idle, st1, st2, st3, st4);
SIGNAL state : stateT;
--SIGNAL nclk : STD_LOGIC;
BEGIN
PROCESS(clk , mem_ctrlr_o.RAMSN(0))
BEGIN
IF mem_ctrlr_o.RAMSN(0) = '1' then
state <= idle;
ELSIF clk = '1' and clk'event then
CASE state IS
WHEN idle =>
state <= st1;
WHEN st1 =>
state <= st2;
WHEN st2 =>
state <= st3;
WHEN st3 =>
state <= st4;
WHEN st4 =>
state <= st1;
END CASE;
END IF;
END PROCESS;
--nclk <= NOT clk;
ssram_clk_pad : outpad GENERIC MAP (tech => tech)
PORT MAP (SSRAM_CLK, NOT clk);
nBWaint <= mem_ctrlr_o.WRN(3)OR mem_ctrlr_o.ramsn(0);
nBWa_pad : outpad GENERIC MAP (tech => tech)
PORT MAP (nBWa, nBWaint);
nBWbint <= mem_ctrlr_o.WRN(2)OR mem_ctrlr_o.ramsn(0);
nBWb_pad : outpad GENERIC MAP (tech => tech)
PORT MAP (nBWb, nBWbint);
nBWcint <= mem_ctrlr_o.WRN(1)OR mem_ctrlr_o.ramsn(0);
nBWc_pad : outpad GENERIC MAP (tech => tech)
PORT MAP (nBWc, nBWcint);
nBWdint <= mem_ctrlr_o.WRN(0)OR mem_ctrlr_o.ramsn(0);
nBWd_pad : outpad GENERIC MAP (tech => tech)
PORT MAP (nBWd, nBWdint);
nBWEint <= mem_ctrlr_o.WRITEN OR mem_ctrlr_o.ramsn(0);
nBWE_pad : outpad GENERIC MAP (tech => tech)
PORT MAP (nBWE, nBWEint);
nADSC_pad : outpad GENERIC MAP (tech => tech)
PORT MAP (nADSC, '1');
--nADSPint <= not((RAMSN_reg xor mem_ctrlr_o.RAMSN(0)) and RAMSN_reg);
nADSPint <= '0' WHEN state = st1 ELSE '1';
PROCESS(clk)
BEGIN
IF clk'EVENT AND clk = '1' THEN
RAMSN_reg <= mem_ctrlr_o.RAMSN(0);
END IF;
END PROCESS;
nADSP_pad : outpad GENERIC MAP (tech => tech)
PORT MAP (nADSP, nADSPint);
nADV_pad : outpad GENERIC MAP (tech => tech)
PORT MAP (nADV, '1');
nGW_pad : outpad GENERIC MAP (tech => tech)
PORT MAP (nGW, '1');
nCE1int <= nADSPint OR mem_ctrlr_o.address(31) OR (NOT mem_ctrlr_o.address(30)) OR mem_ctrlr_o.address(29) OR mem_ctrlr_o.address(28);
CE2int <= (NOT mem_ctrlr_o.address(27)) AND (NOT mem_ctrlr_o.address(26)) AND (NOT mem_ctrlr_o.address(25)) AND (NOT mem_ctrlr_o.address(24));
nCE3int <= mem_ctrlr_o.address(23) OR mem_ctrlr_o.address(22) OR mem_ctrlr_o.address(21) OR mem_ctrlr_o.address(20);
nCE1_pad : outpad GENERIC MAP (tech => tech)
PORT MAP (nCE1, nCE1int);
CE2_pad : outpad GENERIC MAP (tech => tech)
PORT MAP (CE2, CE2int);
nCE3_pad : outpad GENERIC MAP (tech => tech)
PORT MAP (nCE3, nCE3int);
nOE_pad : outpad GENERIC MAP (tech => tech)
PORT MAP (nOE, nOEint);
PROCESS(clk)
BEGIN
IF clk'EVENT AND clk = '1' THEN
OEreg <= mem_ctrlr_o.OEN;
END IF;
END PROCESS;
--nOEint <= OEreg or mem_ctrlr_o.RAMOEN(0);
nOEint <= '0' WHEN state = st2 OR state = st3 OR state = st4 ELSE '1';
MODE_pad : outpad GENERIC MAP (tech => tech)
PORT MAP (MODE, '0');
ZZ_pad : outpad GENERIC MAP (tech => tech)
PORT MAP (ZZ, '0');
END ARCHITECTURE;