OpenCores
URL https://opencores.org/ocsvn/plbv46_to_wb_bridge/plbv46_to_wb_bridge/trunk

Subversion Repositories plbv46_to_wb_bridge

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 9 to Rev 10
    Reverse comparison

Rev 9 → Rev 10

/tags/initial/doc/src/plbv46_2_wb.doc Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
tags/initial/doc/src/plbv46_2_wb.doc Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: tags/initial/doc/plbv46_2_wb.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/initial/doc/plbv46_2_wb.pdf =================================================================== --- tags/initial/doc/plbv46_2_wb.pdf (revision 9) +++ tags/initial/doc/plbv46_2_wb.pdf (nonexistent)
tags/initial/doc/plbv46_2_wb.pdf Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: tags/initial/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/plbv46_2_wb.vhd =================================================================== --- tags/initial/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/plbv46_2_wb.vhd (revision 9) +++ tags/initial/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/plbv46_2_wb.vhd (nonexistent) @@ -1,367 +0,0 @@ ------------------------------------------------------------------------------- --- --- *************************************************************************** --- ** Copyright (c) 1995-2008 Xilinx, Inc. All rights reserved. ** --- ** ** --- ** Xilinx, Inc. ** --- ** XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" ** --- ** AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND ** --- ** SOLUTIONS FOR XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, ** --- ** OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, ** --- ** APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION ** --- ** THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, ** --- ** AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE ** --- ** FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY ** --- ** WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE ** --- ** IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR ** --- ** REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF ** --- ** INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ** --- ** FOR A PARTICULAR PURPOSE. ** --- ** ** --- *************************************************************************** --- ------------------------------------------------------------------------------- --- Filename: plbv46_2_wb.vhd --- Version: 1.10.a --- Creation Date: Tue Jul 15, 2008 --- Description: PLB version 4.6 to Wishbone B3 Bridge --- Simple non-bursting bridge interface from Xilinx-derivative --- PLB Bus for Microblaze/PowerPC to OpenCores.org Wishbone --- bridge standard. --- --- File Revisions: --- 7/15/08 - mds : Initial version --- 7/25/08 - mds : Added retry and bus error detection. --- ------------------------------------------------------------------------------- -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_arith.all; -use ieee.std_logic_unsigned.all; - -library proc_common_v2_00_a; -use proc_common_v2_00_a.proc_common_pkg.all; -use proc_common_v2_00_a.ipif_pkg.all; - -library plbv46_slave_single_v1_00_a; -use plbv46_slave_single_v1_00_a.plbv46_slave_single; - -library plbv46_2_wb_v1_10_a; -use plbv46_2_wb_v1_10_a.user_logic; - ------------------------------------------------------------------------------- --- Entity section ------------------------------------------------------------------------------- -entity plbv46_2_wb is - generic - ( - -- ADD USER GENERICS BELOW THIS LINE --------------- - C_WB_DBUS_SIZE : integer := 32; -- Constant - C_WB_ACCESS_TIMEOUT : integer := 16; -- Ranges from 1 to 256 - C_WB_RETRY_TIMEOUT : integer := 64; -- Ranges from 1 to 256 - C_WB_ACCESS_RETRIES : integer := 4; -- Ranges from 1 to 4 - -- ADD USER GENERICS ABOVE THIS LINE --------------- - - -- DO NOT EDIT BELOW THIS LINE --------------------- - -- Bus protocol parameters, do not add to or delete - C_SPLB_AWIDTH : integer := 32; - C_SPLB_DWIDTH : integer := 128; - C_SPLB_NUM_MASTERS : integer := 8; - C_SPLB_MID_WIDTH : integer := 3; - C_SPLB_NATIVE_DWIDTH : integer := 32; - C_SPLB_P2P : integer := 0; - C_SPLB_SUPPORT_BURSTS : integer := 0; - C_SPLB_SMALLEST_MASTER : integer := 32; - C_SPLB_CLK_PERIOD_PS : integer := 10000; - C_INCLUDE_DPHASE_TIMER : integer := 0; - C_FAMILY : string := "virtex5"; - C_MEM0_BASEADDR : std_logic_vector := X"FFFFFFFF"; - C_MEM0_HIGHADDR : std_logic_vector := X"00000000" - -- DO NOT EDIT ABOVE THIS LINE --------------------- - ); - port - ( - -- ADD USER PORTS BELOW THIS LINE ------------------ - WB_CLK_O : out std_logic; - WB_RST_O : out std_logic; - WB_ADR_O : out std_logic_vector(31 downto 0); - WB_DAT_O : out std_logic_vector(C_WB_DBUS_SIZE-1 downto 0); - WB_SEL_O : out std_logic_vector((C_WB_DBUS_SIZE/8)-1 downto 0); - WB_CYC_O : out std_logic; - WB_LOCK_O : out std_logic; - WB_STB_O : out std_logic; - WB_WE_O : out std_logic; - WB_DAT_I : in std_logic_vector(C_WB_DBUS_SIZE-1 downto 0); - WB_ACK_I : in std_logic; - WB_ERR_I : in std_logic; - WB_RTY_I : in std_logic; - -- ADD USER PORTS ABOVE THIS LINE ------------------ - - -- DO NOT EDIT BELOW THIS LINE --------------------- - -- Bus protocol ports, do not add to or delete - SPLB_Clk : in std_logic; - SPLB_Rst : in std_logic; - PLB_ABus : in std_logic_vector(0 to 31); - PLB_UABus : in std_logic_vector(0 to 31); - PLB_PAValid : in std_logic; - PLB_SAValid : in std_logic; - PLB_rdPrim : in std_logic; - PLB_wrPrim : in std_logic; - PLB_masterID : in std_logic_vector(0 to C_SPLB_MID_WIDTH-1); - PLB_abort : in std_logic; - PLB_busLock : in std_logic; - PLB_RNW : in std_logic; - PLB_BE : in std_logic_vector(0 to C_SPLB_DWIDTH/8-1); - PLB_MSize : in std_logic_vector(0 to 1); - PLB_size : in std_logic_vector(0 to 3); - PLB_type : in std_logic_vector(0 to 2); - PLB_lockErr : in std_logic; - PLB_wrDBus : in std_logic_vector(0 to C_SPLB_DWIDTH-1); - PLB_wrBurst : in std_logic; - PLB_rdBurst : in std_logic; - PLB_wrPendReq : in std_logic; - PLB_rdPendReq : in std_logic; - PLB_wrPendPri : in std_logic_vector(0 to 1); - PLB_rdPendPri : in std_logic_vector(0 to 1); - PLB_reqPri : in std_logic_vector(0 to 1); - PLB_TAttribute : in std_logic_vector(0 to 15); - Sl_addrAck : out std_logic; - Sl_SSize : out std_logic_vector(0 to 1); - Sl_wait : out std_logic; - Sl_rearbitrate : out std_logic; - Sl_wrDAck : out std_logic; - Sl_wrComp : out std_logic; - Sl_wrBTerm : out std_logic; - Sl_rdDBus : out std_logic_vector(0 to C_SPLB_DWIDTH-1); - Sl_rdWdAddr : out std_logic_vector(0 to 3); - Sl_rdDAck : out std_logic; - Sl_rdComp : out std_logic; - Sl_rdBTerm : out std_logic; - Sl_MBusy : out std_logic_vector(0 to C_SPLB_NUM_MASTERS-1); - Sl_MWrErr : out std_logic_vector(0 to C_SPLB_NUM_MASTERS-1); - Sl_MRdErr : out std_logic_vector(0 to C_SPLB_NUM_MASTERS-1); - Sl_MIRQ : out std_logic_vector(0 to C_SPLB_NUM_MASTERS-1) - -- DO NOT EDIT ABOVE THIS LINE --------------------- - ); - - attribute SIGIS : string; - attribute SIGIS of SPLB_Clk : signal is "CLK"; - attribute SIGIS of SPLB_Rst : signal is "RST"; - -end entity plbv46_2_wb; - ------------------------------------------------------------------------------- --- Architecture section ------------------------------------------------------------------------------- - -architecture IMP of plbv46_2_wb is - - ------------------------------------------ - -- Array of base/high address pairs for each address range - ------------------------------------------ - constant ZERO_ADDR_PAD : std_logic_vector(0 to 31) := (others => '0'); - - constant IPIF_ARD_ADDR_RANGE_ARRAY : SLV64_ARRAY_TYPE := - ( - ZERO_ADDR_PAD & C_MEM0_BASEADDR, -- user logic memory space 0 base address - ZERO_ADDR_PAD & C_MEM0_HIGHADDR -- user logic memory space 0 high address - ); - - ------------------------------------------ - -- Array of desired number of chip enables for each address range - ------------------------------------------ - constant USER_NUM_MEM : integer := 1; - - constant IPIF_ARD_NUM_CE_ARRAY : INTEGER_ARRAY_TYPE := - ( - 0 => 1 -- number of ce for user logic memory space 0 (always 1 chip enable) - ); - - ------------------------------------------ - -- Ratio of bus clock to core clock (for use in dual clock systems) - -- 1 = ratio is 1:1 - -- 2 = ratio is 2:1 - ------------------------------------------ - 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; - - ------------------------------------------ - -- Width of the slave address bus (32 only) - ------------------------------------------ - constant USER_SLV_AWIDTH : integer := C_SPLB_AWIDTH; - - ------------------------------------------ - -- Index for CS/CE - ------------------------------------------ - constant USER_MEM0_CS_INDEX : integer := 0; - - constant USER_CS_INDEX : integer := USER_MEM0_CS_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 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; - -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_INCLUDE_DPHASE_TIMER => C_INCLUDE_DPHASE_TIMER, - 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 User Logic - ------------------------------------------ - USER_LOGIC_I : entity plbv46_2_wb_v1_00_a.user_logic - generic map - ( - -- MAP USER GENERICS BELOW THIS LINE --------------- - C_WB_DBUS_SIZE => C_WB_DBUS_SIZE, - C_WB_ACCESS_TIMEOUT => C_WB_ACCESS_TIMEOUT, - C_WB_RETRY_TIMEOUT => C_WB_RETRY_TIMEOUT, - C_WB_ACCESS_RETRIES => C_WB_ACCESS_RETRIES, - -- MAP USER GENERICS ABOVE THIS LINE --------------- - - C_SLV_AWIDTH => USER_SLV_AWIDTH, - C_SLV_DWIDTH => USER_SLV_DWIDTH, - C_NUM_MEM => USER_NUM_MEM - ) - port map - ( - -- MAP USER PORTS BELOW THIS LINE ------------------ - - WB_CLK_O => WB_CLK_O , - WB_RST_O => WB_RST_O , - WB_ADR_O => WB_ADR_O , - WB_DAT_O => WB_DAT_O , - WB_SEL_O => WB_SEL_O , - WB_CYC_O => WB_CYC_O , - WB_STB_O => WB_STB_O , - WB_WE_O => WB_WE_O , - WB_DAT_I => WB_DAT_I , - WB_ACK_I => WB_ACK_I , - WB_ERR_I => WB_ERR_I , - WB_RTY_I => WB_RTY_I , - - - --USER ports mapped here - -- MAP USER PORTS ABOVE THIS LINE ------------------ - - Bus2IP_Clk => ipif_Bus2IP_Clk, - Bus2IP_Reset => ipif_Bus2IP_Reset, - Bus2IP_Addr => ipif_Bus2IP_Addr, - Bus2IP_CS => ipif_Bus2IP_CS(USER_CS_INDEX to USER_CS_INDEX+USER_NUM_MEM-1), - Bus2IP_RNW => ipif_Bus2IP_RNW, - Bus2IP_Data => ipif_Bus2IP_Data, - Bus2IP_BE => ipif_Bus2IP_BE, - IP2Bus_Data => user_IP2Bus_Data, - IP2Bus_RdAck => user_IP2Bus_RdAck, - IP2Bus_WrAck => user_IP2Bus_WrAck, - IP2Bus_Error => user_IP2Bus_Error - ); - - ------------------------------------------ - -- connect internal signals - ------------------------------------------ - WB_LOCK_O <= '0'; - - ipif_IP2Bus_Data <= user_IP2Bus_Data; - ipif_IP2Bus_WrAck <= user_IP2Bus_WrAck; - ipif_IP2Bus_RdAck <= user_IP2Bus_RdAck; - ipif_IP2Bus_Error <= user_IP2Bus_Error; - -end IMP; Index: tags/initial/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/user_logic.vhd =================================================================== --- tags/initial/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/user_logic.vhd (revision 9) +++ tags/initial/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/user_logic.vhd (nonexistent) @@ -1,278 +0,0 @@ ------------------------------------------------------------------------------- --- --- *************************************************************************** --- ** Copyright (c) 1995-2008 Xilinx, Inc. All rights reserved. ** --- ** ** --- ** Xilinx, Inc. ** --- ** XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" ** --- ** AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND ** --- ** SOLUTIONS FOR XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, ** --- ** OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, ** --- ** APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION ** --- ** THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, ** --- ** AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE ** --- ** FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY ** --- ** WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE ** --- ** IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR ** --- ** REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF ** --- ** INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ** --- ** FOR A PARTICULAR PURPOSE. ** --- ** ** --- *************************************************************************** --- ------------------------------------------------------------------------------- --- Filename: user_logic.vhd --- Version: 1.10.a --- Description: User logic. ------------------------------------------------------------------------------- - --- DO NOT EDIT BELOW THIS LINE -------------------- -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_arith.all; -use ieee.std_logic_unsigned.all; - -library proc_common_v2_00_a; -use proc_common_v2_00_a.proc_common_pkg.all; - - ------------------------------------------------------------------------------- --- Entity section ------------------------------------------------------------------------------- - -entity user_logic is - generic - ( - -- ADD USER GENERICS BELOW THIS LINE --------------- - C_WB_DBUS_SIZE : integer := 32; - C_WB_ACCESS_TIMEOUT : integer := 16; - C_WB_RETRY_TIMEOUT : integer := 256; - C_WB_ACCESS_RETRIES : integer := 4; - -- ADD USER GENERICS ABOVE THIS LINE --------------- - - -- DO NOT EDIT BELOW THIS LINE --------------------- - -- Bus protocol parameters, do not add to or delete - C_SLV_AWIDTH : integer := 32; - C_SLV_DWIDTH : integer := 32; - C_NUM_MEM : integer := 1 - -- DO NOT EDIT ABOVE THIS LINE --------------------- - ); - port - ( - -- ADD USER PORTS BELOW THIS LINE ------------------ - WB_CLK_O : out std_logic; - WB_RST_O : out std_logic; - WB_ADR_O : out std_logic_vector(31 downto 0); - WB_DAT_O : out std_logic_vector(C_WB_DBUS_SIZE-1 downto 0); - WB_SEL_O : out std_logic_vector((C_WB_DBUS_SIZE/8)-1 downto 0); - WB_CYC_O : out std_logic; - WB_STB_O : out std_logic; - WB_WE_O : out std_logic; - WB_DAT_I : in std_logic_vector(C_WB_DBUS_SIZE-1 downto 0); - WB_ACK_I : in std_logic; - WB_ERR_I : in std_logic; - WB_RTY_I : in std_logic; - -- ADD USER PORTS ABOVE THIS LINE ------------------ - - -- DO NOT EDIT BELOW THIS LINE --------------------- - -- Bus protocol ports, do not add to or delete - Bus2IP_Clk : in std_logic; - Bus2IP_Reset : in std_logic; - Bus2IP_Addr : in std_logic_vector(0 to C_SLV_AWIDTH-1); - Bus2IP_CS : in std_logic_vector(0 to C_NUM_MEM-1); - Bus2IP_RNW : in std_logic; - Bus2IP_Data : in std_logic_vector(0 to C_SLV_DWIDTH-1); - Bus2IP_BE : in std_logic_vector(0 to C_SLV_DWIDTH/8-1); - IP2Bus_Data : out std_logic_vector(0 to C_SLV_DWIDTH-1); - IP2Bus_RdAck : out std_logic; - IP2Bus_WrAck : out std_logic; - IP2Bus_Error : out std_logic - -- DO NOT EDIT ABOVE THIS LINE --------------------- - ); - - attribute SIGIS : string; - attribute SIGIS of Bus2IP_Clk : signal is "CLK"; - attribute SIGIS of Bus2IP_Reset : signal is "RST"; - -end entity user_logic; - ------------------------------------------------------------------------------- --- Architecture section ------------------------------------------------------------------------------- -architecture IMP of user_logic is - - -- State Machine Declarations - type state_type is (ST_IDLE, ST_ACCESS, ST_RETRY_STROBE, ST_RETRY, ST_ERROR, ST_DONE); - signal curr_st : state_type; - signal next_st : state_type; - -- Bus Ack Decode - signal wb_rdack : std_logic; - signal wb_wrack : std_logic; - -- Timer used to track bus error condition and retry timouts. - signal timer_en : std_logic; - signal timer_cnt : std_logic_vector(0 to 7); - -- Counter used to track number of retry attempts - signal retry_iter : std_logic_vector(0 to 1); - signal retry_iter_rst : std_logic; - signal retry_iter_en : std_logic; - -- Status Signals - signal retry_expire : std_logic; -- Maximum Retries exceeded - signal access_to : std_logic; -- Bus Error Detected - signal retry_to : std_logic; -- Retry cycle completed - -begin - - -- - -- We are not buffering these signals to the WB Bus. - -- Nor are we running the clock at a slower rate than the PLB Bus. - WB_CLK_O <= Bus2IP_Clk; - WB_RST_O <= Bus2IP_Reset; - - -- These can probably be treated as multi-cycle paths - -- Possibly will add in a Pipeline stage (user selectable?) - WB_ADR_O <= Bus2IP_Addr; - WB_DAT_O <= Bus2IP_Data; - WB_SEL_O <= Bus2IP_BE; - WB_WE_O <= not Bus2IP_RNW; - - -- - -- Number of retry attempts - -- - process(Bus2IP_Clk) begin - if (rising_edge(Bus2IP_Clk)) then - if (retry_iter_rst = '1') then - retry_iter <= (others=>'0'); - elsif (retry_iter_en = '1') then - retry_iter <= retry_iter + 1; - end if; - - retry_expire <= '0'; - if (retry_iter = conv_std_logic_vector(C_WB_ACCESS_RETRIES-1,2)) then - retry_expire <= '1'; - end if; - end if; - end process; - - -- - -- Retry Wait Counter - -- - process(Bus2IP_Clk) begin - if (rising_edge(Bus2IP_Clk)) then - if (timer_en = '0') then - timer_cnt <= (others => '0'); - else - timer_cnt <= timer_cnt + 1; - end if; - - retry_to <= '0'; - if (timer_cnt = conv_std_logic_vector(C_WB_RETRY_TIMEOUT-1, 8)) then - retry_to <= '1'; - end if; - - if (timer_cnt = conv_std_logic_vector(C_WB_ACCESS_TIMEOUT-1, 8)) then - access_to <= '1'; - end if; - - end if; - end process; - - -- - -- - -- WB Bridge State Machine (Next State Logic) - -- - -- - process(curr_st, Bus2IP_CS ,WB_RTY_I ,WB_ACK_I, retry_to, access_to) begin - - next_st <= curr_st; - timer_en <= '0'; - retry_iter_rst <= '0'; - retry_iter_en <= '0'; - WB_STB_O <= '0'; - WB_CYC_O <= '0'; - IP2Bus_RdAck <= '0'; - IP2Bus_WrAck <= '0'; - IP2Bus_Error <= '0'; - - case (curr_st) is - - - when ST_IDLE => - retry_iter_rst <= '1'; - if (Bus2IP_CS(0) = '1') then - next_st <= ST_ACCESS; - end if; - - -- Access State - -- Completes when we receive either a RETRY, ACK or we timeout of the transaction. - -- Transaction timeout is setup by the user. - when ST_ACCESS => - WB_STB_O <= '1'; - WB_CYC_O <= '1'; - timer_en <= '1'; - if (WB_RTY_I = '1') then - next_st <= ST_RETRY_STROBE; - elsif (WB_ACK_I = '1') then - next_st <= ST_DONE; - elsif (access_to = '1') then - next_st <= ST_ERROR; - end if; - - -- Retry Strobe - -- Simply used to reset timer and increment our retries. - -- We will also check to see if we have reached out limit of retries. - when ST_RETRY_STROBE => - retry_iter_en <= '1'; - if (retry_expire = '1') then - next_st <= ST_ERROR; - else - next_st <= ST_RETRY; - end if; - - -- Retry - -- Sit here and wait until we issues a WB Retry - when ST_RETRY => - timer_en <= '1'; - if (retry_to = '1') then - next_st <= ST_ACCESS; - end if; - - -- Error - -- Issue PLB Error - when ST_ERROR => - IP2Bus_Error <= '1'; - IP2Bus_WrAck <= not Bus2IP_RNW; - IP2Bus_RdAck <= Bus2IP_RNW; - next_st <= ST_IDLE; - - when ST_DONE => - IP2Bus_RdAck <= Bus2IP_RNW; - IP2Bus_WrAck <= not Bus2IP_RNW; - next_st <= ST_IDLE; - - - end case; - - end process; - - -- - -- - -- WB Bridge State Machine (Current State Logic) - -- - -- - process(Bus2IP_Clk) begin - if (rising_edge(Bus2IP_Clk)) then - if (Bus2IP_Reset = '1') then - curr_st <= ST_IDLE; - else - curr_st <= next_st; - end if; - end if; - end process; - - ------------------------------------------ - -- Example code to drive IP to Bus signals - ------------------------------------------ - IP2Bus_Data <= WB_DAT_I when wb_rdack = '1' else - (others => '0'); - -end IMP; Index: tags/initial/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.pao =================================================================== --- tags/initial/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.pao (revision 9) +++ tags/initial/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.pao (nonexistent) @@ -1,16 +0,0 @@ -############################################################################## -## Description: Peripheral Analysis Order -############################################################################## - -lib proc_common_v2_00_a proc_common_pkg vhdl -lib proc_common_v2_00_a ipif_pkg vhdl -lib proc_common_v2_00_a or_muxcy vhdl -lib proc_common_v2_00_a or_gate128 vhdl -lib proc_common_v2_00_a family_support vhdl -lib proc_common_v2_00_a pselect_f vhdl -lib proc_common_v2_00_a counter_f vhdl -lib plbv46_slave_single_v1_00_a plb_address_decoder vhdl -lib plbv46_slave_single_v1_00_a plb_slave_attachment vhdl -lib plbv46_slave_single_v1_00_a plbv46_slave_single vhdl -lib plbv46_2_wb_v1_10_a user_logic vhdl -lib plbv46_2_wb_v1_10_a plbv46_2_wb vhdl Index: tags/initial/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.mpd =================================================================== --- tags/initial/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.mpd (revision 9) +++ tags/initial/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.mpd (nonexistent) @@ -1,111 +0,0 @@ -################################################################### -## -## Name : plbv46_2_wb -## Desc : Microprocessor Peripheral Description -## : Automatically generated by PsfUtility -## -################################################################### - -BEGIN plbv46_2_wb - -## Peripheral Options -OPTION IPTYPE = PERIPHERAL -OPTION IMP_NETLIST = TRUE -OPTION HDL = VHDL -OPTION ARCH_SUPPORT_MAP = (OTHERS=DEVELOPMENT) -OPTION IP_GROUP = MICROBLAZE:PPC:Bus and Bridge -OPTION DESC = PLBv46 to Wishbone B3 Bridge - - -## Bus Interfaces -BUS_INTERFACE BUS = SPLB, BUS_TYPE = SLAVE, BUS_STD = PLBV46 - -## Generics for VHDL or Parameters for Verilog -PARAMETER C_SPLB_AWIDTH = 32, DT = INTEGER, BUS = SPLB, ASSIGNMENT = CONSTANT -PARAMETER C_SPLB_DWIDTH = 128, DT = INTEGER, BUS = SPLB, RANGE = (32, 64, 128) -PARAMETER C_SPLB_NUM_MASTERS = 8, DT = INTEGER, BUS = SPLB, RANGE = (1:16) -PARAMETER C_SPLB_MID_WIDTH = 3, DT = INTEGER, BUS = SPLB, RANGE = (1:4) -PARAMETER C_SPLB_NATIVE_DWIDTH = 32, DT = INTEGER, BUS = SPLB, RANGE = (32, 64, 128), ASSIGNMENT = CONSTANT -PARAMETER C_SPLB_P2P = 0, DT = INTEGER, BUS = SPLB, RANGE = (0, 1) -PARAMETER C_SPLB_SUPPORT_BURSTS = 0, DT = INTEGER, BUS = SPLB, RANGE = (0, 1), ASSIGNMENT = CONSTANT -PARAMETER C_SPLB_SMALLEST_MASTER = 32, DT = INTEGER, BUS = SPLB, RANGE = (32, 64, 128) -PARAMETER C_SPLB_CLK_PERIOD_PS = 10000, DT = INTEGER, BUS = SPLB -PARAMETER C_INCLUDE_DPHASE_TIMER = 0, DT = INTEGER, RANGE = (0, 1) -PARAMETER C_FAMILY = virtex5, DT = STRING -PARAMETER C_MEM0_BASEADDR = 0xffffffff, DT = std_logic_vector, BUS = SPLB, ADDRESS = BASE, PAIR = C_MEM0_HIGHADDR -PARAMETER C_MEM0_HIGHADDR = 0x00000000, DT = std_logic_vector, BUS = SPLB, ADDRESS = HIGH, PAIR = C_MEM0_BASEADDR - -PARAMETER C_WB_ACCESS_TIMEOUT = 16, DT = INTEGER, RANGE = (1:256) -PARAMETER C_WB_RETRY_TIMEOUT = 256, DT = INTEGER, RANGE = (1:256) -PARAMETER C_WB_ACCESS_RETRIES = 4, DT = INTEGER, RANGE = (1:4) -PARAMETER C_WB_DBUS_SIZE = 32, DT = INTEGER, ASSIGNMENT = CONSTANT - -## Ports -PORT SPLB_Clk = "", DIR = I, SIGIS = CLK, BUS = SPLB -PORT SPLB_Rst = SPLB_Rst, DIR = I, SIGIS = RST, BUS = SPLB -PORT PLB_ABus = PLB_ABus, DIR = I, VEC = [0:31], BUS = SPLB -PORT PLB_UABus = PLB_UABus, DIR = I, VEC = [0:31], BUS = SPLB -PORT PLB_PAValid = PLB_PAValid, DIR = I, BUS = SPLB -PORT PLB_SAValid = PLB_SAValid, DIR = I, BUS = SPLB -PORT PLB_rdPrim = PLB_rdPrim, DIR = I, BUS = SPLB -PORT PLB_wrPrim = PLB_wrPrim, DIR = I, BUS = SPLB -PORT PLB_masterID = PLB_masterID, DIR = I, VEC = [0:(C_SPLB_MID_WIDTH-1)], BUS = SPLB -PORT PLB_abort = PLB_abort, DIR = I, BUS = SPLB -PORT PLB_busLock = PLB_busLock, DIR = I, BUS = SPLB -PORT PLB_RNW = PLB_RNW, DIR = I, BUS = SPLB -PORT PLB_BE = PLB_BE, DIR = I, VEC = [0:((C_SPLB_DWIDTH/8)-1)], BUS = SPLB -PORT PLB_MSize = PLB_MSize, DIR = I, VEC = [0:1], BUS = SPLB -PORT PLB_size = PLB_size, DIR = I, VEC = [0:3], BUS = SPLB -PORT PLB_type = PLB_type, DIR = I, VEC = [0:2], BUS = SPLB -PORT PLB_lockErr = PLB_lockErr, DIR = I, BUS = SPLB -PORT PLB_wrDBus = PLB_wrDBus, DIR = I, VEC = [0:(C_SPLB_DWIDTH-1)], BUS = SPLB -PORT PLB_wrBurst = PLB_wrBurst, DIR = I, BUS = SPLB -PORT PLB_rdBurst = PLB_rdBurst, DIR = I, BUS = SPLB -PORT PLB_wrPendReq = PLB_wrPendReq, DIR = I, BUS = SPLB -PORT PLB_rdPendReq = PLB_rdPendReq, DIR = I, BUS = SPLB -PORT PLB_wrPendPri = PLB_wrPendPri, DIR = I, VEC = [0:1], BUS = SPLB -PORT PLB_rdPendPri = PLB_rdPendPri, DIR = I, VEC = [0:1], BUS = SPLB -PORT PLB_reqPri = PLB_reqPri, DIR = I, VEC = [0:1], BUS = SPLB -PORT PLB_TAttribute = PLB_TAttribute, DIR = I, VEC = [0:15], BUS = SPLB -PORT Sl_addrAck = Sl_addrAck, DIR = O, BUS = SPLB -PORT Sl_SSize = Sl_SSize, DIR = O, VEC = [0:1], BUS = SPLB -PORT Sl_wait = Sl_wait, DIR = O, BUS = SPLB -PORT Sl_rearbitrate = Sl_rearbitrate, DIR = O, BUS = SPLB -PORT Sl_wrDAck = Sl_wrDAck, DIR = O, BUS = SPLB -PORT Sl_wrComp = Sl_wrComp, DIR = O, BUS = SPLB -PORT Sl_wrBTerm = Sl_wrBTerm, DIR = O, BUS = SPLB -PORT Sl_rdDBus = Sl_rdDBus, DIR = O, VEC = [0:(C_SPLB_DWIDTH-1)], BUS = SPLB -PORT Sl_rdWdAddr = Sl_rdWdAddr, DIR = O, VEC = [0:3], BUS = SPLB -PORT Sl_rdDAck = Sl_rdDAck, DIR = O, BUS = SPLB -PORT Sl_rdComp = Sl_rdComp, DIR = O, BUS = SPLB -PORT Sl_rdBTerm = Sl_rdBTerm, DIR = O, BUS = SPLB -PORT Sl_MBusy = Sl_MBusy, DIR = O, VEC = [0:(C_SPLB_NUM_MASTERS-1)], BUS = SPLB -PORT Sl_MWrErr = Sl_MWrErr, DIR = O, VEC = [0:(C_SPLB_NUM_MASTERS-1)], BUS = SPLB -PORT Sl_MRdErr = Sl_MRdErr, DIR = O, VEC = [0:(C_SPLB_NUM_MASTERS-1)], BUS = SPLB -PORT Sl_MIRQ = Sl_MIRQ, DIR = O, VEC = [0:(C_SPLB_NUM_MASTERS-1)], BUS = SPLB - - - - -PORT WB_CLK_O = "", DIR = O -PORT WB_RST_O = "", DIR = O -PORT WB_ADR_O = "", DIR = O, VEC = [31:0] -PORT WB_DAT_O = "", DIR = O, VEC = [C_WB_DBUS_SIZE-1:0] -PORT WB_SEL_O = "", DIR = O, VEC = [(C_WB_DBUS_SIZE/8)-1:0] -PORT WB_CYC_O = "", DIR = O -PORT WB_LOCK_O = "", DIR = O -PORT WB_STB_O = "", DIR = O -PORT WB_WE_O = "", DIR = O -PORT WB_DAT_I = "", DIR = I, VEC = [C_WB_DBUS_SIZE-1:0] -PORT WB_ACK_I = "", DIR = I -PORT WB_ERR_I = "", DIR = I -PORT WB_RTY_I = "", DIR = I - - - - - - - - -END Index: trunk/doc/plbv46_2_wb.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/plbv46_2_wb.pdf =================================================================== --- trunk/doc/plbv46_2_wb.pdf (revision 9) +++ trunk/doc/plbv46_2_wb.pdf (nonexistent)
trunk/doc/plbv46_2_wb.pdf Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc/src/plbv46_2_wb.doc =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/src/plbv46_2_wb.doc =================================================================== --- trunk/doc/src/plbv46_2_wb.doc (revision 9) +++ trunk/doc/src/plbv46_2_wb.doc (nonexistent)
trunk/doc/src/plbv46_2_wb.doc Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/plbv46_2_wb.vhd =================================================================== --- trunk/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/plbv46_2_wb.vhd (revision 9) +++ trunk/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/plbv46_2_wb.vhd (nonexistent) @@ -1,367 +0,0 @@ ------------------------------------------------------------------------------- --- --- *************************************************************************** --- ** Copyright (c) 1995-2008 Xilinx, Inc. All rights reserved. ** --- ** ** --- ** Xilinx, Inc. ** --- ** XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" ** --- ** AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND ** --- ** SOLUTIONS FOR XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, ** --- ** OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, ** --- ** APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION ** --- ** THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, ** --- ** AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE ** --- ** FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY ** --- ** WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE ** --- ** IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR ** --- ** REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF ** --- ** INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ** --- ** FOR A PARTICULAR PURPOSE. ** --- ** ** --- *************************************************************************** --- ------------------------------------------------------------------------------- --- Filename: plbv46_2_wb.vhd --- Version: 1.10.a --- Creation Date: Tue Jul 15, 2008 --- Description: PLB version 4.6 to Wishbone B3 Bridge --- Simple non-bursting bridge interface from Xilinx-derivative --- PLB Bus for Microblaze/PowerPC to OpenCores.org Wishbone --- bridge standard. --- --- File Revisions: --- 7/15/08 - mds : Initial version --- 7/25/08 - mds : Added retry and bus error detection. --- ------------------------------------------------------------------------------- -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_arith.all; -use ieee.std_logic_unsigned.all; - -library proc_common_v2_00_a; -use proc_common_v2_00_a.proc_common_pkg.all; -use proc_common_v2_00_a.ipif_pkg.all; - -library plbv46_slave_single_v1_00_a; -use plbv46_slave_single_v1_00_a.plbv46_slave_single; - -library plbv46_2_wb_v1_10_a; -use plbv46_2_wb_v1_10_a.user_logic; - ------------------------------------------------------------------------------- --- Entity section ------------------------------------------------------------------------------- -entity plbv46_2_wb is - generic - ( - -- ADD USER GENERICS BELOW THIS LINE --------------- - C_WB_DBUS_SIZE : integer := 32; -- Constant - C_WB_ACCESS_TIMEOUT : integer := 16; -- Ranges from 1 to 256 - C_WB_RETRY_TIMEOUT : integer := 64; -- Ranges from 1 to 256 - C_WB_ACCESS_RETRIES : integer := 4; -- Ranges from 1 to 4 - -- ADD USER GENERICS ABOVE THIS LINE --------------- - - -- DO NOT EDIT BELOW THIS LINE --------------------- - -- Bus protocol parameters, do not add to or delete - C_SPLB_AWIDTH : integer := 32; - C_SPLB_DWIDTH : integer := 128; - C_SPLB_NUM_MASTERS : integer := 8; - C_SPLB_MID_WIDTH : integer := 3; - C_SPLB_NATIVE_DWIDTH : integer := 32; - C_SPLB_P2P : integer := 0; - C_SPLB_SUPPORT_BURSTS : integer := 0; - C_SPLB_SMALLEST_MASTER : integer := 32; - C_SPLB_CLK_PERIOD_PS : integer := 10000; - C_INCLUDE_DPHASE_TIMER : integer := 0; - C_FAMILY : string := "virtex5"; - C_MEM0_BASEADDR : std_logic_vector := X"FFFFFFFF"; - C_MEM0_HIGHADDR : std_logic_vector := X"00000000" - -- DO NOT EDIT ABOVE THIS LINE --------------------- - ); - port - ( - -- ADD USER PORTS BELOW THIS LINE ------------------ - WB_CLK_O : out std_logic; - WB_RST_O : out std_logic; - WB_ADR_O : out std_logic_vector(0 to 31); - WB_DAT_O : out std_logic_vector(0 to C_WB_DBUS_SIZE-1); - WB_SEL_O : out std_logic_vector(0 to (C_WB_DBUS_SIZE/8)-1); - WB_CYC_O : out std_logic; - WB_LOCK_O : out std_logic; - WB_STB_O : out std_logic; - WB_WE_O : out std_logic; - WB_DAT_I : in std_logic_vector(0 to C_WB_DBUS_SIZE-1); - WB_ACK_I : in std_logic; - WB_ERR_I : in std_logic; - WB_RTY_I : in std_logic; - -- ADD USER PORTS ABOVE THIS LINE ------------------ - - -- DO NOT EDIT BELOW THIS LINE --------------------- - -- Bus protocol ports, do not add to or delete - SPLB_Clk : in std_logic; - SPLB_Rst : in std_logic; - PLB_ABus : in std_logic_vector(0 to 31); - PLB_UABus : in std_logic_vector(0 to 31); - PLB_PAValid : in std_logic; - PLB_SAValid : in std_logic; - PLB_rdPrim : in std_logic; - PLB_wrPrim : in std_logic; - PLB_masterID : in std_logic_vector(0 to C_SPLB_MID_WIDTH-1); - PLB_abort : in std_logic; - PLB_busLock : in std_logic; - PLB_RNW : in std_logic; - PLB_BE : in std_logic_vector(0 to C_SPLB_DWIDTH/8-1); - PLB_MSize : in std_logic_vector(0 to 1); - PLB_size : in std_logic_vector(0 to 3); - PLB_type : in std_logic_vector(0 to 2); - PLB_lockErr : in std_logic; - PLB_wrDBus : in std_logic_vector(0 to C_SPLB_DWIDTH-1); - PLB_wrBurst : in std_logic; - PLB_rdBurst : in std_logic; - PLB_wrPendReq : in std_logic; - PLB_rdPendReq : in std_logic; - PLB_wrPendPri : in std_logic_vector(0 to 1); - PLB_rdPendPri : in std_logic_vector(0 to 1); - PLB_reqPri : in std_logic_vector(0 to 1); - PLB_TAttribute : in std_logic_vector(0 to 15); - Sl_addrAck : out std_logic; - Sl_SSize : out std_logic_vector(0 to 1); - Sl_wait : out std_logic; - Sl_rearbitrate : out std_logic; - Sl_wrDAck : out std_logic; - Sl_wrComp : out std_logic; - Sl_wrBTerm : out std_logic; - Sl_rdDBus : out std_logic_vector(0 to C_SPLB_DWIDTH-1); - Sl_rdWdAddr : out std_logic_vector(0 to 3); - Sl_rdDAck : out std_logic; - Sl_rdComp : out std_logic; - Sl_rdBTerm : out std_logic; - Sl_MBusy : out std_logic_vector(0 to C_SPLB_NUM_MASTERS-1); - Sl_MWrErr : out std_logic_vector(0 to C_SPLB_NUM_MASTERS-1); - Sl_MRdErr : out std_logic_vector(0 to C_SPLB_NUM_MASTERS-1); - Sl_MIRQ : out std_logic_vector(0 to C_SPLB_NUM_MASTERS-1) - -- DO NOT EDIT ABOVE THIS LINE --------------------- - ); - - attribute SIGIS : string; - attribute SIGIS of SPLB_Clk : signal is "CLK"; - attribute SIGIS of SPLB_Rst : signal is "RST"; - -end entity plbv46_2_wb; - ------------------------------------------------------------------------------- --- Architecture section ------------------------------------------------------------------------------- - -architecture IMP of plbv46_2_wb is - - ------------------------------------------ - -- Array of base/high address pairs for each address range - ------------------------------------------ - constant ZERO_ADDR_PAD : std_logic_vector(0 to 31) := (others => '0'); - - constant IPIF_ARD_ADDR_RANGE_ARRAY : SLV64_ARRAY_TYPE := - ( - ZERO_ADDR_PAD & C_MEM0_BASEADDR, -- user logic memory space 0 base address - ZERO_ADDR_PAD & C_MEM0_HIGHADDR -- user logic memory space 0 high address - ); - - ------------------------------------------ - -- Array of desired number of chip enables for each address range - ------------------------------------------ - constant USER_NUM_MEM : integer := 1; - - constant IPIF_ARD_NUM_CE_ARRAY : INTEGER_ARRAY_TYPE := - ( - 0 => 1 -- number of ce for user logic memory space 0 (always 1 chip enable) - ); - - ------------------------------------------ - -- Ratio of bus clock to core clock (for use in dual clock systems) - -- 1 = ratio is 1:1 - -- 2 = ratio is 2:1 - ------------------------------------------ - 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; - - ------------------------------------------ - -- Width of the slave address bus (32 only) - ------------------------------------------ - constant USER_SLV_AWIDTH : integer := C_SPLB_AWIDTH; - - ------------------------------------------ - -- Index for CS/CE - ------------------------------------------ - constant USER_MEM0_CS_INDEX : integer := 0; - - constant USER_CS_INDEX : integer := USER_MEM0_CS_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 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; - -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_INCLUDE_DPHASE_TIMER => C_INCLUDE_DPHASE_TIMER, - 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 User Logic - ------------------------------------------ - USER_LOGIC_I : entity plbv46_2_wb_v1_10_a.user_logic - generic map - ( - -- MAP USER GENERICS BELOW THIS LINE --------------- - C_WB_DBUS_SIZE => C_WB_DBUS_SIZE, - C_WB_ACCESS_TIMEOUT => C_WB_ACCESS_TIMEOUT, - C_WB_RETRY_TIMEOUT => C_WB_RETRY_TIMEOUT, - C_WB_ACCESS_RETRIES => C_WB_ACCESS_RETRIES, - -- MAP USER GENERICS ABOVE THIS LINE --------------- - - C_SLV_AWIDTH => USER_SLV_AWIDTH, - C_SLV_DWIDTH => USER_SLV_DWIDTH, - C_NUM_MEM => USER_NUM_MEM - ) - port map - ( - -- MAP USER PORTS BELOW THIS LINE ------------------ - - WB_CLK_O => WB_CLK_O , - WB_RST_O => WB_RST_O , - WB_ADR_O => WB_ADR_O , - WB_DAT_O => WB_DAT_O , - WB_SEL_O => WB_SEL_O , - WB_CYC_O => WB_CYC_O , - WB_STB_O => WB_STB_O , - WB_WE_O => WB_WE_O , - WB_DAT_I => WB_DAT_I , - WB_ACK_I => WB_ACK_I , - WB_ERR_I => WB_ERR_I , - WB_RTY_I => WB_RTY_I , - - - --USER ports mapped here - -- MAP USER PORTS ABOVE THIS LINE ------------------ - - Bus2IP_Clk => ipif_Bus2IP_Clk, - Bus2IP_Reset => ipif_Bus2IP_Reset, - Bus2IP_Addr => ipif_Bus2IP_Addr, - Bus2IP_CS => ipif_Bus2IP_CS(USER_CS_INDEX to USER_CS_INDEX+USER_NUM_MEM-1), - Bus2IP_RNW => ipif_Bus2IP_RNW, - Bus2IP_Data => ipif_Bus2IP_Data, - Bus2IP_BE => ipif_Bus2IP_BE, - IP2Bus_Data => user_IP2Bus_Data, - IP2Bus_RdAck => user_IP2Bus_RdAck, - IP2Bus_WrAck => user_IP2Bus_WrAck, - IP2Bus_Error => user_IP2Bus_Error - ); - - ------------------------------------------ - -- connect internal signals - ------------------------------------------ - WB_LOCK_O <= '0'; - - ipif_IP2Bus_Data <= user_IP2Bus_Data; - ipif_IP2Bus_WrAck <= user_IP2Bus_WrAck; - ipif_IP2Bus_RdAck <= user_IP2Bus_RdAck; - ipif_IP2Bus_Error <= user_IP2Bus_Error; - -end IMP; Index: trunk/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/user_logic.vhd =================================================================== --- trunk/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/user_logic.vhd (revision 9) +++ trunk/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/user_logic.vhd (nonexistent) @@ -1,282 +0,0 @@ ------------------------------------------------------------------------------- --- --- *************************************************************************** --- ** Copyright (c) 1995-2008 Xilinx, Inc. All rights reserved. ** --- ** ** --- ** Xilinx, Inc. ** --- ** XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" ** --- ** AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND ** --- ** SOLUTIONS FOR XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, ** --- ** OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, ** --- ** APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION ** --- ** THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, ** --- ** AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE ** --- ** FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY ** --- ** WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE ** --- ** IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR ** --- ** REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF ** --- ** INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ** --- ** FOR A PARTICULAR PURPOSE. ** --- ** ** --- *************************************************************************** --- ------------------------------------------------------------------------------- --- Filename: user_logic.vhd --- Version: 1.10.a --- Description: User logic. ------------------------------------------------------------------------------- - --- DO NOT EDIT BELOW THIS LINE -------------------- -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_arith.all; -use ieee.std_logic_unsigned.all; - -library proc_common_v2_00_a; -use proc_common_v2_00_a.proc_common_pkg.all; - - ------------------------------------------------------------------------------- --- Entity section ------------------------------------------------------------------------------- - -entity user_logic is - generic - ( - -- ADD USER GENERICS BELOW THIS LINE --------------- - C_WB_DBUS_SIZE : integer := 32; - C_WB_ACCESS_TIMEOUT : integer := 16; - C_WB_RETRY_TIMEOUT : integer := 256; - C_WB_ACCESS_RETRIES : integer := 4; - -- ADD USER GENERICS ABOVE THIS LINE --------------- - - -- DO NOT EDIT BELOW THIS LINE --------------------- - -- Bus protocol parameters, do not add to or delete - C_SLV_AWIDTH : integer := 32; - C_SLV_DWIDTH : integer := 32; - C_NUM_MEM : integer := 1 - -- DO NOT EDIT ABOVE THIS LINE --------------------- - ); - port - ( - -- ADD USER PORTS BELOW THIS LINE ------------------ - WB_CLK_O : out std_logic; - WB_RST_O : out std_logic; - WB_ADR_O : out std_logic_vector(0 to 31); - WB_DAT_O : out std_logic_vector(0 to C_WB_DBUS_SIZE-1); - WB_SEL_O : out std_logic_vector(0 to (C_WB_DBUS_SIZE/8)-1); - WB_CYC_O : out std_logic; - WB_STB_O : out std_logic; - WB_WE_O : out std_logic; - WB_DAT_I : in std_logic_vector(0 to C_WB_DBUS_SIZE-1); - WB_ACK_I : in std_logic; - WB_ERR_I : in std_logic; - WB_RTY_I : in std_logic; - -- ADD USER PORTS ABOVE THIS LINE ------------------ - - -- DO NOT EDIT BELOW THIS LINE --------------------- - -- Bus protocol ports, do not add to or delete - Bus2IP_Clk : in std_logic; - Bus2IP_Reset : in std_logic; - Bus2IP_Addr : in std_logic_vector(0 to C_SLV_AWIDTH-1); - Bus2IP_CS : in std_logic_vector(0 to C_NUM_MEM-1); - Bus2IP_RNW : in std_logic; - Bus2IP_Data : in std_logic_vector(0 to C_SLV_DWIDTH-1); - Bus2IP_BE : in std_logic_vector(0 to C_SLV_DWIDTH/8-1); - IP2Bus_Data : out std_logic_vector(0 to C_SLV_DWIDTH-1); - IP2Bus_RdAck : out std_logic; - IP2Bus_WrAck : out std_logic; - IP2Bus_Error : out std_logic - -- DO NOT EDIT ABOVE THIS LINE --------------------- - ); - - attribute SIGIS : string; - attribute SIGIS of Bus2IP_Clk : signal is "CLK"; - attribute SIGIS of Bus2IP_Reset : signal is "RST"; - -end entity user_logic; - ------------------------------------------------------------------------------- --- Architecture section ------------------------------------------------------------------------------- -architecture IMP of user_logic is - - -- State Machine Declarations - type state_type is (ST_IDLE, ST_ACCESS, ST_RETRY_STROBE, ST_RETRY, ST_ERROR, ST_DONE); - signal curr_st : state_type; - signal next_st : state_type; - -- Bus Ack Decode - signal wb_rdack : std_logic; - signal wb_wrack : std_logic; - -- Timer used to track bus error condition and retry timouts. - signal timer_en : std_logic; - signal timer_cnt : std_logic_vector(0 to 7); - -- Counter used to track number of retry attempts - signal retry_iter : std_logic_vector(0 to 1); - signal retry_iter_rst : std_logic; - signal retry_iter_en : std_logic; - -- Status Signals - signal retry_expire : std_logic; -- Maximum Retries exceeded - signal access_to : std_logic; -- Bus Error Detected - signal retry_to : std_logic; -- Retry cycle completed - -begin - - -- - -- We are not buffering these signals to the WB Bus. - -- Nor are we running the clock at a slower rate than the PLB Bus. - WB_CLK_O <= Bus2IP_Clk; - WB_RST_O <= Bus2IP_Reset; - - -- These can probably be treated as multi-cycle paths - -- Possibly will add in a Pipeline stage (user selectable?) - WB_ADR_O <= Bus2IP_Addr; - WB_DAT_O <= Bus2IP_Data; - WB_SEL_O <= Bus2IP_BE; - WB_WE_O <= not Bus2IP_RNW; - - -- - -- Number of retry attempts - -- - process(Bus2IP_Clk) begin - if (rising_edge(Bus2IP_Clk)) then - if (retry_iter_rst = '1') then - retry_iter <= (others=>'0'); - elsif (retry_iter_en = '1') then - retry_iter <= retry_iter + 1; - end if; - - retry_expire <= '0'; - if (retry_iter = conv_std_logic_vector(C_WB_ACCESS_RETRIES-1,2)) then - retry_expire <= '1'; - end if; - end if; - end process; - - -- - -- Retry Wait Counter - -- - process(Bus2IP_Clk) begin - if (rising_edge(Bus2IP_Clk)) then - if (timer_en = '0') then - timer_cnt <= (others => '0'); - else - timer_cnt <= timer_cnt + 1; - end if; - - retry_to <= '0'; - if (timer_cnt = conv_std_logic_vector(C_WB_RETRY_TIMEOUT-1, 8)) then - retry_to <= '1'; - end if; - - if (timer_cnt = conv_std_logic_vector(C_WB_ACCESS_TIMEOUT-1, 8)) then - access_to <= '1'; - end if; - - end if; - end process; - - -- - -- - -- WB Bridge State Machine (Next State Logic) - -- - -- - - IP2Bus_RdAck <= wb_rdack; - IP2Bus_WrAck <= wb_wrack; - - process(curr_st, Bus2IP_CS ,WB_RTY_I ,WB_ACK_I, retry_to, access_to) begin - - next_st <= curr_st; - timer_en <= '0'; - retry_iter_rst <= '0'; - retry_iter_en <= '0'; - WB_STB_O <= '0'; - WB_CYC_O <= '0'; - wb_rdack <= '0'; - wb_wrack <= '0'; - IP2Bus_Error <= '0'; - - case (curr_st) is - - - when ST_IDLE => - retry_iter_rst <= '1'; - if (Bus2IP_CS(0) = '1') then - next_st <= ST_ACCESS; - end if; - - -- Access State - -- Completes when we receive either a RETRY, ACK or we timeout of the transaction. - -- Transaction timeout is setup by the user. - when ST_ACCESS => - WB_STB_O <= '1'; - WB_CYC_O <= '1'; - timer_en <= '1'; - if (WB_RTY_I = '1') then - next_st <= ST_RETRY_STROBE; - elsif (WB_ACK_I = '1') then - next_st <= ST_DONE; - elsif (access_to = '1') then - next_st <= ST_ERROR; - end if; - - -- Retry Strobe - -- Simply used to reset timer and increment our retries. - -- We will also check to see if we have reached out limit of retries. - when ST_RETRY_STROBE => - retry_iter_en <= '1'; - if (retry_expire = '1') then - next_st <= ST_ERROR; - else - next_st <= ST_RETRY; - end if; - - -- Retry - -- Sit here and wait until we issues a WB Retry - when ST_RETRY => - timer_en <= '1'; - if (retry_to = '1') then - next_st <= ST_ACCESS; - end if; - - -- Error - -- Issue PLB Error - when ST_ERROR => - IP2Bus_Error <= '1'; - wb_wrack <= not Bus2IP_RNW; - wb_rdack <= Bus2IP_RNW; - next_st <= ST_IDLE; - - when ST_DONE => - wb_rdack <= Bus2IP_RNW; - wb_wrack <= not Bus2IP_RNW; - next_st <= ST_IDLE; - - - end case; - - end process; - - -- - -- - -- WB Bridge State Machine (Current State Logic) - -- - -- - process(Bus2IP_Clk) begin - if (rising_edge(Bus2IP_Clk)) then - if (Bus2IP_Reset = '1') then - curr_st <= ST_IDLE; - else - curr_st <= next_st; - end if; - end if; - end process; - - ------------------------------------------ - -- Example code to drive IP to Bus signals - ------------------------------------------ - IP2Bus_Data <= WB_DAT_I when wb_rdack = '1' else - (others => '0'); - -end IMP; Index: trunk/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.pao =================================================================== --- trunk/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.pao (revision 9) +++ trunk/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.pao (nonexistent) @@ -1,16 +0,0 @@ -############################################################################## -## Description: Peripheral Analysis Order -############################################################################## - -lib proc_common_v2_00_a proc_common_pkg vhdl -lib proc_common_v2_00_a ipif_pkg vhdl -lib proc_common_v2_00_a or_muxcy vhdl -lib proc_common_v2_00_a or_gate128 vhdl -lib proc_common_v2_00_a family_support vhdl -lib proc_common_v2_00_a pselect_f vhdl -lib proc_common_v2_00_a counter_f vhdl -lib plbv46_slave_single_v1_00_a plb_address_decoder vhdl -lib plbv46_slave_single_v1_00_a plb_slave_attachment vhdl -lib plbv46_slave_single_v1_00_a plbv46_slave_single vhdl -lib plbv46_2_wb_v1_10_a user_logic vhdl -lib plbv46_2_wb_v1_10_a plbv46_2_wb vhdl Index: trunk/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.mpd =================================================================== --- trunk/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.mpd (revision 9) +++ trunk/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.mpd (nonexistent) @@ -1,111 +0,0 @@ -################################################################### -## -## Name : plbv46_2_wb -## Desc : Microprocessor Peripheral Description -## : Automatically generated by PsfUtility -## -################################################################### - -BEGIN plbv46_2_wb - -## Peripheral Options -OPTION IPTYPE = PERIPHERAL -OPTION IMP_NETLIST = TRUE -OPTION HDL = VHDL -OPTION ARCH_SUPPORT_MAP = (OTHERS=DEVELOPMENT) -OPTION IP_GROUP = MICROBLAZE:PPC:Bus and Bridge -OPTION DESC = PLBv46 to Wishbone B3 Bridge - - -## Bus Interfaces -BUS_INTERFACE BUS = SPLB, BUS_TYPE = SLAVE, BUS_STD = PLBV46 - -## Generics for VHDL or Parameters for Verilog -PARAMETER C_SPLB_AWIDTH = 32, DT = INTEGER, BUS = SPLB, ASSIGNMENT = CONSTANT -PARAMETER C_SPLB_DWIDTH = 128, DT = INTEGER, BUS = SPLB, RANGE = (32, 64, 128) -PARAMETER C_SPLB_NUM_MASTERS = 8, DT = INTEGER, BUS = SPLB, RANGE = (1:16) -PARAMETER C_SPLB_MID_WIDTH = 3, DT = INTEGER, BUS = SPLB, RANGE = (1:4) -PARAMETER C_SPLB_NATIVE_DWIDTH = 32, DT = INTEGER, BUS = SPLB, RANGE = (32, 64, 128), ASSIGNMENT = CONSTANT -PARAMETER C_SPLB_P2P = 0, DT = INTEGER, BUS = SPLB, RANGE = (0, 1) -PARAMETER C_SPLB_SUPPORT_BURSTS = 0, DT = INTEGER, BUS = SPLB, RANGE = (0, 1), ASSIGNMENT = CONSTANT -PARAMETER C_SPLB_SMALLEST_MASTER = 32, DT = INTEGER, BUS = SPLB, RANGE = (32, 64, 128) -PARAMETER C_SPLB_CLK_PERIOD_PS = 10000, DT = INTEGER, BUS = SPLB -PARAMETER C_INCLUDE_DPHASE_TIMER = 0, DT = INTEGER, RANGE = (0, 1) -PARAMETER C_FAMILY = virtex5, DT = STRING -PARAMETER C_MEM0_BASEADDR = 0xffffffff, DT = std_logic_vector, BUS = SPLB, ADDRESS = BASE, PAIR = C_MEM0_HIGHADDR -PARAMETER C_MEM0_HIGHADDR = 0x00000000, DT = std_logic_vector, BUS = SPLB, ADDRESS = HIGH, PAIR = C_MEM0_BASEADDR - -PARAMETER C_WB_ACCESS_TIMEOUT = 16, DT = INTEGER, RANGE = (1:256) -PARAMETER C_WB_RETRY_TIMEOUT = 256, DT = INTEGER, RANGE = (1:256) -PARAMETER C_WB_ACCESS_RETRIES = 4, DT = INTEGER, RANGE = (1:4) -PARAMETER C_WB_DBUS_SIZE = 32, DT = INTEGER, ASSIGNMENT = CONSTANT - -## Ports -PORT SPLB_Clk = "", DIR = I, SIGIS = CLK, BUS = SPLB -PORT SPLB_Rst = SPLB_Rst, DIR = I, SIGIS = RST, BUS = SPLB -PORT PLB_ABus = PLB_ABus, DIR = I, VEC = [0:31], BUS = SPLB -PORT PLB_UABus = PLB_UABus, DIR = I, VEC = [0:31], BUS = SPLB -PORT PLB_PAValid = PLB_PAValid, DIR = I, BUS = SPLB -PORT PLB_SAValid = PLB_SAValid, DIR = I, BUS = SPLB -PORT PLB_rdPrim = PLB_rdPrim, DIR = I, BUS = SPLB -PORT PLB_wrPrim = PLB_wrPrim, DIR = I, BUS = SPLB -PORT PLB_masterID = PLB_masterID, DIR = I, VEC = [0:(C_SPLB_MID_WIDTH-1)], BUS = SPLB -PORT PLB_abort = PLB_abort, DIR = I, BUS = SPLB -PORT PLB_busLock = PLB_busLock, DIR = I, BUS = SPLB -PORT PLB_RNW = PLB_RNW, DIR = I, BUS = SPLB -PORT PLB_BE = PLB_BE, DIR = I, VEC = [0:((C_SPLB_DWIDTH/8)-1)], BUS = SPLB -PORT PLB_MSize = PLB_MSize, DIR = I, VEC = [0:1], BUS = SPLB -PORT PLB_size = PLB_size, DIR = I, VEC = [0:3], BUS = SPLB -PORT PLB_type = PLB_type, DIR = I, VEC = [0:2], BUS = SPLB -PORT PLB_lockErr = PLB_lockErr, DIR = I, BUS = SPLB -PORT PLB_wrDBus = PLB_wrDBus, DIR = I, VEC = [0:(C_SPLB_DWIDTH-1)], BUS = SPLB -PORT PLB_wrBurst = PLB_wrBurst, DIR = I, BUS = SPLB -PORT PLB_rdBurst = PLB_rdBurst, DIR = I, BUS = SPLB -PORT PLB_wrPendReq = PLB_wrPendReq, DIR = I, BUS = SPLB -PORT PLB_rdPendReq = PLB_rdPendReq, DIR = I, BUS = SPLB -PORT PLB_wrPendPri = PLB_wrPendPri, DIR = I, VEC = [0:1], BUS = SPLB -PORT PLB_rdPendPri = PLB_rdPendPri, DIR = I, VEC = [0:1], BUS = SPLB -PORT PLB_reqPri = PLB_reqPri, DIR = I, VEC = [0:1], BUS = SPLB -PORT PLB_TAttribute = PLB_TAttribute, DIR = I, VEC = [0:15], BUS = SPLB -PORT Sl_addrAck = Sl_addrAck, DIR = O, BUS = SPLB -PORT Sl_SSize = Sl_SSize, DIR = O, VEC = [0:1], BUS = SPLB -PORT Sl_wait = Sl_wait, DIR = O, BUS = SPLB -PORT Sl_rearbitrate = Sl_rearbitrate, DIR = O, BUS = SPLB -PORT Sl_wrDAck = Sl_wrDAck, DIR = O, BUS = SPLB -PORT Sl_wrComp = Sl_wrComp, DIR = O, BUS = SPLB -PORT Sl_wrBTerm = Sl_wrBTerm, DIR = O, BUS = SPLB -PORT Sl_rdDBus = Sl_rdDBus, DIR = O, VEC = [0:(C_SPLB_DWIDTH-1)], BUS = SPLB -PORT Sl_rdWdAddr = Sl_rdWdAddr, DIR = O, VEC = [0:3], BUS = SPLB -PORT Sl_rdDAck = Sl_rdDAck, DIR = O, BUS = SPLB -PORT Sl_rdComp = Sl_rdComp, DIR = O, BUS = SPLB -PORT Sl_rdBTerm = Sl_rdBTerm, DIR = O, BUS = SPLB -PORT Sl_MBusy = Sl_MBusy, DIR = O, VEC = [0:(C_SPLB_NUM_MASTERS-1)], BUS = SPLB -PORT Sl_MWrErr = Sl_MWrErr, DIR = O, VEC = [0:(C_SPLB_NUM_MASTERS-1)], BUS = SPLB -PORT Sl_MRdErr = Sl_MRdErr, DIR = O, VEC = [0:(C_SPLB_NUM_MASTERS-1)], BUS = SPLB -PORT Sl_MIRQ = Sl_MIRQ, DIR = O, VEC = [0:(C_SPLB_NUM_MASTERS-1)], BUS = SPLB - - - - -PORT WB_CLK_O = "", DIR = O -PORT WB_RST_O = "", DIR = O -PORT WB_ADR_O = "", DIR = O, VEC = [0:31] -PORT WB_DAT_O = "", DIR = O, VEC = [0:C_WB_DBUS_SIZE-1] -PORT WB_SEL_O = "", DIR = O, VEC = [0:(C_WB_DBUS_SIZE/8)-1] -PORT WB_CYC_O = "", DIR = O -PORT WB_LOCK_O = "", DIR = O -PORT WB_STB_O = "", DIR = O -PORT WB_WE_O = "", DIR = O -PORT WB_DAT_I = "", DIR = I, VEC = [0:C_WB_DBUS_SIZE-1] -PORT WB_ACK_I = "", DIR = I -PORT WB_ERR_I = "", DIR = I -PORT WB_RTY_I = "", DIR = I - - - - - - - - -END Index: plbv46_to_wb_bridge/trunk/doc/plbv46_2_wb.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: plbv46_to_wb_bridge/trunk/doc/plbv46_2_wb.pdf =================================================================== --- plbv46_to_wb_bridge/trunk/doc/plbv46_2_wb.pdf (nonexistent) +++ plbv46_to_wb_bridge/trunk/doc/plbv46_2_wb.pdf (revision 10)
plbv46_to_wb_bridge/trunk/doc/plbv46_2_wb.pdf Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: plbv46_to_wb_bridge/trunk/doc/src/plbv46_2_wb.doc =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: plbv46_to_wb_bridge/trunk/doc/src/plbv46_2_wb.doc =================================================================== --- plbv46_to_wb_bridge/trunk/doc/src/plbv46_2_wb.doc (nonexistent) +++ plbv46_to_wb_bridge/trunk/doc/src/plbv46_2_wb.doc (revision 10)
plbv46_to_wb_bridge/trunk/doc/src/plbv46_2_wb.doc Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: plbv46_to_wb_bridge/trunk/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/plbv46_2_wb.vhd =================================================================== --- plbv46_to_wb_bridge/trunk/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/plbv46_2_wb.vhd (nonexistent) +++ plbv46_to_wb_bridge/trunk/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/plbv46_2_wb.vhd (revision 10) @@ -0,0 +1,367 @@ +------------------------------------------------------------------------------ +-- +-- *************************************************************************** +-- ** Copyright (c) 1995-2008 Xilinx, Inc. All rights reserved. ** +-- ** ** +-- ** Xilinx, Inc. ** +-- ** XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" ** +-- ** AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND ** +-- ** SOLUTIONS FOR XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, ** +-- ** OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, ** +-- ** APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION ** +-- ** THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, ** +-- ** AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE ** +-- ** FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY ** +-- ** WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE ** +-- ** IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR ** +-- ** REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF ** +-- ** INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ** +-- ** FOR A PARTICULAR PURPOSE. ** +-- ** ** +-- *************************************************************************** +-- +------------------------------------------------------------------------------ +-- Filename: plbv46_2_wb.vhd +-- Version: 1.10.a +-- Creation Date: Tue Jul 15, 2008 +-- Description: PLB version 4.6 to Wishbone B3 Bridge +-- Simple non-bursting bridge interface from Xilinx-derivative +-- PLB Bus for Microblaze/PowerPC to OpenCores.org Wishbone +-- bridge standard. +-- +-- File Revisions: +-- 7/15/08 - mds : Initial version +-- 7/25/08 - mds : Added retry and bus error detection. +-- +------------------------------------------------------------------------------ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + +library proc_common_v2_00_a; +use proc_common_v2_00_a.proc_common_pkg.all; +use proc_common_v2_00_a.ipif_pkg.all; + +library plbv46_slave_single_v1_00_a; +use plbv46_slave_single_v1_00_a.plbv46_slave_single; + +library plbv46_2_wb_v1_10_a; +use plbv46_2_wb_v1_10_a.user_logic; + +------------------------------------------------------------------------------ +-- Entity section +------------------------------------------------------------------------------ +entity plbv46_2_wb is + generic + ( + -- ADD USER GENERICS BELOW THIS LINE --------------- + C_WB_DBUS_SIZE : integer := 32; -- Constant + C_WB_ACCESS_TIMEOUT : integer := 16; -- Ranges from 1 to 256 + C_WB_RETRY_TIMEOUT : integer := 64; -- Ranges from 1 to 256 + C_WB_ACCESS_RETRIES : integer := 4; -- Ranges from 1 to 4 + -- ADD USER GENERICS ABOVE THIS LINE --------------- + + -- DO NOT EDIT BELOW THIS LINE --------------------- + -- Bus protocol parameters, do not add to or delete + C_SPLB_AWIDTH : integer := 32; + C_SPLB_DWIDTH : integer := 128; + C_SPLB_NUM_MASTERS : integer := 8; + C_SPLB_MID_WIDTH : integer := 3; + C_SPLB_NATIVE_DWIDTH : integer := 32; + C_SPLB_P2P : integer := 0; + C_SPLB_SUPPORT_BURSTS : integer := 0; + C_SPLB_SMALLEST_MASTER : integer := 32; + C_SPLB_CLK_PERIOD_PS : integer := 10000; + C_INCLUDE_DPHASE_TIMER : integer := 0; + C_FAMILY : string := "virtex5"; + C_MEM0_BASEADDR : std_logic_vector := X"FFFFFFFF"; + C_MEM0_HIGHADDR : std_logic_vector := X"00000000" + -- DO NOT EDIT ABOVE THIS LINE --------------------- + ); + port + ( + -- ADD USER PORTS BELOW THIS LINE ------------------ + WB_CLK_O : out std_logic; + WB_RST_O : out std_logic; + WB_ADR_O : out std_logic_vector(0 to 31); + WB_DAT_O : out std_logic_vector(0 to C_WB_DBUS_SIZE-1); + WB_SEL_O : out std_logic_vector(0 to (C_WB_DBUS_SIZE/8)-1); + WB_CYC_O : out std_logic; + WB_LOCK_O : out std_logic; + WB_STB_O : out std_logic; + WB_WE_O : out std_logic; + WB_DAT_I : in std_logic_vector(0 to C_WB_DBUS_SIZE-1); + WB_ACK_I : in std_logic; + WB_ERR_I : in std_logic; + WB_RTY_I : in std_logic; + -- ADD USER PORTS ABOVE THIS LINE ------------------ + + -- DO NOT EDIT BELOW THIS LINE --------------------- + -- Bus protocol ports, do not add to or delete + SPLB_Clk : in std_logic; + SPLB_Rst : in std_logic; + PLB_ABus : in std_logic_vector(0 to 31); + PLB_UABus : in std_logic_vector(0 to 31); + PLB_PAValid : in std_logic; + PLB_SAValid : in std_logic; + PLB_rdPrim : in std_logic; + PLB_wrPrim : in std_logic; + PLB_masterID : in std_logic_vector(0 to C_SPLB_MID_WIDTH-1); + PLB_abort : in std_logic; + PLB_busLock : in std_logic; + PLB_RNW : in std_logic; + PLB_BE : in std_logic_vector(0 to C_SPLB_DWIDTH/8-1); + PLB_MSize : in std_logic_vector(0 to 1); + PLB_size : in std_logic_vector(0 to 3); + PLB_type : in std_logic_vector(0 to 2); + PLB_lockErr : in std_logic; + PLB_wrDBus : in std_logic_vector(0 to C_SPLB_DWIDTH-1); + PLB_wrBurst : in std_logic; + PLB_rdBurst : in std_logic; + PLB_wrPendReq : in std_logic; + PLB_rdPendReq : in std_logic; + PLB_wrPendPri : in std_logic_vector(0 to 1); + PLB_rdPendPri : in std_logic_vector(0 to 1); + PLB_reqPri : in std_logic_vector(0 to 1); + PLB_TAttribute : in std_logic_vector(0 to 15); + Sl_addrAck : out std_logic; + Sl_SSize : out std_logic_vector(0 to 1); + Sl_wait : out std_logic; + Sl_rearbitrate : out std_logic; + Sl_wrDAck : out std_logic; + Sl_wrComp : out std_logic; + Sl_wrBTerm : out std_logic; + Sl_rdDBus : out std_logic_vector(0 to C_SPLB_DWIDTH-1); + Sl_rdWdAddr : out std_logic_vector(0 to 3); + Sl_rdDAck : out std_logic; + Sl_rdComp : out std_logic; + Sl_rdBTerm : out std_logic; + Sl_MBusy : out std_logic_vector(0 to C_SPLB_NUM_MASTERS-1); + Sl_MWrErr : out std_logic_vector(0 to C_SPLB_NUM_MASTERS-1); + Sl_MRdErr : out std_logic_vector(0 to C_SPLB_NUM_MASTERS-1); + Sl_MIRQ : out std_logic_vector(0 to C_SPLB_NUM_MASTERS-1) + -- DO NOT EDIT ABOVE THIS LINE --------------------- + ); + + attribute SIGIS : string; + attribute SIGIS of SPLB_Clk : signal is "CLK"; + attribute SIGIS of SPLB_Rst : signal is "RST"; + +end entity plbv46_2_wb; + +------------------------------------------------------------------------------ +-- Architecture section +------------------------------------------------------------------------------ + +architecture IMP of plbv46_2_wb is + + ------------------------------------------ + -- Array of base/high address pairs for each address range + ------------------------------------------ + constant ZERO_ADDR_PAD : std_logic_vector(0 to 31) := (others => '0'); + + constant IPIF_ARD_ADDR_RANGE_ARRAY : SLV64_ARRAY_TYPE := + ( + ZERO_ADDR_PAD & C_MEM0_BASEADDR, -- user logic memory space 0 base address + ZERO_ADDR_PAD & C_MEM0_HIGHADDR -- user logic memory space 0 high address + ); + + ------------------------------------------ + -- Array of desired number of chip enables for each address range + ------------------------------------------ + constant USER_NUM_MEM : integer := 1; + + constant IPIF_ARD_NUM_CE_ARRAY : INTEGER_ARRAY_TYPE := + ( + 0 => 1 -- number of ce for user logic memory space 0 (always 1 chip enable) + ); + + ------------------------------------------ + -- Ratio of bus clock to core clock (for use in dual clock systems) + -- 1 = ratio is 1:1 + -- 2 = ratio is 2:1 + ------------------------------------------ + 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; + + ------------------------------------------ + -- Width of the slave address bus (32 only) + ------------------------------------------ + constant USER_SLV_AWIDTH : integer := C_SPLB_AWIDTH; + + ------------------------------------------ + -- Index for CS/CE + ------------------------------------------ + constant USER_MEM0_CS_INDEX : integer := 0; + + constant USER_CS_INDEX : integer := USER_MEM0_CS_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 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; + +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_INCLUDE_DPHASE_TIMER => C_INCLUDE_DPHASE_TIMER, + 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 User Logic + ------------------------------------------ + USER_LOGIC_I : entity plbv46_2_wb_v1_10_a.user_logic + generic map + ( + -- MAP USER GENERICS BELOW THIS LINE --------------- + C_WB_DBUS_SIZE => C_WB_DBUS_SIZE, + C_WB_ACCESS_TIMEOUT => C_WB_ACCESS_TIMEOUT, + C_WB_RETRY_TIMEOUT => C_WB_RETRY_TIMEOUT, + C_WB_ACCESS_RETRIES => C_WB_ACCESS_RETRIES, + -- MAP USER GENERICS ABOVE THIS LINE --------------- + + C_SLV_AWIDTH => USER_SLV_AWIDTH, + C_SLV_DWIDTH => USER_SLV_DWIDTH, + C_NUM_MEM => USER_NUM_MEM + ) + port map + ( + -- MAP USER PORTS BELOW THIS LINE ------------------ + + WB_CLK_O => WB_CLK_O , + WB_RST_O => WB_RST_O , + WB_ADR_O => WB_ADR_O , + WB_DAT_O => WB_DAT_O , + WB_SEL_O => WB_SEL_O , + WB_CYC_O => WB_CYC_O , + WB_STB_O => WB_STB_O , + WB_WE_O => WB_WE_O , + WB_DAT_I => WB_DAT_I , + WB_ACK_I => WB_ACK_I , + WB_ERR_I => WB_ERR_I , + WB_RTY_I => WB_RTY_I , + + + --USER ports mapped here + -- MAP USER PORTS ABOVE THIS LINE ------------------ + + Bus2IP_Clk => ipif_Bus2IP_Clk, + Bus2IP_Reset => ipif_Bus2IP_Reset, + Bus2IP_Addr => ipif_Bus2IP_Addr, + Bus2IP_CS => ipif_Bus2IP_CS(USER_CS_INDEX to USER_CS_INDEX+USER_NUM_MEM-1), + Bus2IP_RNW => ipif_Bus2IP_RNW, + Bus2IP_Data => ipif_Bus2IP_Data, + Bus2IP_BE => ipif_Bus2IP_BE, + IP2Bus_Data => user_IP2Bus_Data, + IP2Bus_RdAck => user_IP2Bus_RdAck, + IP2Bus_WrAck => user_IP2Bus_WrAck, + IP2Bus_Error => user_IP2Bus_Error + ); + + ------------------------------------------ + -- connect internal signals + ------------------------------------------ + WB_LOCK_O <= '0'; + + ipif_IP2Bus_Data <= user_IP2Bus_Data; + ipif_IP2Bus_WrAck <= user_IP2Bus_WrAck; + ipif_IP2Bus_RdAck <= user_IP2Bus_RdAck; + ipif_IP2Bus_Error <= user_IP2Bus_Error; + +end IMP; Index: plbv46_to_wb_bridge/trunk/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/user_logic.vhd =================================================================== --- plbv46_to_wb_bridge/trunk/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/user_logic.vhd (nonexistent) +++ plbv46_to_wb_bridge/trunk/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/user_logic.vhd (revision 10) @@ -0,0 +1,282 @@ +------------------------------------------------------------------------------ +-- +-- *************************************************************************** +-- ** Copyright (c) 1995-2008 Xilinx, Inc. All rights reserved. ** +-- ** ** +-- ** Xilinx, Inc. ** +-- ** XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" ** +-- ** AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND ** +-- ** SOLUTIONS FOR XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, ** +-- ** OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, ** +-- ** APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION ** +-- ** THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, ** +-- ** AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE ** +-- ** FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY ** +-- ** WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE ** +-- ** IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR ** +-- ** REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF ** +-- ** INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ** +-- ** FOR A PARTICULAR PURPOSE. ** +-- ** ** +-- *************************************************************************** +-- +------------------------------------------------------------------------------ +-- Filename: user_logic.vhd +-- Version: 1.10.a +-- Description: User logic. +------------------------------------------------------------------------------ + +-- DO NOT EDIT BELOW THIS LINE -------------------- +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + +library proc_common_v2_00_a; +use proc_common_v2_00_a.proc_common_pkg.all; + + +------------------------------------------------------------------------------ +-- Entity section +------------------------------------------------------------------------------ + +entity user_logic is + generic + ( + -- ADD USER GENERICS BELOW THIS LINE --------------- + C_WB_DBUS_SIZE : integer := 32; + C_WB_ACCESS_TIMEOUT : integer := 16; + C_WB_RETRY_TIMEOUT : integer := 256; + C_WB_ACCESS_RETRIES : integer := 4; + -- ADD USER GENERICS ABOVE THIS LINE --------------- + + -- DO NOT EDIT BELOW THIS LINE --------------------- + -- Bus protocol parameters, do not add to or delete + C_SLV_AWIDTH : integer := 32; + C_SLV_DWIDTH : integer := 32; + C_NUM_MEM : integer := 1 + -- DO NOT EDIT ABOVE THIS LINE --------------------- + ); + port + ( + -- ADD USER PORTS BELOW THIS LINE ------------------ + WB_CLK_O : out std_logic; + WB_RST_O : out std_logic; + WB_ADR_O : out std_logic_vector(0 to 31); + WB_DAT_O : out std_logic_vector(0 to C_WB_DBUS_SIZE-1); + WB_SEL_O : out std_logic_vector(0 to (C_WB_DBUS_SIZE/8)-1); + WB_CYC_O : out std_logic; + WB_STB_O : out std_logic; + WB_WE_O : out std_logic; + WB_DAT_I : in std_logic_vector(0 to C_WB_DBUS_SIZE-1); + WB_ACK_I : in std_logic; + WB_ERR_I : in std_logic; + WB_RTY_I : in std_logic; + -- ADD USER PORTS ABOVE THIS LINE ------------------ + + -- DO NOT EDIT BELOW THIS LINE --------------------- + -- Bus protocol ports, do not add to or delete + Bus2IP_Clk : in std_logic; + Bus2IP_Reset : in std_logic; + Bus2IP_Addr : in std_logic_vector(0 to C_SLV_AWIDTH-1); + Bus2IP_CS : in std_logic_vector(0 to C_NUM_MEM-1); + Bus2IP_RNW : in std_logic; + Bus2IP_Data : in std_logic_vector(0 to C_SLV_DWIDTH-1); + Bus2IP_BE : in std_logic_vector(0 to C_SLV_DWIDTH/8-1); + IP2Bus_Data : out std_logic_vector(0 to C_SLV_DWIDTH-1); + IP2Bus_RdAck : out std_logic; + IP2Bus_WrAck : out std_logic; + IP2Bus_Error : out std_logic + -- DO NOT EDIT ABOVE THIS LINE --------------------- + ); + + attribute SIGIS : string; + attribute SIGIS of Bus2IP_Clk : signal is "CLK"; + attribute SIGIS of Bus2IP_Reset : signal is "RST"; + +end entity user_logic; + +------------------------------------------------------------------------------ +-- Architecture section +------------------------------------------------------------------------------ +architecture IMP of user_logic is + + -- State Machine Declarations + type state_type is (ST_IDLE, ST_ACCESS, ST_RETRY_STROBE, ST_RETRY, ST_ERROR, ST_DONE); + signal curr_st : state_type; + signal next_st : state_type; + -- Bus Ack Decode + signal wb_rdack : std_logic; + signal wb_wrack : std_logic; + -- Timer used to track bus error condition and retry timouts. + signal timer_en : std_logic; + signal timer_cnt : std_logic_vector(0 to 7); + -- Counter used to track number of retry attempts + signal retry_iter : std_logic_vector(0 to 1); + signal retry_iter_rst : std_logic; + signal retry_iter_en : std_logic; + -- Status Signals + signal retry_expire : std_logic; -- Maximum Retries exceeded + signal access_to : std_logic; -- Bus Error Detected + signal retry_to : std_logic; -- Retry cycle completed + +begin + + -- + -- We are not buffering these signals to the WB Bus. + -- Nor are we running the clock at a slower rate than the PLB Bus. + WB_CLK_O <= Bus2IP_Clk; + WB_RST_O <= Bus2IP_Reset; + + -- These can probably be treated as multi-cycle paths + -- Possibly will add in a Pipeline stage (user selectable?) + WB_ADR_O <= Bus2IP_Addr; + WB_DAT_O <= Bus2IP_Data; + WB_SEL_O <= Bus2IP_BE; + WB_WE_O <= not Bus2IP_RNW; + + -- + -- Number of retry attempts + -- + process(Bus2IP_Clk) begin + if (rising_edge(Bus2IP_Clk)) then + if (retry_iter_rst = '1') then + retry_iter <= (others=>'0'); + elsif (retry_iter_en = '1') then + retry_iter <= retry_iter + 1; + end if; + + retry_expire <= '0'; + if (retry_iter = conv_std_logic_vector(C_WB_ACCESS_RETRIES-1,2)) then + retry_expire <= '1'; + end if; + end if; + end process; + + -- + -- Retry Wait Counter + -- + process(Bus2IP_Clk) begin + if (rising_edge(Bus2IP_Clk)) then + if (timer_en = '0') then + timer_cnt <= (others => '0'); + else + timer_cnt <= timer_cnt + 1; + end if; + + retry_to <= '0'; + if (timer_cnt = conv_std_logic_vector(C_WB_RETRY_TIMEOUT-1, 8)) then + retry_to <= '1'; + end if; + + if (timer_cnt = conv_std_logic_vector(C_WB_ACCESS_TIMEOUT-1, 8)) then + access_to <= '1'; + end if; + + end if; + end process; + + -- + -- + -- WB Bridge State Machine (Next State Logic) + -- + -- + + IP2Bus_RdAck <= wb_rdack; + IP2Bus_WrAck <= wb_wrack; + + process(curr_st, Bus2IP_CS ,WB_RTY_I ,WB_ACK_I, retry_to, access_to) begin + + next_st <= curr_st; + timer_en <= '0'; + retry_iter_rst <= '0'; + retry_iter_en <= '0'; + WB_STB_O <= '0'; + WB_CYC_O <= '0'; + wb_rdack <= '0'; + wb_wrack <= '0'; + IP2Bus_Error <= '0'; + + case (curr_st) is + + + when ST_IDLE => + retry_iter_rst <= '1'; + if (Bus2IP_CS(0) = '1') then + next_st <= ST_ACCESS; + end if; + + -- Access State + -- Completes when we receive either a RETRY, ACK or we timeout of the transaction. + -- Transaction timeout is setup by the user. + when ST_ACCESS => + WB_STB_O <= '1'; + WB_CYC_O <= '1'; + timer_en <= '1'; + if (WB_RTY_I = '1') then + next_st <= ST_RETRY_STROBE; + elsif (WB_ACK_I = '1') then + next_st <= ST_DONE; + elsif (access_to = '1') then + next_st <= ST_ERROR; + end if; + + -- Retry Strobe + -- Simply used to reset timer and increment our retries. + -- We will also check to see if we have reached out limit of retries. + when ST_RETRY_STROBE => + retry_iter_en <= '1'; + if (retry_expire = '1') then + next_st <= ST_ERROR; + else + next_st <= ST_RETRY; + end if; + + -- Retry + -- Sit here and wait until we issues a WB Retry + when ST_RETRY => + timer_en <= '1'; + if (retry_to = '1') then + next_st <= ST_ACCESS; + end if; + + -- Error + -- Issue PLB Error + when ST_ERROR => + IP2Bus_Error <= '1'; + wb_wrack <= not Bus2IP_RNW; + wb_rdack <= Bus2IP_RNW; + next_st <= ST_IDLE; + + when ST_DONE => + wb_rdack <= Bus2IP_RNW; + wb_wrack <= not Bus2IP_RNW; + next_st <= ST_IDLE; + + + end case; + + end process; + + -- + -- + -- WB Bridge State Machine (Current State Logic) + -- + -- + process(Bus2IP_Clk) begin + if (rising_edge(Bus2IP_Clk)) then + if (Bus2IP_Reset = '1') then + curr_st <= ST_IDLE; + else + curr_st <= next_st; + end if; + end if; + end process; + + ------------------------------------------ + -- Example code to drive IP to Bus signals + ------------------------------------------ + IP2Bus_Data <= WB_DAT_I when wb_rdack = '1' else + (others => '0'); + +end IMP; Index: plbv46_to_wb_bridge/trunk/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.mpd =================================================================== --- plbv46_to_wb_bridge/trunk/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.mpd (nonexistent) +++ plbv46_to_wb_bridge/trunk/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.mpd (revision 10) @@ -0,0 +1,111 @@ +################################################################### +## +## Name : plbv46_2_wb +## Desc : Microprocessor Peripheral Description +## : Automatically generated by PsfUtility +## +################################################################### + +BEGIN plbv46_2_wb + +## Peripheral Options +OPTION IPTYPE = PERIPHERAL +OPTION IMP_NETLIST = TRUE +OPTION HDL = VHDL +OPTION ARCH_SUPPORT_MAP = (OTHERS=DEVELOPMENT) +OPTION IP_GROUP = MICROBLAZE:PPC:Bus and Bridge +OPTION DESC = PLBv46 to Wishbone B3 Bridge + + +## Bus Interfaces +BUS_INTERFACE BUS = SPLB, BUS_TYPE = SLAVE, BUS_STD = PLBV46 + +## Generics for VHDL or Parameters for Verilog +PARAMETER C_SPLB_AWIDTH = 32, DT = INTEGER, BUS = SPLB, ASSIGNMENT = CONSTANT +PARAMETER C_SPLB_DWIDTH = 128, DT = INTEGER, BUS = SPLB, RANGE = (32, 64, 128) +PARAMETER C_SPLB_NUM_MASTERS = 8, DT = INTEGER, BUS = SPLB, RANGE = (1:16) +PARAMETER C_SPLB_MID_WIDTH = 3, DT = INTEGER, BUS = SPLB, RANGE = (1:4) +PARAMETER C_SPLB_NATIVE_DWIDTH = 32, DT = INTEGER, BUS = SPLB, RANGE = (32, 64, 128), ASSIGNMENT = CONSTANT +PARAMETER C_SPLB_P2P = 0, DT = INTEGER, BUS = SPLB, RANGE = (0, 1) +PARAMETER C_SPLB_SUPPORT_BURSTS = 0, DT = INTEGER, BUS = SPLB, RANGE = (0, 1), ASSIGNMENT = CONSTANT +PARAMETER C_SPLB_SMALLEST_MASTER = 32, DT = INTEGER, BUS = SPLB, RANGE = (32, 64, 128) +PARAMETER C_SPLB_CLK_PERIOD_PS = 10000, DT = INTEGER, BUS = SPLB +PARAMETER C_INCLUDE_DPHASE_TIMER = 0, DT = INTEGER, RANGE = (0, 1) +PARAMETER C_FAMILY = virtex5, DT = STRING +PARAMETER C_MEM0_BASEADDR = 0xffffffff, DT = std_logic_vector, BUS = SPLB, ADDRESS = BASE, PAIR = C_MEM0_HIGHADDR +PARAMETER C_MEM0_HIGHADDR = 0x00000000, DT = std_logic_vector, BUS = SPLB, ADDRESS = HIGH, PAIR = C_MEM0_BASEADDR + +PARAMETER C_WB_ACCESS_TIMEOUT = 16, DT = INTEGER, RANGE = (1:256) +PARAMETER C_WB_RETRY_TIMEOUT = 256, DT = INTEGER, RANGE = (1:256) +PARAMETER C_WB_ACCESS_RETRIES = 4, DT = INTEGER, RANGE = (1:4) +PARAMETER C_WB_DBUS_SIZE = 32, DT = INTEGER, ASSIGNMENT = CONSTANT + +## Ports +PORT SPLB_Clk = "", DIR = I, SIGIS = CLK, BUS = SPLB +PORT SPLB_Rst = SPLB_Rst, DIR = I, SIGIS = RST, BUS = SPLB +PORT PLB_ABus = PLB_ABus, DIR = I, VEC = [0:31], BUS = SPLB +PORT PLB_UABus = PLB_UABus, DIR = I, VEC = [0:31], BUS = SPLB +PORT PLB_PAValid = PLB_PAValid, DIR = I, BUS = SPLB +PORT PLB_SAValid = PLB_SAValid, DIR = I, BUS = SPLB +PORT PLB_rdPrim = PLB_rdPrim, DIR = I, BUS = SPLB +PORT PLB_wrPrim = PLB_wrPrim, DIR = I, BUS = SPLB +PORT PLB_masterID = PLB_masterID, DIR = I, VEC = [0:(C_SPLB_MID_WIDTH-1)], BUS = SPLB +PORT PLB_abort = PLB_abort, DIR = I, BUS = SPLB +PORT PLB_busLock = PLB_busLock, DIR = I, BUS = SPLB +PORT PLB_RNW = PLB_RNW, DIR = I, BUS = SPLB +PORT PLB_BE = PLB_BE, DIR = I, VEC = [0:((C_SPLB_DWIDTH/8)-1)], BUS = SPLB +PORT PLB_MSize = PLB_MSize, DIR = I, VEC = [0:1], BUS = SPLB +PORT PLB_size = PLB_size, DIR = I, VEC = [0:3], BUS = SPLB +PORT PLB_type = PLB_type, DIR = I, VEC = [0:2], BUS = SPLB +PORT PLB_lockErr = PLB_lockErr, DIR = I, BUS = SPLB +PORT PLB_wrDBus = PLB_wrDBus, DIR = I, VEC = [0:(C_SPLB_DWIDTH-1)], BUS = SPLB +PORT PLB_wrBurst = PLB_wrBurst, DIR = I, BUS = SPLB +PORT PLB_rdBurst = PLB_rdBurst, DIR = I, BUS = SPLB +PORT PLB_wrPendReq = PLB_wrPendReq, DIR = I, BUS = SPLB +PORT PLB_rdPendReq = PLB_rdPendReq, DIR = I, BUS = SPLB +PORT PLB_wrPendPri = PLB_wrPendPri, DIR = I, VEC = [0:1], BUS = SPLB +PORT PLB_rdPendPri = PLB_rdPendPri, DIR = I, VEC = [0:1], BUS = SPLB +PORT PLB_reqPri = PLB_reqPri, DIR = I, VEC = [0:1], BUS = SPLB +PORT PLB_TAttribute = PLB_TAttribute, DIR = I, VEC = [0:15], BUS = SPLB +PORT Sl_addrAck = Sl_addrAck, DIR = O, BUS = SPLB +PORT Sl_SSize = Sl_SSize, DIR = O, VEC = [0:1], BUS = SPLB +PORT Sl_wait = Sl_wait, DIR = O, BUS = SPLB +PORT Sl_rearbitrate = Sl_rearbitrate, DIR = O, BUS = SPLB +PORT Sl_wrDAck = Sl_wrDAck, DIR = O, BUS = SPLB +PORT Sl_wrComp = Sl_wrComp, DIR = O, BUS = SPLB +PORT Sl_wrBTerm = Sl_wrBTerm, DIR = O, BUS = SPLB +PORT Sl_rdDBus = Sl_rdDBus, DIR = O, VEC = [0:(C_SPLB_DWIDTH-1)], BUS = SPLB +PORT Sl_rdWdAddr = Sl_rdWdAddr, DIR = O, VEC = [0:3], BUS = SPLB +PORT Sl_rdDAck = Sl_rdDAck, DIR = O, BUS = SPLB +PORT Sl_rdComp = Sl_rdComp, DIR = O, BUS = SPLB +PORT Sl_rdBTerm = Sl_rdBTerm, DIR = O, BUS = SPLB +PORT Sl_MBusy = Sl_MBusy, DIR = O, VEC = [0:(C_SPLB_NUM_MASTERS-1)], BUS = SPLB +PORT Sl_MWrErr = Sl_MWrErr, DIR = O, VEC = [0:(C_SPLB_NUM_MASTERS-1)], BUS = SPLB +PORT Sl_MRdErr = Sl_MRdErr, DIR = O, VEC = [0:(C_SPLB_NUM_MASTERS-1)], BUS = SPLB +PORT Sl_MIRQ = Sl_MIRQ, DIR = O, VEC = [0:(C_SPLB_NUM_MASTERS-1)], BUS = SPLB + + + + +PORT WB_CLK_O = "", DIR = O +PORT WB_RST_O = "", DIR = O +PORT WB_ADR_O = "", DIR = O, VEC = [0:31] +PORT WB_DAT_O = "", DIR = O, VEC = [0:C_WB_DBUS_SIZE-1] +PORT WB_SEL_O = "", DIR = O, VEC = [0:(C_WB_DBUS_SIZE/8)-1] +PORT WB_CYC_O = "", DIR = O +PORT WB_LOCK_O = "", DIR = O +PORT WB_STB_O = "", DIR = O +PORT WB_WE_O = "", DIR = O +PORT WB_DAT_I = "", DIR = I, VEC = [0:C_WB_DBUS_SIZE-1] +PORT WB_ACK_I = "", DIR = I +PORT WB_ERR_I = "", DIR = I +PORT WB_RTY_I = "", DIR = I + + + + + + + + +END Index: plbv46_to_wb_bridge/trunk/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.pao =================================================================== --- plbv46_to_wb_bridge/trunk/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.pao (nonexistent) +++ plbv46_to_wb_bridge/trunk/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.pao (revision 10) @@ -0,0 +1,16 @@ +############################################################################## +## Description: Peripheral Analysis Order +############################################################################## + +lib proc_common_v2_00_a proc_common_pkg vhdl +lib proc_common_v2_00_a ipif_pkg vhdl +lib proc_common_v2_00_a or_muxcy vhdl +lib proc_common_v2_00_a or_gate128 vhdl +lib proc_common_v2_00_a family_support vhdl +lib proc_common_v2_00_a pselect_f vhdl +lib proc_common_v2_00_a counter_f vhdl +lib plbv46_slave_single_v1_00_a plb_address_decoder vhdl +lib plbv46_slave_single_v1_00_a plb_slave_attachment vhdl +lib plbv46_slave_single_v1_00_a plbv46_slave_single vhdl +lib plbv46_2_wb_v1_10_a user_logic vhdl +lib plbv46_2_wb_v1_10_a plbv46_2_wb vhdl Index: plbv46_to_wb_bridge/trunk/pcore/plbv46_2_wb_v1_10_a/readme.txt =================================================================== Index: plbv46_to_wb_bridge/trunk =================================================================== --- plbv46_to_wb_bridge/trunk (nonexistent) +++ plbv46_to_wb_bridge/trunk (revision 10)
plbv46_to_wb_bridge/trunk Property changes : Added: svn:mergeinfo ## -0,0 +0,0 ## Index: plbv46_to_wb_bridge/web_uploads =================================================================== --- plbv46_to_wb_bridge/web_uploads (nonexistent) +++ plbv46_to_wb_bridge/web_uploads (revision 10)
plbv46_to_wb_bridge/web_uploads Property changes : Added: svn:mergeinfo ## -0,0 +0,0 ## Index: plbv46_to_wb_bridge/branches =================================================================== --- plbv46_to_wb_bridge/branches (nonexistent) +++ plbv46_to_wb_bridge/branches (revision 10)
plbv46_to_wb_bridge/branches Property changes : Added: svn:mergeinfo ## -0,0 +0,0 ## Index: plbv46_to_wb_bridge/tags/initial/doc/src/plbv46_2_wb.doc =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: plbv46_to_wb_bridge/tags/initial/doc/src/plbv46_2_wb.doc =================================================================== --- plbv46_to_wb_bridge/tags/initial/doc/src/plbv46_2_wb.doc (nonexistent) +++ plbv46_to_wb_bridge/tags/initial/doc/src/plbv46_2_wb.doc (revision 10)
plbv46_to_wb_bridge/tags/initial/doc/src/plbv46_2_wb.doc Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: plbv46_to_wb_bridge/tags/initial/doc/plbv46_2_wb.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: plbv46_to_wb_bridge/tags/initial/doc/plbv46_2_wb.pdf =================================================================== --- plbv46_to_wb_bridge/tags/initial/doc/plbv46_2_wb.pdf (nonexistent) +++ plbv46_to_wb_bridge/tags/initial/doc/plbv46_2_wb.pdf (revision 10)
plbv46_to_wb_bridge/tags/initial/doc/plbv46_2_wb.pdf Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: plbv46_to_wb_bridge/tags/initial/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/plbv46_2_wb.vhd =================================================================== --- plbv46_to_wb_bridge/tags/initial/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/plbv46_2_wb.vhd (nonexistent) +++ plbv46_to_wb_bridge/tags/initial/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/plbv46_2_wb.vhd (revision 10) @@ -0,0 +1,367 @@ +------------------------------------------------------------------------------ +-- +-- *************************************************************************** +-- ** Copyright (c) 1995-2008 Xilinx, Inc. All rights reserved. ** +-- ** ** +-- ** Xilinx, Inc. ** +-- ** XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" ** +-- ** AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND ** +-- ** SOLUTIONS FOR XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, ** +-- ** OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, ** +-- ** APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION ** +-- ** THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, ** +-- ** AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE ** +-- ** FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY ** +-- ** WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE ** +-- ** IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR ** +-- ** REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF ** +-- ** INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ** +-- ** FOR A PARTICULAR PURPOSE. ** +-- ** ** +-- *************************************************************************** +-- +------------------------------------------------------------------------------ +-- Filename: plbv46_2_wb.vhd +-- Version: 1.10.a +-- Creation Date: Tue Jul 15, 2008 +-- Description: PLB version 4.6 to Wishbone B3 Bridge +-- Simple non-bursting bridge interface from Xilinx-derivative +-- PLB Bus for Microblaze/PowerPC to OpenCores.org Wishbone +-- bridge standard. +-- +-- File Revisions: +-- 7/15/08 - mds : Initial version +-- 7/25/08 - mds : Added retry and bus error detection. +-- +------------------------------------------------------------------------------ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + +library proc_common_v2_00_a; +use proc_common_v2_00_a.proc_common_pkg.all; +use proc_common_v2_00_a.ipif_pkg.all; + +library plbv46_slave_single_v1_00_a; +use plbv46_slave_single_v1_00_a.plbv46_slave_single; + +library plbv46_2_wb_v1_10_a; +use plbv46_2_wb_v1_10_a.user_logic; + +------------------------------------------------------------------------------ +-- Entity section +------------------------------------------------------------------------------ +entity plbv46_2_wb is + generic + ( + -- ADD USER GENERICS BELOW THIS LINE --------------- + C_WB_DBUS_SIZE : integer := 32; -- Constant + C_WB_ACCESS_TIMEOUT : integer := 16; -- Ranges from 1 to 256 + C_WB_RETRY_TIMEOUT : integer := 64; -- Ranges from 1 to 256 + C_WB_ACCESS_RETRIES : integer := 4; -- Ranges from 1 to 4 + -- ADD USER GENERICS ABOVE THIS LINE --------------- + + -- DO NOT EDIT BELOW THIS LINE --------------------- + -- Bus protocol parameters, do not add to or delete + C_SPLB_AWIDTH : integer := 32; + C_SPLB_DWIDTH : integer := 128; + C_SPLB_NUM_MASTERS : integer := 8; + C_SPLB_MID_WIDTH : integer := 3; + C_SPLB_NATIVE_DWIDTH : integer := 32; + C_SPLB_P2P : integer := 0; + C_SPLB_SUPPORT_BURSTS : integer := 0; + C_SPLB_SMALLEST_MASTER : integer := 32; + C_SPLB_CLK_PERIOD_PS : integer := 10000; + C_INCLUDE_DPHASE_TIMER : integer := 0; + C_FAMILY : string := "virtex5"; + C_MEM0_BASEADDR : std_logic_vector := X"FFFFFFFF"; + C_MEM0_HIGHADDR : std_logic_vector := X"00000000" + -- DO NOT EDIT ABOVE THIS LINE --------------------- + ); + port + ( + -- ADD USER PORTS BELOW THIS LINE ------------------ + WB_CLK_O : out std_logic; + WB_RST_O : out std_logic; + WB_ADR_O : out std_logic_vector(31 downto 0); + WB_DAT_O : out std_logic_vector(C_WB_DBUS_SIZE-1 downto 0); + WB_SEL_O : out std_logic_vector((C_WB_DBUS_SIZE/8)-1 downto 0); + WB_CYC_O : out std_logic; + WB_LOCK_O : out std_logic; + WB_STB_O : out std_logic; + WB_WE_O : out std_logic; + WB_DAT_I : in std_logic_vector(C_WB_DBUS_SIZE-1 downto 0); + WB_ACK_I : in std_logic; + WB_ERR_I : in std_logic; + WB_RTY_I : in std_logic; + -- ADD USER PORTS ABOVE THIS LINE ------------------ + + -- DO NOT EDIT BELOW THIS LINE --------------------- + -- Bus protocol ports, do not add to or delete + SPLB_Clk : in std_logic; + SPLB_Rst : in std_logic; + PLB_ABus : in std_logic_vector(0 to 31); + PLB_UABus : in std_logic_vector(0 to 31); + PLB_PAValid : in std_logic; + PLB_SAValid : in std_logic; + PLB_rdPrim : in std_logic; + PLB_wrPrim : in std_logic; + PLB_masterID : in std_logic_vector(0 to C_SPLB_MID_WIDTH-1); + PLB_abort : in std_logic; + PLB_busLock : in std_logic; + PLB_RNW : in std_logic; + PLB_BE : in std_logic_vector(0 to C_SPLB_DWIDTH/8-1); + PLB_MSize : in std_logic_vector(0 to 1); + PLB_size : in std_logic_vector(0 to 3); + PLB_type : in std_logic_vector(0 to 2); + PLB_lockErr : in std_logic; + PLB_wrDBus : in std_logic_vector(0 to C_SPLB_DWIDTH-1); + PLB_wrBurst : in std_logic; + PLB_rdBurst : in std_logic; + PLB_wrPendReq : in std_logic; + PLB_rdPendReq : in std_logic; + PLB_wrPendPri : in std_logic_vector(0 to 1); + PLB_rdPendPri : in std_logic_vector(0 to 1); + PLB_reqPri : in std_logic_vector(0 to 1); + PLB_TAttribute : in std_logic_vector(0 to 15); + Sl_addrAck : out std_logic; + Sl_SSize : out std_logic_vector(0 to 1); + Sl_wait : out std_logic; + Sl_rearbitrate : out std_logic; + Sl_wrDAck : out std_logic; + Sl_wrComp : out std_logic; + Sl_wrBTerm : out std_logic; + Sl_rdDBus : out std_logic_vector(0 to C_SPLB_DWIDTH-1); + Sl_rdWdAddr : out std_logic_vector(0 to 3); + Sl_rdDAck : out std_logic; + Sl_rdComp : out std_logic; + Sl_rdBTerm : out std_logic; + Sl_MBusy : out std_logic_vector(0 to C_SPLB_NUM_MASTERS-1); + Sl_MWrErr : out std_logic_vector(0 to C_SPLB_NUM_MASTERS-1); + Sl_MRdErr : out std_logic_vector(0 to C_SPLB_NUM_MASTERS-1); + Sl_MIRQ : out std_logic_vector(0 to C_SPLB_NUM_MASTERS-1) + -- DO NOT EDIT ABOVE THIS LINE --------------------- + ); + + attribute SIGIS : string; + attribute SIGIS of SPLB_Clk : signal is "CLK"; + attribute SIGIS of SPLB_Rst : signal is "RST"; + +end entity plbv46_2_wb; + +------------------------------------------------------------------------------ +-- Architecture section +------------------------------------------------------------------------------ + +architecture IMP of plbv46_2_wb is + + ------------------------------------------ + -- Array of base/high address pairs for each address range + ------------------------------------------ + constant ZERO_ADDR_PAD : std_logic_vector(0 to 31) := (others => '0'); + + constant IPIF_ARD_ADDR_RANGE_ARRAY : SLV64_ARRAY_TYPE := + ( + ZERO_ADDR_PAD & C_MEM0_BASEADDR, -- user logic memory space 0 base address + ZERO_ADDR_PAD & C_MEM0_HIGHADDR -- user logic memory space 0 high address + ); + + ------------------------------------------ + -- Array of desired number of chip enables for each address range + ------------------------------------------ + constant USER_NUM_MEM : integer := 1; + + constant IPIF_ARD_NUM_CE_ARRAY : INTEGER_ARRAY_TYPE := + ( + 0 => 1 -- number of ce for user logic memory space 0 (always 1 chip enable) + ); + + ------------------------------------------ + -- Ratio of bus clock to core clock (for use in dual clock systems) + -- 1 = ratio is 1:1 + -- 2 = ratio is 2:1 + ------------------------------------------ + 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; + + ------------------------------------------ + -- Width of the slave address bus (32 only) + ------------------------------------------ + constant USER_SLV_AWIDTH : integer := C_SPLB_AWIDTH; + + ------------------------------------------ + -- Index for CS/CE + ------------------------------------------ + constant USER_MEM0_CS_INDEX : integer := 0; + + constant USER_CS_INDEX : integer := USER_MEM0_CS_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 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; + +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_INCLUDE_DPHASE_TIMER => C_INCLUDE_DPHASE_TIMER, + 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 User Logic + ------------------------------------------ + USER_LOGIC_I : entity plbv46_2_wb_v1_00_a.user_logic + generic map + ( + -- MAP USER GENERICS BELOW THIS LINE --------------- + C_WB_DBUS_SIZE => C_WB_DBUS_SIZE, + C_WB_ACCESS_TIMEOUT => C_WB_ACCESS_TIMEOUT, + C_WB_RETRY_TIMEOUT => C_WB_RETRY_TIMEOUT, + C_WB_ACCESS_RETRIES => C_WB_ACCESS_RETRIES, + -- MAP USER GENERICS ABOVE THIS LINE --------------- + + C_SLV_AWIDTH => USER_SLV_AWIDTH, + C_SLV_DWIDTH => USER_SLV_DWIDTH, + C_NUM_MEM => USER_NUM_MEM + ) + port map + ( + -- MAP USER PORTS BELOW THIS LINE ------------------ + + WB_CLK_O => WB_CLK_O , + WB_RST_O => WB_RST_O , + WB_ADR_O => WB_ADR_O , + WB_DAT_O => WB_DAT_O , + WB_SEL_O => WB_SEL_O , + WB_CYC_O => WB_CYC_O , + WB_STB_O => WB_STB_O , + WB_WE_O => WB_WE_O , + WB_DAT_I => WB_DAT_I , + WB_ACK_I => WB_ACK_I , + WB_ERR_I => WB_ERR_I , + WB_RTY_I => WB_RTY_I , + + + --USER ports mapped here + -- MAP USER PORTS ABOVE THIS LINE ------------------ + + Bus2IP_Clk => ipif_Bus2IP_Clk, + Bus2IP_Reset => ipif_Bus2IP_Reset, + Bus2IP_Addr => ipif_Bus2IP_Addr, + Bus2IP_CS => ipif_Bus2IP_CS(USER_CS_INDEX to USER_CS_INDEX+USER_NUM_MEM-1), + Bus2IP_RNW => ipif_Bus2IP_RNW, + Bus2IP_Data => ipif_Bus2IP_Data, + Bus2IP_BE => ipif_Bus2IP_BE, + IP2Bus_Data => user_IP2Bus_Data, + IP2Bus_RdAck => user_IP2Bus_RdAck, + IP2Bus_WrAck => user_IP2Bus_WrAck, + IP2Bus_Error => user_IP2Bus_Error + ); + + ------------------------------------------ + -- connect internal signals + ------------------------------------------ + WB_LOCK_O <= '0'; + + ipif_IP2Bus_Data <= user_IP2Bus_Data; + ipif_IP2Bus_WrAck <= user_IP2Bus_WrAck; + ipif_IP2Bus_RdAck <= user_IP2Bus_RdAck; + ipif_IP2Bus_Error <= user_IP2Bus_Error; + +end IMP; Index: plbv46_to_wb_bridge/tags/initial/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/user_logic.vhd =================================================================== --- plbv46_to_wb_bridge/tags/initial/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/user_logic.vhd (nonexistent) +++ plbv46_to_wb_bridge/tags/initial/pcore/plbv46_2_wb_v1_10_a/hdl/vhdl/user_logic.vhd (revision 10) @@ -0,0 +1,278 @@ +------------------------------------------------------------------------------ +-- +-- *************************************************************************** +-- ** Copyright (c) 1995-2008 Xilinx, Inc. All rights reserved. ** +-- ** ** +-- ** Xilinx, Inc. ** +-- ** XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" ** +-- ** AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND ** +-- ** SOLUTIONS FOR XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, ** +-- ** OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, ** +-- ** APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION ** +-- ** THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, ** +-- ** AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE ** +-- ** FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY ** +-- ** WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE ** +-- ** IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR ** +-- ** REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF ** +-- ** INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ** +-- ** FOR A PARTICULAR PURPOSE. ** +-- ** ** +-- *************************************************************************** +-- +------------------------------------------------------------------------------ +-- Filename: user_logic.vhd +-- Version: 1.10.a +-- Description: User logic. +------------------------------------------------------------------------------ + +-- DO NOT EDIT BELOW THIS LINE -------------------- +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + +library proc_common_v2_00_a; +use proc_common_v2_00_a.proc_common_pkg.all; + + +------------------------------------------------------------------------------ +-- Entity section +------------------------------------------------------------------------------ + +entity user_logic is + generic + ( + -- ADD USER GENERICS BELOW THIS LINE --------------- + C_WB_DBUS_SIZE : integer := 32; + C_WB_ACCESS_TIMEOUT : integer := 16; + C_WB_RETRY_TIMEOUT : integer := 256; + C_WB_ACCESS_RETRIES : integer := 4; + -- ADD USER GENERICS ABOVE THIS LINE --------------- + + -- DO NOT EDIT BELOW THIS LINE --------------------- + -- Bus protocol parameters, do not add to or delete + C_SLV_AWIDTH : integer := 32; + C_SLV_DWIDTH : integer := 32; + C_NUM_MEM : integer := 1 + -- DO NOT EDIT ABOVE THIS LINE --------------------- + ); + port + ( + -- ADD USER PORTS BELOW THIS LINE ------------------ + WB_CLK_O : out std_logic; + WB_RST_O : out std_logic; + WB_ADR_O : out std_logic_vector(31 downto 0); + WB_DAT_O : out std_logic_vector(C_WB_DBUS_SIZE-1 downto 0); + WB_SEL_O : out std_logic_vector((C_WB_DBUS_SIZE/8)-1 downto 0); + WB_CYC_O : out std_logic; + WB_STB_O : out std_logic; + WB_WE_O : out std_logic; + WB_DAT_I : in std_logic_vector(C_WB_DBUS_SIZE-1 downto 0); + WB_ACK_I : in std_logic; + WB_ERR_I : in std_logic; + WB_RTY_I : in std_logic; + -- ADD USER PORTS ABOVE THIS LINE ------------------ + + -- DO NOT EDIT BELOW THIS LINE --------------------- + -- Bus protocol ports, do not add to or delete + Bus2IP_Clk : in std_logic; + Bus2IP_Reset : in std_logic; + Bus2IP_Addr : in std_logic_vector(0 to C_SLV_AWIDTH-1); + Bus2IP_CS : in std_logic_vector(0 to C_NUM_MEM-1); + Bus2IP_RNW : in std_logic; + Bus2IP_Data : in std_logic_vector(0 to C_SLV_DWIDTH-1); + Bus2IP_BE : in std_logic_vector(0 to C_SLV_DWIDTH/8-1); + IP2Bus_Data : out std_logic_vector(0 to C_SLV_DWIDTH-1); + IP2Bus_RdAck : out std_logic; + IP2Bus_WrAck : out std_logic; + IP2Bus_Error : out std_logic + -- DO NOT EDIT ABOVE THIS LINE --------------------- + ); + + attribute SIGIS : string; + attribute SIGIS of Bus2IP_Clk : signal is "CLK"; + attribute SIGIS of Bus2IP_Reset : signal is "RST"; + +end entity user_logic; + +------------------------------------------------------------------------------ +-- Architecture section +------------------------------------------------------------------------------ +architecture IMP of user_logic is + + -- State Machine Declarations + type state_type is (ST_IDLE, ST_ACCESS, ST_RETRY_STROBE, ST_RETRY, ST_ERROR, ST_DONE); + signal curr_st : state_type; + signal next_st : state_type; + -- Bus Ack Decode + signal wb_rdack : std_logic; + signal wb_wrack : std_logic; + -- Timer used to track bus error condition and retry timouts. + signal timer_en : std_logic; + signal timer_cnt : std_logic_vector(0 to 7); + -- Counter used to track number of retry attempts + signal retry_iter : std_logic_vector(0 to 1); + signal retry_iter_rst : std_logic; + signal retry_iter_en : std_logic; + -- Status Signals + signal retry_expire : std_logic; -- Maximum Retries exceeded + signal access_to : std_logic; -- Bus Error Detected + signal retry_to : std_logic; -- Retry cycle completed + +begin + + -- + -- We are not buffering these signals to the WB Bus. + -- Nor are we running the clock at a slower rate than the PLB Bus. + WB_CLK_O <= Bus2IP_Clk; + WB_RST_O <= Bus2IP_Reset; + + -- These can probably be treated as multi-cycle paths + -- Possibly will add in a Pipeline stage (user selectable?) + WB_ADR_O <= Bus2IP_Addr; + WB_DAT_O <= Bus2IP_Data; + WB_SEL_O <= Bus2IP_BE; + WB_WE_O <= not Bus2IP_RNW; + + -- + -- Number of retry attempts + -- + process(Bus2IP_Clk) begin + if (rising_edge(Bus2IP_Clk)) then + if (retry_iter_rst = '1') then + retry_iter <= (others=>'0'); + elsif (retry_iter_en = '1') then + retry_iter <= retry_iter + 1; + end if; + + retry_expire <= '0'; + if (retry_iter = conv_std_logic_vector(C_WB_ACCESS_RETRIES-1,2)) then + retry_expire <= '1'; + end if; + end if; + end process; + + -- + -- Retry Wait Counter + -- + process(Bus2IP_Clk) begin + if (rising_edge(Bus2IP_Clk)) then + if (timer_en = '0') then + timer_cnt <= (others => '0'); + else + timer_cnt <= timer_cnt + 1; + end if; + + retry_to <= '0'; + if (timer_cnt = conv_std_logic_vector(C_WB_RETRY_TIMEOUT-1, 8)) then + retry_to <= '1'; + end if; + + if (timer_cnt = conv_std_logic_vector(C_WB_ACCESS_TIMEOUT-1, 8)) then + access_to <= '1'; + end if; + + end if; + end process; + + -- + -- + -- WB Bridge State Machine (Next State Logic) + -- + -- + process(curr_st, Bus2IP_CS ,WB_RTY_I ,WB_ACK_I, retry_to, access_to) begin + + next_st <= curr_st; + timer_en <= '0'; + retry_iter_rst <= '0'; + retry_iter_en <= '0'; + WB_STB_O <= '0'; + WB_CYC_O <= '0'; + IP2Bus_RdAck <= '0'; + IP2Bus_WrAck <= '0'; + IP2Bus_Error <= '0'; + + case (curr_st) is + + + when ST_IDLE => + retry_iter_rst <= '1'; + if (Bus2IP_CS(0) = '1') then + next_st <= ST_ACCESS; + end if; + + -- Access State + -- Completes when we receive either a RETRY, ACK or we timeout of the transaction. + -- Transaction timeout is setup by the user. + when ST_ACCESS => + WB_STB_O <= '1'; + WB_CYC_O <= '1'; + timer_en <= '1'; + if (WB_RTY_I = '1') then + next_st <= ST_RETRY_STROBE; + elsif (WB_ACK_I = '1') then + next_st <= ST_DONE; + elsif (access_to = '1') then + next_st <= ST_ERROR; + end if; + + -- Retry Strobe + -- Simply used to reset timer and increment our retries. + -- We will also check to see if we have reached out limit of retries. + when ST_RETRY_STROBE => + retry_iter_en <= '1'; + if (retry_expire = '1') then + next_st <= ST_ERROR; + else + next_st <= ST_RETRY; + end if; + + -- Retry + -- Sit here and wait until we issues a WB Retry + when ST_RETRY => + timer_en <= '1'; + if (retry_to = '1') then + next_st <= ST_ACCESS; + end if; + + -- Error + -- Issue PLB Error + when ST_ERROR => + IP2Bus_Error <= '1'; + IP2Bus_WrAck <= not Bus2IP_RNW; + IP2Bus_RdAck <= Bus2IP_RNW; + next_st <= ST_IDLE; + + when ST_DONE => + IP2Bus_RdAck <= Bus2IP_RNW; + IP2Bus_WrAck <= not Bus2IP_RNW; + next_st <= ST_IDLE; + + + end case; + + end process; + + -- + -- + -- WB Bridge State Machine (Current State Logic) + -- + -- + process(Bus2IP_Clk) begin + if (rising_edge(Bus2IP_Clk)) then + if (Bus2IP_Reset = '1') then + curr_st <= ST_IDLE; + else + curr_st <= next_st; + end if; + end if; + end process; + + ------------------------------------------ + -- Example code to drive IP to Bus signals + ------------------------------------------ + IP2Bus_Data <= WB_DAT_I when wb_rdack = '1' else + (others => '0'); + +end IMP; Index: plbv46_to_wb_bridge/tags/initial/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.pao =================================================================== --- plbv46_to_wb_bridge/tags/initial/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.pao (nonexistent) +++ plbv46_to_wb_bridge/tags/initial/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.pao (revision 10) @@ -0,0 +1,16 @@ +############################################################################## +## Description: Peripheral Analysis Order +############################################################################## + +lib proc_common_v2_00_a proc_common_pkg vhdl +lib proc_common_v2_00_a ipif_pkg vhdl +lib proc_common_v2_00_a or_muxcy vhdl +lib proc_common_v2_00_a or_gate128 vhdl +lib proc_common_v2_00_a family_support vhdl +lib proc_common_v2_00_a pselect_f vhdl +lib proc_common_v2_00_a counter_f vhdl +lib plbv46_slave_single_v1_00_a plb_address_decoder vhdl +lib plbv46_slave_single_v1_00_a plb_slave_attachment vhdl +lib plbv46_slave_single_v1_00_a plbv46_slave_single vhdl +lib plbv46_2_wb_v1_10_a user_logic vhdl +lib plbv46_2_wb_v1_10_a plbv46_2_wb vhdl Index: plbv46_to_wb_bridge/tags/initial/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.mpd =================================================================== --- plbv46_to_wb_bridge/tags/initial/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.mpd (nonexistent) +++ plbv46_to_wb_bridge/tags/initial/pcore/plbv46_2_wb_v1_10_a/data/plbv46_2_wb_v2_1_0.mpd (revision 10) @@ -0,0 +1,111 @@ +################################################################### +## +## Name : plbv46_2_wb +## Desc : Microprocessor Peripheral Description +## : Automatically generated by PsfUtility +## +################################################################### + +BEGIN plbv46_2_wb + +## Peripheral Options +OPTION IPTYPE = PERIPHERAL +OPTION IMP_NETLIST = TRUE +OPTION HDL = VHDL +OPTION ARCH_SUPPORT_MAP = (OTHERS=DEVELOPMENT) +OPTION IP_GROUP = MICROBLAZE:PPC:Bus and Bridge +OPTION DESC = PLBv46 to Wishbone B3 Bridge + + +## Bus Interfaces +BUS_INTERFACE BUS = SPLB, BUS_TYPE = SLAVE, BUS_STD = PLBV46 + +## Generics for VHDL or Parameters for Verilog +PARAMETER C_SPLB_AWIDTH = 32, DT = INTEGER, BUS = SPLB, ASSIGNMENT = CONSTANT +PARAMETER C_SPLB_DWIDTH = 128, DT = INTEGER, BUS = SPLB, RANGE = (32, 64, 128) +PARAMETER C_SPLB_NUM_MASTERS = 8, DT = INTEGER, BUS = SPLB, RANGE = (1:16) +PARAMETER C_SPLB_MID_WIDTH = 3, DT = INTEGER, BUS = SPLB, RANGE = (1:4) +PARAMETER C_SPLB_NATIVE_DWIDTH = 32, DT = INTEGER, BUS = SPLB, RANGE = (32, 64, 128), ASSIGNMENT = CONSTANT +PARAMETER C_SPLB_P2P = 0, DT = INTEGER, BUS = SPLB, RANGE = (0, 1) +PARAMETER C_SPLB_SUPPORT_BURSTS = 0, DT = INTEGER, BUS = SPLB, RANGE = (0, 1), ASSIGNMENT = CONSTANT +PARAMETER C_SPLB_SMALLEST_MASTER = 32, DT = INTEGER, BUS = SPLB, RANGE = (32, 64, 128) +PARAMETER C_SPLB_CLK_PERIOD_PS = 10000, DT = INTEGER, BUS = SPLB +PARAMETER C_INCLUDE_DPHASE_TIMER = 0, DT = INTEGER, RANGE = (0, 1) +PARAMETER C_FAMILY = virtex5, DT = STRING +PARAMETER C_MEM0_BASEADDR = 0xffffffff, DT = std_logic_vector, BUS = SPLB, ADDRESS = BASE, PAIR = C_MEM0_HIGHADDR +PARAMETER C_MEM0_HIGHADDR = 0x00000000, DT = std_logic_vector, BUS = SPLB, ADDRESS = HIGH, PAIR = C_MEM0_BASEADDR + +PARAMETER C_WB_ACCESS_TIMEOUT = 16, DT = INTEGER, RANGE = (1:256) +PARAMETER C_WB_RETRY_TIMEOUT = 256, DT = INTEGER, RANGE = (1:256) +PARAMETER C_WB_ACCESS_RETRIES = 4, DT = INTEGER, RANGE = (1:4) +PARAMETER C_WB_DBUS_SIZE = 32, DT = INTEGER, ASSIGNMENT = CONSTANT + +## Ports +PORT SPLB_Clk = "", DIR = I, SIGIS = CLK, BUS = SPLB +PORT SPLB_Rst = SPLB_Rst, DIR = I, SIGIS = RST, BUS = SPLB +PORT PLB_ABus = PLB_ABus, DIR = I, VEC = [0:31], BUS = SPLB +PORT PLB_UABus = PLB_UABus, DIR = I, VEC = [0:31], BUS = SPLB +PORT PLB_PAValid = PLB_PAValid, DIR = I, BUS = SPLB +PORT PLB_SAValid = PLB_SAValid, DIR = I, BUS = SPLB +PORT PLB_rdPrim = PLB_rdPrim, DIR = I, BUS = SPLB +PORT PLB_wrPrim = PLB_wrPrim, DIR = I, BUS = SPLB +PORT PLB_masterID = PLB_masterID, DIR = I, VEC = [0:(C_SPLB_MID_WIDTH-1)], BUS = SPLB +PORT PLB_abort = PLB_abort, DIR = I, BUS = SPLB +PORT PLB_busLock = PLB_busLock, DIR = I, BUS = SPLB +PORT PLB_RNW = PLB_RNW, DIR = I, BUS = SPLB +PORT PLB_BE = PLB_BE, DIR = I, VEC = [0:((C_SPLB_DWIDTH/8)-1)], BUS = SPLB +PORT PLB_MSize = PLB_MSize, DIR = I, VEC = [0:1], BUS = SPLB +PORT PLB_size = PLB_size, DIR = I, VEC = [0:3], BUS = SPLB +PORT PLB_type = PLB_type, DIR = I, VEC = [0:2], BUS = SPLB +PORT PLB_lockErr = PLB_lockErr, DIR = I, BUS = SPLB +PORT PLB_wrDBus = PLB_wrDBus, DIR = I, VEC = [0:(C_SPLB_DWIDTH-1)], BUS = SPLB +PORT PLB_wrBurst = PLB_wrBurst, DIR = I, BUS = SPLB +PORT PLB_rdBurst = PLB_rdBurst, DIR = I, BUS = SPLB +PORT PLB_wrPendReq = PLB_wrPendReq, DIR = I, BUS = SPLB +PORT PLB_rdPendReq = PLB_rdPendReq, DIR = I, BUS = SPLB +PORT PLB_wrPendPri = PLB_wrPendPri, DIR = I, VEC = [0:1], BUS = SPLB +PORT PLB_rdPendPri = PLB_rdPendPri, DIR = I, VEC = [0:1], BUS = SPLB +PORT PLB_reqPri = PLB_reqPri, DIR = I, VEC = [0:1], BUS = SPLB +PORT PLB_TAttribute = PLB_TAttribute, DIR = I, VEC = [0:15], BUS = SPLB +PORT Sl_addrAck = Sl_addrAck, DIR = O, BUS = SPLB +PORT Sl_SSize = Sl_SSize, DIR = O, VEC = [0:1], BUS = SPLB +PORT Sl_wait = Sl_wait, DIR = O, BUS = SPLB +PORT Sl_rearbitrate = Sl_rearbitrate, DIR = O, BUS = SPLB +PORT Sl_wrDAck = Sl_wrDAck, DIR = O, BUS = SPLB +PORT Sl_wrComp = Sl_wrComp, DIR = O, BUS = SPLB +PORT Sl_wrBTerm = Sl_wrBTerm, DIR = O, BUS = SPLB +PORT Sl_rdDBus = Sl_rdDBus, DIR = O, VEC = [0:(C_SPLB_DWIDTH-1)], BUS = SPLB +PORT Sl_rdWdAddr = Sl_rdWdAddr, DIR = O, VEC = [0:3], BUS = SPLB +PORT Sl_rdDAck = Sl_rdDAck, DIR = O, BUS = SPLB +PORT Sl_rdComp = Sl_rdComp, DIR = O, BUS = SPLB +PORT Sl_rdBTerm = Sl_rdBTerm, DIR = O, BUS = SPLB +PORT Sl_MBusy = Sl_MBusy, DIR = O, VEC = [0:(C_SPLB_NUM_MASTERS-1)], BUS = SPLB +PORT Sl_MWrErr = Sl_MWrErr, DIR = O, VEC = [0:(C_SPLB_NUM_MASTERS-1)], BUS = SPLB +PORT Sl_MRdErr = Sl_MRdErr, DIR = O, VEC = [0:(C_SPLB_NUM_MASTERS-1)], BUS = SPLB +PORT Sl_MIRQ = Sl_MIRQ, DIR = O, VEC = [0:(C_SPLB_NUM_MASTERS-1)], BUS = SPLB + + + + +PORT WB_CLK_O = "", DIR = O +PORT WB_RST_O = "", DIR = O +PORT WB_ADR_O = "", DIR = O, VEC = [31:0] +PORT WB_DAT_O = "", DIR = O, VEC = [C_WB_DBUS_SIZE-1:0] +PORT WB_SEL_O = "", DIR = O, VEC = [(C_WB_DBUS_SIZE/8)-1:0] +PORT WB_CYC_O = "", DIR = O +PORT WB_LOCK_O = "", DIR = O +PORT WB_STB_O = "", DIR = O +PORT WB_WE_O = "", DIR = O +PORT WB_DAT_I = "", DIR = I, VEC = [C_WB_DBUS_SIZE-1:0] +PORT WB_ACK_I = "", DIR = I +PORT WB_ERR_I = "", DIR = I +PORT WB_RTY_I = "", DIR = I + + + + + + + + +END Index: plbv46_to_wb_bridge/tags/initial/pcore/plbv46_2_wb_v1_10_a/readme.txt =================================================================== Index: plbv46_to_wb_bridge/tags =================================================================== --- plbv46_to_wb_bridge/tags (nonexistent) +++ plbv46_to_wb_bridge/tags (revision 10)
plbv46_to_wb_bridge/tags Property changes : Added: svn:mergeinfo ## -0,0 +0,0 ##

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.