|
|
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;
|
|
|
|
|
|
|
|
|
|
|
|
|