##// END OF EJS Templates
Working bbone GPMC_interface interface
Working bbone GPMC_interface interface

File last commit:

r282:252bd09e4210 alexis
r282:252bd09e4210 alexis
Show More
BeagleSynth.vhd
199 lines | 6.2 KiB | text/x-vhdl | VhdlLexer
library ieee;
use ieee.std_logic_1164.all;
use IEEE.numeric_std.all;
library grlib, techmap;
use grlib.amba.all;
use grlib.amba.all;
use grlib.stdlib.all;
use techmap.gencomp.all;
use techmap.allclkgen.all;
library gaisler;
use gaisler.memctrl.all;
use gaisler.leon3.all;
use gaisler.uart.all;
use gaisler.misc.all;
library esa;
use esa.memoryctrl.all;
--use gaisler.sim.all;
library lpp;
use lpp.lpp_ad_conv.all;
use lpp.lpp_amba.all;
use lpp.apb_devices_list.all;
use lpp.general_purpose.all;
use lpp.lpp_cna.all;
Library UNISIM;
use UNISIM.vcomponents.all;
use work.config.all;
--==================================================================
--
--
-- FPGA FREQ = 100MHz
--
--
--==================================================================
entity BeagleSynth is
generic (
fabtech : integer := CFG_FABTECH;
memtech : integer := CFG_MEMTECH;
padtech : integer := CFG_PADTECH;
clktech : integer := CFG_CLKTECH
);
port (
reset : in std_ulogic;
clk : in std_ulogic;
DAC_nCLR : out std_ulogic;
DAC_nCS : out std_ulogic;
CAL_IN_SCK : out std_ulogic;
DAC_SDI : out std_logic_vector(7 downto 0);
TXD : out std_ulogic;
RXD : in std_ulogic;
urxd1 : in std_ulogic;
utxd1 : out std_ulogic;
LED : out std_ulogic_vector(2 downto 0);
--------------------------------------------------------
---- Beaglebone GPMC
--------------------------------------------------------
GPMC_AD : inout std_logic_vector(15 downto 0);
GPMC_A : in std_logic_vector(19 downto 0);
GPMC_CLK_MUX0 : in std_logic;
GPMC_WEN : in std_logic;
GPMC_OEN_REN : in std_logic;
GPMC_ADVN_ALE : in std_logic;
GPMC_CSN : in std_logic_vector(2 downto 0);
GPMC_BE0N_CLE : in std_logic;
GPMC_BE1N : in std_logic;
GPMC_WAIT0 : out std_logic;
GPMC_WPN : in std_logic;
--------------------------------------------------------
---- SDRAM
---- For SDRAM config have a look on leon3-altera-ep1c20
---- design from GRLIB, the IS42S32400E is similar to
---- MT48LC4M32B2.
--------------------------------------------------------
sdcke : out std_logic; -- clk en
sdcsn : out std_logic; -- chip sel
sdwen : out std_logic; -- write en
sdrasn : out std_logic; -- row addr stb
sdcasn : out std_logic; -- col addr stb
sddqm : out std_logic_vector (3 downto 0); -- data i/o mask
sdclk : out std_logic; -- sdram clk output
sdba : out std_logic_vector (1 downto 0); -- bank select address
Address : out std_logic_vector(11 downto 0); -- sdram address
Data : inout std_logic_vector(31 downto 0) -- optional sdram data
);
end;
architecture rtl of BeagleSynth is
constant maxahbmsp : integer := CFG_NCPU+CFG_AHB_UART+
CFG_GRETH+CFG_AHB_JTAG;
constant maxahbm : integer := maxahbmsp;
constant IOAEN : integer := CFG_CAN;
constant boardfreq : integer := 100000;
signal clk2x : std_ulogic;
signal lclk : std_ulogic;
signal clkm : std_ulogic;
signal rstn : std_ulogic;
signal rst : std_ulogic;
signal rstraw : std_ulogic;
signal pciclk : std_ulogic;
signal sdclkl : std_ulogic;
signal sdclkl_DDR2 : std_ulogic;
signal cgi : clkgen_in_type;
signal cgo : clkgen_out_type;
signal DAC_DATA : CNA_16bit_T(7 downto 0,15 downto 0);
signal smpclk : std_logic;
signal smpclk_reg : std_logic;
signal DAC_SDO : std_logic;
signal GPMC_SLAVE_STATUS : std_logic_vector(15 downto 0);
signal GPMC_SLAVE_DATA : std_logic_vector(15 downto 0);
signal GPMC_SLAVE_ADDRESS : std_logic_vector(19 downto 0);
signal GPMC_SLAVE_WEN : std_logic;
signal gpmc_clk : std_logic;
attribute keep : boolean;
attribute syn_keep : boolean;
attribute syn_preserve : boolean;
attribute syn_keep of clkm : signal is true;
attribute syn_preserve of clkm : signal is true;
attribute keep of clkm : signal is true;
begin
DAC_nCLR <= '1';
resetn_pad : inpad generic map (tech => padtech) port map (reset, rst);
rst0 : rstgen port map (rst, lclk, '1', rstn, rstraw);
clk_pad : clkpad GENERIC MAP (tech => padtech) PORT MAP (clk, lclk);
cgi.pllctrl <= "00"; cgi.pllrst <= rstraw;
clkgen0 : clkgen -- clock generator
generic map (clktech, CFG_CLKMUL, CFG_CLKDIV, CFG_MCTRL_SDEN, CFG_CLK_NOFB, 0, 0, 0, boardfreq)
port map (lclk, lclk, clkm, open, open, sdclkl, open, cgi, cgo,open,open);
DAC0 : entity work.beagleSigGen
generic map(
memtech,
padtech,
clktech
)
Port map(
clk => clkm,
rstn => rstn,
CAL_IN_SCK => CAL_IN_SCK,
DAC_nCS => DAC_nCS,
DAC_SDI => DAC_SDI,
address => GPMC_SLAVE_ADDRESS(19 downto 1),
DATA => GPMC_SLAVE_DATA,
WEN => GPMC_SLAVE_WEN,
REN_debug => open,
FIFO_FULL => GPMC_SLAVE_STATUS(7 downto 0),
FIFO_EMPTY => GPMC_SLAVE_STATUS(15 downto 8)
);
LED(0) <= GPMC_SLAVE_STATUS(0);
LED(1) <= GPMC_SLAVE_STATUS(8);
LED(2) <= GPMC_SLAVE_WEN;
gpmc_clk_pad : clkpad GENERIC MAP (tech => padtech) PORT MAP (GPMC_CLK_MUX0, gpmc_clk);
GPMCS0: entity work.GPMC_SLAVE
generic map(memtech,padtech)
Port map(
clk => clkm,
reset => rstn,
STATUS => GPMC_SLAVE_STATUS,
DATA => GPMC_SLAVE_DATA,
ADDRESS => GPMC_SLAVE_ADDRESS,
WEN => GPMC_SLAVE_WEN,
SMP_CKL => open,
SMP_WEN => open,
GPMC_AD => GPMC_AD,
GPMC_A => GPMC_A,
GPMC_CLK => gpmc_clk,
GPMC_WEN => GPMC_WEN,
GPMC_OEN_REN => GPMC_OEN_REN,
GPMC_ADVN_ALE => GPMC_ADVN_ALE,
GPMC_CSN => GPMC_CSN,
GPMC_BE0N_CLE => GPMC_BE0N_CLE,
GPMC_BE1N => GPMC_BE1N,
GPMC_WAIT0 => GPMC_WAIT0,
GPMC_WPN => GPMC_WPN
);
end rtl;