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

📄 leon3mp.vhd

📁 Clock gating logic for LEON3 processor.
💻 VHD
📖 第 1 页 / 共 2 页
字号:
        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 =>8, tech => padtech) 	   port map (sddqm, sdo.dqm);      sdcke_pad : outpadv generic map (width =>2, tech => padtech) 	   port map (sdcke, sdo.sdcke);       sdcsn_pad : outpadv generic map (width =>2, tech => padtech) 	   port map (sdcsn, sdo.sdcsn);     end generate;  end generate;  nosd0 : if (CFG_MCTRL_SDEN = 0) and (CFG_SDCTRL = 0) generate 		-- no SDRAM controller      sdcke_pad : outpadv generic map (width =>2, tech => padtech) 	   port map (sdcke, sdo3.sdcke);       sdcsn_pad : outpadv generic map (width =>2, tech => padtech) 	   port map (sdcsn, sdo3.sdcsn);   end generate;  memi.brdyn <= '1'; memi.bexcn <= '1';  memi.writen <= '1'; memi.wrn <= "1111"; memi.bwidth <= "10";  mgpads : if (CFG_SRCTRL = 1) or (CFG_MCTRL_LEON2 = 1) generate	-- prom/sram pads    addr_pad : outpadv generic map (width => 28, tech => padtech) 	port map (address, memo.address(27 downto 0));     rams_pad : outpadv generic map (width => 5, tech => padtech) 	port map (ramsn, memo.ramsn(4 downto 0));     roms_pad : outpadv generic map (width => 2, tech => padtech) 	port map (romsn, memo.romsn(1 downto 0));     oen_pad  : outpad generic map (tech => padtech) 	port map (oen, memo.oen);    rwen_pad : outpadv generic map (width => 4, tech => padtech) 	port map (rwen, memo.wrn);     roen_pad : outpadv generic map (width => 5, tech => padtech) 	port map (ramoen, memo.ramoen(4 downto 0));    wri_pad  : outpad generic map (tech => padtech) 	port map (writen, memo.writen);    read_pad : outpad generic map (tech => padtech) 	port map (read, memo.read);     iosn_pad : outpad generic map (tech => padtech) 	port map (iosn, memo.iosn);    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 -----------------------------------------------------------------------------------------------------  bpromgen : if CFG_AHBROMEN /= 0 generate    brom : entity work.ahbrom      generic map (hindex => 5, haddr => CFG_AHBRODDR, pipe => CFG_AHBROPIP)      port map ( rstn, clkm, ahbsi, ahbso(5));  end generate;  nobpromgen : if CFG_AHBROMEN = 0 generate     ahbso(5) <= ahbs_none;  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;  ua2 : if CFG_UART2_ENABLE /= 0 generate    uart2 : apbuart			-- UART 2    generic map (pindex => 9, paddr => 9,  pirq => 3, fifosize => CFG_UART2_FIFO)    port map (rstn, clkm, apbi, apbo(9), u2i, u2o);    u2i.rxd <= rxd2; u2i.ctsn <= '0'; u2i.extclk <= '0'; txd2 <= u2o.txd;  end generate;  noua1 : if CFG_UART2_ENABLE = 0 generate apbo(9) <= 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, wdog => CFG_GPT_WDOG)    port map (rstn, clkm, apbi, apbo(3), gpti, open);    gpti.dhalt <= dsuo.tstop; 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     -- GR GPIO unit    grgpio0: grgpio      generic map( pindex => 11, paddr => 11, imask => CFG_GRGPIO_IMASK, 	nbits => CFG_GRGPIO_WIDTH)      port map( rstn, clkm, apbi, apbo(11), gpioi, 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;--------------------------------------------------------------------------  PCI   -----------------------------------------------------------------------------------------------------------------------------------  pp : if CFG_PCI /= 0 generate    pci_gr0 : if CFG_PCI = 1 generate	-- simple target-only      pci0 : pci_target generic map (hindex => NCPU+CFG_AHB_UART+CFG_AHB_JTAG,	device_id => CFG_PCIDID, vendor_id => CFG_PCIVID)      port map (rstn, clkm, pciclk, pcii, pcio, ahbmi, ahbmo(NCPU+CFG_AHB_UART+CFG_AHB_JTAG));    end generate;    pci_mtf0 : if CFG_PCI = 2 generate	-- master/target with fifo      pci0 : pci_mtf generic map (memtech => memtech, hmstndx => NCPU+CFG_AHB_UART+CFG_AHB_JTAG, 	  fifodepth => log2(CFG_PCIDEPTH), device_id => CFG_PCIDID, vendor_id => CFG_PCIVID,	  hslvndx => 4, pindex => 4, paddr => 4, haddr => 16#E00#,	  ioaddr => 16#400#, nsync => 2)      port map (rstn, clkm, pciclk, pcii, pcio, apbi, apbo(4),	ahbmi, ahbmo(NCPU+CFG_AHB_UART+CFG_AHB_JTAG), ahbsi, ahbso(4));    end generate;    pci_mtf1 : if CFG_PCI = 3 generate	-- master/target with fifo and DMA      dma : pcidma generic map (memtech => memtech, dmstndx => NCPU+CFG_AHB_UART+CFG_AHB_JTAG+1, 	  dapbndx => 5, dapbaddr => 5, blength => blength, mstndx => NCPU+CFG_AHB_UART+CFG_AHB_JTAG,	  fifodepth => log2(CFG_PCIDEPTH), device_id => CFG_PCIDID, vendor_id => CFG_PCIVID,	  slvndx => 4, apbndx => 4, apbaddr => 4, haddr => 16#E00#, ioaddr => 16#800#, 	  nsync => 1)      	port map (rstn, clkm, pciclk, pcii, pcio, apbo(5),  ahbmo(NCPU+CFG_AHB_UART+CFG_AHB_JTAG+1),  	  apbi, apbo(4), ahbmi, ahbmo(NCPU+CFG_AHB_UART+CFG_AHB_JTAG), ahbsi, ahbso(4));    end generate;    pci_trc0 : if CFG_PCITBUFEN /= 0 generate	-- PCI trace buffer      pt0 : pcitrace generic map (depth => (6 + log2(CFG_PCITBUF/256)), 	memtech => memtech, pindex  => 8, paddr => 16#100#, pmask => 16#f00#)        port map ( rstn, clkm, pciclk, pcii, apbi, apbo(8));    end generate;    pcia0 : if CFG_PCI_ARB = 1 generate	-- PCI arbiter      pciarb0 : pciarb generic map (pindex => 10, paddr => 10, 				    apb_en => CFG_PCI_ARBAPB)       port map ( clk => pciclk, rst_n => pcii.rst,         req_n => pci_arb_req_n, frame_n => pcii.frame,         gnt_n => pci_arb_gnt_n, pclk => clkm,          prst_n => rstn, apbi => apbi, apbo => apbo(10)       );      pgnt_pad : outpadv generic map (tech => padtech, width => 4) 	port map (pci_arb_gnt, pci_arb_gnt_n);      preq_pad : inpadv generic map (tech => padtech, width => 4) 	port map (pci_arb_req, pci_arb_req_n);    end generate;    pcipads0 : pcipads generic map (padtech => padtech)	-- PCI pads    port map ( pci_rst, pci_gnt, pci_idsel, pci_lock, pci_ad, pci_cbe,      pci_frame, pci_irdy, pci_trdy, pci_devsel, pci_stop, pci_perr,      pci_par, pci_req, pci_serr, pci_host, pci_66, pcii, pcio );  end generate;  nop1 : if CFG_PCI <= 1 generate apbo(4) <= apb_none; end generate;  nop2 : if CFG_PCI <= 2 generate apbo(5) <= apb_none; end generate;  nop3 : if CFG_PCI <= 1 generate ahbso(4) <= ahbs_none; end generate;  notrc : if CFG_PCITBUFEN = 0 generate apbo(8) <= apb_none; end generate;  noarb : if CFG_PCI_ARB = 0 generate apbo(10) <= apb_none; end generate;--------------------------------------------------------------------------  ETHERNET --------------------------------------------------------------------------------------------------------------------------------  eth0 : if CFG_GRETH = 1 generate -- Gaisler ethernet MAC      e1 : greth generic map(hindex => NCPU+CFG_AHB_UART+CFG_PCI+CFG_AHB_JTAG,	pindex => 15, paddr => 15, pirq => 14, memtech => memtech,        mdcscaler => CPU_FREQ/1000, enable_mdio => 1, fifosize => CFG_ETH_FIFO,        nsync => 1, edcl => CFG_DSU_ETH, edclbufsz => CFG_ETH_BUF,        macaddrh => CFG_ETH_ENM, macaddrl => CFG_ETH_ENL, 	ipaddrh => CFG_ETH_IPM, ipaddrl => CFG_ETH_IPL)     port map( rst => rstn, clk => clkm, ahbmi => ahbmi,       ahbmo => ahbmo(NCPU+CFG_AHB_UART+CFG_PCI+CFG_AHB_JTAG), apbi => apbi,       apbo => apbo(15), ethi => ethi, etho => etho);       emdio_pad : iopad generic map (tech => padtech)       port map (emdio, etho.mdio_o, etho.mdio_oe, ethi.mdio_i);      etxc_pad : clkpad generic map (tech => padtech, arch => 1) 	port map (etx_clk, ethi.tx_clk);      erxc_pad : clkpad generic map (tech => padtech, arch => 1) 	port map (erx_clk, ethi.rx_clk);      erxd_pad : inpadv generic map (tech => padtech, width => 4) 	port map (erxd, ethi.rxd(3 downto 0));      erxdv_pad : inpad generic map (tech => padtech) 	port map (erx_dv, ethi.rx_dv);      erxer_pad : inpad generic map (tech => padtech) 	port map (erx_er, ethi.rx_er);      erxco_pad : inpad generic map (tech => padtech) 	port map (erx_col, ethi.rx_col);      erxcr_pad : inpad generic map (tech => padtech) 	port map (erx_crs, ethi.rx_crs);      etxd_pad : outpadv generic map (tech => padtech, width => 4) 	port map (etxd, etho.txd(3 downto 0));      etxen_pad : outpad generic map (tech => padtech) 	port map ( etx_en, etho.tx_en);      etxer_pad : outpad generic map (tech => padtech) 	port map (etx_er, etho.tx_er);      emdc_pad : outpad generic map (tech => padtech) 	port map (emdc, etho.mdc);      emdis_pad : outpad generic map (tech => padtech) 	port map (emddis, vcc(0));      eepwrdwn_pad : outpad generic map (tech => padtech) 	port map (epwrdwn, gnd(0));      esleep_pad : outpad generic map (tech => padtech) 	port map (esleep, gnd(0));      epause_pad : outpad generic map (tech => padtech) 	port map (epause, gnd(0));      ereset_pad : outpad generic map (tech => padtech) 	port map (ereset, gnd(0));    end generate;--------------------------------------------------------------------------  CAN -------------------------------------------------------------------------------------------------------------------------------------   can0 : if CFG_CAN = 1 generate      can0 : can_oc generic map (slvndx => 6, ioaddr => CFG_CANIO,    	iomask => 16#FFF#, irq => CFG_CANIRQ, memtech => memtech)      port map (rstn, clkm, ahbsi, ahbso(6), can_lrx, can_ltx );   end generate;   ncan : if CFG_CAN = 0 generate ahbso(6) <= ahbs_none; end generate;   can_stb <= '0';   -- no standby   can_loopback : if CFG_CANLOOP = 1 generate      can_lrx <= can_ltx;   end generate;   can_pads : if CFG_CANLOOP = 0 generate       can_tx_pad : outpad generic map (tech => padtech) 	port map (can_txd, can_ltx);      can_rx_pad : inpad generic map (tech => padtech) 	port map (can_rxd, can_lrx);    end generate;--------------------------------------------------------------------------  AHB RAM ---------------------------------------------------------------------------------------------------------------------------------  ocram : if CFG_AHBRAMEN = 1 generate     ahbram0 : ahbram generic map (hindex => 7, haddr => CFG_AHBRADDR, 	tech => CFG_MEMTECH, kbytes => CFG_AHBRSZ)    port map ( rstn, clkm, ahbsi, ahbso(7));  end generate;  nram : if CFG_AHBRAMEN = 0 generate ahbso(7) <= ahbs_none; end generate;--------------------------------------------------------------------------  SPACEWIRE  ------------------------------------------------------------------------------------------------------------------------------  spw : if CFG_SPW_EN > 0 generate   spw_clk_pad : clkpad generic map (tech => padtech) port map (spw_clk, spw_lclk);    swloop : for i in 0 to CFG_SPW_NUM-1 generate   sw0 : grspw generic map(tech => memtech,     hindex => maxahbmsp+i, pindex => 12+i, paddr => 12+i, pirq => 10+i,      sysfreq => sysfreq, nsync => 1, rmap => 0,     fifosize1 => CFG_SPW_AHBFIFO, fifosize2 => CFG_SPW_RXFIFO,     rxclkbuftype => 1)     port map(resetn, clkm, spw_lclk, ahbmi, ahbmo(maxahbmsp+i), 	apbi, apbo(12+i), spwi(i), spwo(i));     spwi(i).tickin <= '0'; spwi(i).rmapen <= '1';     spwi(i).clkdiv10 <= conv_std_logic_vector(sysfreq/10000-1, 8);     spw_rxd_pad : inpad_ds generic map (padtech, lvds, x25v)	port map (spw_rxd(i), spw_rxdn(i), spwi(i).d);     spw_rxs_pad : inpad_ds generic map (padtech, lvds, x25v)	port map (spw_rxs(i), spw_rxsn(i), spwi(i).s);     spw_txd_pad : outpad_ds generic map (padtech, lvds, x25v)	port map (spw_txd(i), spw_txdn(i), spwo(i).d, gnd(0));     spw_txs_pad : outpad_ds generic map (padtech, lvds, x25v)	port map (spw_txs(i), spw_txsn(i), spwo(i).s, gnd(0));   end generate;  end generate;  --------------------------------------------------------------------------  Drive unused bus elements  ----------------------------------------------------------------------------------------------------------------  nam1 : for i in maxahbm to NAHBMST-1 generate--    ahbmo(i) <= ahbm_none;--  end generate;--  nam2 : if CFG_PCI > 1 generate--    ahbmo(NCPU+CFG_AHB_UART+CFG_AHB_JTAG+CFG_PCI-1) <= ahbm_none;--  end generate;--  nap0 : for i in 12+(CFG_SPW_NUM*CFG_SPW_EN) to NAPBSLV-1 generate apbo(i) <= apb_none; end generate;--  apbo(6) <= apb_none;--  nah0 : for i in 9 to NAHBSLV-1 generate ahbso(i) <= ahbs_none; end generate;--------------------------------------------------------------------------  Boot message  ----------------------------------------------------------------------------------------------------------------------------- pragma translate_off  x : report_version   generic map (   msg1 => "LEON3 MP 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 + -