⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 leon3mp.vhd

📁 ahb sdram interface.arm cpu series,include controller
💻 VHD
📖 第 1 页 / 共 2 页
字号:
    dsurx_pad : inpad generic map (tech  => padtech) port map (dsurx, dui.rxd);    dsutx_pad : outpad generic map (tech => padtech) port map (dsutx, duo.txd);  end generate;  nouah : if CFG_AHB_UART = 0 generate apbo(7) <= apb_none; end generate;  ahbjtaggen0 : if CFG_AHB_JTAG = 1 generate    ahbjtag0 : ahbjtag generic map(tech => fabtech, hindex => CFG_NCPU+CFG_AHB_UART)      port map(rstn, clkm, gnd(0), gnd(0), gnd(0), open, ahbmi, ahbmo(CFG_NCPU+CFG_AHB_UART),               open, open, open, open, open, open, open, gnd(0));  end generate;  -------------------------------------------------------------------------  Memory controllers --------------------------------------------------------------------------------------------------------------------  src : if CFG_SRCTRL = 1 generate	-- 32-bit PROM/SRAM controller    sr0 : srctrl generic map (hindex => 0, ramws => CFG_SRCTRL_RAMWS, 	romws => CFG_SRCTRL_PROMWS, ramaddr => 16#400#, 	prom8en => CFG_SRCTRL_8BIT, rmw => CFG_SRCTRL_RMW)    port map (rstn, clkm, ahbsi, ahbso(0), memi, memo, sdo3);    apbo(0) <= apb_none;  end generate;  mg2 : if CFG_MCTRL_LEON2 = 1 generate 	-- LEON2 memory controller    sr1 : smc_mctrl generic map (hindex => 0, pindex => 0, paddr => 0, 	srbanks => 2, sden => CFG_MCTRL_SDEN, ram8 => CFG_MCTRL_RAM8BIT,	ram16 => CFG_MCTRL_RAM16BIT, invclk => CFG_MCTRL_INVCLK, 	sepbus => CFG_MCTRL_SEPBUS, sdbits => 32 + 32*CFG_MCTRL_SD64)    port map (rstn, clkm, memi, memo, ahbsi, ahbso(0), apbi, apbo(0), wpo, sdo,             s_eth_aen, s_eth_readn, s_eth_writen, s_eth_nbe);    sdpads : if CFG_MCTRL_SDEN = 1 generate 	-- SDRAM controller      sd2 : if CFG_MCTRL_SEPBUS = 1 generate        sa_pad : outpadv generic map (width => 12) port map (sa, memo.sa(11 downto 0));        sdba_pad : outpadv generic map (width => 2) port map (sdba, memo.sa(14 downto 13));        bdr : for i in 0 to 3 generate          sd_pad : iopadv generic map (tech => padtech, width => 8)          port map (sd(31-i*8 downto 24-i*8), memo.data(31-i*8 downto 24-i*8),		memo.bdrive(i), memi.sd(31-i*8 downto 24-i*8));          sd2 : if CFG_MCTRL_SD64 = 1 generate            sd_pad2 : iopadv generic map (tech => padtech, width => 8)            port map (sd(31-i*8+32 downto 24-i*8+32), memo.data(31-i*8 downto 24-i*8),		memo.bdrive(i), memi.sd(31-i*8+32 downto 24-i*8+32));          end generate;        end generate;      end generate;      sdwen_pad : outpad generic map (tech => padtech) 	   port map (sdwen, sdo.sdwen);      sdras_pad : outpad generic map (tech => padtech) 	   port map (sdrasn, sdo.rasn);      sdcas_pad : outpad generic map (tech => padtech) 	   port map (sdcasn, sdo.casn);      sddqm_pad : outpadv generic map (width =>4, tech => padtech) 	   port map (sddqm, sdo.dqm(3 downto 0));    end generate;    sdcke_pad : outpad generic map (tech => padtech) port map (sdcke, sdo.sdcke(0));    sdcsn_pad : outpad generic map (tech => padtech) port map (sdcsn, sdo.sdcsn(0));  end generate;  wpn <= '1'; byten <= '0';  nosd0 : if (CFG_MCTRL_LEON2 = 0) generate 	-- no SDRAM controller     sdcke_pad : outpad generic map (tech => padtech) port map (sdcke, sdo3.sdcke(0));     sdcsn_pad : outpad generic map (tech => padtech) port map (sdcsn, sdo3.sdcsn(0));  end generate;  memi.brdyn  <= '1'; memi.bexcn <= '1';  memi.writen <= '1'; memi.wrn <= "1111"; memi.bwidth <= "00";  mg0 : if not ((CFG_SRCTRL = 1) or (CFG_MCTRL_LEON2 = 1)) generate	-- no prom/sram pads    apbo(0) <= apb_none; ahbso(0) <= ahbs_none;    rams_pad : outpad generic map (tech => padtech)      port map (ramsn, vcc(0));    roms_pad : outpad generic map (tech => padtech)      port map (romsn, vcc(0));  end generate;  mgpads : if (CFG_SRCTRL = 1) or (CFG_MCTRL_LEON2 = 1) generate	-- prom/sram pads    addr_pad : outpadv generic map (width => 24, tech => padtech)      port map (address, memo.address(23 downto 0));    memb_pad : outpadv generic map (width => 4, tech => padtech)      port map (mben, memo.mben);    rams_pad : outpad generic map (tech => padtech)      port map (ramsn, memo.ramsn(0));    roms_pad : outpad generic map (tech => padtech)      port map (romsn, memo.romsn(0));    oen_pad : outpad generic map (tech => padtech)      port map (oen, memo.oen);    rwen_pad : outpad generic map (tech => padtech)      port map (rwen, memo.wrn(0));    roen_pad : outpad generic map (tech => padtech)      port map (ramoen, memo.ramoen(0));    wri_pad : outpad generic map (tech => padtech)      port map (writen, memo.writen);-- pragma translate_off   iosn_pad : outpad generic map (tech => padtech)      port map (iosn, memo.iosn);-- pragma translate_on      -- for smc lan chip   eth_aen_pad : outpad generic map (tech => padtech)        port map (eth_aen, s_eth_aen);   eth_readn_pad : outpad generic map (tech => padtech)       port map (eth_readn, s_eth_readn);   eth_writen_pad : outpad generic map (tech => padtech)       port map (eth_writen, s_eth_writen);   eth_nbe_pad : outpadv generic map (width => 4, tech => padtech)       port map (eth_nbe, s_eth_nbe);    bdr : for i in 0 to 3 generate      data_pad : iopadv generic map (tech => padtech, width => 8)        port map (data(31-i*8 downto 24-i*8), memo.data(31-i*8 downto 24-i*8),                  memo.bdrive(i), memi.data(31-i*8 downto 24-i*8));    end generate;  end generate;-------------------------------------------------------------------------  APB Bridge and various periherals -----------------------------------------------------------------------------------------------------  apb0 : apbctrl                        -- AHB/APB bridge    generic map (hindex => 1, haddr => CFG_APBADDR)    port map (rstn, clkm, ahbsi, ahbso(1), apbi, apbo);  ua1 : if CFG_UART1_ENABLE /= 0 generate    uart1 : apbuart                     -- UART 1      generic map (pindex   => 1, paddr => 1, pirq => 2, console => dbguart,                   fifosize => CFG_UART1_FIFO)      port map (rstn, clkm, apbi, apbo(1), u1i, u1o);    u1i.rxd <= rxd1; u1i.ctsn <= '0'; u1i.extclk <= '0'; txd1 <= u1o.txd;  end generate;  noua0 : if CFG_UART1_ENABLE = 0 generate apbo(1) <= apb_none; end generate;  irqctrl : if CFG_IRQ3_ENABLE /= 0 generate    irqctrl0 : irqmp                    -- interrupt controller      generic map (pindex => 2, paddr => 2, ncpu => NCPU)      port map (rstn, clkm, apbi, apbo(2), irqo, irqi);  end generate;  irq3 : if CFG_IRQ3_ENABLE = 0 generate    x : for i in 0 to NCPU-1 generate      irqi(i).irl <= "0000";    end generate;    apbo(2) <= apb_none;  end generate;  gpt : if CFG_GPT_ENABLE /= 0 generate    timer0 : gptimer                    -- timer unit      generic map (pindex => 3, paddr => 3, pirq => CFG_GPT_IRQ,                   sepirq => CFG_GPT_SEPIRQ, sbits => CFG_GPT_SW, ntimers => CFG_GPT_NTIM,                   nbits  => CFG_GPT_TW)      port map (rstn, clkm, apbi, apbo(3), gpti, open);    gpti.dhalt <= dsuo.active; gpti.extclk <= '0';  end generate;  notim : if CFG_GPT_ENABLE = 0 generate apbo(3) <= apb_none; end generate;    gpio0 : if CFG_GRGPIO_ENABLE /= 0 generate     -- GPIO unit    grgpio0: grgpio    generic map(pindex => 5, paddr => 5, imask => CFG_GRGPIO_IMASK, nbits => CFG_GRGPIO_WIDTH)    port map(rst => rstn, clk => clkm, apbi => apbi, apbo => apbo(5),    gpioi => gpioi, gpioo => gpioo);    pio_pads : for i in 0 to CFG_GRGPIO_WIDTH-1 generate        pio_pad : iopad generic map (tech => padtech)            port map (gpio(i), gpioo.dout(i), gpioo.oen(i), gpioi.din(i));    end generate;  end generate;  --------------------------------------------------------------------------  ATA Controller --------------------------------------------------------------------------------------------------------------------------  atac : if CFG_ATA = 1 generate     atac0 : atactrl      generic map(         hindex  => 5,         haddr   => CFG_ATAIO,         hmask   => 16#fff#,         pirq    => CFG_ATAIRQ,                  TWIDTH   => 8,         -- counter width                  -- PIO mode 0 settings (@100MHz clock)         PIO_mode0_T1   => 6,   -- 70ns         PIO_mode0_T2   => 28,  -- 290ns         PIO_mode0_T4   => 2,   -- 30ns         PIO_mode0_Teoc => 23   -- 240ns ==> T0 - T1 - T2 = 600 - 70 - 290 = 240      )      port map(         rst   => rstn,         arst  => '1',         clk   => clkm,         ahbsi => ahbsi,         ahbso => ahbso(5),         cfo   => cf,         -- ATA signals         ata_resetn => ata.rst,          ddin       => ata.ddi,          ddout      => ata.ddo,          ddoe       => ata.oen,          da         => ata.da,          cs0n       => ata.cs0,          cs1n       => ata.cs1,          diorn      => ata.dior,         diown      => ata.diow,         iordy      => ata.iordy,         intrq      => ata.intrq,         dmack      => ata.dmack      );      -- pragma translate_off       ata_rst_pad : outpad generic map (tech => padtech)         port map (ata_rst, ata.rst);-- pragma translate_on       ata_data_pad : iopadv generic map (tech => padtech, width => 16, oepol => 1)         port map (ata_data, ata.ddo, ata.oen, ata.ddi);       ata_da_pad : outpadv generic map (tech => padtech, width => 3)         port map (ata_da, ata.da);       ata_cs0_pad : outpad generic map (tech => padtech)         port map (ata_cs0, ata.cs0);       ata_cs1_pad : outpad generic map (tech => padtech)         port map (ata_cs1, ata.cs1);       ata_dior_pad : outpad generic map (tech => padtech)         port map (ata_dior, ata.dior);       ata_diow_pad : outpad generic map (tech => padtech)         port map (ata_diow, ata.diow);       iordy_pad : inpad generic map (tech => padtech)         port map (ata_iordy, ata.iordy);       intrq_pad : inpad generic map (tech => padtech)         port map (ata_intrq, ata.intrq);       dmack_pad : outpad generic map (tech => padtech)         port map (ata_dmack, ata.dmack);              -- for CompactFlach mode selection       cf_gnd_da_pad : outpadv generic map (tech => padtech, width => 8)         port map (cf_gnd_da, cf.da);       cf_atasel_pad : outpad generic map (tech => padtech)         port map (cf_atasel, cf.atasel);       cf_we_pad : outpad generic map (tech => padtech)         port map (cf_we, cf.we);       cf_power_pad : outpad generic map (tech => padtech)         port map (cf_power, cf.power);       cf_csel_pad : outpad generic map (tech => padtech)         port map (cf_csel, cf.csel);        end generate;--------------------------------------------------------------------------  AHB ROM ---------------------------------------------------------------------------------------------------------------------------------  bpromgen : if CFG_AHBROMEN /= 0 generate    brom : entity work.ahbrom      generic map (hindex => 6, haddr => CFG_AHBRODDR, pipe => CFG_AHBROPIP)      port map ( rstn, clkm, ahbsi, ahbso(6));  end generate;  nobpromgen : if CFG_AHBROMEN = 0 generate     ahbso(6) <= ahbs_none;  end generate;--------------------------------------------------------------------------  AHB RAM ---------------------------------------------------------------------------------------------------------------------------------  ahbramgen : if CFG_AHBRAMEN = 1 generate    ahbram0 : ahbram generic map (hindex => 3, haddr => CFG_AHBRADDR,                                  tech   => CFG_MEMTECH, kbytes => CFG_AHBRSZ)      port map (rstn, clkm, ahbsi, ahbso(3));  end generate;  nram : if CFG_AHBRAMEN = 0 generate ahbso(3) <= ahbs_none; end generate;--------------------------------------------------------------------------  Drive unused bus elements  --------------------------------------------------------------------------------------------------------------  nam1 : for i in (NCPU+CFG_AHB_UART+CFG_AHB_JTAG) to NAHBMST-1 generate    ahbmo(i) <= ahbm_none;  end generate;  nap0 : for i in 6 to NAPBSLV-1 generate apbo(i) <= apb_none; end generate;  nah0 : for i in 7 to NAHBSLV-1 generate ahbso(i) <= ahbs_none; end generate;  -- invert signal for input via a key  dsubre  <= not dsubren;  -- for smc lan chip  eth_lclk     <= vcc(0);  eth_nads     <= gnd(0);  eth_ncycle   <= vcc(0);  eth_wnr      <= vcc(0);  eth_nvlbus   <= vcc(0);  eth_nrdyrtn  <= vcc(0);  eth_ndatacs  <= vcc(0);--------------------------------------------------------------------------  Boot message  ----------------------------------------------------------------------------------------------------------------------------- pragma translate_off  x : report_version   generic map (   msg1 => "LEON3 Altera EP2C60 SDR Demonstration design",   msg2 => "GRLIB Version " & tost(LIBVHDL_VERSION/1000) & "." & tost((LIBVHDL_VERSION mod 1000)/100)      & "." & tost(LIBVHDL_VERSION mod 100) & ", build " & tost(LIBVHDL_BUILD),   msg3 => "Target technology: " & tech_table(fabtech) & ",  memory library: " & tech_table(memtech),   mdel => 1  );-- pragma translate_onend;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -