##// END OF EJS Templates
Sync, Working on BeagleSynth design.
Sync, Working on BeagleSynth design.

File last commit:

r263:9bf9890b50e7 alexis
r263:9bf9890b50e7 alexis
Show More
BeagleSynth.vhd
229 lines | 6.9 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;
--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 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_ulogic_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);
--------------------------------------------------------
---- SDRAM
---- For SDRAM config have a look on leon3-altera-ep1c20
---- design from GRLIB, the IS42S32400E is similar to
---- MT48LC4M32B2.
--------------------------------------------------------
sdcke : out std_logic_vector ( 1 downto 0); -- clk en
sdcsn : out std_logic_vector ( 1 downto 0); -- 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 (3 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 rstraw : std_ulogic;
signal pciclk : std_ulogic;
signal sdclkl : std_ulogic;
signal cgi : clkgen_in_type;
signal cgo : clkgen_out_type;
--- AHB / APB
signal apbi : apb_slv_in_type;
signal apbo : apb_slv_out_vector := (others => apb_none);
signal ahbsi : ahb_slv_in_type;
signal ahbso : ahb_slv_out_vector := (others => ahbs_none);
signal ahbmi : ahb_mst_in_type;
signal ahbmo : ahb_mst_out_vector := (others => ahbm_none);
--- MEM CTRLR
signal memi : memory_in_type;
signal memo : memory_out_type;
signal sdo : sdram_out_type;
--UART
signal ahbuarti : uart_in_type;
signal ahbuarto : uart_out_type;
signal apbuarti : uart_in_type;
signal apbuarto : uart_out_type;
signal led2int : std_logic;
begin
DAC_nCLR <= '1';
DAC_nCS <= '1';
CAL_IN_SCK <= '1';
DAC_SDI <= (others =>'1');
rst0 : rstgen port map (reset, clkm, cgo.clklock, rstn, rstraw);
lclk <= clk;
clkgen0 : clkgen -- clock generatorsa
generic map (clktech, CFG_CLKMUL, CFG_CLKDIV, CFG_MCTRL_SDEN,
CFG_CLK_NOFB, 0, 0, 0, boardfreq, 0, 0, CFG_OCLKDIV)
port map (lclk, lclk, clkm, open, clk2x, sdclkl, pciclk, cgi, cgo);
----------------------------------------------------------------------
--- AHB CONTROLLER -------------------------------------------------
----------------------------------------------------------------------
ahb0 : ahbctrl -- AHB arbiter/multiplexer
generic map (defmast => CFG_DEFMST, split => CFG_SPLIT,
rrobin => CFG_RROBIN, ioaddr => CFG_AHBIO,
ioen => IOAEN, nahbm => maxahbm, nahbs => 8)
port map (rstn, clkm, ahbmi, ahbmo, ahbsi, ahbso);
----------------------------------------------------------------------
--- AHB UART -------------------------------------------------------
----------------------------------------------------------------------
dcomgen : if CFG_AHB_UART = 1 generate
dcom0: ahbuart -- Debug UART
generic map (hindex => CFG_NCPU, pindex => 7, paddr => 7)
port map (rstn, clkm, ahbuarti, ahbuarto, apbi, apbo(7), ahbmi, ahbmo(CFG_NCPU));
ahbuarti.rxd <= RXD;
TXD <= ahbuarto.txd;
led(0) <= not ahbuarti.rxd; led(1) <= not ahbuarto.txd;
end generate;
nouah : if CFG_AHB_UART = 0 generate apbo(7) <= apb_none; end generate;
----------------------------------------------------------------------
--- APB Bridge -----------------------------------------------------
----------------------------------------------------------------------
apb0 : apbctrl -- AHB/APB bridge
generic map (hindex => 1, haddr => CFG_APBADDR)
port map (rstn, clkm, ahbsi, ahbso(1), apbi, apbo );
----------------------------------------------------------------------
--- APB UART -------------------------------------------------------
----------------------------------------------------------------------
ua1 : if CFG_UART1_ENABLE /= 0 generate
uart1 : apbuart -- UART 1
generic map (pindex => 1, paddr => 1, pirq => 2, console => CFG_DUART,
fifosize => CFG_UART1_FIFO)
port map (rstn, clkm, apbi, apbo(1), ahbuarti, apbuarto);
apbuarti.rxd <= urxd1; apbuarti.extclk <= '0'; utxd1 <= apbuarto.txd;
apbuarti.ctsn <= '0';
end generate;
noua0 : if CFG_UART1_ENABLE = 0 generate apbo(1) <= apb_none; end generate;
--div0: Clk_divider
-- generic map( 100000000,1)
-- Port map( clkm,rstn,LED(2));
LED(2) <= led2int;
process(clkm,rstn)
begin
if rstn = '0' then
led2int <= '0';
elsif clkm'event and clkm='1' then
led2int <= not led2int;
end if;
end process;
mctrl0 : mctrl generic map (srbanks => 4, sden => 1)
port map (rstn, clkm, memi, memo, ahbsi, ahbso(0), apbi, apbo(0), wprot, sdo);
-- memory controller inputs not used in this configuration
memi.brdyn <= '1'; memi.bexcn <= '1'; memi.wrn <= "1111";
memi.sd <= Data;
-- prom width at reset
memi.bwidth <= "10";
-- I/O pads driving data memory bus data signals
datapads : for i in 0 to 3 generate
data_pad : iopadv generic map (width => 8)
port map (
pad => data(31-i*8 downto 24-i*8),
o => memi.data(31-i*8 downto 24-i*8),
en => memo.bdrive(i),
i => memo.data(31-i*8 downto 24-i*8)
);
end generate;
-- connect memory controller outputs to entity output signals
Address <= memo.sa(11 downto 0);
sdba <= memo.sa(13 downto 12);
writen <= memo.writen; read <= memo.read; iosn <= memo.iosn;
sdcke <= sdo.sdcke;
sdwen <= sdo.sdwen;
sdcsn <= sdo.sdcsn;
sdrasn <= sdo.rasn;
sdcasn <= sdo.casn;
sddqm <= sdo.dqm(3 downto 0);
end;
end rtl;