📄 plb_npi_vga_controller.vhd
字号:
------------------------------------------ constant IPIF_BUS2CORE_CLK_RATIO : integer := 1; ------------------------------------------ -- Width of the slave data bus (32 only) ------------------------------------------ constant USER_SLV_DWIDTH : integer := C_SPLB_NATIVE_DWIDTH; constant IPIF_SLV_DWIDTH : integer := C_SPLB_NATIVE_DWIDTH; ------------------------------------------ -- Number of device level interrupts ------------------------------------------ constant INTR_NUM_IPIF_IRPT_SRC : integer := 4; ------------------------------------------ -- Capture mode for each IP interrupt (generated by user logic) -- 1 = pass through (non-inverting) -- 2 = pass through (inverting) -- 3 = registered level (non-inverting) -- 4 = registered level (inverting) -- 5 = positive edge detect -- 6 = negative edge detect ------------------------------------------ constant USER_NUM_INTR : integer := 2; constant USER_INTR_CAPTURE_MODE : integer := 5; constant INTR_IP_INTR_MODE_ARRAY : INTEGER_ARRAY_TYPE := ( 0 => USER_INTR_CAPTURE_MODE, 1 => USER_INTR_CAPTURE_MODE ); ------------------------------------------ -- Device priority encoder feature inclusion/omission -- true = include priority encoder -- false = omit priority encoder ------------------------------------------ constant INTR_INCLUDE_DEV_PENCODER : boolean := false; ------------------------------------------ -- Device ISC feature inclusion/omission -- true = include device ISC -- false = omit device ISC ------------------------------------------ constant INTR_INCLUDE_DEV_ISC : boolean := false; ------------------------------------------ -- Index for CS/CE ------------------------------------------ constant USER_SLV_CS_INDEX : integer := 0; constant USER_SLV_CE_INDEX : integer := calc_start_ce_index(IPIF_ARD_NUM_CE_ARRAY, USER_SLV_CS_INDEX); constant INTR_CS_INDEX : integer := 1; constant INTR_CE_INDEX : integer := calc_start_ce_index(IPIF_ARD_NUM_CE_ARRAY, INTR_CS_INDEX); constant USER_CE_INDEX : integer := USER_SLV_CE_INDEX; ------------------------------------------ -- IP Interconnect (IPIC) signal declarations ------------------------------------------ signal ipif_Bus2IP_Clk : std_logic; signal ipif_Bus2IP_Reset : std_logic; signal ipif_IP2Bus_Data : std_logic_vector(0 to IPIF_SLV_DWIDTH-1); signal ipif_IP2Bus_WrAck : std_logic; signal ipif_IP2Bus_RdAck : std_logic; signal ipif_IP2Bus_Error : std_logic; signal ipif_Bus2IP_Addr : std_logic_vector(0 to C_SPLB_AWIDTH-1); signal ipif_Bus2IP_Data : std_logic_vector(0 to IPIF_SLV_DWIDTH-1); signal ipif_Bus2IP_RNW : std_logic; signal ipif_Bus2IP_BE : std_logic_vector(0 to IPIF_SLV_DWIDTH/8-1); signal ipif_Bus2IP_CS : std_logic_vector(0 to ((IPIF_ARD_ADDR_RANGE_ARRAY'length)/2)-1); signal ipif_Bus2IP_RdCE : std_logic_vector(0 to calc_num_ce(IPIF_ARD_NUM_CE_ARRAY)-1); signal ipif_Bus2IP_WrCE : std_logic_vector(0 to calc_num_ce(IPIF_ARD_NUM_CE_ARRAY)-1); signal intr_IPIF_Reg_Interrupts : std_logic_vector(0 to 1); signal intr_IPIF_Lvl_Interrupts : std_logic_vector(0 to INTR_NUM_IPIF_IRPT_SRC-1); signal intr_IP2Bus_Data : std_logic_vector(0 to IPIF_SLV_DWIDTH-1); signal intr_IP2Bus_WrAck : std_logic; signal intr_IP2Bus_RdAck : std_logic; signal intr_IP2Bus_Error : std_logic; signal user_Bus2IP_RdCE : std_logic_vector(0 to USER_NUM_REG-1); signal user_Bus2IP_WrCE : std_logic_vector(0 to USER_NUM_REG-1); signal user_IP2Bus_Data : std_logic_vector(0 to USER_SLV_DWIDTH-1); signal user_IP2Bus_RdAck : std_logic; signal user_IP2Bus_WrAck : std_logic; signal user_IP2Bus_Error : std_logic; signal user_IP2Bus_IntrEvent : std_logic_vector(0 to USER_NUM_INTR-1);begin ------------------------------------------ -- instantiate plbv46_slave_single ------------------------------------------ PLBV46_SLAVE_SINGLE_I : entity plbv46_slave_single_v1_00_a.plbv46_slave_single generic map ( C_ARD_ADDR_RANGE_ARRAY => IPIF_ARD_ADDR_RANGE_ARRAY, C_ARD_NUM_CE_ARRAY => IPIF_ARD_NUM_CE_ARRAY, C_SPLB_P2P => C_SPLB_P2P, C_BUS2CORE_CLK_RATIO => IPIF_BUS2CORE_CLK_RATIO, C_SPLB_MID_WIDTH => C_SPLB_MID_WIDTH, C_SPLB_NUM_MASTERS => C_SPLB_NUM_MASTERS, C_SPLB_AWIDTH => C_SPLB_AWIDTH, C_SPLB_DWIDTH => C_SPLB_DWIDTH, C_SIPIF_DWIDTH => IPIF_SLV_DWIDTH, C_FAMILY => C_FAMILY ) port map ( SPLB_Clk => SPLB_Clk, SPLB_Rst => SPLB_Rst, PLB_ABus => PLB_ABus, PLB_UABus => PLB_UABus, PLB_PAValid => PLB_PAValid, PLB_SAValid => PLB_SAValid, PLB_rdPrim => PLB_rdPrim, PLB_wrPrim => PLB_wrPrim, PLB_masterID => PLB_masterID, PLB_abort => PLB_abort, PLB_busLock => PLB_busLock, PLB_RNW => PLB_RNW, PLB_BE => PLB_BE, PLB_MSize => PLB_MSize, PLB_size => PLB_size, PLB_type => PLB_type, PLB_lockErr => PLB_lockErr, PLB_wrDBus => PLB_wrDBus, PLB_wrBurst => PLB_wrBurst, PLB_rdBurst => PLB_rdBurst, PLB_wrPendReq => PLB_wrPendReq, PLB_rdPendReq => PLB_rdPendReq, PLB_wrPendPri => PLB_wrPendPri, PLB_rdPendPri => PLB_rdPendPri, PLB_reqPri => PLB_reqPri, PLB_TAttribute => PLB_TAttribute, Sl_addrAck => Sl_addrAck, Sl_SSize => Sl_SSize, Sl_wait => Sl_wait, Sl_rearbitrate => Sl_rearbitrate, Sl_wrDAck => Sl_wrDAck, Sl_wrComp => Sl_wrComp, Sl_wrBTerm => Sl_wrBTerm, Sl_rdDBus => Sl_rdDBus, Sl_rdWdAddr => Sl_rdWdAddr, Sl_rdDAck => Sl_rdDAck, Sl_rdComp => Sl_rdComp, Sl_rdBTerm => Sl_rdBTerm, Sl_MBusy => Sl_MBusy, Sl_MWrErr => Sl_MWrErr, Sl_MRdErr => Sl_MRdErr, Sl_MIRQ => Sl_MIRQ, Bus2IP_Clk => ipif_Bus2IP_Clk, Bus2IP_Reset => ipif_Bus2IP_Reset, IP2Bus_Data => ipif_IP2Bus_Data, IP2Bus_WrAck => ipif_IP2Bus_WrAck, IP2Bus_RdAck => ipif_IP2Bus_RdAck, IP2Bus_Error => ipif_IP2Bus_Error, Bus2IP_Addr => ipif_Bus2IP_Addr, Bus2IP_Data => ipif_Bus2IP_Data, Bus2IP_RNW => ipif_Bus2IP_RNW, Bus2IP_BE => ipif_Bus2IP_BE, Bus2IP_CS => ipif_Bus2IP_CS, Bus2IP_RdCE => ipif_Bus2IP_RdCE, Bus2IP_WrCE => ipif_Bus2IP_WrCE ); ------------------------------------------ -- instantiate interrupt_control ------------------------------------------ INTERRUPT_CONTROL_I : entity interrupt_control_v2_00_a.interrupt_control generic map ( C_NUM_CE => INTR_NUM_CE, C_NUM_IPIF_IRPT_SRC => INTR_NUM_IPIF_IRPT_SRC, C_IP_INTR_MODE_ARRAY => INTR_IP_INTR_MODE_ARRAY, C_INCLUDE_DEV_PENCODER => INTR_INCLUDE_DEV_PENCODER, C_INCLUDE_DEV_ISC => INTR_INCLUDE_DEV_ISC, C_IPIF_DWIDTH => IPIF_SLV_DWIDTH ) port map ( Bus2IP_Clk => ipif_Bus2IP_Clk, Bus2IP_Reset => ipif_Bus2IP_Reset, Bus2IP_Data => ipif_Bus2IP_Data, Bus2IP_BE => ipif_Bus2IP_BE, Interrupt_RdCE => ipif_Bus2IP_RdCE(INTR_CE_INDEX to INTR_CE_INDEX+INTR_NUM_CE-1), Interrupt_WrCE => ipif_Bus2IP_WrCE(INTR_CE_INDEX to INTR_CE_INDEX+INTR_NUM_CE-1), IPIF_Reg_Interrupts => intr_IPIF_Reg_Interrupts, IPIF_Lvl_Interrupts => intr_IPIF_Lvl_Interrupts, IP2Bus_IntrEvent => user_IP2Bus_IntrEvent, Intr2Bus_DevIntr => IP2INTC_Irpt, Intr2Bus_DBus => intr_IP2Bus_Data, Intr2Bus_WrAck => intr_IP2Bus_WrAck, Intr2Bus_RdAck => intr_IP2Bus_RdAck, Intr2Bus_Error => intr_IP2Bus_Error, Intr2Bus_Retry => open, Intr2Bus_ToutSup => open ); -- feed registered and level-pass-through interrupts into Device ISC if exists, otherwise ignored intr_IPIF_Reg_Interrupts(0) <= '0'; intr_IPIF_Reg_Interrupts(1) <= '0'; intr_IPIF_Lvl_Interrupts(0) <= '0'; intr_IPIF_Lvl_Interrupts(1) <= '0'; intr_IPIF_Lvl_Interrupts(2) <= '0'; intr_IPIF_Lvl_Interrupts(3) <= '0'; ------------------------------------------ -- instantiate User Logic ------------------------------------------ USER_LOGIC_I : entity plb_npi_vga_controller_v1_02_a.user_logic generic map ( -- MAP USER GENERICS BELOW THIS LINE --------------- -- USER generics mapped here C_PI_ADDR_WIDTH => C_PI_ADDR_WIDTH, C_PI_DATA_WIDTH => C_PI_DATA_WIDTH, C_PI_BE_WIDTH => C_PI_BE_WIDTH, C_PI_RDWDADDR_WIDTH => C_PI_RDWDADDR_WIDTH, C_NPI_PIXEL_CLK_RATIO => C_NPI_PIXEL_CLK_RATIO, C_USE_VGA_OUT => C_USE_VGA_OUT, C_PIXEL_CLK_GREATER_65MHZ => C_PIXEL_CLK_GREATER_65MHZ, -- MAP USER GENERICS ABOVE THIS LINE --------------- C_SLV_DWIDTH => USER_SLV_DWIDTH, C_NUM_REG => USER_NUM_REG, C_NUM_INTR => USER_NUM_INTR ) port map ( -- MAP USER PORTS BELOW THIS LINE ------------------ -- USER ports mapped here NPI_clk => NPI_clk, NPI_rst => NPI_rst, -- VGA/TFT signals clk_pixel => clk_pixel, tft_lcd_hsync => tft_lcd_hsync, tft_lcd_vsync => tft_lcd_vsync, tft_lcd_r => tft_lcd_r, tft_lcd_g => tft_lcd_g, tft_lcd_b => tft_lcd_b, tft_lcd_data => tft_lcd_data, tft_lcd_de => tft_lcd_de, tft_lcd_clk_n => tft_lcd_clk_n, tft_lcd_clk_p => tft_lcd_clk_p, tft_lcd_reset => tft_lcd_reset, tft_lcd_sda => tft_lcd_sda, tft_lcd_scl => tft_lcd_scl, -- MPMC Port Interface - Bus is prefixed with XIL_NPI_ XIL_NPI_Addr => XIL_NPI_Addr, XIL_NPI_AddrReq => XIL_NPI_AddrReq, XIL_NPI_AddrAck => XIL_NPI_AddrAck, XIL_NPI_RNW => XIL_NPI_RNW, XIL_NPI_Size => XIL_NPI_Size, XIL_NPI_InitDone => XIL_NPI_InitDone, XIL_NPI_WrFIFO_Data => XIL_NPI_WrFIFO_Data, XIL_NPI_WrFIFO_BE => XIL_NPI_WrFIFO_BE, XIL_NPI_WrFIFO_Push => XIL_NPI_WrFIFO_Push, XIL_NPI_RdFIFO_Data => XIL_NPI_RdFIFO_Data, XIL_NPI_RdFIFO_Pop => XIL_NPI_RdFIFO_Pop, XIL_NPI_RdFIFO_RdWdAddr => XIL_NPI_RdFIFO_RdWdAddr, XIL_NPI_WrFIFO_AlmostFull => XIL_NPI_WrFIFO_AlmostFull, XIL_NPI_WrFIFO_Flush => XIL_NPI_WrFIFO_Flush, XIL_NPI_RdFIFO_Empty => XIL_NPI_RdFIFO_Empty, XIL_NPI_RdFIFO_Latency => XIL_NPI_RdFIFO_Latency, XIL_NPI_RdFIFO_Flush => XIL_NPI_RdFIFO_Flush, -- MAP USER PORTS ABOVE THIS LINE ------------------ Bus2IP_Clk => ipif_Bus2IP_Clk, Bus2IP_Reset => ipif_Bus2IP_Reset, Bus2IP_Data => ipif_Bus2IP_Data, Bus2IP_BE => ipif_Bus2IP_BE, Bus2IP_RdCE => user_Bus2IP_RdCE, Bus2IP_WrCE => user_Bus2IP_WrCE, IP2Bus_Data => user_IP2Bus_Data, IP2Bus_RdAck => user_IP2Bus_RdAck, IP2Bus_WrAck => user_IP2Bus_WrAck, IP2Bus_Error => user_IP2Bus_Error, IP2Bus_IntrEvent => user_IP2Bus_IntrEvent ); ------------------------------------------ -- connect internal signals ------------------------------------------ IP2BUS_DATA_MUX_PROC : process( ipif_Bus2IP_CS, user_IP2Bus_Data, intr_IP2Bus_Data ) is begin case ipif_Bus2IP_CS is when "10" => ipif_IP2Bus_Data <= user_IP2Bus_Data; when "01" => ipif_IP2Bus_Data <= intr_IP2Bus_Data; when others => ipif_IP2Bus_Data <= (others => '0'); end case; end process IP2BUS_DATA_MUX_PROC; ipif_IP2Bus_WrAck <= user_IP2Bus_WrAck or intr_IP2Bus_WrAck; ipif_IP2Bus_RdAck <= user_IP2Bus_RdAck or intr_IP2Bus_RdAck; ipif_IP2Bus_Error <= user_IP2Bus_Error or intr_IP2Bus_Error; user_Bus2IP_RdCE <= ipif_Bus2IP_RdCE(USER_CE_INDEX to USER_CE_INDEX+USER_NUM_REG-1); user_Bus2IP_WrCE <= ipif_Bus2IP_WrCE(USER_CE_INDEX to USER_CE_INDEX+USER_NUM_REG-1);end IMP;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -