LIBRARY ieee; USE ieee.std_logic_1164.all; LIBRARY altera; USE altera.altera_primitives_components.all; LIBRARY work; ENTITY firebee1 IS PORT ( FB_ALE : IN std_logic; nFB_WR : IN std_logic; nFB_CS1 : IN std_logic; nFB_CS2 : IN std_logic; nFB_CS3 : IN std_logic; FB_SIZE0 : IN std_logic; FB_SIZE1 : IN std_logic; nFB_BURST : IN std_logic; LP_BUSY : IN std_logic; nACSI_DRQ : IN std_logic; nACSI_INT : IN std_logic; RxD : IN std_logic; CTS : IN std_logic; RI : IN std_logic; DCD : IN std_logic; AMKB_RX : IN std_logic; PIC_AMKB_RX : IN std_logic; IDE_RDY : IN std_logic; IDE_INT : IN std_logic; WP_CF_CARD : IN std_logic; TRACK00 : IN std_logic; nWP : IN std_logic; nDCHG : IN std_logic; SD_DATA0 : IN std_logic; SD_DATA1 : IN std_logic; SD_DATA2 : IN std_logic; SD_CARD_DEDECT : IN std_logic; nSCSI_DRQ : IN std_logic; SD_WP : IN std_logic; nRD_DATA : IN std_logic; nSCSI_C_D : IN std_logic; nSCSI_I_O : IN std_logic; nSCSI_MSG : IN std_logic; nDACK0 : IN std_logic; PIC_INT : IN std_logic; nFB_OE : IN std_logic; TOUT0 : IN std_logic; nMASTER : IN std_logic; DVI_INT : IN std_logic; nDACK1 : IN std_logic; nPCI_INTD : IN std_logic; nPCI_INTC : IN std_logic; nPCI_INTB : IN std_logic; nPCI_INTA : IN std_logic; E0_INT : IN std_logic; nINDEX : IN std_logic; HD_DD : IN std_logic; MAIN_CLK : IN std_logic; nRSTO_MCF : IN std_logic; CLK33MDIR : IN std_logic; SCSI_PAR : INOUT std_logic; nSCSI_RST : INOUT std_logic; nSCSI_SEL : INOUT std_logic; nSCSI_BUSY : INOUT std_logic; SD_CD_DATA3 : INOUT std_logic; SD_CMD_D1 : INOUT std_logic; MIDI_IN_PIN : INOUT std_logic; ACSI_D : INOUT std_logic_vector(7 DOWNTO 0); FB_AD : INOUT std_logic_vector(31 DOWNTO 0); IO : INOUT std_logic_vector(17 DOWNTO 0); LP_D : INOUT std_logic_vector(7 DOWNTO 0); SCSI_D : INOUT std_logic_vector(7 DOWNTO 0); SRD : INOUT std_logic_vector(15 DOWNTO 0); VD : INOUT std_logic_vector(31 DOWNTO 0); VDQS : INOUT std_logic_vector(3 DOWNTO 0); LP_STR : OUT std_logic; nACSI_ACK : OUT std_logic; nACSI_RESET : OUT std_logic; nACSI_CS : OUT std_logic; ACSI_DIR : OUT std_logic; ACSI_A1 : OUT std_logic; nSCSI_ACK : OUT std_logic; nSCSI_ATN : OUT std_logic; SCSI_DIR : OUT std_logic; MIDI_TLR : OUT std_logic; TxD : OUT std_logic; RTS : OUT std_logic; DTR : OUT std_logic; AMKB_TX : OUT std_logic; IDE_RES : OUT std_logic; nIDE_CS0 : OUT std_logic; nIDE_CS1 : OUT std_logic; nIDE_WR : OUT std_logic; nIDE_RD : OUT std_logic; nCF_CS0 : OUT std_logic; nCF_CS1 : OUT std_logic; nROM3 : OUT std_logic; nROM4 : OUT std_logic; nRP_UDS : OUT std_logic; nRP_LDS : OUT std_logic; nSDSEL : OUT std_logic; nWR_GATE : OUT std_logic; nWR : OUT std_logic; YM_QA : OUT std_logic; YM_QB : OUT std_logic; YM_QC : OUT std_logic; SD_CLK : OUT std_logic; DSA_D : OUT std_logic; nVWE : OUT std_logic; nVCAS : OUT std_logic; nVRAS : OUT std_logic; nVCS : OUT std_logic; nPD_VGA : OUT std_logic; TIN0 : OUT std_logic; nSRCS : OUT std_logic; nSRBLE : OUT std_logic; nSRBHE : OUT std_logic; nSRWE : OUT std_logic; nDREQ1 : OUT std_logic; LED_FPGA_OK : OUT std_logic; nSROE : OUT std_logic; VCKE : OUT std_logic; nFB_TA : OUT std_logic; nDDR_CLK : OUT std_logic; DDR_CLK : OUT std_logic; VSYNC_PAD : OUT std_logic; HSYNC_PAD : OUT std_logic; nBLANK_PAD : OUT std_logic; PIXEL_CLK_PAD : OUT std_logic; nSYNC : OUT std_logic; nMOT_ON : OUT std_logic; nSTEP_DIR : OUT std_logic; nSTEP : OUT std_logic; LPDIR : OUT std_logic; MIDI_OLR : OUT std_logic; CLK25M : OUT std_logic; CLKUSB : OUT std_logic; CLK24M576 : OUT std_logic; BA : OUT std_logic_vector(1 DOWNTO 0); nIRQ : OUT std_logic_vector(7 DOWNTO 2); VA : OUT std_logic_vector(12 DOWNTO 0); VB : OUT std_logic_vector(7 DOWNTO 0); VDM : OUT std_logic_vector(3 DOWNTO 0); VG : OUT std_logic_vector(7 DOWNTO 0); VR : OUT std_logic_vector(7 DOWNTO 0) ); END firebee1; ARCHITECTURE rtl OF firebee1 IS SIGNAL ACP_CONF : std_logic_vector(31 DOWNTO 0); SIGNAL clk25m_i : std_logic; SIGNAL CLK2M : std_logic; SIGNAL CLK2M4576 : std_logic; SIGNAL CLK33M : std_logic; SIGNAL CLK48M : std_logic; SIGNAL CLK500k : std_logic; SIGNAL CLK_VIDEO : std_logic; SIGNAL DDR_SYNC_66M : std_logic; SIGNAL DDRCLK : std_logic_vector(3 DOWNTO 0); SIGNAL DMA_DRQ : std_logic; SIGNAL DSP_INT : std_logic; SIGNAL DSP_TA : std_logic; SIGNAL FALCON_IO_TA : std_logic; SIGNAL FB_ADR : std_logic_vector(31 DOWNTO 0); SIGNAL FDC_CLK : std_logic; SIGNAL HSYNC : std_logic; SIGNAL INT_HANDLER_TA : std_logic; SIGNAL LP_DIR : std_logic; SIGNAL MIDI_IN : std_logic; SIGNAL MOT_ON : std_logic; SIGNAL nBLANK : std_logic; SIGNAL nDREQ0 : std_logic; SIGNAL nMFP_INT : std_logic; SIGNAL nRSTO : std_logic; SIGNAL PIXEL_CLK : std_logic; SIGNAL SD_CDM_D1 : std_logic; SIGNAL STEP : std_logic; SIGNAL STEP_DIR : std_logic; SIGNAL TIMEBASE : std_logic_vector(17 DOWNTO 0); SIGNAL VIDEO_RECONFIG : std_logic; SIGNAL Video_TA : std_logic; SIGNAL VR_BUSY : std_logic; SIGNAL VR_D : std_logic_vector(8 DOWNTO 0); SIGNAL VR_RD : std_logic; SIGNAL VR_WR : std_logic; SIGNAL VSYNC : std_logic; SIGNAL WR_DATA : std_logic; SIGNAL WR_GATE : std_logic; SIGNAL scandataout : std_logic; SIGNAL scandone : std_logic; SIGNAL reset : std_logic; SIGNAL pll_reset : std_logic; SIGNAL scanclk : std_logic; SIGNAL scandata : std_logic; SIGNAL scan_clkena : std_logic; SIGNAL config_update : std_logic; SIGNAL pll3_locked : std_logic; SIGNAL pll1_locked : std_logic; SIGNAL nSRCS_i : std_logic; SIGNAL nFB_WR_i : std_logic; SIGNAL nIDE_RD_i : std_logic; SIGNAL nIDE_WR_i : std_logic; COMPONENT altpll_reconfig1 PORT ( clock : IN std_logic ; counter_param : IN std_logic_vector (2 DOWNTO 0); counter_type : IN std_logic_vector (3 DOWNTO 0); data_in : IN std_logic_vector (8 DOWNTO 0); pll_areset_in : IN std_logic := '0'; pll_scandataout : IN std_logic ; pll_scandone : IN std_logic ; read_param : IN std_logic ; reconfig : IN std_logic ; reset : IN std_logic ; write_param : IN std_logic ; busy : OUT std_logic ; data_out : OUT std_logic_vector (8 DOWNTO 0); pll_areset : OUT std_logic ; pll_configupdate : OUT std_logic ; pll_scanclk : OUT std_logic ; pll_scanclkena : OUT std_logic ; pll_scandata : OUT std_logic ); END COMPONENT altpll_reconfig1; COMPONENT altpll4 PORT ( areset : IN std_logic := '0'; configupdate : IN std_logic := '0'; inclk0 : IN std_logic := '0'; scanclk : IN std_logic := '1'; scanclkena : IN std_logic := '0'; scandata : IN std_logic := '0'; c0 : OUT std_logic ; locked : OUT std_logic ; scandataout : OUT std_logic ; scandone : OUT std_logic ); END COMPONENT altpll4; COMPONENT video PORT ( FB_ADR : IN std_logic_vector(31 DOWNTO 0); MAIN_CLK : IN std_logic; nFB_CS1 : IN std_logic; nFB_CS2 : IN std_logic; nFB_CS3 : IN std_logic; nFB_WR : IN std_logic; FB_SIZE0 : IN std_logic; FB_SIZE1 : IN std_logic; nRSTO : IN std_logic; nFB_OE : IN std_logic; FB_ALE : IN std_logic; DDRCLK : IN std_logic_vector(3 DOWNTO 0); DDR_SYNC_66M : IN std_logic; CLK33M : IN std_logic; CLK25M : IN std_logic; CLK_VIDEO : IN std_logic; VR_D : IN std_logic_vector(8 DOWNTO 0); VR_BUSY : IN std_logic; VG : OUT std_logic_vector(7 DOWNTO 0); VB : OUT std_logic_vector(7 DOWNTO 0); VR : OUT std_logic_vector(7 DOWNTO 0); nBLANK : OUT std_logic; VA : OUT std_logic_vector(12 DOWNTO 0); nVWE : OUT std_logic; nVCAS : OUT std_logic; nVRAS : OUT std_logic; nVCS : OUT std_logic; VDM : OUT std_logic_vector(3 DOWNTO 0); nPD_VGA : OUT std_logic; VCKE : OUT std_logic; VSYNC : OUT std_logic; HSYNC : OUT std_logic; nSYNC : OUT std_logic; VIDEO_TA : OUT std_logic; PIXEL_CLK : OUT std_logic; BA : OUT std_logic_vector(1 DOWNTO 0); VIDEO_RECONFIG : OUT std_logic; VR_WR : OUT std_logic; VR_RD : OUT std_logic; VDQS : INOUT std_logic_vector(3 DOWNTO 0); FB_AD : INOUT std_logic_vector(31 DOWNTO 0); VD : INOUT std_logic_vector(31 DOWNTO 0) ); END COMPONENT video; BEGIN nDREQ1 <= nDACK1; i_atari_clk_pll : work.altpll3 PORT MAP ( inclk0 => MAIN_CLK, c0 => clk25m_i, c1 => CLK2M, c2 => CLK500k, c3 => CLK2M4576, locked => pll3_locked ); i_ddr_clk_pll : work.altpll2 PORT MAP ( inclk0 => MAIN_CLK, c0 => DDRCLK(0), c1 => DDRCLK(1), c2 => DDRCLK(2), c3 => DDRCLK(3), c4 => DDR_SYNC_66M ); i_dsp : work.dsp PORT MAP ( CLK33M => CLK33M, MAIN_CLK => MAIN_CLK, nFB_OE => nFB_OE, nFB_WR => nFB_WR, nFB_CS1 => nFB_CS1, nFB_CS2 => nFB_CS2, FB_SIZE0 => FB_SIZE0, FB_SIZE1 => FB_SIZE1, nFB_BURST => nFB_BURST, nRSTO => nRSTO, nFB_CS3 => nFB_CS3, FB_AD => FB_AD, FB_ADR => FB_ADR, IO => IO, SRD => SRD, nSRCS => nSRCS_i, nSRBLE => nSRBLE, nSRBHE => nSRBHE, nSRWE => nSRWE, nSROE => nSROE, DSP_INT => DSP_INT, DSP_TA => DSP_TA ); i_falcioio_sdcard_ide_cf : work.falconio_sdcard_ide_cf PORT MAP ( CLK33M => CLK33M, MAIN_CLK => MAIN_CLK, CLK2M => CLK2M, CLK500k => CLK500k, nFB_CS1 => nFB_CS1, FB_SIZE0 => FB_SIZE0, FB_SIZE1 => FB_SIZE1, nFB_BURST => nFB_BURST, LP_BUSY => LP_BUSY, nACSI_DRQ => nACSI_DRQ, nACSI_INT => nACSI_INT, nSCSI_DRQ => nSCSI_DRQ, nSCSI_MSG => nSCSI_MSG, MIDI_IN => MIDI_IN, RxD => RxD, CTS => CTS, RI => RI, DCD => DCD, AMKB_RX => AMKB_RX, PIC_AMKB_RX => PIC_AMKB_RX, IDE_RDY => IDE_RDY, IDE_INT => IDE_INT, WP_CS_CARD => '0', nINDEX => nINDEX, TRACK00 => TRACK00, nRD_DATA => nRD_DATA, nDCHG => nDCHG, SD_DATA0 => SD_DATA0, SD_DATA1 => SD_DATA1, SD_DATA2 => SD_DATA2, SD_CARD_DEDECT => SD_CARD_DEDECT, SD_WP => SD_WP, nDACK0 => nDACK0, nFB_WR => nFB_WR, WP_CF_CARD => WP_CF_CARD, nWP => nWP, nFB_CS2 => nFB_CS2, nRSTO => nRSTO, nSCSI_C_D => nSCSI_C_D, nSCSI_I_O => nSCSI_I_O, CLK2M4576 => CLK2M4576, nFB_OE => nFB_OE, VSYNC => VSYNC, HSYNC => HSYNC, DSP_INT => DSP_INT, nBLANK => nBLANK, FDC_CLK => FDC_CLK, FB_ALE => FB_ALE, HD_DD => HD_DD, SCSI_PAR => SCSI_PAR, nSCSI_SEL => nSCSI_SEL, nSCSI_BUSY => nSCSI_BUSY, nSCSI_RST => nSCSI_RST, SD_CD_DATA3 => SD_CD_DATA3, SD_CDM_D1 => SD_CDM_D1, ACP_CONF => ACP_CONF(31 DOWNTO 24), ACSI_D => ACSI_D, FB_AD => FB_AD, FB_ADR => FB_ADR, LP_D => LP_D, SCSI_D => SCSI_D, nIDE_CS1 => nIDE_CS1, nIDE_CS0 => nIDE_CS0, LP_STR => LP_STR, LP_DIR => LP_DIR, nACSI_ACK => nACSI_ACK, nACSI_RESET => nACSI_RESET, nACSI_CS => nACSI_CS, ACSI_DIR => ACSI_DIR, ACSI_A1 => ACSI_A1, nSCSI_ACK => nSCSI_ACK, nSCSI_ATN => nSCSI_ATN, SCSI_DIR => SCSI_DIR, SD_CLK => SD_CLK, YM_QA => YM_QA, YM_QC => YM_QC, YM_QB => YM_QB, nSDSEL => nSDSEL, STEP => STEP, MOT_ON => MOT_ON, nRP_LDS => nRP_LDS, nRP_UDS => nRP_UDS, nROM4 => nROM4, nROM3 => nROM3, nCF_CS1 => nCF_CS1, nCF_CS0 => nCF_CS0, nIDE_RD => nIDE_RD_i, nIDE_WR => nIDE_WR_i, AMKB_TX => AMKB_TX, IDE_RES => IDE_RES, DTR => DTR, RTS => RTS, TxD => TxD, MIDI_OLR => MIDI_OLR, DSA_D => DSA_D, nMFP_INT => nMFP_INT, FALCON_IO_TA => FALCON_IO_TA, STEP_DIR => STEP_DIR, WR_DATA => WR_DATA, WR_GATE => WR_GATE, DMA_DRQ => DMA_DRQ, MIDI_TLR => MIDI_TLR ); i_interrupt_handler : work.interrupt_handler PORT MAP ( MAIN_CLK => MAIN_CLK, nFB_WR => nFB_WR, nFB_CS1 => nFB_CS1, nFB_CS2 => nFB_CS2, FB_SIZE0 => FB_SIZE0, FB_SIZE1 => FB_SIZE1, PIC_INT => PIC_INT, E0_INT => E0_INT, DVI_INT => DVI_INT, nPCI_INTA => nPCI_INTA, nPCI_INTB => nPCI_INTB, nPCI_INTC => nPCI_INTC, nPCI_INTD => nPCI_INTD, nMFP_INT => nMFP_INT, nFB_OE => nFB_OE, DSP_INT => DSP_INT, VSYNC => VSYNC, HSYNC => HSYNC, DMA_DRQ => DMA_DRQ, nRSTO => nRSTO, FB_AD => FB_AD, FB_ADR => FB_ADR, INT_HANDLER_TA => INT_HANDLER_TA, TIN0 => TIN0, ACP_CONF => ACP_CONF, nIRQ => nIRQ ); i_mfp_acia_clk_pll : work.altpll1 PORT MAP ( inclk0 => MAIN_CLK, c0 => CLK48M, c1 => FDC_CLK, c2 => CLK24M576, locked => pll1_locked ); i_pll_reconfig : altpll_reconfig1 PORT MAP ( reconfig => VIDEO_RECONFIG, read_param => VR_RD, write_param => VR_WR, pll_areset_in => '0', pll_scandataout => scandataout, pll_scandone => scandone, clock => MAIN_CLK, reset => reset, counter_param => FB_ADR(8 DOWNTO 6), counter_type => FB_ADR(5 DOWNTO 2), data_in => FB_AD(24 DOWNTO 16), busy => VR_BUSY, pll_scandata => scandata, pll_scanclk => scanclk, pll_scanclkena => scan_clkena, pll_configupdate => config_update, pll_areset => pll_reset, data_out => VR_D ); i_video : video PORT MAP ( MAIN_CLK => MAIN_CLK, nFB_CS1 => nFB_CS1, nFB_CS2 => nFB_CS2, nFB_CS3 => nFB_CS3, nFB_WR => nFB_WR, FB_SIZE0 => FB_SIZE0, FB_SIZE1 => FB_SIZE1, nRSTO => nRSTO, nFB_OE => nFB_OE, FB_ALE => FB_ALE, DDR_SYNC_66M => DDR_SYNC_66M, CLK33M => CLK33M, CLK25M => clk25m_i, CLK_VIDEO => CLK_VIDEO, VR_BUSY => VR_BUSY, DDRCLK => DDRCLK, FB_AD => FB_AD, FB_ADR => FB_ADR, VD => VD, VDQS => VDQS, VR_D => VR_D, VR_RD => VR_RD, nBLANK => nBLANK, nVWE => nVWE, nVCAS => nVCAS, nVRAS => nVRAS, nVCS => nVCS, nPD_VGA => nPD_VGA, VCKE => VCKE, VSYNC => VSYNC, HSYNC => HSYNC, nSYNC => nSYNC, VIDEO_TA => Video_TA, PIXEL_CLK => PIXEL_CLK, VIDEO_RECONFIG => VIDEO_RECONFIG, VR_WR => VR_WR, BA => BA, VA => VA, VB => VB, VDM => VDM, VG => VG, VR => VR ); i_video_clk_pll : altpll4 PORT MAP ( inclk0 => CLK48M, areset => pll_reset, scanclk => scanclk, scandata => scandata, scanclkena => scan_clkena, configupdate => config_update, c0 => CLK_VIDEO, scandataout => scandataout, scandone => scandone ); inst1 : work.lpm_ff0 PORT MAP ( clock => DDR_SYNC_66M, enable => FB_ALE, data => FB_AD, q => FB_ADR ); nMOT_ON <= NOT(MOT_ON); nSTEP_DIR <= NOT(STEP_DIR); nSTEP <= NOT(STEP); nWR <= NOT(WR_DATA); inst18 : work.lpm_counter0 PORT MAP ( clock => CLK500k, q => TIMEBASE ); nWR_GATE <= NOT(WR_GATE); nFB_TA <= NOT(Video_TA OR INT_HANDLER_TA OR DSP_TA OR FALCON_IO_TA); CLK33M <= MAIN_CLK; reset <= NOT(nRSTO); nRSTO <= pll3_locked AND pll1_locked AND nRSTO_MCF; inst29 : alt_iobuf PORT MAP ( i => CLK2M, oe => CLK2M, io => MIDI_IN_PIN, o => MIDI_IN ); LED_FPGA_OK <= TIMEBASE(17); nDDR_CLK <= NOT(DDRCLK(0)); inst5 : work.altddio_out3 PORT MAP ( datain_h => VSYNC, datain_l => VSYNC, outclock => PIXEL_CLK, dataout => VSYNC_PAD ); inst6 : work.altddio_out3 PORT MAP ( datain_h => HSYNC, datain_l => HSYNC, outclock => PIXEL_CLK, dataout => HSYNC_PAD ); inst8 : work.altddio_out3 PORT MAP ( datain_h => nBLANK, datain_l => nBLANK, outclock => PIXEL_CLK, dataout => nBLANK_PAD ); inst9 : work.altddio_out3 PORT MAP ( datain_h => '0', datain_l => '1', outclock => PIXEL_CLK, dataout => PIXEL_CLK_PAD ); SD_CMD_D1 <= SD_CDM_D1; DDR_CLK <= DDRCLK(0); LPDIR <= LP_DIR; CLK25M <= clk25m_i; CLKUSB <= CLK48M; nSRCS <= nSRCS_i; nIDE_RD <= nIDE_RD_i; nIDE_WR <= nIDE_WR_i; END rtl;