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

Subversion Repositories usb_fpga_1_11

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /usb_fpga_1_11/trunk/examples/usb-fpga-1.11/1.11b/memtest/fpga
    from Rev 5 to Rev 7
    Reverse comparison

Rev 5 → Rev 7

/memtest.bit Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
memtest.bit Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: ipcore_dir/mem0_xmdf.tcl =================================================================== --- ipcore_dir/mem0_xmdf.tcl (revision 5) +++ ipcore_dir/mem0_xmdf.tcl (nonexistent) @@ -1,78 +0,0 @@ -# The package naming convention is _xmdf -package provide mem0_xmdf 1.0 - -# This includes some utilities that support common XMDF operations -package require utilities_xmdf - -# Define a namespace for this package. The name of the name space -# is _xmdf -namespace eval ::mem0_xmdf { -# Use this to define any statics -} - -# Function called by client to rebuild the params and port arrays -# Optional when the use context does not require the param or ports -# arrays to be available. -proc ::mem0_xmdf::xmdfInit { instance } { - # Variable containing name of library into which module is compiled - # Recommendation: - # Required - utilities_xmdf::xmdfSetData $instance Module Attributes Name mem0 -} -# ::mem0_xmdf::xmdfInit - -# Function called by client to fill in all the xmdf* data variables -# based on the current settings of the parameters -proc ::mem0_xmdf::xmdfApplyParams { instance } { - -set fcount 0 - # Array containing libraries that are assumed to exist - # Examples include unisim and xilinxcorelib - # Optional - # In this example, we assume that the unisim library will - # be magically - # available to the simulation and synthesis tool - utilities_xmdf::xmdfSetData $instance FileSet $fcount type logical_library - utilities_xmdf::xmdfSetData $instance FileSet $fcount logical_library unisim - incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path mem0/user_design/rtl/iodrp_controller.vhd -utilities_xmdf::xmdfSetData $instance FileSet $fcount type vhdl -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path mem0/user_design/rtl/iodrp_mcb_controller.vhd -utilities_xmdf::xmdfSetData $instance FileSet $fcount type vhdl -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path mem0/user_design/rtl/mcb_raw_wrapper.vhd -utilities_xmdf::xmdfSetData $instance FileSet $fcount type vhdl -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path mem0/user_design/rtl/mcb_soft_calibration.vhd -utilities_xmdf::xmdfSetData $instance FileSet $fcount type vhdl -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path mem0/user_design/rtl/mcb_soft_calibration_top.vhd -utilities_xmdf::xmdfSetData $instance FileSet $fcount type vhdl -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path mem0/user_design/rtl/mem0.vhd -utilities_xmdf::xmdfSetData $instance FileSet $fcount type vhdl -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path mem0/user_design/rtl/memc3_infrastructure.vhd -utilities_xmdf::xmdfSetData $instance FileSet $fcount type vhdl -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path mem0/user_design/rtl/memc3_wrapper.vhd -utilities_xmdf::xmdfSetData $instance FileSet $fcount type vhdl -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path mem0/user_design/par/mem0.ucf -utilities_xmdf::xmdfSetData $instance FileSet $fcount type ucf -utilities_xmdf::xmdfSetData $instance FileSet $fcount associated_module mem0 -incr fcount - -} - -# ::gen_comp_name_xmdf::xmdfApplyParams Index: ipcore_dir/dcm0_xmdf.tcl =================================================================== --- ipcore_dir/dcm0_xmdf.tcl (revision 5) +++ ipcore_dir/dcm0_xmdf.tcl (nonexistent) @@ -1,160 +0,0 @@ -# The package naming convention is _xmdf -package provide dcm0_xmdf 1.0 - -# This includes some utilities that support common XMDF operations -package require utilities_xmdf - -# Define a namespace for this package. The name of the name space -# is _xmdf -namespace eval ::dcm0_xmdf { -# Use this to define any statics -} - -# Function called by client to rebuild the params and port arrays -# Optional when the use context does not require the param or ports -# arrays to be available. -proc ::dcm0_xmdf::xmdfInit { instance } { -# Variable containg name of library into which module is compiled -# Recommendation: -# Required -utilities_xmdf::xmdfSetData $instance Module Attributes Name dcm0 -} -# ::dcm0_xmdf::xmdfInit - -# Function called by client to fill in all the xmdf* data variables -# based on the current settings of the parameters -proc ::dcm0_xmdf::xmdfApplyParams { instance } { - -set fcount 0 -# Array containing libraries that are assumed to exist -# Examples include unisim and xilinxcorelib -# Optional -# In this example, we assume that the unisim library will -# be magically -# available to the simulation and synthesis tool -utilities_xmdf::xmdfSetData $instance FileSet $fcount type logical_library -utilities_xmdf::xmdfSetData $instance FileSet $fcount logical_library unisim -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0/clk_wiz_readme.txt -utilities_xmdf::xmdfSetData $instance FileSet $fcount type Ignore -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0/dcm0.ucf -utilities_xmdf::xmdfSetData $instance FileSet $fcount type Ignore -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0/doc/clk_wiz_ds709.pdf -utilities_xmdf::xmdfSetData $instance FileSet $fcount type Ignore -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0/doc/clk_wiz_gsg521.pdf -utilities_xmdf::xmdfSetData $instance FileSet $fcount type Ignore -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0/example_design/dcm0_exdes.v -utilities_xmdf::xmdfSetData $instance FileSet $fcount type Ignore -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0/example_design/dcm0_exdes.vhd -utilities_xmdf::xmdfSetData $instance FileSet $fcount type Ignore -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0/implement/implement.bat -utilities_xmdf::xmdfSetData $instance FileSet $fcount type Ignore -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0/implement/implement.sh -utilities_xmdf::xmdfSetData $instance FileSet $fcount type Ignore -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0/implement/xst.prj -utilities_xmdf::xmdfSetData $instance FileSet $fcount type Ignore -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0/implement/xst.scr -utilities_xmdf::xmdfSetData $instance FileSet $fcount type Ignore -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0/simulation/dcm0_tb.v -utilities_xmdf::xmdfSetData $instance FileSet $fcount type Ignore -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0/simulation/dcm0_tb.vhd -utilities_xmdf::xmdfSetData $instance FileSet $fcount type Ignore -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0/simulation/functional/simcmds.tcl -utilities_xmdf::xmdfSetData $instance FileSet $fcount type Ignore -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0/simulation/functional/simulate_isim.sh -utilities_xmdf::xmdfSetData $instance FileSet $fcount type Ignore -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0/simulation/functional/simulate_mti.do -utilities_xmdf::xmdfSetData $instance FileSet $fcount type Ignore -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0/simulation/functional/simulate_ncsim.sh -utilities_xmdf::xmdfSetData $instance FileSet $fcount type Ignore -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0/simulation/functional/simulate_vcs.sh -utilities_xmdf::xmdfSetData $instance FileSet $fcount type Ignore -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0/simulation/functional/ucli_commands.key -utilities_xmdf::xmdfSetData $instance FileSet $fcount type Ignore -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0/simulation/functional/vcs_session.tcl -utilities_xmdf::xmdfSetData $instance FileSet $fcount type Ignore -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0/simulation/functional/wave.do -utilities_xmdf::xmdfSetData $instance FileSet $fcount type Ignore -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0/simulation/functional/wave.sv -utilities_xmdf::xmdfSetData $instance FileSet $fcount type Ignore -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0.asy -utilities_xmdf::xmdfSetData $instance FileSet $fcount type asy -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0.ejp -utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0.v -utilities_xmdf::xmdfSetData $instance FileSet $fcount type verilog -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0.veo -utilities_xmdf::xmdfSetData $instance FileSet $fcount type verilog_template -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0.vhd -utilities_xmdf::xmdfSetData $instance FileSet $fcount type vhdl -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0.vho -utilities_xmdf::xmdfSetData $instance FileSet $fcount type vhdl_template -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0.xco -utilities_xmdf::xmdfSetData $instance FileSet $fcount type coregen_ip -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path dcm0_xmdf.tcl -utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView -incr fcount - -utilities_xmdf::xmdfSetData $instance FileSet $fcount associated_module dcm0 -incr fcount - -} - -# ::gen_comp_name_xmdf::xmdfApplyParams Index: ipcore_dir/dcm0.vhd =================================================================== --- ipcore_dir/dcm0.vhd (revision 5) +++ ipcore_dir/dcm0.vhd (nonexistent) @@ -1,160 +0,0 @@ --- file: dcm0.vhd --- --- DISCLAIMER OF LIABILITY --- --- This file contains proprietary and confidential information of --- Xilinx, Inc. ("Xilinx"), that is distributed under a license --- from Xilinx, and may be used, copied and/or disclosed only --- pursuant to the terms of a valid license agreement with Xilinx. --- --- XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION --- ("MATERIALS") "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER --- EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING WITHOUT --- LIMITATION, ANY WARRANTY WITH RESPECT TO NONINFRINGEMENT, --- MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE. Xilinx --- does not warrant that functions included in the Materials will --- meet the requirements of Licensee, or that the operation of the --- Materials will be uninterrupted or error-free, or that defects --- in the Materials will be corrected. Furthermore, Xilinx does --- not warrant or make any representations regarding use, or the --- results of the use, of the Materials in terms of correctness, --- accuracy, reliability or otherwise. --- --- Xilinx products are not designed or intended to be fail-safe, --- or for use in any application requiring fail-safe performance, --- such as life-support or safety devices or systems, Class III --- medical devices, nuclear facilities, applications related to --- the deployment of airbags, or any other applications that could --- lead to death, personal injury or severe property or --- environmental damage (individually and collectively, "critical --- applications"). Customer assumes the sole risk and liability --- of any use of Xilinx products in critical applications, --- subject only to applicable laws and regulations governing --- limitations on product liability. --- --- Copyright 2008, 2009 Xilinx, Inc. --- All rights reserved. --- --- This disclaimer and copyright notice must be retained as part --- of this file at all times. --- ------------------------------------------------------------------------------- --- User entered comments ------------------------------------------------------------------------------- --- None --- ------------------------------------------------------------------------------- --- Output Output Phase Duty Cycle Pk-to-Pk Phase --- Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps) ------------------------------------------------------------------------------- --- CLK_OUT1 200.000 0.000 N/A 217.125 N/A --- CLK_OUT2 50.000 0.000 N/A 207.125 N/A --- ------------------------------------------------------------------------------- --- Input Clock Input Freq (MHz) Input Jitter (UI) ------------------------------------------------------------------------------- --- primary 48.000 0.010 - -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.all; -use ieee.std_logic_arith.all; -use ieee.numeric_std.all; - -library unisim; -use unisim.vcomponents.all; - -entity dcm0 is -port - (-- Clock in ports - CLK_IN1 : in std_logic; - -- Clock out ports - CLK_OUT1 : out std_logic; - CLK_OUT2 : out std_logic; - -- Status and control signals - RESET : in std_logic; - LOCKED : out std_logic; - CLK_VALID : out std_logic - ); -end dcm0; - -architecture xilinx of dcm0 is - attribute CORE_GENERATION_INFO : string; - attribute CORE_GENERATION_INFO of xilinx : architecture is "dcm0,clk_wiz_v1_4,{component_name=dcm0,use_phase_alignment=false,use_min_o_jitter=false,use_max_i_jitter=false,use_dyn_phase_shift=false,use_inclk_switchover=false,use_dyn_reconfig=false,feedback_source=FDBK_AUTO,diff_ext_feedback=false,primtype_sel=DCM_CLKGEN,num_out_clk=2,clkin1_period=20.83333,clkin2_period=20.83333,use_power_down=false}"; - -- Input clock buffering / unused connectors - signal clkin1 : std_logic; - -- Output clock buffering / unused connectors - signal clkfx : std_logic; - signal clkfx180_unused : std_logic; - signal clkfxdv : std_logic; - signal clkfbout : std_logic; - -- Dynamic programming unused signals - signal progdone_unused : std_logic; - signal locked_internal : std_logic; - signal status_internal : std_logic_vector(2 downto 1); - -begin - - - -- Input buffering - -------------------------------------- - clkin1_buf : IBUFG - port map - (O => clkin1, - I => CLK_IN1); - - - -- Clocking primitive - -------------------------------------- - -- Instantiation of the DCM primitive - -- * Unused inputs are tied off - -- * Unused outputs are labeled unused - dcm_clkgen_inst: DCM_CLKGEN - generic map - (CLKFXDV_DIVIDE => 4, - CLKFX_DIVIDE => 6, - CLKFX_MULTIPLY => 25, - SPREAD_SPECTRUM => "NONE", - STARTUP_WAIT => FALSE, - CLKIN_PERIOD => 20.83333, - CLKFX_MD_MAX => 0.000) - port map - -- Input clock - (CLKIN => clkin1, - -- Output clocks - CLKFX => clkfx, - CLKFX180 => clkfx180_unused, - CLKFXDV => clkfxdv, - -- Ports for dynamic phase shift - PROGCLK => '0', - PROGEN => '0', - PROGDATA => '0', - PROGDONE => progdone_unused, - -- Other control and status signals - FREEZEDCM => '0', - LOCKED => locked_internal, - STATUS => status_internal, - RST => RESET); - - LOCKED <= locked_internal; - CLK_VALID <= ( locked_internal and ( not status_internal(2) ) ); - - -- Output buffering - ------------------------------------- - - - clkout1_buf : AUTOBUF - generic map - (BUFFER_TYPE => "BUFG") - port map - (O => CLK_OUT1, - I => clkfx); - - - clkout2_buf : AUTOBUF - generic map - (BUFFER_TYPE => "BUFG") - port map - (O => CLK_OUT2, - I => clkfxdv); -end xilinx;
ipcore_dir/dcm0.vhd Property changes : Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Index: ipcore_dir/mem0/user_design/rtl/mcb_soft_calibration.vhd =================================================================== --- ipcore_dir/mem0/user_design/rtl/mcb_soft_calibration.vhd (revision 5) +++ ipcore_dir/mem0/user_design/rtl/mcb_soft_calibration.vhd (nonexistent) @@ -1,1384 +0,0 @@ ---***************************************************************************** --- (c) Copyright 2009 Xilinx, Inc. All rights reserved. --- --- This file contains confidential and proprietary information --- of Xilinx, Inc. and is protected under U.S. and --- international copyright and other intellectual property --- laws. --- --- DISCLAIMER --- This disclaimer is not a license and does not grant any --- rights to the materials distributed herewith. Except as --- otherwise provided in a valid license issued to you by --- Xilinx, and to the maximum extent permitted by applicable --- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND --- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES --- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING --- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- --- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and --- (2) Xilinx shall not be liable (whether in contract or tort, --- including negligence, or under any other theory of --- liability) for any loss or damage of any kind or nature --- related to, arising under or in connection with these --- materials, including for any direct, or any indirect, --- special, incidental, or consequential loss or damage --- (including loss of data, profits, goodwill, or any type of --- loss or damage suffered as a result of any action brought --- by a third party) even if such damage or loss was --- reasonably foreseeable or Xilinx had been advised of the --- possibility of the same. --- --- CRITICAL APPLICATIONS --- Xilinx products are not designed or intended to be fail- --- safe, or for use in any application requiring fail-safe --- performance, such as life-support or safety devices or --- systems, Class III medical devices, nuclear facilities, --- applications related to the deployment of airbags, or any --- other applications that could lead to death, personal --- injury, or severe property or environmental damage --- (individually and collectively, "Critical --- Applications"). Customer assumes the sole risk and --- liability of any use of Xilinx products in Critical --- Applications, subject only to applicable laws and --- regulations governing limitations on product liability. --- --- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS --- PART OF THIS FILE AT ALL TIMES. --- ---***************************************************************************** --- ____ ____ --- / /\/ / --- /___/ \ / Vendor: Xilinx --- \ \ \/ Version: %version --- \ \ Application: MIG --- / / Filename: mcb_soft_calibration.vhd --- /___/ /\ Date Last Modified: $Date: 2010/06/04 11:24:38 $ --- \ \ / \ Date Created: Mon Feb 9 2009 --- \___\/\___\ --- ---Device: Spartan6 ---Design Name: DDR/DDR2/DDR3/LPDDR ---Purpose: Xilinx reference design for MCB Soft --- Calibration ---Reference: --- --- Revision: Date: Comment --- 1.0: 2/06/09: Initial version for MIG wrapper. --- 1.1: 2/09/09: moved Max_Value_Previous assignments to be completely inside CASE statement for next-state logic (needed to get it working --- correctly) --- 1.2: 2/12/09: Many other changes. --- 1.3: 2/26/09: Removed section with Max_Value_pre and DQS_COUNT_PREVIOUS_pre, and instead added PREVIOUS_STATE reg and moved assignment to within --- STATE --- 1.4: 3/02/09: Removed comments out of sensitivity list of always block to mux SDI, SDO, CS, and ADD.Also added reg declaration for PREVIOUS_STATE --- 1.5: 3/16/09: Added pll_lock port, and using it to gate reset. Changing RST (except input port) to RST_reg and gating it with pll_lock. --- 1.6: 6/05/09: Added START_DYN_CAL_PRE with pulse on SYSRST; removed MCB_UIDQCOUNT. --- 1.7: 6/24/09: Gave RZQ and ZIO each their own unique ADD and SDI nets --- 2.6: 12/15/09: Changed STATE from 7-bit to 6-bit. Dropped (* FSM_ENCODING="BINARY" *) for STATE. Moved MCB_UICMDEN = 0 from OFF_RZQ_PTERM to --- RST_DELAY. --- Changed the "reset" always block so that RST_reg is always set to 1 when the PLL loses lock, and is now held in reset for at least --- 16 clocks. Added PNSKEW option. --- 2.7: 12/23/09: Added new states "SKEW" and "MULTIPLY_DIVIDE" to help with timing. --- 2.8: 01/14/10: Added functionality to allow for SUSPEND. Changed MCB_SYSRST port from wire to reg. --- 2.9: 02/01/10: More changes to SUSPEND and Reset logic to handle SUSPEND properly. Also - eliminated 2's comp DQS_COUNT_VIRTUAL, and replaced --- with 8bit TARGET_DQS_DELAY which --- will track most recnet Max_Value. Eliminated DQS_COUNT_PREVIOUS. Combined DQS_COUNT_INITIAL and DQS_DELAY into DQS_DELAY_INITIAL. --- Changed DQS_COUNT* to DQS_DELAY*. --- Changed MCB_SYSRST port back to wire (from reg). --- 3.0: 02/10/10: Added count_inc and count_dec to add few (4) UI_CLK cycles latency to the INC and DEC signals(to deal with latency on UOREFRSHFLAG) --- 3.1: 02/23/10: Registered the DONE_SOFTANDHARD_CAL for timing. --- 3.2: 02/28/10: Corrected the WAIT_SELFREFRESH_EXIT_DQS_CAL logic; --- 3.3: 03/02/10: Changed PNSKEW to default on (1'b1) --- 3.4: 03/04/10: Recoded the RST_Reg logic. --- 3.5: 03/05/10: Changed Result register to be 16-bits. Changed DQS_NUMERATOR/DENOMINATOR values to 3/8 (from 6/16) --- 3.6 03/10/10: Improvements to Reset logic. --- 3.7: 04/26/10: Added DDR2 Initialization fix to meet 400 ns wait as outlined in step d) of JEDEC DDR2 spec . --- 3.8: 05/05/10: Added fixes for the CR# 559092 (updated Mult_Divide function) and 555416 (added IOB attribute to DONE_SOFTANDHARD_CAL). --- 3.9: 05/24/10: Added 200us Wait logic to control CKE_Train. The 200us Wait counter assumes UI_CLK freq not higher than 100 MHz. - --- End Revision ---********************************************************************************** - -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - USE ieee.numeric_std.all; - -entity mcb_soft_calibration is - generic ( - C_MEM_TZQINIT_MAXCNT : std_logic_vector(9 downto 0) := "1000000000"; -- DDR3 Minimum delay between resets - SKIP_IN_TERM_CAL : integer := 0; -- provides option to skip the input termination calibration - SKIP_DYNAMIC_CAL : integer := 0; -- provides option to skip the dynamic delay calibration - SKIP_DYN_IN_TERM : integer := 1; -- provides option to skip the input termination calibration - C_MC_CALIBRATION_MODE : string := "CALIBRATION"; -- if set to CALIBRATION will reset DQS IDELAY to DQS_NUMERATOR/DQS_DENOMINATOR local_param value - -- if set to NOCALIBRATION then defaults to hard cal blocks setting of C_MC_CALBRATION_DELAY - -- (Quarter, etc) - C_SIMULATION : string := "FALSE"; -- Tells us whether the design is being simulated or implemented - C_MEM_TYPE : string := "DDR" - - - ); - port ( - UI_CLK : in std_logic; -- main clock input for logic and IODRP CLK pins. At top level, this should also connect to IODRP2_MCB - -- CLK pins - RST : in std_logic; -- main system reset for both the Soft Calibration block - also will act as a passthrough to MCB's SYSRST - DONE_SOFTANDHARD_CAL : out std_logic; -- active high flag signals soft calibration of input delays is complete and MCB_UODONECAL is high (MCB - -- hard calib complete) - PLL_LOCK : in std_logic; -- Lock signal from PLL - SELFREFRESH_REQ : in std_logic; - SELFREFRESH_MCB_MODE : in std_logic; - SELFREFRESH_MCB_REQ : out std_logic; - SELFREFRESH_MODE : out std_logic; - IODRP_ADD : out std_logic; -- IODRP ADD port - IODRP_SDI : out std_logic; -- IODRP SDI port - RZQ_IN : in std_logic; -- RZQ pin from board - expected to have a 2*R resistor to ground - RZQ_IODRP_SDO : in std_logic; -- RZQ IODRP's SDO port - RZQ_IODRP_CS : out std_logic := '0'; -- RZQ IODRP's CS port - ZIO_IN : in std_logic; -- Z-stated IO pin - garanteed not to be driven externally - ZIO_IODRP_SDO : in std_logic; -- ZIO IODRP's SDO port - ZIO_IODRP_CS : out std_logic := '0'; -- ZIO IODRP's CS port - MCB_UIADD : out std_logic; -- to MCB's UIADD port - MCB_UISDI : out std_logic; -- to MCB's UISDI port - MCB_UOSDO : in std_logic; -- from MCB's UOSDO port (User output SDO) - MCB_UODONECAL : in std_logic; -- indicates when MCB hard calibration process is complete - MCB_UOREFRSHFLAG : in std_logic; -- high during refresh cycle and time when MCB is innactive - MCB_UICS : out std_logic; -- to MCB's UICS port (User Input CS) - MCB_UIDRPUPDATE : out std_logic := '1'; -- MCB's UIDRPUPDATE port (gets passed to IODRP2_MCB's MEMUPDATE port: this controls shadow latch used - -- during IODRP2_MCB writes). Currently just trasnparent - MCB_UIBROADCAST : out std_logic; -- only to MCB's UIBROADCAST port (User Input BROADCAST - gets passed to IODRP2_MCB's BKST port) - MCB_UIADDR : out std_logic_vector(4 downto 0) := "00000"; -- to MCB's UIADDR port (gets passed to IODRP2_MCB's AUXADDR port - MCB_UICMDEN : out std_logic := '1'; -- set to 1 to take control of UI interface - removes control from internal calib block - MCB_UIDONECAL : out std_logic := '0'; -- set to 0 to "tell" controller that it's still in a calibrate state - MCB_UIDQLOWERDEC : out std_logic := '0'; - MCB_UIDQLOWERINC : out std_logic := '0'; - MCB_UIDQUPPERDEC : out std_logic := '0'; - MCB_UIDQUPPERINC : out std_logic := '0'; - MCB_UILDQSDEC : out std_logic := '0'; - MCB_UILDQSINC : out std_logic := '0'; - MCB_UIREAD : out std_logic; -- enables read w/o writing by turning on a SDO->SDI loopback inside the IODRP2_MCBs (doesn't exist in - -- regular IODRP2). IODRPCTRLR_R_WB becomes don't-care. - MCB_UIUDQSDEC : out std_logic := '0'; - MCB_UIUDQSINC : out std_logic := '0'; - MCB_RECAL : out std_logic := '0'; -- future hook to drive MCB's RECAL pin - initiates a hard re-calibration sequence when high - MCB_UICMD : out std_logic; - MCB_UICMDIN : out std_logic; - MCB_UIDQCOUNT : out std_logic_vector(3 downto 0); - MCB_UODATA : in std_logic_vector(7 downto 0); - MCB_UODATAVALID : in std_logic; - MCB_UOCMDREADY : in std_logic; - MCB_UO_CAL_START : in std_logic; - MCB_SYSRST : out std_logic; -- drives the MCB's SYSRST pin - the main reset for MCB - Max_Value : out std_logic_vector(7 downto 0); - CKE_Train : out std_logic - ); -end entity mcb_soft_calibration; - -architecture trans of mcb_soft_calibration is - - constant IOI_DQ0 : std_logic_vector(4 downto 0) := ("0000" & '1'); - constant IOI_DQ1 : std_logic_vector(4 downto 0) := ("0000" & '0'); - constant IOI_DQ2 : std_logic_vector(4 downto 0) := ("0001" & '1'); - constant IOI_DQ3 : std_logic_vector(4 downto 0) := ("0001" & '0'); - constant IOI_DQ4 : std_logic_vector(4 downto 0) := ("0010" & '1'); - constant IOI_DQ5 : std_logic_vector(4 downto 0) := ("0010" & '0'); - constant IOI_DQ6 : std_logic_vector(4 downto 0) := ("0011" & '1'); - constant IOI_DQ7 : std_logic_vector(4 downto 0) := ("0011" & '0'); - constant IOI_DQ8 : std_logic_vector(4 downto 0) := ("0100" & '1'); - constant IOI_DQ9 : std_logic_vector(4 downto 0) := ("0100" & '0'); - constant IOI_DQ10 : std_logic_vector(4 downto 0) := ("0101" & '1'); - constant IOI_DQ11 : std_logic_vector(4 downto 0) := ("0101" & '0'); - constant IOI_DQ12 : std_logic_vector(4 downto 0) := ("0110" & '1'); - constant IOI_DQ13 : std_logic_vector(4 downto 0) := ("0110" & '0'); - constant IOI_DQ14 : std_logic_vector(4 downto 0) := ("0111" & '1'); - constant IOI_DQ15 : std_logic_vector(4 downto 0) := ("0111" & '0'); - constant IOI_UDM : std_logic_vector(4 downto 0) := ("1000" & '1'); - constant IOI_LDM : std_logic_vector(4 downto 0) := ("1000" & '0'); - constant IOI_CK_P : std_logic_vector(4 downto 0) := ("1001" & '1'); - constant IOI_CK_N : std_logic_vector(4 downto 0) := ("1001" & '0'); - constant IOI_RESET : std_logic_vector(4 downto 0) := ("1010" & '1'); - constant IOI_A11 : std_logic_vector(4 downto 0) := ("1010" & '0'); - constant IOI_WE : std_logic_vector(4 downto 0) := ("1011" & '1'); - constant IOI_BA2 : std_logic_vector(4 downto 0) := ("1011" & '0'); - constant IOI_BA0 : std_logic_vector(4 downto 0) := ("1100" & '1'); - constant IOI_BA1 : std_logic_vector(4 downto 0) := ("1100" & '0'); - constant IOI_RASN : std_logic_vector(4 downto 0) := ("1101" & '1'); - constant IOI_CASN : std_logic_vector(4 downto 0) := ("1101" & '0'); - constant IOI_UDQS_CLK : std_logic_vector(4 downto 0) := ("1110" & '1'); - constant IOI_UDQS_PIN : std_logic_vector(4 downto 0) := ("1110" & '0'); - constant IOI_LDQS_CLK : std_logic_vector(4 downto 0) := ("1111" & '1'); - constant IOI_LDQS_PIN : std_logic_vector(4 downto 0) := ("1111" & '0'); - - constant START : std_logic_vector(5 downto 0) := "000000"; - constant LOAD_RZQ_NTERM : std_logic_vector(5 downto 0) := "000001"; - constant WAIT1 : std_logic_vector(5 downto 0) := "000010"; - constant LOAD_RZQ_PTERM : std_logic_vector(5 downto 0) := "000011"; - constant WAIT2 : std_logic_vector(5 downto 0) := "000100"; - constant INC_PTERM : std_logic_vector(5 downto 0) := "000101"; - constant MULTIPLY_DIVIDE : std_logic_vector(5 downto 0) := "000110"; - constant LOAD_ZIO_PTERM : std_logic_vector(5 downto 0) := "000111"; - constant WAIT3 : std_logic_vector(5 downto 0) := "001000"; - constant LOAD_ZIO_NTERM : std_logic_vector(5 downto 0) := "001001"; - constant WAIT4 : std_logic_vector(5 downto 0) := "001010"; - constant INC_NTERM : std_logic_vector(5 downto 0) := "001011"; - constant SKEW : std_logic_vector(5 downto 0) := "001100"; - constant WAIT_FOR_START_BROADCAST : std_logic_vector(5 downto 0) := "001101"; - constant BROADCAST_PTERM : std_logic_vector(5 downto 0) := "001110"; - constant WAIT5 : std_logic_vector(5 downto 0) := "001111"; - constant BROADCAST_NTERM : std_logic_vector(5 downto 0) := "010000"; - constant WAIT6 : std_logic_vector(5 downto 0) := "010001"; - constant OFF_RZQ_PTERM : std_logic_vector(5 downto 0) := "010010"; - constant WAIT7 : std_logic_vector(5 downto 0) := "010011"; - constant OFF_ZIO_NTERM : std_logic_vector(5 downto 0) := "010100"; - constant WAIT8 : std_logic_vector(5 downto 0) := "010101"; - constant RST_DELAY : std_logic_vector(5 downto 0) := "010110"; - constant START_DYN_CAL_PRE : std_logic_vector(5 downto 0) := "010111"; - constant WAIT_FOR_UODONE : std_logic_vector(5 downto 0) := "011000"; - constant LDQS_WRITE_POS_INDELAY : std_logic_vector(5 downto 0) := "011001"; - constant LDQS_WAIT1 : std_logic_vector(5 downto 0) := "011010"; - constant LDQS_WRITE_NEG_INDELAY : std_logic_vector(5 downto 0) := "011011"; - constant LDQS_WAIT2 : std_logic_vector(5 downto 0) := "011100"; - constant UDQS_WRITE_POS_INDELAY : std_logic_vector(5 downto 0) := "011101"; - constant UDQS_WAIT1 : std_logic_vector(5 downto 0) := "011110"; - constant UDQS_WRITE_NEG_INDELAY : std_logic_vector(5 downto 0) := "011111"; - constant UDQS_WAIT2 : std_logic_vector(5 downto 0) := "100000"; - constant START_DYN_CAL : std_logic_vector(5 downto 0) := "100001"; - constant WRITE_CALIBRATE : std_logic_vector(5 downto 0) := "100010"; - constant WAIT9 : std_logic_vector(5 downto 0) := "100011"; - constant READ_MAX_VALUE : std_logic_vector(5 downto 0) := "100100"; - constant WAIT10 : std_logic_vector(5 downto 0) := "100101"; - constant ANALYZE_MAX_VALUE : std_logic_vector(5 downto 0) := "100110"; - constant FIRST_DYN_CAL : std_logic_vector(5 downto 0) := "100111"; - constant INCREMENT : std_logic_vector(5 downto 0) := "101000"; - constant DECREMENT : std_logic_vector(5 downto 0) := "101001"; - constant DONE : std_logic_vector(5 downto 0) := "101010"; - - constant RZQ : std_logic_vector(1 downto 0) := "00"; - constant ZIO : std_logic_vector(1 downto 0) := "01"; - constant MCB_PORT : std_logic_vector(1 downto 0) := "11"; - constant WRITE_MODE : std_logic := '0'; - constant READ_MODE : std_logic := '1'; - - -- IOI Registers - constant NoOp : std_logic_vector(7 downto 0) := "00000000"; - constant DelayControl : std_logic_vector(7 downto 0) := "00000001"; - constant PosEdgeInDly : std_logic_vector(7 downto 0) := "00000010"; - constant NegEdgeInDly : std_logic_vector(7 downto 0) := "00000011"; - constant PosEdgeOutDly : std_logic_vector(7 downto 0) := "00000100"; - constant NegEdgeOutDly : std_logic_vector(7 downto 0) := "00000101"; - constant MiscCtl1 : std_logic_vector(7 downto 0) := "00000110"; - constant MiscCtl2 : std_logic_vector(7 downto 0) := "00000111"; - constant MaxValue : std_logic_vector(7 downto 0) := "00001000"; - - -- IOB Registers - constant PDrive : std_logic_vector(7 downto 0) := "10000000"; - constant PTerm : std_logic_vector(7 downto 0) := "10000001"; - constant NDrive : std_logic_vector(7 downto 0) := "10000010"; - constant NTerm : std_logic_vector(7 downto 0) := "10000011"; - constant SlewRateCtl : std_logic_vector(7 downto 0) := "10000100"; - constant LVDSControl : std_logic_vector(7 downto 0) := "10000101"; - constant MiscControl : std_logic_vector(7 downto 0) := "10000110"; - constant InputControl : std_logic_vector(7 downto 0) := "10000111"; - constant TestReadback : std_logic_vector(7 downto 0) := "10001000"; - --- No multi/divide is required when a 55 ohm resister is used on RZQ --- localparam MULT = 1; --- localparam DIV = 1; --- use 7/4 scaling factor when the 100 ohm RZQ is used - constant MULT : integer := 7; - constant DIV : integer := 4; - - constant PNSKEW : std_logic := '1'; -- Default is 1'b1. Change to 1'b0 if PSKEW and NSKEW are not required - constant PSKEW_MULT : integer := 9; - constant PSKEW_DIV : integer := 8; - constant NSKEW_MULT : integer := 7; - constant NSKEW_DIV : integer := 8; - - constant DQS_NUMERATOR : integer := 3; - constant DQS_DENOMINATOR : integer := 8; - constant INCDEC_THRESHOLD : std_logic_vector(7 downto 0) := X"03"; - -- parameter for the threshold which triggers an inc/dec to occur. 2 for half, 4 for quarter, - -- 3 for three eighths - - constant RST_CNT : std_logic_vector(9 downto 0) := "0000010000"; - constant TZQINIT_MAXCNT : std_logic_vector(9 downto 0) := C_MEM_TZQINIT_MAXCNT + RST_CNT; - - constant IN_TERM_PASS : std_logic := '0'; - constant DYN_CAL_PASS : std_logic := '1'; - - component iodrp_mcb_controller is - port ( - memcell_address : in std_logic_vector(7 downto 0); - write_data : in std_logic_vector(7 downto 0); - read_data : out std_logic_vector(7 downto 0); - rd_not_write : in std_logic; - cmd_valid : in std_logic; - rdy_busy_n : out std_logic; - use_broadcast : in std_logic; - drp_ioi_addr : in std_logic_vector(4 downto 0); - sync_rst : in std_logic; - DRP_CLK : in std_logic; - DRP_CS : out std_logic; - DRP_SDI : out std_logic; - DRP_ADD : out std_logic; - DRP_BKST : out std_logic; - DRP_SDO : in std_logic; - MCB_UIREAD : out std_logic - ); - end component; - - component iodrp_controller is - port ( - memcell_address : in std_logic_vector(7 downto 0); - write_data : in std_logic_vector(7 downto 0); - read_data : out std_logic_vector(7 downto 0); - rd_not_write : in std_logic; - cmd_valid : in std_logic; - rdy_busy_n : out std_logic; - use_broadcast : in std_logic; - sync_rst : in std_logic; - DRP_CLK : in std_logic; - DRP_CS : out std_logic; - DRP_SDI : out std_logic; - DRP_ADD : out std_logic; - DRP_BKST : out std_logic; - DRP_SDO : in std_logic - ); - end component; - - signal P_Term : std_logic_vector(5 downto 0) := "000000"; - signal N_Term : std_logic_vector(6 downto 0) := "0000000"; - signal P_Term_Prev : std_logic_vector(5 downto 0) := "000000"; - signal N_Term_Prev : std_logic_vector(6 downto 0) := "0000000"; - - signal STATE : std_logic_vector(5 downto 0) := START; - signal IODRPCTRLR_MEMCELL_ADDR : std_logic_vector(7 downto 0); - signal IODRPCTRLR_WRITE_DATA : std_logic_vector(7 downto 0); - signal Active_IODRP : std_logic_vector(1 downto 0); - signal IODRPCTRLR_R_WB : std_logic := '0'; - signal IODRPCTRLR_CMD_VALID : std_logic := '0'; - signal IODRPCTRLR_USE_BKST : std_logic := '0'; - signal MCB_CMD_VALID : std_logic := '0'; - signal MCB_USE_BKST : std_logic := '0'; - signal Pre_SYSRST : std_logic := '1'; -- internally generated reset which will OR with RST input to drive MCB's - -- SYSRST pin (MCB_SYSRST) - signal IODRP_SDO : std_logic; - signal Max_Value_Previous : std_logic_vector(7 downto 0) := "00000000"; - signal count : std_logic_vector(5 downto 0) := "000000"; -- counter for adding 18 extra clock cycles after setting Calibrate bit - signal counter_en : std_logic := '0'; -- counter enable for "count" - signal First_Dyn_Cal_Done : std_logic := '0'; -- flag - high after the very first dynamic calibration is done - signal START_BROADCAST : std_logic := '1'; -- Trigger to start Broadcast to IODRP2_MCBs to set Input Impedance - - -- state machine will wait for this to be high - signal DQS_DELAY_INITIAL : std_logic_vector(7 downto 0) := "00000000"; - signal DQS_DELAY : std_logic_vector(7 downto 0); -- contains the latest values written to LDQS and UDQS Input Delays - signal TARGET_DQS_DELAY : std_logic_vector(7 downto 0); -- used to track the target for DQS input delays - only gets updated if - -- the Max Value changes by more than the threshold - signal counter_inc : std_logic_vector(7 downto 0); -- used to delay Inc signal by several ui_clk cycles (to deal with - -- latency on UOREFRSHFLAG) - signal counter_dec : std_logic_vector(7 downto 0); -- used to delay Dec signal by several ui_clk cycles (to deal with - -- latency on UOREFRSHFLAG) - signal IODRPCTRLR_READ_DATA : std_logic_vector(7 downto 0); - signal IODRPCTRLR_RDY_BUSY_N : std_logic; - signal IODRP_CS : std_logic; - signal MCB_READ_DATA : std_logic_vector(7 downto 0); - signal RST_reg : std_logic; - signal Block_Reset : std_logic; - signal MCB_UODATAVALID_U : std_logic; - - signal Inc_Dec_REFRSH_Flag : std_logic_vector(2 downto 0); -- 3-bit flag to show:Inc is needed, Dec needed, refresh cycle taking place - signal Max_Value_Delta_Up : std_logic_vector(7 downto 0); -- tracks amount latest Max Value has gone up from previous Max Value read - signal Half_MV_DU : std_logic_vector(7 downto 0); -- half of Max_Value_Delta_Up - signal Max_Value_Delta_Dn : std_logic_vector(7 downto 0); -- tracks amount latest Max Value has gone down from previous Max Value read - signal Half_MV_DD : std_logic_vector(7 downto 0); -- half of Max_Value_Delta_Dn - - signal RstCounter : std_logic_vector(9 downto 0) := (others => '0'); - signal rst_tmp : std_logic; - signal LastPass_DynCal : std_logic; - signal First_In_Term_Done : std_logic; - signal Inc_Flag : std_logic; -- flag to increment Dynamic Delay - signal Dec_Flag : std_logic; -- flag to decrement Dynamic Delay - - signal CALMODE_EQ_CALIBRATION : std_logic; -- will calculate and set the DQS input delays if C_MC_CALIBRATION_MODE - -- parameter = "CALIBRATION" - signal DQS_DELAY_LOWER_LIMIT : std_logic_vector(7 downto 0); -- Lower limit for DQS input delays - signal DQS_DELAY_UPPER_LIMIT : std_logic_vector(7 downto 0); -- Upper limit for DQS input delays - signal SKIP_DYN_IN_TERMINATION : std_logic; -- wire to allow skipping dynamic input termination if either the - -- one-time or dynamic parameters are 1 - signal SKIP_DYNAMIC_DQS_CAL : std_logic; -- wire allowing skipping dynamic DQS delay calibration if either - -- SKIP_DYNIMIC_CAL=1, or if C_MC_CALIBRATION_MODE=NOCALIBRATION - signal Quarter_Max_Value : std_logic_vector(7 downto 0); - signal Half_Max_Value : std_logic_vector(7 downto 0); - signal PLL_LOCK_R1 : std_logic; - signal PLL_LOCK_R2 : std_logic; - signal MCB_RDY_BUSY_N : std_logic; - - signal SELFREFRESH_REQ_R1 : std_logic; - signal SELFREFRESH_REQ_R2 : std_logic; - signal SELFREFRESH_REQ_R3 : std_logic; - signal SELFREFRESH_MCB_MODE_R1 : std_logic; - signal SELFREFRESH_MCB_MODE_R2 : std_logic; - signal SELFREFRESH_MCB_MODE_R3 : std_logic; - signal WAIT_SELFREFRESH_EXIT_DQS_CAL : std_logic; - signal PERFORM_START_DYN_CAL_AFTER_SELFREFRESH : std_logic; - signal START_DYN_CAL_STATE_R1 : std_logic; - signal PERFORM_START_DYN_CAL_AFTER_SELFREFRESH_R1 : std_logic; - - -- Declare intermediate signals for referenced outputs - signal IODRP_ADD_xilinx0 : std_logic; - signal IODRP_SDI_xilinx1 : std_logic; - signal MCB_UIADD_xilinx2 : std_logic; - signal MCB_UISDI_xilinx11 : std_logic; - signal MCB_UICS_xilinx6 : std_logic; - signal MCB_UIBROADCAST_xilinx4 : std_logic; - signal MCB_UIADDR_xilinx3 : std_logic_vector(4 downto 0); - signal MCB_UIDONECAL_xilinx7 : std_logic; - signal MCB_UIREAD_xilinx10 : std_logic; - signal SELFREFRESH_MODE_xilinx11 : std_logic; - signal Max_Value_int : std_logic_vector(7 downto 0); - signal Rst_condition1 : std_logic; - signal Rst_condition2 : std_logic; - signal non_violating_rst : std_logic; - signal WAIT_200us_COUNTER : std_logic_vector(15 downto 0); - -- This function multiplies by a constant MULT and then divides by the DIV constant - function Mult_Divide (Input : std_logic_vector(7 downto 0); MULT : integer ; DIV : integer ) return std_logic_vector is - variable Result : integer := 0; - variable temp : std_logic_vector(14 downto 0) := "000000000000000"; - begin - for count in 0 to (MULT-1) loop - temp := temp + ("0000000" & Input); - end loop; - Result := (to_integer(unsigned(temp))) / (DIV); - temp := std_logic_vector(to_unsigned(Result,15)); - return temp(7 downto 0); - end function Mult_Divide; - - attribute syn_preserve : boolean; - attribute syn_preserve of P_Term : signal is TRUE; - attribute syn_preserve of N_Term : signal is TRUE; - attribute syn_preserve of P_Term_Prev : signal is TRUE; - attribute syn_preserve of N_Term_Prev : signal is TRUE; - attribute syn_preserve of IODRPCTRLR_MEMCELL_ADDR : signal is TRUE; - attribute syn_preserve of IODRPCTRLR_WRITE_DATA : signal is TRUE; - attribute syn_preserve of Max_Value_Previous : signal is TRUE; - attribute syn_preserve of DQS_DELAY_INITIAL : signal is TRUE; - - attribute iob : string; - attribute iob of DONE_SOFTANDHARD_CAL : signal is "FALSE"; - -begin - - Max_Value <= Max_Value_int; - -- Drive referenced outputs - IODRP_ADD <= IODRP_ADD_xilinx0; - IODRP_SDI <= IODRP_SDI_xilinx1; - MCB_UIADD <= MCB_UIADD_xilinx2; - MCB_UISDI <= MCB_UISDI_xilinx11; - MCB_UICS <= MCB_UICS_xilinx6; - MCB_UIBROADCAST <= MCB_UIBROADCAST_xilinx4; - MCB_UIADDR <= MCB_UIADDR_xilinx3; - MCB_UIDONECAL <= MCB_UIDONECAL_xilinx7; - MCB_UIREAD <= MCB_UIREAD_xilinx10; - SELFREFRESH_MODE <= SELFREFRESH_MODE_xilinx11; - - Inc_Dec_REFRSH_Flag <= (Inc_Flag & Dec_Flag & MCB_UOREFRSHFLAG); - Max_Value_Delta_Up <= Max_Value_int - Max_Value_Previous; - Half_MV_DU <= ('0' & Max_Value_Delta_Up(7 downto 1)); - Max_Value_Delta_Dn <= Max_Value_Previous - Max_Value_int; - Half_MV_DD <= ('0' & Max_Value_Delta_Dn(7 downto 1)); - CALMODE_EQ_CALIBRATION <= '1' when (C_MC_CALIBRATION_MODE = "CALIBRATION") else '0'; -- will calculate and set the DQS input delays if = 1'b1 - Half_Max_Value <= ('0' & Max_Value_int(7 downto 1)); - Quarter_Max_Value <= ("00" & Max_Value_int(7 downto 2)); - DQS_DELAY_LOWER_LIMIT <= Quarter_Max_Value; -- limit for DQS_DELAY for decrements; could optionally be assigned to any 8-bit hex value here - DQS_DELAY_UPPER_LIMIT <= Half_Max_Value; -- limit for DQS_DELAY for increments; could optionally be assigned to any 8-bit hex value here - SKIP_DYN_IN_TERMINATION <= '1' when ((SKIP_DYN_IN_TERM = 1) or (SKIP_IN_TERM_CAL = 1)) else '0'; - -- skip dynamic input termination if either the one-time or dynamic parameters are 1 - SKIP_DYNAMIC_DQS_CAL <= '1' when ((CALMODE_EQ_CALIBRATION = '0') or (SKIP_DYNAMIC_CAL = 1)) else '0'; - -- skip dynamic DQS delay calibration if either SKIP_DYNAMIC_CAL=1, or if C_MC_CALIBRATION_MODE=NOCALIBRATION - - process (UI_CLK) - begin - if (UI_CLK'event and UI_CLK = '1') then - if ((DQS_DELAY_INITIAL /= X"00") or (STATE = DONE)) then - DONE_SOFTANDHARD_CAL <= MCB_UODONECAL; -- high when either DQS input delays initialized, or STATE=DONE and UODONECAL high - else - DONE_SOFTANDHARD_CAL <= '0'; - end if; - end if; - end process; - - iodrp_controller_inst : iodrp_controller - port map ( - memcell_address => IODRPCTRLR_MEMCELL_ADDR, - write_data => IODRPCTRLR_WRITE_DATA, - read_data => IODRPCTRLR_READ_DATA, - rd_not_write => IODRPCTRLR_R_WB, - cmd_valid => IODRPCTRLR_CMD_VALID, - rdy_busy_n => IODRPCTRLR_RDY_BUSY_N, - use_broadcast => '0', - sync_rst => RST_reg, - DRP_CLK => UI_CLK, - DRP_CS => IODRP_CS, - DRP_SDI => IODRP_SDI_xilinx1, - DRP_ADD => IODRP_ADD_xilinx0, - DRP_SDO => IODRP_SDO, - DRP_BKST => open - ); - - iodrp_mcb_controller_inst : iodrp_mcb_controller - port map ( - memcell_address => IODRPCTRLR_MEMCELL_ADDR, - write_data => IODRPCTRLR_WRITE_DATA, - read_data => MCB_READ_DATA, - rd_not_write => IODRPCTRLR_R_WB, - cmd_valid => MCB_CMD_VALID, - rdy_busy_n => MCB_RDY_BUSY_N, - use_broadcast => MCB_USE_BKST, - drp_ioi_addr => MCB_UIADDR_xilinx3, - sync_rst => RST_reg, - DRP_CLK => UI_CLK, - DRP_CS => MCB_UICS_xilinx6, - DRP_SDI => MCB_UISDI_xilinx11, - DRP_ADD => MCB_UIADD_xilinx2, - DRP_BKST => MCB_UIBROADCAST_xilinx4, - DRP_SDO => MCB_UOSDO, - MCB_UIREAD => MCB_UIREAD_xilinx10 - ); - - init_sequence: if (C_SIMULATION = "FALSE") generate - process (UI_CLK, RST) begin - if (RST = '1') then - WAIT_200us_COUNTER <= (others => '0'); - elsif (UI_CLK'event and UI_CLK = '1') then - if (WAIT_200us_COUNTER(15) = '1') then - WAIT_200us_COUNTER <= WAIT_200us_COUNTER; - else - WAIT_200us_COUNTER <= WAIT_200us_COUNTER + '1'; - end if; - end if; - end process; - end generate; - - init_sequence_skip: if (C_SIMULATION = "TRUE") generate - WAIT_200us_COUNTER <= X"FFFF"; - end generate; - - - gen_CKE_Train_a: if (C_MEM_TYPE = "DDR2") generate - process (UI_CLK, RST) begin - if (RST = '1') then - CKE_Train <= '0'; - elsif (UI_CLK'event and UI_CLK = '1') then - if (STATE = WAIT_FOR_UODONE and MCB_UODONECAL = '1') then - CKE_Train <= '0'; - elsif (WAIT_200us_COUNTER(15) = '1' and MCB_UODONECAL = '0') then - CKE_Train <= '1'; - end if; - end if; - end process; - end generate ; - - gen_CKE_Train_b: if (C_MEM_TYPE /= "DDR2") generate - process (UI_CLK) begin - if (UI_CLK'event and UI_CLK = '1') then - CKE_Train <= '0'; - end if; - end process; - end generate ; - ---******************************************** --- PLL_LOCK and RST signals ---******************************************** - MCB_SYSRST <= Pre_SYSRST or RST_reg; -- Pre_SYSRST is generated from the STATE state machine, and is OR'd with RST_reg input to drive MCB's - -- SYSRST pin (MCB_SYSRST) - rst_tmp <= not(SELFREFRESH_MODE_xilinx11) and not(PLL_LOCK_R2); -- rst_tmp becomes 1 if you lose Lock and the device is not in SUSPEND - - process (UI_CLK, rst_tmp, RST) begin - if (rst_tmp = '1') then - Block_Reset <= '0'; - RstCounter <= (others => '0'); - elsif (RST = '1') then -- this is to deal with not allowing the user-reset "RST" to violate TZQINIT_MAXCNT (min time between resets -- to DDR3) - Block_Reset <= '0'; - RstCounter <= (others => '0'); - elsif (UI_CLK'event and UI_CLK = '1') then - Block_Reset <= '0'; -- default to allow STATE to move out of RST_DELAY state - if (Pre_SYSRST = '1') then - RstCounter <= RST_CNT; -- whenever STATE wants to reset the MCB, set RstCounter to h10 - else - if (RstCounter < TZQINIT_MAXCNT) then -- if RstCounter is less than d512 than this will execute - Block_Reset <= '1'; -- STATE won't exit RST_DELAY state - RstCounter <= RstCounter + "1"; -- and Rst_Counter increments - end if; - end if; - end if; - end process; - - non_violating_rst <= RST and Rst_condition1; - process (UI_CLK) begin - if (UI_CLK'event and UI_CLK = '1') then - if (RstCounter >= TZQINIT_MAXCNT) then - Rst_condition1 <= '1'; - else - Rst_condition1 <= '0'; - end if; - end if; - end process; - - - - process (UI_CLK) begin - if (UI_CLK'event and UI_CLK = '1') then - - if (RstCounter < RST_CNT) then - Rst_condition2 <= '1'; - else - Rst_condition2 <= '0'; - end if; - end if; - end process; - - process (UI_CLK, non_violating_rst) begin - if (non_violating_rst = '1') then - RST_reg <= '1'; -- STATE and MCB_SYSRST will both be reset if you lose lock when the device is not in SUSPEND - elsif (UI_CLK'event and UI_CLK = '1') then - if (WAIT_200us_COUNTER(15) = '0') then - RST_reg <= '0'; - else - RST_reg <= Rst_condition2 or rst_tmp; -- insures RST_reg is at least h10 pulses long - end if; - end if; - end process; - - ---******************************************** --- SUSPEND Logic ---******************************************** - process (UI_CLK) - begin - if (UI_CLK'event and UI_CLK = '1') then - -- SELFREFRESH_MCB_MODE is clocked by sysclk_2x_180 - SELFREFRESH_MCB_MODE_R1 <= SELFREFRESH_MCB_MODE; - SELFREFRESH_MCB_MODE_R2 <= SELFREFRESH_MCB_MODE_R1; - SELFREFRESH_MCB_MODE_R3 <= SELFREFRESH_MCB_MODE_R2; - - -- SELFREFRESH_REQ is clocked by user's application clock - SELFREFRESH_REQ_R1 <= SELFREFRESH_REQ; - SELFREFRESH_REQ_R2 <= SELFREFRESH_REQ_R1; - SELFREFRESH_REQ_R3 <= SELFREFRESH_REQ_R2; - - PLL_LOCK_R1 <= PLL_LOCK; - PLL_LOCK_R2 <= PLL_LOCK_R1; - - end if; - end process; - --- SELFREFRESH should only be deasserted after PLL_LOCK is asserted. --- This is to make sure MCB get a locked sys_2x_clk before exiting --- SELFREFRESH mode. - process (UI_CLK) - begin - if (UI_CLK'event and UI_CLK = '1') then - if (RST = '1') then - SELFREFRESH_MCB_REQ <= '0'; - elsif ((PLL_LOCK_R2 = '1') and (SELFREFRESH_REQ_R1 = '0') and (STATE = START_DYN_CAL)) then - SELFREFRESH_MCB_REQ <= '0'; - elsif ((STATE = START_DYN_CAL) and (SELFREFRESH_REQ_R1 = '1')) then - SELFREFRESH_MCB_REQ <= '1'; - end if; - end if; - end process; - - process (UI_CLK) - begin - if (UI_CLK'event and UI_CLK = '1') then - if (RST = '1') then - WAIT_SELFREFRESH_EXIT_DQS_CAL <= '0'; - elsif ((SELFREFRESH_MCB_MODE_R2 = '1') and (SELFREFRESH_MCB_MODE_R3 = '0')) then - WAIT_SELFREFRESH_EXIT_DQS_CAL <= '1'; - elsif ((WAIT_SELFREFRESH_EXIT_DQS_CAL = '1') and (SELFREFRESH_REQ_R3 = '0') and (PERFORM_START_DYN_CAL_AFTER_SELFREFRESH = '1')) then - -- START_DYN_CAL is next state - WAIT_SELFREFRESH_EXIT_DQS_CAL <= '0'; - end if; - end if; - end process; - --- Need to detect when SM entering START_DYN_CAL - process (UI_CLK) - begin - if (UI_CLK'event and UI_CLK = '1') then - if (RST = '1') then - PERFORM_START_DYN_CAL_AFTER_SELFREFRESH <= '0'; - START_DYN_CAL_STATE_R1 <= '0'; - else - -- register PERFORM_START_DYN_CAL_AFTER_SELFREFRESH to detect end of cycle - PERFORM_START_DYN_CAL_AFTER_SELFREFRESH_R1 <= PERFORM_START_DYN_CAL_AFTER_SELFREFRESH; - if (STATE = START_DYN_CAL) then - START_DYN_CAL_STATE_R1 <= '1'; - else - START_DYN_CAL_STATE_R1 <= '0'; - end if; - if ((WAIT_SELFREFRESH_EXIT_DQS_CAL = '1') and (STATE /= START_DYN_CAL) and (START_DYN_CAL_STATE_R1 = '1')) then - PERFORM_START_DYN_CAL_AFTER_SELFREFRESH <= '1'; - elsif ((STATE = START_DYN_CAL) and (START_DYN_CAL_STATE_R1 = '0')) then - PERFORM_START_DYN_CAL_AFTER_SELFREFRESH <= '0'; - end if; - end if; - end if; - end process; - --- SELFREFRESH_MCB_MODE deasserted status is hold off --- until Soft_Calib has at least done one loop of DQS update. - process (UI_CLK) - begin - if (UI_CLK'event and UI_CLK = '1') then - if (RST = '1') then - SELFREFRESH_MODE_xilinx11 <= '0'; - elsif (SELFREFRESH_MCB_MODE_R2 = '1') then - SELFREFRESH_MODE_xilinx11 <= '1'; - elsif ((PERFORM_START_DYN_CAL_AFTER_SELFREFRESH = '0') and (PERFORM_START_DYN_CAL_AFTER_SELFREFRESH_R1 = '1')) then - SELFREFRESH_MODE_xilinx11 <= '0'; - end if; - end if; - end process; - ---******************************************** ---Comparitor for Dynamic Calibration circuit ---******************************************** - Dec_Flag <= '1' when (TARGET_DQS_DELAY < DQS_DELAY) else '0'; - Inc_Flag <= '1' when (TARGET_DQS_DELAY > DQS_DELAY) else '0'; - ---********************************************************************************************* ---Counter for extra clock cycles injected after setting Calibrate bit in IODRP2 for Dynamic Cal ---********************************************************************************************* - process (UI_CLK) - begin - if (UI_CLK'event and UI_CLK = '1') then - if (RST_reg = '1') then - count <= "000000"; - elsif (counter_en = '1') then - count <= count + "000001"; - else - count <= "000000"; - end if; - end if; - end process; - ---********************************************************************************************* --- Capture narrow MCB_UODATAVALID pulse - only one sysclk90 cycle wide ---********************************************************************************************* - process (UI_CLK, MCB_UODATAVALID) - begin - if(MCB_UODATAVALID = '1') then - MCB_UODATAVALID_U <= '1'; - elsif(UI_CLK'event and UI_CLK = '1') then - MCB_UODATAVALID_U <= MCB_UODATAVALID; - end if; - end process; - ---************************************************************************************************************** ---Always block to mux SDI, SDO, CS, and ADD depending on which IODRP is active: RZQ, ZIO or MCB's UI port (to IODRP2_MCBs) ---************************************************************************************************************** - process (Active_IODRP, IODRP_CS, RZQ_IODRP_SDO, ZIO_IODRP_SDO) - begin - case Active_IODRP is - when RZQ => - RZQ_IODRP_CS <= IODRP_CS; - ZIO_IODRP_CS <= '0'; - IODRP_SDO <= RZQ_IODRP_SDO; - when ZIO => - RZQ_IODRP_CS <= '0'; - ZIO_IODRP_CS <= IODRP_CS; - IODRP_SDO <= ZIO_IODRP_SDO; - when MCB_PORT => - RZQ_IODRP_CS <= '0'; - ZIO_IODRP_CS <= '0'; - IODRP_SDO <= '0'; - when others => - RZQ_IODRP_CS <= '0'; - ZIO_IODRP_CS <= '0'; - IODRP_SDO <= '0'; - end case; - end process; - ---****************************************************************** ---State Machine's Always block / Case statement for Next State Logic --- ---The WAIT1,2,etc states were required after every state where the ---DRP controller was used to do a write to the IODRPs - this is because ---there's a clock cycle latency on IODRPCTRLR_RDY_BUSY_N whenever the DRP controller ---sees IODRPCTRLR_CMD_VALID go high. OFF_RZQ_PTERM and OFF_ZIO_NTERM were added ---soley for the purpose of reducing power, particularly on RZQ as ---that pin is expected to have a permanent external resistor to gnd. ---****************************************************************** - NEXT_STATE_LOGIC: process (UI_CLK) - begin - if (UI_CLK'event and UI_CLK = '1') then - if (RST_reg = '1') then -- Synchronous reset - MCB_CMD_VALID <= '0'; - MCB_UIADDR_xilinx3 <= "00000"; -- take control of UI/UO port - MCB_UICMDEN <= '1'; -- tells MCB that it is in Soft Cal. - MCB_UIDONECAL_xilinx7 <= '0'; - MCB_USE_BKST <= '0'; - MCB_UIDRPUPDATE <= '1'; - Pre_SYSRST <= '1'; -- keeps MCB in reset - IODRPCTRLR_CMD_VALID <= '0'; - IODRPCTRLR_MEMCELL_ADDR <= NoOp; - IODRPCTRLR_WRITE_DATA <= "00000000"; - IODRPCTRLR_R_WB <= WRITE_MODE; - IODRPCTRLR_USE_BKST <= '0'; - P_Term <= "000000"; - N_Term <= "0000000"; - P_Term_Prev <= "000000"; - N_Term_Prev <= "0000000"; - Active_IODRP <= RZQ; - MCB_UILDQSINC <= '0'; --no inc or dec - MCB_UIUDQSINC <= '0'; --no inc or dec - MCB_UILDQSDEC <= '0'; --no inc or dec - MCB_UIUDQSDEC <= '0'; - counter_en <= '0'; --flag that the First Dynamic Calibration completed - First_Dyn_Cal_Done <= '0'; - Max_Value_int <= "00000000"; - Max_Value_Previous <= "00000000"; - STATE <= START; - DQS_DELAY <= "00000000"; - DQS_DELAY_INITIAL <= "00000000"; - TARGET_DQS_DELAY <= "00000000"; - LastPass_DynCal <= IN_TERM_PASS; - First_In_Term_Done <= '0'; - MCB_UICMD <= '0'; - MCB_UICMDIN <= '0'; - MCB_UIDQCOUNT <= "0000"; - counter_inc <= "00000000"; - counter_dec <= "00000000"; - else - counter_en <= '0'; - IODRPCTRLR_CMD_VALID <= '0'; - IODRPCTRLR_MEMCELL_ADDR <= NoOp; - IODRPCTRLR_R_WB <= READ_MODE; - IODRPCTRLR_USE_BKST <= '0'; - MCB_CMD_VALID <= '0'; --no inc or dec - MCB_UILDQSINC <= '0'; --no inc or dec - MCB_UIUDQSINC <= '0'; --no inc or dec - MCB_UILDQSDEC <= '0'; --no inc or dec - MCB_UIUDQSDEC <= '0'; - MCB_USE_BKST <= '0'; - MCB_UICMDIN <= '0'; - DQS_DELAY <= DQS_DELAY; - TARGET_DQS_DELAY <= TARGET_DQS_DELAY; - - case STATE is - when START => --h00 - MCB_UICMDEN <= '1'; -- take control of UI/UO port - MCB_UIDONECAL_xilinx7 <= '0'; -- tells MCB that it is in Soft Cal. - P_Term <= "000000"; - N_Term <= "0000000"; - Pre_SYSRST <= '1'; -- keeps MCB in reset - LastPass_DynCal <= IN_TERM_PASS; - if (SKIP_IN_TERM_CAL = 1) then - STATE <= WRITE_CALIBRATE; - elsif (IODRPCTRLR_RDY_BUSY_N = '1') then - STATE <= LOAD_RZQ_NTERM; - else - STATE <= START; - end if; - --*************************** - -- IOB INPUT TERMINATION CAL - --*************************** - when LOAD_RZQ_NTERM => --h01 - Active_IODRP <= RZQ; - IODRPCTRLR_CMD_VALID <= '1'; - IODRPCTRLR_MEMCELL_ADDR <= NTerm; - IODRPCTRLR_WRITE_DATA <= ('0' & N_Term); - IODRPCTRLR_R_WB <= WRITE_MODE; - if (IODRPCTRLR_RDY_BUSY_N = '1') then - STATE <= LOAD_RZQ_NTERM; - else - STATE <= WAIT1; - end if; - - when WAIT1 => --h02 - if (IODRPCTRLR_RDY_BUSY_N = '0') then - STATE <= WAIT1; - else - STATE <= LOAD_RZQ_PTERM; - end if; - - when LOAD_RZQ_PTERM => --h03 - IODRPCTRLR_CMD_VALID <= '1'; - IODRPCTRLR_MEMCELL_ADDR <= PTerm; - IODRPCTRLR_WRITE_DATA <= ("00" & P_Term); - IODRPCTRLR_R_WB <= WRITE_MODE; - if (IODRPCTRLR_RDY_BUSY_N = '1') then - STATE <= LOAD_RZQ_PTERM; - else - STATE <= WAIT2; - end if; - - when WAIT2 => --h04 - if (IODRPCTRLR_RDY_BUSY_N = '0') then - STATE <= WAIT2; - elsif ((RZQ_IN = '1') or (P_Term = "111111")) then - STATE <= MULTIPLY_DIVIDE; -- LOAD_ZIO_PTERM - else - STATE <= INC_PTERM; - end if; - - when INC_PTERM => --h05 - P_Term <= P_Term + "000001"; - STATE <= LOAD_RZQ_PTERM; - - when MULTIPLY_DIVIDE => -- h06 - P_Term <= Mult_Divide(("00" & P_Term),MULT,DIV)(5 downto 0); - STATE <= LOAD_ZIO_PTERM; - - when LOAD_ZIO_PTERM => --h07 - Active_IODRP <= ZIO; - IODRPCTRLR_CMD_VALID <= '1'; - IODRPCTRLR_MEMCELL_ADDR <= PTerm; - IODRPCTRLR_WRITE_DATA <= ("00" & P_Term); - IODRPCTRLR_R_WB <= WRITE_MODE; - if (IODRPCTRLR_RDY_BUSY_N = '1') then - STATE <= LOAD_ZIO_PTERM; - else - STATE <= WAIT3; - end if; - - when WAIT3 => --h08 - if ((not(IODRPCTRLR_RDY_BUSY_N)) = '1') then - STATE <= WAIT3; - else - STATE <= LOAD_ZIO_NTERM; - end if; - - when LOAD_ZIO_NTERM => --h09 - Active_IODRP <= ZIO; - IODRPCTRLR_CMD_VALID <= '1'; - IODRPCTRLR_MEMCELL_ADDR <= NTerm; - IODRPCTRLR_WRITE_DATA <= ('0' & N_Term); - IODRPCTRLR_R_WB <= WRITE_MODE; - if (IODRPCTRLR_RDY_BUSY_N = '1') then - STATE <= LOAD_ZIO_NTERM; - else - STATE <= WAIT4; - end if; - - when WAIT4 => --h0A - if ((not(IODRPCTRLR_RDY_BUSY_N)) = '1') then - STATE <= WAIT4; - elsif (((not(ZIO_IN))) = '1' or (N_Term = "1111111")) then - if (PNSKEW = '1') then - STATE <= SKEW; - else - STATE <= WAIT_FOR_START_BROADCAST; - end if; - else - STATE <= INC_NTERM; - end if; - - when INC_NTERM => --h0B - N_Term <= N_Term + "0000001"; - STATE <= LOAD_ZIO_NTERM; - - when SKEW => -- h0C - P_Term <= Mult_Divide(("00" & P_Term), PSKEW_MULT, PSKEW_DIV)(5 downto 0); - N_Term <= Mult_Divide(('0' & N_Term), NSKEW_MULT, NSKEW_DIV)(6 downto 0); - STATE <= WAIT_FOR_START_BROADCAST; - - when WAIT_FOR_START_BROADCAST => --h0D - Pre_SYSRST <= '0'; -- release SYSRST, but keep UICMDEN=1 and UIDONECAL=0. This is needed to do Broadcast through UI interface, while - -- keeping the MCB in calibration mode - Active_IODRP <= MCB_PORT; - if ((START_BROADCAST and IODRPCTRLR_RDY_BUSY_N) = '1') then - if (P_Term /= P_Term_Prev) then - STATE <= BROADCAST_PTERM; - P_Term_Prev <= P_Term; - elsif (N_Term /= N_Term_Prev) then - N_Term_Prev <= N_Term; - STATE <= BROADCAST_NTERM; - else - STATE <= OFF_RZQ_PTERM; - end if; - else - STATE <= WAIT_FOR_START_BROADCAST; - end if; - - when BROADCAST_PTERM => --h0E - IODRPCTRLR_MEMCELL_ADDR <= PTerm; - IODRPCTRLR_WRITE_DATA <= ("00" & P_Term); - IODRPCTRLR_R_WB <= WRITE_MODE; - MCB_CMD_VALID <= '1'; - MCB_UIDRPUPDATE <= not First_In_Term_Done; -- Set the update flag if this is the first time through - MCB_USE_BKST <= '1'; - if (MCB_RDY_BUSY_N = '1') then - STATE <= BROADCAST_PTERM; - else - STATE <= WAIT5; - end if; - - when WAIT5 => --h0F - if ((not(MCB_RDY_BUSY_N)) = '1') then - STATE <= WAIT5; - elsif (First_In_Term_Done = '1') then -- If first time through is already set, then this must be dynamic in term - if (MCB_UOREFRSHFLAG = '1')then - MCB_UIDRPUPDATE <= '1'; - if (N_Term /= N_Term_Prev) then - N_Term_Prev <= N_Term; - STATE <= BROADCAST_NTERM; - else - STATE <= OFF_RZQ_PTERM; - end if; - else - STATE <= WAIT5; -- wait for a Refresh cycle - end if; - else - N_Term_Prev <= N_Term; - STATE <= BROADCAST_NTERM; - end if; - - when BROADCAST_NTERM => -- h10 - IODRPCTRLR_MEMCELL_ADDR <= NTerm; - IODRPCTRLR_WRITE_DATA <= ("0" & N_Term); - IODRPCTRLR_R_WB <= WRITE_MODE; - MCB_CMD_VALID <= '1'; - MCB_USE_BKST <= '1'; - MCB_UIDRPUPDATE <= not(First_In_Term_Done); -- Set the update flag if this is the first time through - if (MCB_RDY_BUSY_N = '1') then - STATE <= BROADCAST_NTERM; - else - STATE <= WAIT6; - end if; - - when WAIT6 => -- h11 - if (MCB_RDY_BUSY_N = '0') then - STATE <= WAIT6; - elsif (First_In_Term_Done = '1') then -- If first time through is already set, then this must be dynamic in term - if (MCB_UOREFRSHFLAG = '1')then - MCB_UIDRPUPDATE <= '1'; - STATE <= OFF_RZQ_PTERM; - else - STATE <= WAIT6; -- wait for a Refresh cycle - end if; - else - STATE <= OFF_RZQ_PTERM; - end if; - - when OFF_RZQ_PTERM => -- h12 - Active_IODRP <= RZQ; - IODRPCTRLR_CMD_VALID <= '1'; - IODRPCTRLR_MEMCELL_ADDR <= PTerm; - IODRPCTRLR_WRITE_DATA <= "00000000"; - IODRPCTRLR_R_WB <= WRITE_MODE; - P_Term <= "000000"; - N_Term <= "0000000"; - MCB_UIDRPUPDATE <= not(First_In_Term_Done); -- Set the update flag if this is the first time through - if (IODRPCTRLR_RDY_BUSY_N = '1') then - STATE <= OFF_RZQ_PTERM; - else - STATE <= WAIT7; - end if; - - when WAIT7 => -- h13 - if ((not(IODRPCTRLR_RDY_BUSY_N)) = '1') then - STATE <= WAIT7; - else - STATE <= OFF_ZIO_NTERM; - end if; - - when OFF_ZIO_NTERM => -- h14 - Active_IODRP <= ZIO; - IODRPCTRLR_CMD_VALID <= '1'; - IODRPCTRLR_MEMCELL_ADDR <= NTerm; - IODRPCTRLR_WRITE_DATA <= "00000000"; - IODRPCTRLR_R_WB <= WRITE_MODE; - if (IODRPCTRLR_RDY_BUSY_N = '1') then - STATE <= OFF_ZIO_NTERM; - else - STATE <= WAIT8; - end if; - - when WAIT8 => -- h15 - if (IODRPCTRLR_RDY_BUSY_N = '0') then - STATE <= WAIT8; - else - if (First_In_Term_Done = '1') then - STATE <= START_DYN_CAL; -- No need to reset the MCB if we are in InTerm tuning - else - STATE <= WRITE_CALIBRATE; -- go read the first Max_Value_int from RZQ - end if; - end if; - - when RST_DELAY => -- h16 - MCB_UICMDEN <= '0'; -- release control of UI/UO port - if (Block_Reset = '1') then -- this ensures that more than 512 clock cycles occur since the last reset after MCB_WRITE_CALIBRATE ??? - STATE <= RST_DELAY; - else - STATE <= START_DYN_CAL_PRE; - end if; - ---*************************** ---DYNAMIC CALIBRATION PORTION ---*************************** - when START_DYN_CAL_PRE => -- h17 - LastPass_DynCal <= IN_TERM_PASS; - MCB_UICMDEN <= '0'; -- release UICMDEN - MCB_UIDONECAL_xilinx7 <= '1'; -- release UIDONECAL - MCB will now initialize. - Pre_SYSRST <= '1'; -- SYSRST pulse - if (CALMODE_EQ_CALIBRATION = '0') then -- if C_MC_CALIBRATION_MODE is set to NOCALIBRATION - STATE <= START_DYN_CAL; -- we'll skip setting the DQS delays manually - else - STATE <= WAIT_FOR_UODONE; - end if; - - when WAIT_FOR_UODONE => -- h18 - Pre_SYSRST <= '0'; -- SYSRST pulse - if ((IODRPCTRLR_RDY_BUSY_N and MCB_UODONECAL) = '1')then --IODRP Controller needs to be ready, & MCB needs to be done with hard calibration - MCB_UICMDEN <= '1'; -- grab UICMDEN - DQS_DELAY_INITIAL <= Mult_Divide(Max_Value_int, DQS_NUMERATOR, DQS_DENOMINATOR); - STATE <= LDQS_WRITE_POS_INDELAY; - else - STATE <= WAIT_FOR_UODONE; - end if; - - when LDQS_WRITE_POS_INDELAY => -- h19 - IODRPCTRLR_MEMCELL_ADDR <= PosEdgeInDly; - IODRPCTRLR_R_WB <= WRITE_MODE; - IODRPCTRLR_WRITE_DATA <= DQS_DELAY_INITIAL; - MCB_UIADDR_xilinx3 <= IOI_LDQS_CLK; - MCB_CMD_VALID <= '1'; - if (MCB_RDY_BUSY_N = '1') then - STATE <= LDQS_WRITE_POS_INDELAY; - else - STATE <= LDQS_WAIT1; - end if; - - when LDQS_WAIT1 => -- h1A - if (MCB_RDY_BUSY_N = '0')then - STATE <= LDQS_WAIT1; - else - STATE <= LDQS_WRITE_NEG_INDELAY; - end if; - - when LDQS_WRITE_NEG_INDELAY => -- h1B - IODRPCTRLR_MEMCELL_ADDR <= NegEdgeInDly; - IODRPCTRLR_R_WB <= WRITE_MODE; - IODRPCTRLR_WRITE_DATA <= DQS_DELAY_INITIAL; - MCB_UIADDR_xilinx3 <= IOI_LDQS_CLK; - MCB_CMD_VALID <= '1'; - if (MCB_RDY_BUSY_N = '1')then - STATE <= LDQS_WRITE_NEG_INDELAY; - else - STATE <= LDQS_WAIT2; - end if; - - when LDQS_WAIT2 => -- 7'h1C - if(MCB_RDY_BUSY_N = '0')then - STATE <= LDQS_WAIT2; - else - STATE <= UDQS_WRITE_POS_INDELAY; - end if; - - when UDQS_WRITE_POS_INDELAY => -- 7'h1D - IODRPCTRLR_MEMCELL_ADDR <= PosEdgeInDly; - IODRPCTRLR_R_WB <= WRITE_MODE; - IODRPCTRLR_WRITE_DATA <= DQS_DELAY_INITIAL; - MCB_UIADDR_xilinx3 <= IOI_UDQS_CLK; - MCB_CMD_VALID <= '1'; - if (MCB_RDY_BUSY_N = '1')then - STATE <= UDQS_WRITE_POS_INDELAY; - else - STATE <= UDQS_WAIT1; - end if; - - when UDQS_WAIT1 => -- 7'h1E - if (MCB_RDY_BUSY_N = '0')then - STATE <= UDQS_WAIT1; - else - STATE <= UDQS_WRITE_NEG_INDELAY; - end if; - - when UDQS_WRITE_NEG_INDELAY => -- 7'h1F - IODRPCTRLR_MEMCELL_ADDR <= NegEdgeInDly; - IODRPCTRLR_R_WB <= WRITE_MODE; - IODRPCTRLR_WRITE_DATA <= DQS_DELAY_INITIAL; - MCB_UIADDR_xilinx3 <= IOI_UDQS_CLK; - MCB_CMD_VALID <= '1'; - if (MCB_RDY_BUSY_N = '1')then - STATE <= UDQS_WRITE_NEG_INDELAY; - else - STATE <= UDQS_WAIT2; - end if; - - when UDQS_WAIT2 => -- 7'h20 - if (MCB_RDY_BUSY_N = '0')then - STATE <= UDQS_WAIT2; - else - DQS_DELAY <= DQS_DELAY_INITIAL; - TARGET_DQS_DELAY <= DQS_DELAY_INITIAL; - STATE <= START_DYN_CAL; - end if; - - when START_DYN_CAL => -- h21 - Pre_SYSRST <= '0'; -- SYSRST not driven - counter_inc <= (others => '0'); - counter_dec <= (others => '0'); - if (SKIP_DYNAMIC_DQS_CAL = '1' and SKIP_DYN_IN_TERMINATION = '1')then - STATE <= DONE; --if we're skipping both dynamic algorythms, go directly to DONE - elsif ((IODRPCTRLR_RDY_BUSY_N = '1') and (MCB_UODONECAL = '1') and (SELFREFRESH_REQ_R1 = '0')) then - --IODRP Controller needs to be ready, & MCB needs to be done with hard calibration - -- Alternate between Dynamic Input Termination and Dynamic Tuning routines - if ((SKIP_DYN_IN_TERMINATION = '0') and (LastPass_DynCal = DYN_CAL_PASS)) then - LastPass_DynCal <= IN_TERM_PASS; - STATE <= LOAD_RZQ_NTERM; - else - LastPass_DynCal <= DYN_CAL_PASS; - STATE <= WRITE_CALIBRATE; - end if; - else - STATE <= START_DYN_CAL; - end if; - - when WRITE_CALIBRATE => -- h22 - Pre_SYSRST <= '0'; - IODRPCTRLR_CMD_VALID <= '1'; - IODRPCTRLR_MEMCELL_ADDR <= DelayControl; - IODRPCTRLR_WRITE_DATA <= "00100000"; - IODRPCTRLR_R_WB <= WRITE_MODE; - Active_IODRP <= RZQ; - if (IODRPCTRLR_RDY_BUSY_N = '1') then - STATE <= WRITE_CALIBRATE; - else - STATE <= WAIT9; - end if; - - when WAIT9 => -- h23 - counter_en <= '1'; - if (count < "100110") then -- this adds approximately 22 extra clock cycles after WRITE_CALIBRATE - STATE <= WAIT9; - else - STATE <= READ_MAX_VALUE; - end if; - - when READ_MAX_VALUE => -- h24 - IODRPCTRLR_CMD_VALID <= '1'; - IODRPCTRLR_MEMCELL_ADDR <= MaxValue; - IODRPCTRLR_R_WB <= READ_MODE; - Max_Value_Previous <= Max_Value_int; - if (IODRPCTRLR_RDY_BUSY_N = '1') then - STATE <= READ_MAX_VALUE; - else - STATE <= WAIT10; - end if; - - when WAIT10 => -- h25 - if (IODRPCTRLR_RDY_BUSY_N = '0') then - STATE <= WAIT10; - else - Max_Value_int <= IODRPCTRLR_READ_DATA; --record the Max_Value_int from the IODRP controller - if (First_In_Term_Done = '0') then - STATE <= RST_DELAY; - First_In_Term_Done <= '1'; - else - STATE <= ANALYZE_MAX_VALUE; - end if; - end if; - - when ANALYZE_MAX_VALUE => -- h26 only do a Inc or Dec during a REFRESH cycle. - if (First_Dyn_Cal_Done = '0')then - STATE <= FIRST_DYN_CAL; - elsif ((Max_Value_int < Max_Value_Previous) and (Max_Value_Delta_Dn >= INCDEC_THRESHOLD)) then - STATE <= DECREMENT; -- May need to Decrement - TARGET_DQS_DELAY <= Mult_Divide(Max_Value_int, DQS_NUMERATOR, DQS_DENOMINATOR); - -- DQS_COUNT_VIRTUAL updated (could be negative value) - elsif ((Max_Value_int > Max_Value_Previous) and (Max_Value_Delta_Up >= INCDEC_THRESHOLD)) then - STATE <= INCREMENT; -- May need to Increment - TARGET_DQS_DELAY <= Mult_Divide(Max_Value_int, DQS_NUMERATOR, DQS_DENOMINATOR); - else - Max_Value_int <= Max_Value_Previous; - STATE <= START_DYN_CAL; - end if; - - when FIRST_DYN_CAL => -- h27 - First_Dyn_Cal_Done <= '1'; -- set flag that the First Dynamic Calibration has been completed - STATE <= START_DYN_CAL; - - when INCREMENT => -- h28 - STATE <= START_DYN_CAL; -- Default case: Inc is not high or no longer in REFRSH - MCB_UILDQSINC <= '0'; -- Default case: no inc or dec - MCB_UIUDQSINC <= '0'; -- Default case: no inc or dec - MCB_UILDQSDEC <= '0'; -- Default case: no inc or dec - MCB_UIUDQSDEC <= '0'; -- Default case: no inc or dec - case Inc_Dec_REFRSH_Flag is -- {Increment_Flag,Decrement_Flag,MCB_UOREFRSHFLAG}, - when "101" => - counter_inc <= counter_inc + '1'; - STATE <= INCREMENT; -- Increment is still high, still in REFRSH cycle - if ((DQS_DELAY < DQS_DELAY_UPPER_LIMIT) and (counter_inc >= X"04")) then - -- if not at the upper limit yet, and you've waited 4 clks, increment - MCB_UILDQSINC <= '1'; - MCB_UIUDQSINC <= '1'; - DQS_DELAY <= DQS_DELAY + '1'; - end if; - when "100" => - if (DQS_DELAY < DQS_DELAY_UPPER_LIMIT) then - STATE <= INCREMENT; -- Increment is still high, REFRESH ended - wait for next REFRESH - end if; - when others => - STATE <= START_DYN_CAL; - end case; - - when DECREMENT => -- h29 - STATE <= START_DYN_CAL; -- Default case: Dec is not high or no longer in REFRSH - MCB_UILDQSINC <= '0'; -- Default case: no inc or dec - MCB_UIUDQSINC <= '0'; -- Default case: no inc or dec - MCB_UILDQSDEC <= '0'; -- Default case: no inc or dec - MCB_UIUDQSDEC <= '0'; -- Default case: no inc or dec - if (DQS_DELAY /= "00000000") then - case Inc_Dec_REFRSH_Flag is -- {Increment_Flag,Decrement_Flag,MCB_UOREFRSHFLAG}, - when "011" => - counter_dec <= counter_dec + '1'; - STATE <= DECREMENT; -- Decrement is still high, still in REFRSH cycle - if ((DQS_DELAY > DQS_DELAY_LOWER_LIMIT) and (counter_dec >= X"04")) then - -- if not at the lower limit, and you've waited 4 clks, decrement - MCB_UILDQSDEC <= '1'; -- decrement - MCB_UIUDQSDEC <= '1'; -- decrement - DQS_DELAY <= DQS_DELAY - '1'; -- SBS - end if; - when "010" => - if (DQS_DELAY > DQS_DELAY_LOWER_LIMIT) then --if not at the lower limit, decrement - STATE <= DECREMENT; --Decrement is still high, REFRESH ended - wait for next REFRESH - end if; - when others => - STATE <= START_DYN_CAL; - end case; - end if; - - when DONE => -- h2A - Pre_SYSRST <= '0'; -- SYSRST cleared - MCB_UICMDEN <= '0'; -- release UICMDEN - STATE <= DONE; - - when others => - MCB_UICMDEN <= '0'; -- release UICMDEN - MCB_UIDONECAL_xilinx7 <= '1'; -- release UIDONECAL - MCB will now initialize. - Pre_SYSRST <= '0'; -- SYSRST not driven - IODRPCTRLR_CMD_VALID <= '0'; - IODRPCTRLR_MEMCELL_ADDR <= "00000000"; - IODRPCTRLR_WRITE_DATA <= "00000000"; - IODRPCTRLR_R_WB <= '0'; - IODRPCTRLR_USE_BKST <= '0'; - P_Term <= "000000"; - N_Term <= "0000000"; - Active_IODRP <= ZIO; - Max_Value_Previous <= "00000000"; - MCB_UILDQSINC <= '0'; -- no inc or dec - MCB_UIUDQSINC <= '0'; -- no inc or dec - MCB_UILDQSDEC <= '0'; -- no inc or dec - MCB_UIUDQSDEC <= '0'; -- no inc or dec - counter_en <= '0'; - First_Dyn_Cal_Done <= '0'; -- flag that the First Dynamic Calibration completed - Max_Value_int <= Max_Value_int; - STATE <= START; - end case; - end if; - end if; - end process; - -end architecture trans; - -
ipcore_dir/mem0/user_design/rtl/mcb_soft_calibration.vhd Property changes : Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Index: ipcore_dir/mem0/user_design/rtl/iodrp_controller.vhd =================================================================== --- ipcore_dir/mem0/user_design/rtl/iodrp_controller.vhd (revision 5) +++ ipcore_dir/mem0/user_design/rtl/iodrp_controller.vhd (nonexistent) @@ -1,372 +0,0 @@ ---***************************************************************************** --- (c) Copyright 2009 Xilinx, Inc. All rights reserved. --- --- This file contains confidential and proprietary information --- of Xilinx, Inc. and is protected under U.S. and --- international copyright and other intellectual property --- laws. --- --- DISCLAIMER --- This disclaimer is not a license and does not grant any --- rights to the materials distributed herewith. Except as --- otherwise provided in a valid license issued to you by --- Xilinx, and to the maximum extent permitted by applicable --- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND --- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES --- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING --- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- --- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and --- (2) Xilinx shall not be liable (whether in contract or tort, --- including negligence, or under any other theory of --- liability) for any loss or damage of any kind or nature --- related to, arising under or in connection with these --- materials, including for any direct, or any indirect, --- special, incidental, or consequential loss or damage --- (including loss of data, profits, goodwill, or any type of --- loss or damage suffered as a result of any action brought --- by a third party) even if such damage or loss was --- reasonably foreseeable or Xilinx had been advised of the --- possibility of the same. --- --- CRITICAL APPLICATIONS --- Xilinx products are not designed or intended to be fail- --- safe, or for use in any application requiring fail-safe --- performance, such as life-support or safety devices or --- systems, Class III medical devices, nuclear facilities, --- applications related to the deployment of airbags, or any --- other applications that could lead to death, personal --- injury, or severe property or environmental damage --- (individually and collectively, "Critical --- Applications"). Customer assumes the sole risk and --- liability of any use of Xilinx products in Critical --- Applications, subject only to applicable laws and --- regulations governing limitations on product liability. --- --- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS --- PART OF THIS FILE AT ALL TIMES. --- ---***************************************************************************** --- ____ ____ --- / /\/ / --- /___/ \ / Vendor: Xilinx --- \ \ \/ Version: %version --- \ \ Application: MIG --- / / Filename: iodrp_controller.vhd --- /___/ /\ Date Last Modified: $Date: 2010/03/21 17:21:17 $ --- \ \ / \ Date Created: Mon Feb 9 2009 --- \___\/\___\ --- ---Device: Spartan6 ---Design Name: DDR/DDR2/DDR3/LPDDR ---Purpose: Xilinx reference design for IODRP controller for v0.9 device --- ---Reference: --- --- Revision: Date: Comment --- 1.0: 02/06/09: Initial version for MIG wrapper. --- 1.1: 02/01/09: updates to indentations. --- 1.2: 02/12/09: changed non-blocking assignments to blocking ones --- for state machine always block. Also, assigned --- intial value to load_shift_n to avoid latch --- End Revision ---******************************************************************************* - -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - -entity iodrp_controller is - --output to IODRP SDI pin - --input from IODRP SDO pin - - -- Register where memcell_address is captured during the READY state - -- Register which stores the write data until it is ready to be shifted out - -- The shift register which shifts out SDO and shifts in SDI. - -- This register is loaded before the address or data phase, but continues - -- to shift for a writeback of read data - -- The signal which causes shift_through_reg to load the new value from data_out_mux, or continue to shift data in from DRP_SDO - -- The signal which indicates where the shift_through_reg should load from. 0 -> data_reg 1 -> memcell_addr_reg - -- The counter for which bit is being shifted during address or data phase - -- This is set after the first address phase has executed - - -- (* FSM_ENCODING="GRAY" *) reg [2:0] state, nextstate; - - -- The mux which selects between data_reg and memcell_addr_reg for sending to shift_through_reg - -- added so that DRP_SDI output is only active when DRP_CS is active - - port ( - memcell_address : in std_logic_vector(7 downto 0); - write_data : in std_logic_vector(7 downto 0); - read_data : out std_logic_vector(7 downto 0); - rd_not_write : in std_logic; - cmd_valid : in std_logic; - rdy_busy_n : out std_logic; - use_broadcast : in std_logic; - sync_rst : in std_logic; - DRP_CLK : in std_logic; - DRP_CS : out std_logic; - DRP_SDI : out std_logic; - DRP_ADD : out std_logic; - DRP_BKST : out std_logic; - DRP_SDO : in std_logic - ); -end entity iodrp_controller; - -architecture trans of iodrp_controller is - - - constant READY : std_logic_vector(2 downto 0) := "000"; - constant DECIDE : std_logic_vector(2 downto 0) := "001"; - constant ADDR_PHASE : std_logic_vector(2 downto 0) := "010"; - constant ADDR_TO_DATA_GAP : std_logic_vector(2 downto 0) := "011"; - constant ADDR_TO_DATA_GAP2 : std_logic_vector(2 downto 0) := "100"; - constant ADDR_TO_DATA_GAP3 : std_logic_vector(2 downto 0) := "101"; - constant DATA_PHASE : std_logic_vector(2 downto 0) := "110"; - constant ALMOST_READY : std_logic_vector(2 downto 0) := "111"; - - constant IOI_DQ0 : std_logic_vector(4 downto 0) := "00001"; - constant IOI_DQ1 : std_logic_vector(4 downto 0) := "00000"; - constant IOI_DQ2 : std_logic_vector(4 downto 0) := "00011"; - constant IOI_DQ3 : std_logic_vector(4 downto 0) := "00010"; - constant IOI_DQ4 : std_logic_vector(4 downto 0) := "00101"; - constant IOI_DQ5 : std_logic_vector(4 downto 0) := "00100"; - constant IOI_DQ6 : std_logic_vector(4 downto 0) := "00111"; - constant IOI_DQ7 : std_logic_vector(4 downto 0) := "00110"; - constant IOI_DQ8 : std_logic_vector(4 downto 0) := "01001"; - constant IOI_DQ9 : std_logic_vector(4 downto 0) := "01000"; - constant IOI_DQ10 : std_logic_vector(4 downto 0) := "01011"; - constant IOI_DQ11 : std_logic_vector(4 downto 0) := "01010"; - constant IOI_DQ12 : std_logic_vector(4 downto 0) := "01101"; - constant IOI_DQ13 : std_logic_vector(4 downto 0) := "01100"; - constant IOI_DQ14 : std_logic_vector(4 downto 0) := "01111"; - constant IOI_DQ15 : std_logic_vector(4 downto 0) := "01110"; - constant IOI_UDQS_CLK : std_logic_vector(4 downto 0) := "11101"; - constant IOI_UDQS_PIN : std_logic_vector(4 downto 0) := "11100"; - constant IOI_LDQS_CLK : std_logic_vector(4 downto 0) := "11111"; - constant IOI_LDQS_PIN : std_logic_vector(4 downto 0) := "11110"; - - - - - signal memcell_addr_reg : std_logic_vector(7 downto 0); - signal data_reg : std_logic_vector(7 downto 0); - signal shift_through_reg : std_logic_vector(7 downto 0); - signal load_shift_n : std_logic; - signal addr_data_sel_n : std_logic; - signal bit_cnt : std_logic_vector(2 downto 0); - signal rd_not_write_reg : std_logic; - signal AddressPhase : std_logic; - signal capture_read_data : std_logic; - signal state : std_logic_vector(2 downto 0); - signal nextstate : std_logic_vector(2 downto 0); - signal data_out_mux : std_logic_vector(7 downto 0); - signal DRP_SDI_pre : std_logic; - - signal ALMOST_READY_ST : std_logic; - signal ADDR_PHASE_ST : std_logic; - signal BIT_CNT7 : std_logic; - signal ADDR_PHASE_ST1 : std_logic; - signal DATA_PHASE_ST : std_logic; - - signal state_ascii : std_logic_vector(32 * 8 - 1 downto 0); -begin - --synthesis translate_off - --- process (state) --- begin --- case state is --- when READY => --- state_ascii <= "READY"; --- when DECIDE => --- state_ascii <= "DECIDE"; --- when ADDR_PHASE => --- state_ascii <= "ADDR_PHASE"; --- when ADDR_TO_DATA_GAP => --- state_ascii <= "ADDR_TO_DATA_GAP"; --- when ADDR_TO_DATA_GAP2 => --- state_ascii <= "ADDR_TO_DATA_GAP2"; --- when ADDR_TO_DATA_GAP3 => --- state_ascii <= "ADDR_TO_DATA_GAP3"; --- when DATA_PHASE => --- state_ascii <= "DATA_PHASE"; --- when ALMOST_READY => -- case(state) --- state_ascii <= "ALMOST_READY"; --- when others => --- null; --- end case; --- end process; - - --synthesis translate_on - - process (DRP_CLK) - begin - if (DRP_CLK'event and DRP_CLK = '1') then - if (state = READY) then - memcell_addr_reg <= memcell_address; - data_reg <= write_data; - rd_not_write_reg <= rd_not_write; - end if; - end if; - end process; - - - rdy_busy_n <= '1' when (state = READY) else '0'; - - data_out_mux <= memcell_addr_reg when (addr_data_sel_n = '1') else - data_reg; - - process (DRP_CLK) - begin - if (DRP_CLK'event and DRP_CLK = '1') then - if (sync_rst = '1') then - shift_through_reg <= "00000000"; - else - if (load_shift_n = '1') then --Assume the shifter is either loading or shifting, bit 0 is shifted out first - shift_through_reg <= data_out_mux; - else - shift_through_reg <= (DRP_SDO & shift_through_reg(7 downto 1)); - end if; - end if; - end if; - end process; - - - process (DRP_CLK) - begin - if (DRP_CLK'event and DRP_CLK = '1') then - if (((state = ADDR_PHASE) or (state = DATA_PHASE)) and (not(sync_rst)) = '1') then - bit_cnt <= bit_cnt + "001"; - else - bit_cnt <= "000"; - end if; - end if; - end process; - - - process (DRP_CLK) - begin - if (DRP_CLK'event and DRP_CLK = '1') then - if (sync_rst = '1') then - -- capture_read_data <= 1'b0; - read_data <= "00000000"; - else - -- capture_read_data <= (state == DATA_PHASE); - -- if(capture_read_data) - if (state = ALMOST_READY) then - -- else - -- read_data <= read_data; - read_data <= shift_through_reg; - end if; - end if; - end if; - end process; - - ALMOST_READY_ST <= '1' when state = ALMOST_READY else '0'; - ADDR_PHASE_ST <= '1' when state = ADDR_PHASE else '0'; - BIT_CNT7 <= '1' when bit_cnt = "111" else '0'; - - process (DRP_CLK) - begin - if (DRP_CLK'event and DRP_CLK = '1') then - if (sync_rst = '1') then - AddressPhase <= '0'; - else - if (AddressPhase = '1') then - -- Keep it set until we finish the cycle - AddressPhase <= AddressPhase and (not ALMOST_READY_ST); - else - -- set the address phase when ever we finish the address phase - AddressPhase <= (ADDR_PHASE_ST and BIT_CNT7); - end if; - end if; - end if; - end process; - -ADDR_PHASE_ST1 <= '1' when nextstate = ADDR_PHASE else '0'; -DATA_PHASE_ST <= '1' when nextstate = DATA_PHASE else '0'; - - process (DRP_CLK) - begin - if (DRP_CLK'event and DRP_CLK = '1') then - DRP_ADD <= ADDR_PHASE_ST1; - DRP_CS <= ADDR_PHASE_ST1 or DATA_PHASE_ST; - if (state = READY) then - DRP_BKST <= use_broadcast; - end if; - end if; - end process; - - - -- assign DRP_SDI_pre = (DRP_CS)? shift_through_reg[0] : 1'b0; //if DRP_CS is inactive, just drive 0 out - this is a possible place to pipeline for increased performance - -- assign DRP_SDI = (rd_not_write_reg & DRP_CS & !DRP_ADD)? DRP_SDO : DRP_SDI_pre; //If reading, then feed SDI back out SDO - this is a possible place to pipeline for increased performance - DRP_SDI <= shift_through_reg(0); -- The new read method only requires that we shift out the address and the write data - - process (state, cmd_valid, bit_cnt, rd_not_write_reg, AddressPhase,BIT_CNT7) - begin - addr_data_sel_n <= '0'; - load_shift_n <= '0'; - case state is - when READY => - if (cmd_valid = '1') then - nextstate <= DECIDE; - else - nextstate <= READY; - end if; - when DECIDE => - load_shift_n <= '1'; - addr_data_sel_n <= '1'; - nextstate <= ADDR_PHASE; - -- After the second pass go to end of statemachine - -- execute a second address phase for the read access. - when ADDR_PHASE => - if (BIT_CNT7 = '1') then - if (rd_not_write_reg = '1') then - if (AddressPhase = '1') then - nextstate <= ALMOST_READY; - else - nextstate <= DECIDE; - end if; - else - nextstate <= ADDR_TO_DATA_GAP; - end if; - else - nextstate <= ADDR_PHASE; - end if; - when ADDR_TO_DATA_GAP => - load_shift_n <= '1'; - nextstate <= ADDR_TO_DATA_GAP2; - when ADDR_TO_DATA_GAP2 => - load_shift_n <= '1'; - nextstate <= ADDR_TO_DATA_GAP3; - when ADDR_TO_DATA_GAP3 => - load_shift_n <= '1'; - nextstate <= DATA_PHASE; - when DATA_PHASE => - if (BIT_CNT7 = '1') then - nextstate <= ALMOST_READY; - else - nextstate <= DATA_PHASE; - end if; - when ALMOST_READY => - nextstate <= READY; - when others => - nextstate <= READY; - end case; - end process; - - - process (DRP_CLK) - begin - if (DRP_CLK'event and DRP_CLK = '1') then - if (sync_rst = '1') then - state <= READY; - else - state <= nextstate; - end if; - end if; - end process; - - -end architecture trans; - -
ipcore_dir/mem0/user_design/rtl/iodrp_controller.vhd Property changes : Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Index: ipcore_dir/mem0/user_design/rtl/mem0.vhd =================================================================== --- ipcore_dir/mem0/user_design/rtl/mem0.vhd (revision 5) +++ ipcore_dir/mem0/user_design/rtl/mem0.vhd (nonexistent) @@ -1,832 +0,0 @@ ---***************************************************************************** --- (c) Copyright 2009 Xilinx, Inc. All rights reserved. --- --- This file contains confidential and proprietary information --- of Xilinx, Inc. and is protected under U.S. and --- international copyright and other intellectual property --- laws. --- --- DISCLAIMER --- This disclaimer is not a license and does not grant any --- rights to the materials distributed herewith. Except as --- otherwise provided in a valid license issued to you by --- Xilinx, and to the maximum extent permitted by applicable --- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND --- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES --- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING --- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- --- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and --- (2) Xilinx shall not be liable (whether in contract or tort, --- including negligence, or under any other theory of --- liability) for any loss or damage of any kind or nature --- related to, arising under or in connection with these --- materials, including for any direct, or any indirect, --- special, incidental, or consequential loss or damage --- (including loss of data, profits, goodwill, or any type of --- loss or damage suffered as a result of any action brought --- by a third party) even if such damage or loss was --- reasonably foreseeable or Xilinx had been advised of the --- possibility of the same. --- --- CRITICAL APPLICATIONS --- Xilinx products are not designed or intended to be fail- --- safe, or for use in any application requiring fail-safe --- performance, such as life-support or safety devices or --- systems, Class III medical devices, nuclear facilities, --- applications related to the deployment of airbags, or any --- other applications that could lead to death, personal --- injury, or severe property or environmental damage --- (individually and collectively, "Critical --- Applications"). Customer assumes the sole risk and --- liability of any use of Xilinx products in Critical --- Applications, subject only to applicable laws and --- regulations governing limitations on product liability. --- --- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS --- PART OF THIS FILE AT ALL TIMES. --- ---***************************************************************************** --- ____ ____ --- / /\/ / --- /___/ \ / Vendor : Xilinx --- \ \ \/ Version : 3.5 --- \ \ Application : MIG --- / / Filename : mem0.vhd --- /___/ /\ Date Last Modified : $Date: 2010/05/18 11:08:59 $ --- \ \ / \ Date Created : Jul 03 2009 --- \___\/\___\ --- ---Device : Spartan-6 ---Design Name : DDR/DDR2/DDR3/LPDDR ---Purpose : This is the design top level. which instantiates top wrapper, --- test bench top and infrastructure modules. ---Reference : ---Revision History : ---***************************************************************************** -library ieee; -use ieee.std_logic_1164.all; -entity mem0 is -generic - ( - C3_P0_MASK_SIZE : integer := 4; - C3_P0_DATA_PORT_SIZE : integer := 32; - C3_P1_MASK_SIZE : integer := 4; - C3_P1_DATA_PORT_SIZE : integer := 32; - C3_MEMCLK_PERIOD : integer := 5000; - C3_RST_ACT_LOW : integer := 0; - C3_INPUT_CLK_TYPE : string := "SINGLE_ENDED"; - C3_CALIB_SOFT_IP : string := "TRUE"; - C3_SIMULATION : string := "FALSE"; - DEBUG_EN : integer := 0; - C3_MEM_ADDR_ORDER : string := "ROW_BANK_COLUMN"; - C3_NUM_DQ_PINS : integer := 16; - C3_MEM_ADDR_WIDTH : integer := 13; - C3_MEM_BANKADDR_WIDTH : integer := 2 - ); - - port - ( - - mcb3_dram_dq : inout std_logic_vector(C3_NUM_DQ_PINS-1 downto 0); - mcb3_dram_a : out std_logic_vector(C3_MEM_ADDR_WIDTH-1 downto 0); - mcb3_dram_ba : out std_logic_vector(C3_MEM_BANKADDR_WIDTH-1 downto 0); - mcb3_dram_cke : out std_logic; - mcb3_dram_ras_n : out std_logic; - mcb3_dram_cas_n : out std_logic; - mcb3_dram_we_n : out std_logic; - mcb3_dram_dm : out std_logic; - mcb3_dram_udqs : inout std_logic; - mcb3_rzq : inout std_logic; - mcb3_dram_udm : out std_logic; - c3_sys_clk : in std_logic; - c3_sys_rst_n : in std_logic; - c3_calib_done : out std_logic; - c3_clk0 : out std_logic; - c3_rst0 : out std_logic; - mcb3_dram_dqs : inout std_logic; - mcb3_dram_ck : out std_logic; - mcb3_dram_ck_n : out std_logic; - c3_p0_cmd_clk : in std_logic; - c3_p0_cmd_en : in std_logic; - c3_p0_cmd_instr : in std_logic_vector(2 downto 0); - c3_p0_cmd_bl : in std_logic_vector(5 downto 0); - c3_p0_cmd_byte_addr : in std_logic_vector(29 downto 0); - c3_p0_cmd_empty : out std_logic; - c3_p0_cmd_full : out std_logic; - c3_p0_wr_clk : in std_logic; - c3_p0_wr_en : in std_logic; - c3_p0_wr_mask : in std_logic_vector(C3_P0_MASK_SIZE - 1 downto 0); - c3_p0_wr_data : in std_logic_vector(C3_P0_DATA_PORT_SIZE - 1 downto 0); - c3_p0_wr_full : out std_logic; - c3_p0_wr_empty : out std_logic; - c3_p0_wr_count : out std_logic_vector(6 downto 0); - c3_p0_wr_underrun : out std_logic; - c3_p0_wr_error : out std_logic; - c3_p0_rd_clk : in std_logic; - c3_p0_rd_en : in std_logic; - c3_p0_rd_data : out std_logic_vector(C3_P0_DATA_PORT_SIZE - 1 downto 0); - c3_p0_rd_full : out std_logic; - c3_p0_rd_empty : out std_logic; - c3_p0_rd_count : out std_logic_vector(6 downto 0); - c3_p0_rd_overflow : out std_logic; - c3_p0_rd_error : out std_logic; - c3_p1_cmd_clk : in std_logic; - c3_p1_cmd_en : in std_logic; - c3_p1_cmd_instr : in std_logic_vector(2 downto 0); - c3_p1_cmd_bl : in std_logic_vector(5 downto 0); - c3_p1_cmd_byte_addr : in std_logic_vector(29 downto 0); - c3_p1_cmd_empty : out std_logic; - c3_p1_cmd_full : out std_logic; - c3_p1_wr_clk : in std_logic; - c3_p1_wr_en : in std_logic; - c3_p1_wr_mask : in std_logic_vector(C3_P1_MASK_SIZE - 1 downto 0); - c3_p1_wr_data : in std_logic_vector(C3_P1_DATA_PORT_SIZE - 1 downto 0); - c3_p1_wr_full : out std_logic; - c3_p1_wr_empty : out std_logic; - c3_p1_wr_count : out std_logic_vector(6 downto 0); - c3_p1_wr_underrun : out std_logic; - c3_p1_wr_error : out std_logic; - c3_p1_rd_clk : in std_logic; - c3_p1_rd_en : in std_logic; - c3_p1_rd_data : out std_logic_vector(C3_P1_DATA_PORT_SIZE - 1 downto 0); - c3_p1_rd_full : out std_logic; - c3_p1_rd_empty : out std_logic; - c3_p1_rd_count : out std_logic_vector(6 downto 0); - c3_p1_rd_overflow : out std_logic; - c3_p1_rd_error : out std_logic; - c3_p2_cmd_clk : in std_logic; - c3_p2_cmd_en : in std_logic; - c3_p2_cmd_instr : in std_logic_vector(2 downto 0); - c3_p2_cmd_bl : in std_logic_vector(5 downto 0); - c3_p2_cmd_byte_addr : in std_logic_vector(29 downto 0); - c3_p2_cmd_empty : out std_logic; - c3_p2_cmd_full : out std_logic; - c3_p2_wr_clk : in std_logic; - c3_p2_wr_en : in std_logic; - c3_p2_wr_mask : in std_logic_vector(3 downto 0); - c3_p2_wr_data : in std_logic_vector(31 downto 0); - c3_p2_wr_full : out std_logic; - c3_p2_wr_empty : out std_logic; - c3_p2_wr_count : out std_logic_vector(6 downto 0); - c3_p2_wr_underrun : out std_logic; - c3_p2_wr_error : out std_logic; - c3_p3_cmd_clk : in std_logic; - c3_p3_cmd_en : in std_logic; - c3_p3_cmd_instr : in std_logic_vector(2 downto 0); - c3_p3_cmd_bl : in std_logic_vector(5 downto 0); - c3_p3_cmd_byte_addr : in std_logic_vector(29 downto 0); - c3_p3_cmd_empty : out std_logic; - c3_p3_cmd_full : out std_logic; - c3_p3_rd_clk : in std_logic; - c3_p3_rd_en : in std_logic; - c3_p3_rd_data : out std_logic_vector(31 downto 0); - c3_p3_rd_full : out std_logic; - c3_p3_rd_empty : out std_logic; - c3_p3_rd_count : out std_logic_vector(6 downto 0); - c3_p3_rd_overflow : out std_logic; - c3_p3_rd_error : out std_logic; - c3_p4_cmd_clk : in std_logic; - c3_p4_cmd_en : in std_logic; - c3_p4_cmd_instr : in std_logic_vector(2 downto 0); - c3_p4_cmd_bl : in std_logic_vector(5 downto 0); - c3_p4_cmd_byte_addr : in std_logic_vector(29 downto 0); - c3_p4_cmd_empty : out std_logic; - c3_p4_cmd_full : out std_logic; - c3_p4_wr_clk : in std_logic; - c3_p4_wr_en : in std_logic; - c3_p4_wr_mask : in std_logic_vector(3 downto 0); - c3_p4_wr_data : in std_logic_vector(31 downto 0); - c3_p4_wr_full : out std_logic; - c3_p4_wr_empty : out std_logic; - c3_p4_wr_count : out std_logic_vector(6 downto 0); - c3_p4_wr_underrun : out std_logic; - c3_p4_wr_error : out std_logic; - c3_p5_cmd_clk : in std_logic; - c3_p5_cmd_en : in std_logic; - c3_p5_cmd_instr : in std_logic_vector(2 downto 0); - c3_p5_cmd_bl : in std_logic_vector(5 downto 0); - c3_p5_cmd_byte_addr : in std_logic_vector(29 downto 0); - c3_p5_cmd_empty : out std_logic; - c3_p5_cmd_full : out std_logic; - c3_p5_rd_clk : in std_logic; - c3_p5_rd_en : in std_logic; - c3_p5_rd_data : out std_logic_vector(31 downto 0); - c3_p5_rd_full : out std_logic; - c3_p5_rd_empty : out std_logic; - c3_p5_rd_count : out std_logic_vector(6 downto 0); - c3_p5_rd_overflow : out std_logic; - c3_p5_rd_error : out std_logic - ); -end mem0; - -architecture arc of mem0 is - - -component memc3_infrastructure is - generic ( - C_MEMCLK_PERIOD : integer; - C_RST_ACT_LOW : integer; - C_INPUT_CLK_TYPE : string; - C_CLKOUT0_DIVIDE : integer; - C_CLKOUT1_DIVIDE : integer; - C_CLKOUT2_DIVIDE : integer; - C_CLKOUT3_DIVIDE : integer; - C_CLKFBOUT_MULT : integer; - C_DIVCLK_DIVIDE : integer - - ); - port ( - sys_clk_p : in std_logic; - sys_clk_n : in std_logic; - sys_clk : in std_logic; - sys_rst_n : in std_logic; - clk0 : out std_logic; - rst0 : out std_logic; - async_rst : out std_logic; - sysclk_2x : out std_logic; - sysclk_2x_180 : out std_logic; - pll_ce_0 : out std_logic; - pll_ce_90 : out std_logic; - pll_lock : out std_logic; - mcb_drp_clk : out std_logic - - ); - end component; - - -component memc3_wrapper is - generic ( - C_MEMCLK_PERIOD : integer; - C_CALIB_SOFT_IP : string; - C_SIMULATION : string; - C_P0_MASK_SIZE : integer; - C_P0_DATA_PORT_SIZE : integer; - C_P1_MASK_SIZE : integer; - C_P1_DATA_PORT_SIZE : integer; - C_ARB_NUM_TIME_SLOTS : integer; - C_ARB_TIME_SLOT_0 : bit_vector(17 downto 0); - C_ARB_TIME_SLOT_1 : bit_vector(17 downto 0); - C_ARB_TIME_SLOT_2 : bit_vector(17 downto 0); - C_ARB_TIME_SLOT_3 : bit_vector(17 downto 0); - C_ARB_TIME_SLOT_4 : bit_vector(17 downto 0); - C_ARB_TIME_SLOT_5 : bit_vector(17 downto 0); - C_ARB_TIME_SLOT_6 : bit_vector(17 downto 0); - C_ARB_TIME_SLOT_7 : bit_vector(17 downto 0); - C_ARB_TIME_SLOT_8 : bit_vector(17 downto 0); - C_ARB_TIME_SLOT_9 : bit_vector(17 downto 0); - C_ARB_TIME_SLOT_10 : bit_vector(17 downto 0); - C_ARB_TIME_SLOT_11 : bit_vector(17 downto 0); - C_MEM_TRAS : integer; - C_MEM_TRCD : integer; - C_MEM_TREFI : integer; - C_MEM_TRFC : integer; - C_MEM_TRP : integer; - C_MEM_TWR : integer; - C_MEM_TRTP : integer; - C_MEM_TWTR : integer; - C_MEM_ADDR_ORDER : string; - C_NUM_DQ_PINS : integer; - C_MEM_TYPE : string; - C_MEM_DENSITY : string; - C_MEM_BURST_LEN : integer; - C_MEM_CAS_LATENCY : integer; - C_MEM_ADDR_WIDTH : integer; - C_MEM_BANKADDR_WIDTH : integer; - C_MEM_NUM_COL_BITS : integer; - C_MEM_DDR1_2_ODS : string; - C_MEM_DDR2_RTT : string; - C_MEM_DDR2_DIFF_DQS_EN : string; - C_MEM_DDR2_3_PA_SR : string; - C_MEM_DDR2_3_HIGH_TEMP_SR : string; - C_MEM_DDR3_CAS_LATENCY : integer; - C_MEM_DDR3_ODS : string; - C_MEM_DDR3_RTT : string; - C_MEM_DDR3_CAS_WR_LATENCY : integer; - C_MEM_DDR3_AUTO_SR : string; - C_MEM_DDR3_DYN_WRT_ODT : string; - C_MEM_MOBILE_PA_SR : string; - C_MEM_MDDR_ODS : string; - C_MC_CALIB_BYPASS : string; - C_MC_CALIBRATION_MODE : string; - C_MC_CALIBRATION_DELAY : string; - C_SKIP_IN_TERM_CAL : integer; - C_SKIP_DYNAMIC_CAL : integer; - C_LDQSP_TAP_DELAY_VAL : integer; - C_LDQSN_TAP_DELAY_VAL : integer; - C_UDQSP_TAP_DELAY_VAL : integer; - C_UDQSN_TAP_DELAY_VAL : integer; - C_DQ0_TAP_DELAY_VAL : integer; - C_DQ1_TAP_DELAY_VAL : integer; - C_DQ2_TAP_DELAY_VAL : integer; - C_DQ3_TAP_DELAY_VAL : integer; - C_DQ4_TAP_DELAY_VAL : integer; - C_DQ5_TAP_DELAY_VAL : integer; - C_DQ6_TAP_DELAY_VAL : integer; - C_DQ7_TAP_DELAY_VAL : integer; - C_DQ8_TAP_DELAY_VAL : integer; - C_DQ9_TAP_DELAY_VAL : integer; - C_DQ10_TAP_DELAY_VAL : integer; - C_DQ11_TAP_DELAY_VAL : integer; - C_DQ12_TAP_DELAY_VAL : integer; - C_DQ13_TAP_DELAY_VAL : integer; - C_DQ14_TAP_DELAY_VAL : integer; - C_DQ15_TAP_DELAY_VAL : integer - ); - port ( - mcb3_dram_dq : inout std_logic_vector((C_NUM_DQ_PINS-1) downto 0); - mcb3_dram_a : out std_logic_vector((C_MEM_ADDR_WIDTH-1) downto 0); - mcb3_dram_ba : out std_logic_vector((C_MEM_BANKADDR_WIDTH-1) downto 0); - mcb3_dram_cke : out std_logic; - mcb3_dram_ras_n : out std_logic; - mcb3_dram_cas_n : out std_logic; - mcb3_dram_we_n : out std_logic; - mcb3_dram_dm : out std_logic; - mcb3_dram_udqs : inout std_logic; - mcb3_rzq : inout std_logic; - mcb3_dram_udm : out std_logic; - calib_done : out std_logic; - async_rst : in std_logic; - sysclk_2x : in std_logic; - sysclk_2x_180 : in std_logic; - pll_ce_0 : in std_logic; - pll_ce_90 : in std_logic; - pll_lock : in std_logic; - mcb_drp_clk : in std_logic; - mcb3_dram_dqs : inout std_logic; - mcb3_dram_ck : out std_logic; - mcb3_dram_ck_n : out std_logic; - p0_cmd_clk : in std_logic; - p0_cmd_en : in std_logic; - p0_cmd_instr : in std_logic_vector(2 downto 0); - p0_cmd_bl : in std_logic_vector(5 downto 0); - p0_cmd_byte_addr : in std_logic_vector(29 downto 0); - p0_cmd_empty : out std_logic; - p0_cmd_full : out std_logic; - p0_wr_clk : in std_logic; - p0_wr_en : in std_logic; - p0_wr_mask : in std_logic_vector(C_P0_MASK_SIZE - 1 downto 0); - p0_wr_data : in std_logic_vector(C_P0_DATA_PORT_SIZE - 1 downto 0); - p0_wr_full : out std_logic; - p0_wr_empty : out std_logic; - p0_wr_count : out std_logic_vector(6 downto 0); - p0_wr_underrun : out std_logic; - p0_wr_error : out std_logic; - p0_rd_clk : in std_logic; - p0_rd_en : in std_logic; - p0_rd_data : out std_logic_vector(C_P0_DATA_PORT_SIZE - 1 downto 0); - p0_rd_full : out std_logic; - p0_rd_empty : out std_logic; - p0_rd_count : out std_logic_vector(6 downto 0); - p0_rd_overflow : out std_logic; - p0_rd_error : out std_logic; - p1_cmd_clk : in std_logic; - p1_cmd_en : in std_logic; - p1_cmd_instr : in std_logic_vector(2 downto 0); - p1_cmd_bl : in std_logic_vector(5 downto 0); - p1_cmd_byte_addr : in std_logic_vector(29 downto 0); - p1_cmd_empty : out std_logic; - p1_cmd_full : out std_logic; - p1_wr_clk : in std_logic; - p1_wr_en : in std_logic; - p1_wr_mask : in std_logic_vector(C_P1_MASK_SIZE - 1 downto 0); - p1_wr_data : in std_logic_vector(C_P1_DATA_PORT_SIZE - 1 downto 0); - p1_wr_full : out std_logic; - p1_wr_empty : out std_logic; - p1_wr_count : out std_logic_vector(6 downto 0); - p1_wr_underrun : out std_logic; - p1_wr_error : out std_logic; - p1_rd_clk : in std_logic; - p1_rd_en : in std_logic; - p1_rd_data : out std_logic_vector(C_P1_DATA_PORT_SIZE - 1 downto 0); - p1_rd_full : out std_logic; - p1_rd_empty : out std_logic; - p1_rd_count : out std_logic_vector(6 downto 0); - p1_rd_overflow : out std_logic; - p1_rd_error : out std_logic; - p2_cmd_clk : in std_logic; - p2_cmd_en : in std_logic; - p2_cmd_instr : in std_logic_vector(2 downto 0); - p2_cmd_bl : in std_logic_vector(5 downto 0); - p2_cmd_byte_addr : in std_logic_vector(29 downto 0); - p2_cmd_empty : out std_logic; - p2_cmd_full : out std_logic; - p2_wr_clk : in std_logic; - p2_wr_en : in std_logic; - p2_wr_mask : in std_logic_vector(3 downto 0); - p2_wr_data : in std_logic_vector(31 downto 0); - p2_wr_full : out std_logic; - p2_wr_empty : out std_logic; - p2_wr_count : out std_logic_vector(6 downto 0); - p2_wr_underrun : out std_logic; - p2_wr_error : out std_logic; - p3_cmd_clk : in std_logic; - p3_cmd_en : in std_logic; - p3_cmd_instr : in std_logic_vector(2 downto 0); - p3_cmd_bl : in std_logic_vector(5 downto 0); - p3_cmd_byte_addr : in std_logic_vector(29 downto 0); - p3_cmd_empty : out std_logic; - p3_cmd_full : out std_logic; - p3_rd_clk : in std_logic; - p3_rd_en : in std_logic; - p3_rd_data : out std_logic_vector(31 downto 0); - p3_rd_full : out std_logic; - p3_rd_empty : out std_logic; - p3_rd_count : out std_logic_vector(6 downto 0); - p3_rd_overflow : out std_logic; - p3_rd_error : out std_logic; - p4_cmd_clk : in std_logic; - p4_cmd_en : in std_logic; - p4_cmd_instr : in std_logic_vector(2 downto 0); - p4_cmd_bl : in std_logic_vector(5 downto 0); - p4_cmd_byte_addr : in std_logic_vector(29 downto 0); - p4_cmd_empty : out std_logic; - p4_cmd_full : out std_logic; - p4_wr_clk : in std_logic; - p4_wr_en : in std_logic; - p4_wr_mask : in std_logic_vector(3 downto 0); - p4_wr_data : in std_logic_vector(31 downto 0); - p4_wr_full : out std_logic; - p4_wr_empty : out std_logic; - p4_wr_count : out std_logic_vector(6 downto 0); - p4_wr_underrun : out std_logic; - p4_wr_error : out std_logic; - p5_cmd_clk : in std_logic; - p5_cmd_en : in std_logic; - p5_cmd_instr : in std_logic_vector(2 downto 0); - p5_cmd_bl : in std_logic_vector(5 downto 0); - p5_cmd_byte_addr : in std_logic_vector(29 downto 0); - p5_cmd_empty : out std_logic; - p5_cmd_full : out std_logic; - p5_rd_clk : in std_logic; - p5_rd_en : in std_logic; - p5_rd_data : out std_logic_vector(31 downto 0); - p5_rd_full : out std_logic; - p5_rd_empty : out std_logic; - p5_rd_count : out std_logic_vector(6 downto 0); - p5_rd_overflow : out std_logic; - p5_rd_error : out std_logic; - selfrefresh_enter : in std_logic; - selfrefresh_mode : out std_logic - - ); - end component; - - - - - - - constant C3_CLKOUT0_DIVIDE : integer := 2; - constant C3_CLKOUT1_DIVIDE : integer := 2; - constant C3_CLKOUT2_DIVIDE : integer := 16; - constant C3_CLKOUT3_DIVIDE : integer := 8; - constant C3_CLKFBOUT_MULT : integer := 4; - constant C3_DIVCLK_DIVIDE : integer := 1; - constant C3_ARB_NUM_TIME_SLOTS : integer := 12; - constant C3_ARB_TIME_SLOT_0 : bit_vector(17 downto 0) := o"012345"; - constant C3_ARB_TIME_SLOT_1 : bit_vector(17 downto 0) := o"123450"; - constant C3_ARB_TIME_SLOT_2 : bit_vector(17 downto 0) := o"234501"; - constant C3_ARB_TIME_SLOT_3 : bit_vector(17 downto 0) := o"345012"; - constant C3_ARB_TIME_SLOT_4 : bit_vector(17 downto 0) := o"450123"; - constant C3_ARB_TIME_SLOT_5 : bit_vector(17 downto 0) := o"501234"; - constant C3_ARB_TIME_SLOT_6 : bit_vector(17 downto 0) := o"012345"; - constant C3_ARB_TIME_SLOT_7 : bit_vector(17 downto 0) := o"123450"; - constant C3_ARB_TIME_SLOT_8 : bit_vector(17 downto 0) := o"234501"; - constant C3_ARB_TIME_SLOT_9 : bit_vector(17 downto 0) := o"345012"; - constant C3_ARB_TIME_SLOT_10 : bit_vector(17 downto 0) := o"450123"; - constant C3_ARB_TIME_SLOT_11 : bit_vector(17 downto 0) := o"501234"; - constant C3_MEM_TRAS : integer := 40000; - constant C3_MEM_TRCD : integer := 15000; - constant C3_MEM_TREFI : integer := 7800000; - constant C3_MEM_TRFC : integer := 70000; - constant C3_MEM_TRP : integer := 15000; - constant C3_MEM_TWR : integer := 15000; - constant C3_MEM_TRTP : integer := 7500; - constant C3_MEM_TWTR : integer := 2; - constant C3_MEM_TYPE : string := "DDR"; - constant C3_MEM_DENSITY : string := "512Mb"; - constant C3_MEM_BURST_LEN : integer := 4; - constant C3_MEM_CAS_LATENCY : integer := 3; - constant C3_MEM_NUM_COL_BITS : integer := 10; - constant C3_MEM_DDR1_2_ODS : string := "FULL"; - constant C3_MEM_DDR2_RTT : string := "50OHMS"; - constant C3_MEM_DDR2_DIFF_DQS_EN : string := "YES"; - constant C3_MEM_DDR2_3_PA_SR : string := "FULL"; - constant C3_MEM_DDR2_3_HIGH_TEMP_SR : string := "NORMAL"; - constant C3_MEM_DDR3_CAS_LATENCY : integer := 6; - constant C3_MEM_DDR3_ODS : string := "DIV6"; - constant C3_MEM_DDR3_RTT : string := "DIV2"; - constant C3_MEM_DDR3_CAS_WR_LATENCY : integer := 5; - constant C3_MEM_DDR3_AUTO_SR : string := "ENABLED"; - constant C3_MEM_DDR3_DYN_WRT_ODT : string := "OFF"; - constant C3_MEM_MOBILE_PA_SR : string := "FULL"; - constant C3_MEM_MDDR_ODS : string := "FULL"; - constant C3_MC_CALIB_BYPASS : string := "NO"; - constant C3_MC_CALIBRATION_MODE : string := "CALIBRATION"; - constant C3_MC_CALIBRATION_DELAY : string := "HALF"; - constant C3_SKIP_IN_TERM_CAL : integer := 1; - constant C3_SKIP_DYNAMIC_CAL : integer := 0; - constant C3_LDQSP_TAP_DELAY_VAL : integer := 0; - constant C3_LDQSN_TAP_DELAY_VAL : integer := 0; - constant C3_UDQSP_TAP_DELAY_VAL : integer := 0; - constant C3_UDQSN_TAP_DELAY_VAL : integer := 0; - constant C3_DQ0_TAP_DELAY_VAL : integer := 0; - constant C3_DQ1_TAP_DELAY_VAL : integer := 0; - constant C3_DQ2_TAP_DELAY_VAL : integer := 0; - constant C3_DQ3_TAP_DELAY_VAL : integer := 0; - constant C3_DQ4_TAP_DELAY_VAL : integer := 0; - constant C3_DQ5_TAP_DELAY_VAL : integer := 0; - constant C3_DQ6_TAP_DELAY_VAL : integer := 0; - constant C3_DQ7_TAP_DELAY_VAL : integer := 0; - constant C3_DQ8_TAP_DELAY_VAL : integer := 0; - constant C3_DQ9_TAP_DELAY_VAL : integer := 0; - constant C3_DQ10_TAP_DELAY_VAL : integer := 0; - constant C3_DQ11_TAP_DELAY_VAL : integer := 0; - constant C3_DQ12_TAP_DELAY_VAL : integer := 0; - constant C3_DQ13_TAP_DELAY_VAL : integer := 0; - constant C3_DQ14_TAP_DELAY_VAL : integer := 0; - constant C3_DQ15_TAP_DELAY_VAL : integer := 0; - - signal c3_sys_clk_p : std_logic; - signal c3_sys_clk_n : std_logic; - signal c3_async_rst : std_logic; - signal c3_sysclk_2x : std_logic; - signal c3_sysclk_2x_180 : std_logic; - signal c3_pll_ce_0 : std_logic; - signal c3_pll_ce_90 : std_logic; - signal c3_pll_lock : std_logic; - signal c3_mcb_drp_clk : std_logic; - signal c3_cmp_error : std_logic; - signal c3_cmp_data_valid : std_logic; - signal c3_vio_modify_enable : std_logic; - signal c3_error_status : std_logic_vector(127 downto 0); - signal c3_vio_data_mode_value : std_logic_vector(2 downto 0); - signal c3_vio_addr_mode_value : std_logic_vector(2 downto 0); - signal c3_cmp_data : std_logic_vector(31 downto 0); - signal c3_selfrefresh_enter : std_logic; - signal c3_selfrefresh_mode : std_logic; - - - -begin - - -c3_sys_clk_p <= '0'; -c3_sys_clk_n <= '0'; - -memc3_infrastructure_inst : memc3_infrastructure - -generic map - ( - C_MEMCLK_PERIOD => C3_MEMCLK_PERIOD, - C_RST_ACT_LOW => C3_RST_ACT_LOW, - C_INPUT_CLK_TYPE => C3_INPUT_CLK_TYPE, - C_CLKOUT0_DIVIDE => C3_CLKOUT0_DIVIDE, - C_CLKOUT1_DIVIDE => C3_CLKOUT1_DIVIDE, - C_CLKOUT2_DIVIDE => C3_CLKOUT2_DIVIDE, - C_CLKOUT3_DIVIDE => C3_CLKOUT3_DIVIDE, - C_CLKFBOUT_MULT => C3_CLKFBOUT_MULT, - C_DIVCLK_DIVIDE => C3_DIVCLK_DIVIDE - ) -port map - ( - sys_clk_p => c3_sys_clk_p, - sys_clk_n => c3_sys_clk_n, - sys_clk => c3_sys_clk, - sys_rst_n => c3_sys_rst_n, - clk0 => c3_clk0, - rst0 => c3_rst0, - async_rst => c3_async_rst, - sysclk_2x => c3_sysclk_2x, - sysclk_2x_180 => c3_sysclk_2x_180, - pll_ce_0 => c3_pll_ce_0, - pll_ce_90 => c3_pll_ce_90, - pll_lock => c3_pll_lock, - mcb_drp_clk => c3_mcb_drp_clk - ); - - --- wrapper instantiation - memc3_wrapper_inst : memc3_wrapper - -generic map - ( - C_MEMCLK_PERIOD => C3_MEMCLK_PERIOD, - C_CALIB_SOFT_IP => C3_CALIB_SOFT_IP, - C_SIMULATION => C3_SIMULATION, - C_P0_MASK_SIZE => C3_P0_MASK_SIZE, - C_P0_DATA_PORT_SIZE => C3_P0_DATA_PORT_SIZE, - C_P1_MASK_SIZE => C3_P1_MASK_SIZE, - C_P1_DATA_PORT_SIZE => C3_P1_DATA_PORT_SIZE, - C_ARB_NUM_TIME_SLOTS => C3_ARB_NUM_TIME_SLOTS, - C_ARB_TIME_SLOT_0 => C3_ARB_TIME_SLOT_0, - C_ARB_TIME_SLOT_1 => C3_ARB_TIME_SLOT_1, - C_ARB_TIME_SLOT_2 => C3_ARB_TIME_SLOT_2, - C_ARB_TIME_SLOT_3 => C3_ARB_TIME_SLOT_3, - C_ARB_TIME_SLOT_4 => C3_ARB_TIME_SLOT_4, - C_ARB_TIME_SLOT_5 => C3_ARB_TIME_SLOT_5, - C_ARB_TIME_SLOT_6 => C3_ARB_TIME_SLOT_6, - C_ARB_TIME_SLOT_7 => C3_ARB_TIME_SLOT_7, - C_ARB_TIME_SLOT_8 => C3_ARB_TIME_SLOT_8, - C_ARB_TIME_SLOT_9 => C3_ARB_TIME_SLOT_9, - C_ARB_TIME_SLOT_10 => C3_ARB_TIME_SLOT_10, - C_ARB_TIME_SLOT_11 => C3_ARB_TIME_SLOT_11, - C_MEM_TRAS => C3_MEM_TRAS, - C_MEM_TRCD => C3_MEM_TRCD, - C_MEM_TREFI => C3_MEM_TREFI, - C_MEM_TRFC => C3_MEM_TRFC, - C_MEM_TRP => C3_MEM_TRP, - C_MEM_TWR => C3_MEM_TWR, - C_MEM_TRTP => C3_MEM_TRTP, - C_MEM_TWTR => C3_MEM_TWTR, - C_MEM_ADDR_ORDER => C3_MEM_ADDR_ORDER, - C_NUM_DQ_PINS => C3_NUM_DQ_PINS, - C_MEM_TYPE => C3_MEM_TYPE, - C_MEM_DENSITY => C3_MEM_DENSITY, - C_MEM_BURST_LEN => C3_MEM_BURST_LEN, - C_MEM_CAS_LATENCY => C3_MEM_CAS_LATENCY, - C_MEM_ADDR_WIDTH => C3_MEM_ADDR_WIDTH, - C_MEM_BANKADDR_WIDTH => C3_MEM_BANKADDR_WIDTH, - C_MEM_NUM_COL_BITS => C3_MEM_NUM_COL_BITS, - C_MEM_DDR1_2_ODS => C3_MEM_DDR1_2_ODS, - C_MEM_DDR2_RTT => C3_MEM_DDR2_RTT, - C_MEM_DDR2_DIFF_DQS_EN => C3_MEM_DDR2_DIFF_DQS_EN, - C_MEM_DDR2_3_PA_SR => C3_MEM_DDR2_3_PA_SR, - C_MEM_DDR2_3_HIGH_TEMP_SR => C3_MEM_DDR2_3_HIGH_TEMP_SR, - C_MEM_DDR3_CAS_LATENCY => C3_MEM_DDR3_CAS_LATENCY, - C_MEM_DDR3_ODS => C3_MEM_DDR3_ODS, - C_MEM_DDR3_RTT => C3_MEM_DDR3_RTT, - C_MEM_DDR3_CAS_WR_LATENCY => C3_MEM_DDR3_CAS_WR_LATENCY, - C_MEM_DDR3_AUTO_SR => C3_MEM_DDR3_AUTO_SR, - C_MEM_DDR3_DYN_WRT_ODT => C3_MEM_DDR3_DYN_WRT_ODT, - C_MEM_MOBILE_PA_SR => C3_MEM_MOBILE_PA_SR, - C_MEM_MDDR_ODS => C3_MEM_MDDR_ODS, - C_MC_CALIB_BYPASS => C3_MC_CALIB_BYPASS, - C_MC_CALIBRATION_MODE => C3_MC_CALIBRATION_MODE, - C_MC_CALIBRATION_DELAY => C3_MC_CALIBRATION_DELAY, - C_SKIP_IN_TERM_CAL => C3_SKIP_IN_TERM_CAL, - C_SKIP_DYNAMIC_CAL => C3_SKIP_DYNAMIC_CAL, - C_LDQSP_TAP_DELAY_VAL => C3_LDQSP_TAP_DELAY_VAL, - C_LDQSN_TAP_DELAY_VAL => C3_LDQSN_TAP_DELAY_VAL, - C_UDQSP_TAP_DELAY_VAL => C3_UDQSP_TAP_DELAY_VAL, - C_UDQSN_TAP_DELAY_VAL => C3_UDQSN_TAP_DELAY_VAL, - C_DQ0_TAP_DELAY_VAL => C3_DQ0_TAP_DELAY_VAL, - C_DQ1_TAP_DELAY_VAL => C3_DQ1_TAP_DELAY_VAL, - C_DQ2_TAP_DELAY_VAL => C3_DQ2_TAP_DELAY_VAL, - C_DQ3_TAP_DELAY_VAL => C3_DQ3_TAP_DELAY_VAL, - C_DQ4_TAP_DELAY_VAL => C3_DQ4_TAP_DELAY_VAL, - C_DQ5_TAP_DELAY_VAL => C3_DQ5_TAP_DELAY_VAL, - C_DQ6_TAP_DELAY_VAL => C3_DQ6_TAP_DELAY_VAL, - C_DQ7_TAP_DELAY_VAL => C3_DQ7_TAP_DELAY_VAL, - C_DQ8_TAP_DELAY_VAL => C3_DQ8_TAP_DELAY_VAL, - C_DQ9_TAP_DELAY_VAL => C3_DQ9_TAP_DELAY_VAL, - C_DQ10_TAP_DELAY_VAL => C3_DQ10_TAP_DELAY_VAL, - C_DQ11_TAP_DELAY_VAL => C3_DQ11_TAP_DELAY_VAL, - C_DQ12_TAP_DELAY_VAL => C3_DQ12_TAP_DELAY_VAL, - C_DQ13_TAP_DELAY_VAL => C3_DQ13_TAP_DELAY_VAL, - C_DQ14_TAP_DELAY_VAL => C3_DQ14_TAP_DELAY_VAL, - C_DQ15_TAP_DELAY_VAL => C3_DQ15_TAP_DELAY_VAL - ) -port map -( - mcb3_dram_dq => mcb3_dram_dq, - mcb3_dram_a => mcb3_dram_a, - mcb3_dram_ba => mcb3_dram_ba, - mcb3_dram_cke => mcb3_dram_cke, - mcb3_dram_ras_n => mcb3_dram_ras_n, - mcb3_dram_cas_n => mcb3_dram_cas_n, - mcb3_dram_we_n => mcb3_dram_we_n, - mcb3_dram_dm => mcb3_dram_dm, - mcb3_dram_udqs => mcb3_dram_udqs, - mcb3_rzq => mcb3_rzq, - mcb3_dram_udm => mcb3_dram_udm, - calib_done => c3_calib_done, - async_rst => c3_async_rst, - sysclk_2x => c3_sysclk_2x, - sysclk_2x_180 => c3_sysclk_2x_180, - pll_ce_0 => c3_pll_ce_0, - pll_ce_90 => c3_pll_ce_90, - pll_lock => c3_pll_lock, - mcb_drp_clk => c3_mcb_drp_clk, - mcb3_dram_dqs => mcb3_dram_dqs, - mcb3_dram_ck => mcb3_dram_ck, - mcb3_dram_ck_n => mcb3_dram_ck_n, - p0_cmd_clk => c3_p0_cmd_clk, - p0_cmd_en => c3_p0_cmd_en, - p0_cmd_instr => c3_p0_cmd_instr, - p0_cmd_bl => c3_p0_cmd_bl, - p0_cmd_byte_addr => c3_p0_cmd_byte_addr, - p0_cmd_empty => c3_p0_cmd_empty, - p0_cmd_full => c3_p0_cmd_full, - p0_wr_clk => c3_p0_wr_clk, - p0_wr_en => c3_p0_wr_en, - p0_wr_mask => c3_p0_wr_mask, - p0_wr_data => c3_p0_wr_data, - p0_wr_full => c3_p0_wr_full, - p0_wr_empty => c3_p0_wr_empty, - p0_wr_count => c3_p0_wr_count, - p0_wr_underrun => c3_p0_wr_underrun, - p0_wr_error => c3_p0_wr_error, - p0_rd_clk => c3_p0_rd_clk, - p0_rd_en => c3_p0_rd_en, - p0_rd_data => c3_p0_rd_data, - p0_rd_full => c3_p0_rd_full, - p0_rd_empty => c3_p0_rd_empty, - p0_rd_count => c3_p0_rd_count, - p0_rd_overflow => c3_p0_rd_overflow, - p0_rd_error => c3_p0_rd_error, - p1_cmd_clk => c3_p1_cmd_clk, - p1_cmd_en => c3_p1_cmd_en, - p1_cmd_instr => c3_p1_cmd_instr, - p1_cmd_bl => c3_p1_cmd_bl, - p1_cmd_byte_addr => c3_p1_cmd_byte_addr, - p1_cmd_empty => c3_p1_cmd_empty, - p1_cmd_full => c3_p1_cmd_full, - p1_wr_clk => c3_p1_wr_clk, - p1_wr_en => c3_p1_wr_en, - p1_wr_mask => c3_p1_wr_mask, - p1_wr_data => c3_p1_wr_data, - p1_wr_full => c3_p1_wr_full, - p1_wr_empty => c3_p1_wr_empty, - p1_wr_count => c3_p1_wr_count, - p1_wr_underrun => c3_p1_wr_underrun, - p1_wr_error => c3_p1_wr_error, - p1_rd_clk => c3_p1_rd_clk, - p1_rd_en => c3_p1_rd_en, - p1_rd_data => c3_p1_rd_data, - p1_rd_full => c3_p1_rd_full, - p1_rd_empty => c3_p1_rd_empty, - p1_rd_count => c3_p1_rd_count, - p1_rd_overflow => c3_p1_rd_overflow, - p1_rd_error => c3_p1_rd_error, - p2_cmd_clk => c3_p2_cmd_clk, - p2_cmd_en => c3_p2_cmd_en, - p2_cmd_instr => c3_p2_cmd_instr, - p2_cmd_bl => c3_p2_cmd_bl, - p2_cmd_byte_addr => c3_p2_cmd_byte_addr, - p2_cmd_empty => c3_p2_cmd_empty, - p2_cmd_full => c3_p2_cmd_full, - p2_wr_clk => c3_p2_wr_clk, - p2_wr_en => c3_p2_wr_en, - p2_wr_mask => c3_p2_wr_mask, - p2_wr_data => c3_p2_wr_data, - p2_wr_full => c3_p2_wr_full, - p2_wr_empty => c3_p2_wr_empty, - p2_wr_count => c3_p2_wr_count, - p2_wr_underrun => c3_p2_wr_underrun, - p2_wr_error => c3_p2_wr_error, - p3_cmd_clk => c3_p3_cmd_clk, - p3_cmd_en => c3_p3_cmd_en, - p3_cmd_instr => c3_p3_cmd_instr, - p3_cmd_bl => c3_p3_cmd_bl, - p3_cmd_byte_addr => c3_p3_cmd_byte_addr, - p3_cmd_empty => c3_p3_cmd_empty, - p3_cmd_full => c3_p3_cmd_full, - p3_rd_clk => c3_p3_rd_clk, - p3_rd_en => c3_p3_rd_en, - p3_rd_data => c3_p3_rd_data, - p3_rd_full => c3_p3_rd_full, - p3_rd_empty => c3_p3_rd_empty, - p3_rd_count => c3_p3_rd_count, - p3_rd_overflow => c3_p3_rd_overflow, - p3_rd_error => c3_p3_rd_error, - p4_cmd_clk => c3_p4_cmd_clk, - p4_cmd_en => c3_p4_cmd_en, - p4_cmd_instr => c3_p4_cmd_instr, - p4_cmd_bl => c3_p4_cmd_bl, - p4_cmd_byte_addr => c3_p4_cmd_byte_addr, - p4_cmd_empty => c3_p4_cmd_empty, - p4_cmd_full => c3_p4_cmd_full, - p4_wr_clk => c3_p4_wr_clk, - p4_wr_en => c3_p4_wr_en, - p4_wr_mask => c3_p4_wr_mask, - p4_wr_data => c3_p4_wr_data, - p4_wr_full => c3_p4_wr_full, - p4_wr_empty => c3_p4_wr_empty, - p4_wr_count => c3_p4_wr_count, - p4_wr_underrun => c3_p4_wr_underrun, - p4_wr_error => c3_p4_wr_error, - p5_cmd_clk => c3_p5_cmd_clk, - p5_cmd_en => c3_p5_cmd_en, - p5_cmd_instr => c3_p5_cmd_instr, - p5_cmd_bl => c3_p5_cmd_bl, - p5_cmd_byte_addr => c3_p5_cmd_byte_addr, - p5_cmd_empty => c3_p5_cmd_empty, - p5_cmd_full => c3_p5_cmd_full, - p5_rd_clk => c3_p5_rd_clk, - p5_rd_en => c3_p5_rd_en, - p5_rd_data => c3_p5_rd_data, - p5_rd_full => c3_p5_rd_full, - p5_rd_empty => c3_p5_rd_empty, - p5_rd_count => c3_p5_rd_count, - p5_rd_overflow => c3_p5_rd_overflow, - p5_rd_error => c3_p5_rd_error, - selfrefresh_enter => c3_selfrefresh_enter, - selfrefresh_mode => c3_selfrefresh_mode -); - - - - - - end arc; Index: ipcore_dir/mem0/user_design/rtl/mcb_soft_calibration_top.vhd =================================================================== --- ipcore_dir/mem0/user_design/rtl/mcb_soft_calibration_top.vhd (revision 5) +++ ipcore_dir/mem0/user_design/rtl/mcb_soft_calibration_top.vhd (nonexistent) @@ -1,409 +0,0 @@ ---***************************************************************************** --- (c) Copyright 2009 Xilinx, Inc. All rights reserved. --- --- This file contains confidential and proprietary information --- of Xilinx, Inc. and is protected under U.S. and --- international copyright and other intellectual property --- laws. --- --- DISCLAIMER --- This disclaimer is not a license and does not grant any --- rights to the materials distributed herewith. Except as --- otherwise provided in a valid license issued to you by --- Xilinx, and to the maximum extent permitted by applicable --- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND --- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES --- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING --- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- --- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and --- (2) Xilinx shall not be liable (whether in contract or tort, --- including negligence, or under any other theory of --- liability) for any loss or damage of any kind or nature --- related to, arising under or in connection with these --- materials, including for any direct, or any indirect, --- special, incidental, or consequential loss or damage --- (including loss of data, profits, goodwill, or any type of --- loss or damage suffered as a result of any action brought --- by a third party) even if such damage or loss was --- reasonably foreseeable or Xilinx had been advised of the --- possibility of the same. --- --- CRITICAL APPLICATIONS --- Xilinx products are not designed or intended to be fail- --- safe, or for use in any application requiring fail-safe --- performance, such as life-support or safety devices or --- systems, Class III medical devices, nuclear facilities, --- applications related to the deployment of airbags, or any --- other applications that could lead to death, personal --- injury, or severe property or environmental damage --- (individually and collectively, "Critical --- Applications"). Customer assumes the sole risk and --- liability of any use of Xilinx products in Critical --- Applications, subject only to applicable laws and --- regulations governing limitations on product liability. --- --- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS --- PART OF THIS FILE AT ALL TIMES. --- ---***************************************************************************** --- ____ ____ --- / /\/ / --- /___/ \ / Vendor: Xilinx --- \ \ \/ Version: %version --- \ \ Application: MIG --- / / Filename: mcb_soft_calibration_top.vhd --- /___/ /\ Date Last Modified: $Date: 2010/06/04 11:24:38 $ --- \ \ / \ Date Created: Mon Feb 9 2009 --- \___\/\___\ --- ---Device: Spartan6 ---Design Name: DDR/DDR2/DDR3/LPDDR ---Purpose: Xilinx reference design top-level simulation --- wrapper file for input termination calibration ---Reference: --- --- Revision: Date: Comment --- 1.0: 2/06/09: Initial version for MIG wrapper. --- 1.1: 3/16/09: Added pll_lock port, for using it to gate reset --- 1.2: 6/06/09: Removed MCB_UIDQCOUNT. --- 1.3: 6/18/09: corrected/changed MCB_SYSRST to be an output port --- 1.4: 6/24/09: gave RZQ and ZIO each their own unique ADD and SDI nets --- 1.5: 10/08/09: removed INCDEC_TRESHOLD parameter - making it a localparam inside mcb_soft_calibration --- 1.5: 10/08/09: removed INCDEC_TRESHOLD parameter - making it a localparam inside mcb_soft_calibration --- 1.6: 02/04/09: Added condition generate statmenet for ZIO pin. --- 1.7: 04/12/10: Added CKE_Train signal to fix DDR2 init wait . --- End Revision ---********************************************************************************** - -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; -library unisim; -use unisim.vcomponents.all; - -entity mcb_soft_calibration_top is - generic ( - C_MEM_TZQINIT_MAXCNT : std_logic_vector(9 downto 0) := "1000000000"; -- DDR3 Minimum delay between resets - C_MC_CALIBRATION_MODE : string := "CALIBRATION"; -- if set to CALIBRATION will reset DQS IDELAY to DQS_NUMERATOR/DQS_DENOMINATOR local_param values, - -- and does dynamic recal, - -- if set to NOCALIBRATION then defaults to hard cal blocks setting of C_MC_CALBRATION_DELAY *and* - -- no dynamic recal will be done - SKIP_IN_TERM_CAL : integer := 0; -- provides option to skip the input termination calibration - SKIP_DYNAMIC_CAL : integer := 0; -- provides option to skip the dynamic delay calibration - SKIP_DYN_IN_TERM : integer := 0; -- provides option to skip the dynamic delay calibration - C_SIMULATION : string := "FALSE"; -- Tells us whether the design is being simulated or implemented - C_MEM_TYPE : string := "DDR" -- provides the memory device used for the design - - ); - port ( - UI_CLK : in std_logic; -- Input - global clock to be used for input_term_tuner and IODRP clock - RST : in std_logic; -- Input - reset for input_term_tuner - synchronous for input_term_tuner state machine, asynch for - -- IODRP (sub)controller - IOCLK : in std_logic; -- Input - IOCLK input to the IODRP's - DONE_SOFTANDHARD_CAL : out std_logic; -- active high flag signals soft calibration of input delays is complete and MCB_UODONECAL is high - -- (MCB hard calib complete) - PLL_LOCK : in std_logic; -- Lock signal from PLL - SELFREFRESH_REQ : in std_logic; - SELFREFRESH_MCB_MODE : in std_logic; - SELFREFRESH_MCB_REQ : out std_logic; - SELFREFRESH_MODE : out std_logic; - MCB_UIADD : out std_logic; -- to MCB's UIADD port - MCB_UISDI : out std_logic; -- to MCB's UISDI port - MCB_UOSDO : in std_logic; - MCB_UODONECAL : in std_logic; - MCB_UOREFRSHFLAG : in std_logic; - MCB_UICS : out std_logic; - MCB_UIDRPUPDATE : out std_logic; - MCB_UIBROADCAST : out std_logic; - MCB_UIADDR : out std_logic_vector(4 downto 0); - MCB_UICMDEN : out std_logic; - MCB_UIDONECAL : out std_logic; - MCB_UIDQLOWERDEC : out std_logic; - MCB_UIDQLOWERINC : out std_logic; - MCB_UIDQUPPERDEC : out std_logic; - MCB_UIDQUPPERINC : out std_logic; - MCB_UILDQSDEC : out std_logic; - MCB_UILDQSINC : out std_logic; - MCB_UIREAD : out std_logic; - MCB_UIUDQSDEC : out std_logic; - MCB_UIUDQSINC : out std_logic; - MCB_RECAL : out std_logic; - MCB_SYSRST : out std_logic; - - MCB_UICMD : out std_logic; - MCB_UICMDIN : out std_logic; - MCB_UIDQCOUNT : out std_logic_vector(3 downto 0); - MCB_UODATA : in std_logic_vector(7 downto 0); - MCB_UODATAVALID : in std_logic; - MCB_UOCMDREADY : in std_logic; - MCB_UO_CAL_START : in std_logic; - RZQ_PIN : inout std_logic; - ZIO_PIN : inout std_logic; - CKE_Train : out std_logic - - ); -end entity mcb_soft_calibration_top; - -architecture trans of mcb_soft_calibration_top is - -component mcb_soft_calibration is - generic ( - C_MEM_TZQINIT_MAXCNT : std_logic_vector(9 downto 0) := "1000000000"; -- DDR3 Minimum delay between resets - SKIP_IN_TERM_CAL : integer := 0; -- provides option to skip the input termination calibration - SKIP_DYNAMIC_CAL : integer := 0; -- provides option to skip the dynamic delay calibration - SKIP_DYN_IN_TERM : integer := 1; -- provides option to skip the input termination calibration - C_MC_CALIBRATION_MODE : string := "CALIBRATION"; -- if set to CALIBRATION will reset DQS IDELAY to DQS_NUMERATOR/DQS_DENOMINATOR local_param value - -- if set to NOCALIBRATION then defaults to hard cal blocks setting of C_MC_CALBRATION_DELAY - -- (Quarter, etc) - - C_SIMULATION : string := "FALSE"; -- Tells us whether the design is being simulated or implemented - C_MEM_TYPE : string := "DDR" - ); - port ( - UI_CLK : in std_logic; -- main clock input for logic and IODRP CLK pins. At top level, this should also connect to IODRP2_MCB - -- CLK pins - RST : in std_logic; -- main system reset for both the Soft Calibration block - also will act as a passthrough to MCB's SYSRST - DONE_SOFTANDHARD_CAL : out std_logic; -- active high flag signals soft calibration of input delays is complete and MCB_UODONECAL is high (MCB - -- hard calib complete) - PLL_LOCK : in std_logic; -- Lock signal from PLL - SELFREFRESH_REQ : in std_logic; - SELFREFRESH_MCB_MODE : in std_logic; - SELFREFRESH_MCB_REQ : out std_logic; - SELFREFRESH_MODE : out std_logic; - IODRP_ADD : out std_logic; -- IODRP ADD port - IODRP_SDI : out std_logic; -- IODRP SDI port - RZQ_IN : in std_logic; -- RZQ pin from board - expected to have a 2*R resistor to ground - RZQ_IODRP_SDO : in std_logic; -- RZQ IODRP's SDO port - RZQ_IODRP_CS : out std_logic := '0'; -- RZQ IODRP's CS port - ZIO_IN : in std_logic; -- Z-stated IO pin - garanteed not to be driven externally - ZIO_IODRP_SDO : in std_logic; -- ZIO IODRP's SDO port - ZIO_IODRP_CS : out std_logic := '0'; -- ZIO IODRP's CS port - MCB_UIADD : out std_logic; -- to MCB's UIADD port - MCB_UISDI : out std_logic; -- to MCB's UISDI port - MCB_UOSDO : in std_logic; -- from MCB's UOSDO port (User output SDO) - MCB_UODONECAL : in std_logic; -- indicates when MCB hard calibration process is complete - MCB_UOREFRSHFLAG : in std_logic; -- high during refresh cycle and time when MCB is innactive - MCB_UICS : out std_logic; -- to MCB's UICS port (User Input CS) - MCB_UIDRPUPDATE : out std_logic := '1'; -- MCB's UIDRPUPDATE port (gets passed to IODRP2_MCB's MEMUPDATE port: this controls shadow latch used - -- during IODRP2_MCB writes). Currently just trasnparent - MCB_UIBROADCAST : out std_logic; -- only to MCB's UIBROADCAST port (User Input BROADCAST - gets passed to IODRP2_MCB's BKST port) - MCB_UIADDR : out std_logic_vector(4 downto 0) := "00000"; -- to MCB's UIADDR port (gets passed to IODRP2_MCB's AUXADDR port - MCB_UICMDEN : out std_logic := '1'; -- set to 1 to take control of UI interface - removes control from internal calib block - MCB_UIDONECAL : out std_logic := '0'; -- set to 0 to "tell" controller that it's still in a calibrate state - MCB_UIDQLOWERDEC : out std_logic := '0'; - MCB_UIDQLOWERINC : out std_logic := '0'; - MCB_UIDQUPPERDEC : out std_logic := '0'; - MCB_UIDQUPPERINC : out std_logic := '0'; - MCB_UILDQSDEC : out std_logic := '0'; - MCB_UILDQSINC : out std_logic := '0'; - MCB_UIREAD : out std_logic; -- enables read w/o writing by turning on a SDO->SDI loopback inside the IODRP2_MCBs (doesn't exist in - -- regular IODRP2). IODRPCTRLR_R_WB becomes don't-care. - MCB_UIUDQSDEC : out std_logic := '0'; - MCB_UIUDQSINC : out std_logic := '0'; - MCB_RECAL : out std_logic := '0'; -- future hook to drive MCB's RECAL pin - initiates a hard re-calibration sequence when high - MCB_UICMD : out std_logic; - MCB_UICMDIN : out std_logic; - MCB_UIDQCOUNT : out std_logic_vector(3 downto 0); - MCB_UODATA : in std_logic_vector(7 downto 0); - MCB_UODATAVALID : in std_logic; - MCB_UOCMDREADY : in std_logic; - MCB_UO_CAL_START : in std_logic; - MCB_SYSRST : out std_logic; -- drives the MCB's SYSRST pin - the main reset for MCB - Max_Value : out std_logic_vector(7 downto 0); - CKE_Train : out std_logic - - ); -end component; - - signal IODRP_ADD : std_logic; - signal IODRP_SDI : std_logic; - signal RZQ_IODRP_SDO : std_logic; - signal RZQ_IODRP_CS : std_logic; - signal ZIO_IODRP_SDO : std_logic; - signal ZIO_IODRP_CS : std_logic; - signal IODRP_SDO : std_logic; - signal IODRP_CS : std_logic; - signal IODRP_BKST : std_logic; - signal RZQ_ZIO_ODATAIN : std_logic; - signal RZQ_ZIO_TRISTATE : std_logic; - signal RZQ_TOUT : std_logic; - signal ZIO_TOUT : std_logic; - signal Max_Value : std_logic_vector(7 downto 0); - - signal RZQ_IN : std_logic; -- RZQ pin from board - expected to have a 2*R resistor to ground - signal ZIO_IN : std_logic; -- Z-stated IO pin - garanteed not to be driven externally - signal RZQ_OUT : std_logic; - signal ZIO_OUT : std_logic; - - -- Declare intermediate signals for referenced outputs - signal DONE_SOFTANDHARD_CAL_xilinx0 : std_logic; - signal MCB_UIADD_xilinx3 : std_logic; - signal MCB_UISDI_xilinx17 : std_logic; - signal MCB_UICS_xilinx7 : std_logic; - signal MCB_UIDRPUPDATE_xilinx13 : std_logic; - signal MCB_UIBROADCAST_xilinx5 : std_logic; - signal MCB_UIADDR_xilinx4 : std_logic_vector(4 downto 0); - signal MCB_UICMDEN_xilinx6 : std_logic; - signal MCB_UIDONECAL_xilinx8 : std_logic; - signal MCB_UIDQLOWERDEC_xilinx9 : std_logic; - signal MCB_UIDQLOWERINC_xilinx10 : std_logic; - signal MCB_UIDQUPPERDEC_xilinx11 : std_logic; - signal MCB_UIDQUPPERINC_xilinx12 : std_logic; - signal MCB_UILDQSDEC_xilinx14 : std_logic; - signal MCB_UILDQSINC_xilinx15 : std_logic; - signal MCB_UIREAD_xilinx16 : std_logic; - signal MCB_UIUDQSDEC_xilinx18 : std_logic; - signal MCB_UIUDQSINC_xilinx19 : std_logic; - signal MCB_RECAL_xilinx1 : std_logic; - signal MCB_SYSRST_xilinx2 : std_logic; -begin - -- Drive referenced outputs - DONE_SOFTANDHARD_CAL <= DONE_SOFTANDHARD_CAL_xilinx0; - MCB_UIADD <= MCB_UIADD_xilinx3; - MCB_UISDI <= MCB_UISDI_xilinx17; - MCB_UICS <= MCB_UICS_xilinx7; - MCB_UIDRPUPDATE <= MCB_UIDRPUPDATE_xilinx13; - MCB_UIBROADCAST <= MCB_UIBROADCAST_xilinx5; - MCB_UIADDR <= MCB_UIADDR_xilinx4; - MCB_UICMDEN <= MCB_UICMDEN_xilinx6; - MCB_UIDONECAL <= MCB_UIDONECAL_xilinx8; - MCB_UIDQLOWERDEC <= MCB_UIDQLOWERDEC_xilinx9; - MCB_UIDQLOWERINC <= MCB_UIDQLOWERINC_xilinx10; - MCB_UIDQUPPERDEC <= MCB_UIDQUPPERDEC_xilinx11; - MCB_UIDQUPPERINC <= MCB_UIDQUPPERINC_xilinx12; - MCB_UILDQSDEC <= MCB_UILDQSDEC_xilinx14; - MCB_UILDQSINC <= MCB_UILDQSINC_xilinx15; - MCB_UIREAD <= MCB_UIREAD_xilinx16; - MCB_UIUDQSDEC <= MCB_UIUDQSDEC_xilinx18; - MCB_UIUDQSINC <= MCB_UIUDQSINC_xilinx19; - MCB_RECAL <= MCB_RECAL_xilinx1; - MCB_SYSRST <= MCB_SYSRST_xilinx2; - - RZQ_ZIO_ODATAIN <= not(RST); - RZQ_ZIO_TRISTATE <= not(RST); - IODRP_BKST <= '0'; -- future hook for possible BKST to ZIO and RZQ - - - mcb_soft_calibration_inst : mcb_soft_calibration - generic map ( - C_MEM_TZQINIT_MAXCNT => C_MEM_TZQINIT_MAXCNT, - C_MC_CALIBRATION_MODE => C_MC_CALIBRATION_MODE, - SKIP_IN_TERM_CAL => SKIP_IN_TERM_CAL, - SKIP_DYNAMIC_CAL => SKIP_DYNAMIC_CAL, - SKIP_DYN_IN_TERM => SKIP_DYN_IN_TERM, - C_SIMULATION => C_SIMULATION, - C_MEM_TYPE => C_MEM_TYPE - - ) - port map ( - UI_CLK => UI_CLK, - RST => RST, - PLL_LOCK => PLL_LOCK, - SELFREFRESH_REQ => SELFREFRESH_REQ, - SELFREFRESH_MCB_MODE => SELFREFRESH_MCB_MODE, - SELFREFRESH_MCB_REQ => SELFREFRESH_MCB_REQ, - SELFREFRESH_MODE => SELFREFRESH_MODE, - DONE_SOFTANDHARD_CAL => DONE_SOFTANDHARD_CAL_xilinx0, - IODRP_ADD => IODRP_ADD, - IODRP_SDI => IODRP_SDI, - RZQ_IN => RZQ_IN, - RZQ_IODRP_SDO => RZQ_IODRP_SDO, - RZQ_IODRP_CS => RZQ_IODRP_CS, - ZIO_IN => ZIO_IN, - ZIO_IODRP_SDO => ZIO_IODRP_SDO, - ZIO_IODRP_CS => ZIO_IODRP_CS, - MCB_UIADD => MCB_UIADD_xilinx3, - MCB_UISDI => MCB_UISDI_xilinx17, - MCB_UOSDO => MCB_UOSDO, - MCB_UODONECAL => MCB_UODONECAL, - MCB_UOREFRSHFLAG => MCB_UOREFRSHFLAG, - MCB_UICS => MCB_UICS_xilinx7, - MCB_UIDRPUPDATE => MCB_UIDRPUPDATE_xilinx13, - MCB_UIBROADCAST => MCB_UIBROADCAST_xilinx5, - MCB_UIADDR => MCB_UIADDR_xilinx4, - MCB_UICMDEN => MCB_UICMDEN_xilinx6, - MCB_UIDONECAL => MCB_UIDONECAL_xilinx8, - MCB_UIDQLOWERDEC => MCB_UIDQLOWERDEC_xilinx9, - MCB_UIDQLOWERINC => MCB_UIDQLOWERINC_xilinx10, - MCB_UIDQUPPERDEC => MCB_UIDQUPPERDEC_xilinx11, - MCB_UIDQUPPERINC => MCB_UIDQUPPERINC_xilinx12, - MCB_UILDQSDEC => MCB_UILDQSDEC_xilinx14, - MCB_UILDQSINC => MCB_UILDQSINC_xilinx15, - MCB_UIREAD => MCB_UIREAD_xilinx16, - MCB_UIUDQSDEC => MCB_UIUDQSDEC_xilinx18, - MCB_UIUDQSINC => MCB_UIUDQSINC_xilinx19, - MCB_RECAL => MCB_RECAL_xilinx1, - MCB_UICMD => MCB_UICMD, - MCB_UICMDIN => MCB_UICMDIN, - MCB_UIDQCOUNT => MCB_UIDQCOUNT, - MCB_UODATA => MCB_UODATA, - MCB_UODATAVALID => MCB_UODATAVALID, - MCB_UOCMDREADY => MCB_UOCMDREADY, - MCB_UO_CAL_START => MCB_UO_CAL_START, - mcb_sysrst => MCB_SYSRST_xilinx2, - Max_Value => Max_Value, - CKE_Train => CKE_Train - ); - - IOBUF_RZQ : IOBUF - port map ( - o => RZQ_IN, - io => RZQ_PIN, - i => RZQ_OUT, - t => RZQ_TOUT - ); - - IODRP2_RZQ : IODRP2 - port map ( - dataout => open, - dataout2 => open, - dout => RZQ_OUT, - sdo => RZQ_IODRP_SDO, - tout => RZQ_TOUT, - add => IODRP_ADD, - bkst => IODRP_BKST, - clk => UI_CLK, - cs => RZQ_IODRP_CS, - idatain => RZQ_IN, - ioclk0 => IOCLK, - ioclk1 => '1', - odatain => RZQ_ZIO_ODATAIN, - sdi => IODRP_SDI, - t => RZQ_ZIO_TRISTATE - ); - - - gen_zio: if ( ((C_MEM_TYPE = "DDR") or (C_MEM_TYPE = "DDR2") or (C_MEM_TYPE = "DDR3")) and - (SKIP_IN_TERM_CAL = 0)) generate - - IOBUF_ZIO : IOBUF - port map ( - o => ZIO_IN, - io => ZIO_PIN, - i => ZIO_OUT, - t => ZIO_TOUT - ); - - IODRP2_ZIO : IODRP2 - port map ( - dataout => open, - dataout2 => open, - dout => ZIO_OUT, - sdo => ZIO_IODRP_SDO, - tout => ZIO_TOUT, - add => IODRP_ADD, - bkst => IODRP_BKST, - clk => UI_CLK, - cs => ZIO_IODRP_CS, - idatain => ZIO_IN, - ioclk0 => IOCLK, - ioclk1 => '1', - odatain => RZQ_ZIO_ODATAIN, - sdi => IODRP_SDI, - t => RZQ_ZIO_TRISTATE - ); - end generate; - -end architecture trans; - -
ipcore_dir/mem0/user_design/rtl/mcb_soft_calibration_top.vhd Property changes : Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Index: ipcore_dir/mem0/user_design/rtl/memc3_infrastructure.orig.vhd =================================================================== --- ipcore_dir/mem0/user_design/rtl/memc3_infrastructure.orig.vhd (revision 5) +++ ipcore_dir/mem0/user_design/rtl/memc3_infrastructure.orig.vhd (nonexistent) @@ -1,310 +0,0 @@ ---***************************************************************************** --- (c) Copyright 2009 Xilinx, Inc. All rights reserved. --- --- This file contains confidential and proprietary information --- of Xilinx, Inc. and is protected under U.S. and --- international copyright and other intellectual property --- laws. --- --- DISCLAIMER --- This disclaimer is not a license and does not grant any --- rights to the materials distributed herewith. Except as --- otherwise provided in a valid license issued to you by --- Xilinx, and to the maximum extent permitted by applicable --- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND --- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES --- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING --- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- --- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and --- (2) Xilinx shall not be liable (whether in contract or tort, --- including negligence, or under any other theory of --- liability) for any loss or damage of any kind or nature --- related to, arising under or in connection with these --- materials, including for any direct, or any indirect, --- special, incidental, or consequential loss or damage --- (including loss of data, profits, goodwill, or any type of --- loss or damage suffered as a result of any action brought --- by a third party) even if such damage or loss was --- reasonably foreseeable or Xilinx had been advised of the --- possibility of the same. --- --- CRITICAL APPLICATIONS --- Xilinx products are not designed or intended to be fail- --- safe, or for use in any application requiring fail-safe --- performance, such as life-support or safety devices or --- systems, Class III medical devices, nuclear facilities, --- applications related to the deployment of airbags, or any --- other applications that could lead to death, personal --- injury, or severe property or environmental damage --- (individually and collectively, "Critical --- Applications"). Customer assumes the sole risk and --- liability of any use of Xilinx products in Critical --- Applications, subject only to applicable laws and --- regulations governing limitations on product liability. --- --- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS --- PART OF THIS FILE AT ALL TIMES. --- ---***************************************************************************** --- ____ ____ --- / /\/ / --- /___/ \ / Vendor : Xilinx --- \ \ \/ Version : 3.5 --- \ \ Application : MIG --- / / Filename : memc3_infrastructure.vhd --- /___/ /\ Date Last Modified : $Date: 2010/06/10 13:30:57 $ --- \ \ / \ Date Created : Jul 03 2009 --- \___\/\___\ --- ---Device : Spartan-6 ---Design Name : DDR/DDR2/DDR3/LPDDR ---Purpose : Clock generation/distribution and reset synchronization ---Reference : ---Revision History : ---***************************************************************************** -library ieee; -use ieee.std_logic_1164.all; -library unisim; -use unisim.vcomponents.all; - -entity memc3_infrastructure is -generic - ( - C_MEMCLK_PERIOD : integer := 2500; - C_RST_ACT_LOW : integer := 1; - C_INPUT_CLK_TYPE : string := "DIFFERENTIAL"; - C_CLKOUT0_DIVIDE : integer := 2; - C_CLKOUT1_DIVIDE : integer := 2; - C_CLKOUT2_DIVIDE : integer := 16; - C_CLKOUT3_DIVIDE : integer := 8; - C_CLKFBOUT_MULT : integer := 4; - C_DIVCLK_DIVIDE : integer := 1 - - ); -port -( - sys_clk_p : in std_logic; - sys_clk_n : in std_logic; - sys_clk : in std_logic; - sys_rst_n : in std_logic; - clk0 : out std_logic; - rst0 : out std_logic; - async_rst : out std_logic; - sysclk_2x : out std_logic; - sysclk_2x_180 : out std_logic; - mcb_drp_clk : out std_logic; - pll_ce_0 : out std_logic; - pll_ce_90 : out std_logic; - pll_lock : out std_logic - -); -end entity; -architecture syn of memc3_infrastructure is - - -- # of clock cycles to delay deassertion of reset. Needs to be a fairly - -- high number not so much for metastability protection, but to give time - -- for reset (i.e. stable clock cycles) to propagate through all state - -- machines and to all control signals (i.e. not all control signals have - -- resets, instead they rely on base state logic being reset, and the effect - -- of that reset propagating through the logic). Need this because we may not - -- be getting stable clock cycles while reset asserted (i.e. since reset - -- depends on PLL/DCM lock status) - - constant RST_SYNC_NUM : integer := 25; - constant CLK_PERIOD_NS : real := (real(C_MEMCLK_PERIOD)) / 1000.0; - constant CLK_PERIOD_INT : integer := C_MEMCLK_PERIOD/1000; - - - signal clk_2x_0 : std_logic; - signal clk_2x_180 : std_logic; - signal clk0_bufg : std_logic; - signal clk0_bufg_in : std_logic; - signal mcb_drp_clk_bufg_in : std_logic; - signal clkfbout_clkfbin : std_logic; - signal rst_tmp : std_logic; - signal sys_clk_ibufg : std_logic; - signal sys_rst : std_logic; - signal rst0_sync_r : std_logic_vector(RST_SYNC_NUM-1 downto 0); - signal powerup_pll_locked : std_logic; - signal locked : std_logic; - signal bufpll_mcb_locked : std_logic; - signal mcb_drp_clk_sig : std_logic; - - attribute max_fanout : string; - attribute syn_maxfan : integer; - attribute KEEP : string; - attribute max_fanout of rst0_sync_r : signal is "10"; - attribute syn_maxfan of rst0_sync_r : signal is 10; - attribute KEEP of sys_clk_ibufg : signal is "TRUE"; - -begin - - sys_rst <= not(sys_rst_n) when (C_RST_ACT_LOW /= 0) else sys_rst_n; - clk0 <= clk0_bufg; - pll_lock <= bufpll_mcb_locked; - mcb_drp_clk <= mcb_drp_clk_sig; - - diff_input_clk : if(C_INPUT_CLK_TYPE = "DIFFERENTIAL") generate - --*********************************************************************** - -- Differential input clock input buffers - --*********************************************************************** - u_ibufg_sys_clk : IBUFGDS - generic map ( - DIFF_TERM => TRUE - ) - port map ( - I => sys_clk_p, - IB => sys_clk_n, - O => sys_clk_ibufg - ); - end generate; - - - se_input_clk : if(C_INPUT_CLK_TYPE = "SINGLE_ENDED") generate - --*********************************************************************** - -- SINGLE_ENDED input clock input buffers - --*********************************************************************** - u_ibufg_sys_clk : IBUFG - port map ( - I => sys_clk, - O => sys_clk_ibufg - ); - end generate; - - --*************************************************************************** - -- Global clock generation and distribution - --*************************************************************************** - - u_pll_adv : PLL_ADV - generic map - ( - BANDWIDTH => "OPTIMIZED", - CLKIN1_PERIOD => CLK_PERIOD_NS, - CLKIN2_PERIOD => CLK_PERIOD_NS, - CLKOUT0_DIVIDE => C_CLKOUT0_DIVIDE, - CLKOUT1_DIVIDE => C_CLKOUT1_DIVIDE, - CLKOUT2_DIVIDE => C_CLKOUT2_DIVIDE, - CLKOUT3_DIVIDE => C_CLKOUT3_DIVIDE, - CLKOUT4_DIVIDE => 1, - CLKOUT5_DIVIDE => 1, - CLKOUT0_PHASE => 0.000, - CLKOUT1_PHASE => 180.000, - CLKOUT2_PHASE => 0.000, - CLKOUT3_PHASE => 0.000, - CLKOUT4_PHASE => 0.000, - CLKOUT5_PHASE => 0.000, - CLKOUT0_DUTY_CYCLE => 0.500, - CLKOUT1_DUTY_CYCLE => 0.500, - CLKOUT2_DUTY_CYCLE => 0.500, - CLKOUT3_DUTY_CYCLE => 0.500, - CLKOUT4_DUTY_CYCLE => 0.500, - CLKOUT5_DUTY_CYCLE => 0.500, - COMPENSATION => "INTERNAL", - DIVCLK_DIVIDE => C_DIVCLK_DIVIDE, - CLKFBOUT_MULT => C_CLKFBOUT_MULT, - CLKFBOUT_PHASE => 0.0, - REF_JITTER => 0.005000 - ) - port map - ( - CLKFBIN => clkfbout_clkfbin, - CLKINSEL => '1', - CLKIN1 => sys_clk_ibufg, - CLKIN2 => '0', - DADDR => (others => '0'), - DCLK => '0', - DEN => '0', - DI => (others => '0'), - DWE => '0', - REL => '0', - RST => sys_rst, - CLKFBDCM => open, - CLKFBOUT => clkfbout_clkfbin, - CLKOUTDCM0 => open, - CLKOUTDCM1 => open, - CLKOUTDCM2 => open, - CLKOUTDCM3 => open, - CLKOUTDCM4 => open, - CLKOUTDCM5 => open, - CLKOUT0 => clk_2x_0, - CLKOUT1 => clk_2x_180, - CLKOUT2 => clk0_bufg_in, - CLKOUT3 => mcb_drp_clk_bufg_in, - CLKOUT4 => open, - CLKOUT5 => open, - DO => open, - DRDY => open, - LOCKED => locked - ); - - U_BUFG_CLK0 : BUFG - port map - ( - O => clk0_bufg, - I => clk0_bufg_in - ); - - U_BUFG_CLK1 : BUFG - port map ( - O => mcb_drp_clk_sig, - I => mcb_drp_clk_bufg_in - ); - - process (clk0_bufg, sys_rst) - begin - if (clk0_bufg'event and clk0_bufg = '1') then - if(sys_rst = '1') then - powerup_pll_locked <= '0'; - elsif (bufpll_mcb_locked = '1') then - powerup_pll_locked <= '1'; - end if; - end if; - end process; - - --*************************************************************************** - -- Reset synchronization - -- NOTES: - -- 1. shut down the whole operation if the PLL hasn't yet locked (and - -- by inference, this means that external sys_rst has been asserted - - -- PLL deasserts LOCKED as soon as sys_rst asserted) - -- 2. asynchronously assert reset. This was we can assert reset even if - -- there is no clock (needed for things like 3-stating output buffers). - -- reset deassertion is synchronous. - -- 3. asynchronous reset only look at pll_lock from PLL during power up. After - -- power up and pll_lock is asserted, the powerup_pll_locked will be asserted - -- forever until sys_rst is asserted again. PLL will lose lock when FPGA - -- enters suspend mode. We don't want reset to MCB get - -- asserted in the application that needs suspend feature. - --*************************************************************************** - - rst_tmp <= sys_rst or not(powerup_pll_locked); - - async_rst <= rst_tmp; - -process (clk0_bufg, rst_tmp) - begin - if (rst_tmp = '1') then - rst0_sync_r <= (others => '1'); - elsif (rising_edge(clk0_bufg)) then - rst0_sync_r <= rst0_sync_r(RST_SYNC_NUM-2 downto 0) & '0'; -- logical left shift by one (pads with 0) - end if; - end process; - - rst0 <= rst0_sync_r(RST_SYNC_NUM-1); - - -BUFPLL_MCB_INST : BUFPLL_MCB -port map -( IOCLK0 => sysclk_2x, - IOCLK1 => sysclk_2x_180, - LOCKED => locked, - GCLK => mcb_drp_clk_sig, - SERDESSTROBE0 => pll_ce_0, - SERDESSTROBE1 => pll_ce_90, - PLLIN0 => clk_2x_0, - PLLIN1 => clk_2x_180, - LOCK => bufpll_mcb_locked - ); - -end architecture syn; - Index: ipcore_dir/mem0/user_design/rtl/iodrp_mcb_controller.vhd =================================================================== --- ipcore_dir/mem0/user_design/rtl/iodrp_mcb_controller.vhd (revision 5) +++ ipcore_dir/mem0/user_design/rtl/iodrp_mcb_controller.vhd (nonexistent) @@ -1,502 +0,0 @@ ---***************************************************************************** --- (c) Copyright 2009 Xilinx, Inc. All rights reserved. --- --- This file contains confidential and proprietary information --- of Xilinx, Inc. and is protected under U.S. and --- international copyright and other intellectual property --- laws. --- --- DISCLAIMER --- This disclaimer is not a license and does not grant any --- rights to the materials distributed herewith. Except as --- otherwise provided in a valid license issued to you by --- Xilinx, and to the maximum extent permitted by applicable --- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND --- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES --- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING --- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- --- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and --- (2) Xilinx shall not be liable (whether in contract or tort, --- including negligence, or under any other theory of --- liability) for any loss or damage of any kind or nature --- related to, arising under or in connection with these --- materials, including for any direct, or any indirect, --- special, incidental, or consequential loss or damage --- (including loss of data, profits, goodwill, or any type of --- loss or damage suffered as a result of any action brought --- by a third party) even if such damage or loss was --- reasonably foreseeable or Xilinx had been advised of the --- possibility of the same. --- --- CRITICAL APPLICATIONS --- Xilinx products are not designed or intended to be fail- --- safe, or for use in any application requiring fail-safe --- performance, such as life-support or safety devices or --- systems, Class III medical devices, nuclear facilities, --- applications related to the deployment of airbags, or any --- other applications that could lead to death, personal --- injury, or severe property or environmental damage --- (individually and collectively, "Critical --- Applications"). Customer assumes the sole risk and --- liability of any use of Xilinx products in Critical --- Applications, subject only to applicable laws and --- regulations governing limitations on product liability. --- --- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS --- PART OF THIS FILE AT ALL TIMES. --- ---***************************************************************************** --- ____ ____ --- / /\/ / --- /___/ \ / Vendor: Xilinx --- \ \ \/ Version: %version --- \ \ Application: MIG --- / / Filename: iodrp_mcb_controller.vhd --- /___/ /\ Date Last Modified: $Date: 2010/03/21 17:21:17 $ --- \ \ / \ Date Created: Mon Feb 9 2009 --- \___\/\___\ --- ---Device: Spartan6 ---Design Name: DDR/DDR2/DDR3/LPDDR ---Purpose: Xilinx reference design for IODRP controller for v0.9 device --- ---Reference: --- --- Revision: Date: Comment --- 1.0: 03/19/09: Initial version for IODRP_MCB read operations. --- 1.1: 04/03/09: SLH - Added left shift for certain IOI's --- End Revision ---******************************************************************************* - -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - -entity iodrp_mcb_controller is - --output to IODRP SDI pin - --input from IODRP SDO pin - - -- Register where memcell_address is captured during the READY state - -- Register which stores the write data until it is ready to be shifted out - -- The shift register which shifts out SDO and shifts in SDI. - -- This register is loaded before the address or data phase, but continues to shift for a writeback of read data - -- The signal which causes shift_through_reg to load the new value from data_out_mux, or continue to shift data in from DRP_SDO - -- The signal which indicates where the shift_through_reg should load from. 0 -> data_reg 1 -> memcell_addr_reg - -- The counter for which bit is being shifted during address or data phase - -- This is set after the first address phase has executed - - -- The mux which selects between data_reg and memcell_addr_reg for sending to shift_through_reg - --added so that DRP_SDI output is only active when DRP_CS is active - port ( - memcell_address : in std_logic_vector(7 downto 0); - write_data : in std_logic_vector(7 downto 0); - read_data : out std_logic_vector(7 downto 0); - rd_not_write : in std_logic; - cmd_valid : in std_logic; - rdy_busy_n : out std_logic; - use_broadcast : in std_logic; - drp_ioi_addr : in std_logic_vector(4 downto 0); - sync_rst : in std_logic; - DRP_CLK : in std_logic; - DRP_CS : out std_logic; - DRP_SDI : out std_logic; - DRP_ADD : out std_logic; - DRP_BKST : out std_logic; - DRP_SDO : in std_logic; - MCB_UIREAD : out std_logic - ); -end entity iodrp_mcb_controller; - -architecture trans of iodrp_mcb_controller is - - constant READY : std_logic_vector(3 downto 0) := "0000"; - constant DECIDE : std_logic_vector(3 downto 0) := "0001"; - constant ADDR_PHASE : std_logic_vector(3 downto 0) := "0010"; - constant ADDR_TO_DATA_GAP : std_logic_vector(3 downto 0) := "0011"; - constant ADDR_TO_DATA_GAP2 : std_logic_vector(3 downto 0) := "0100"; - constant ADDR_TO_DATA_GAP3 : std_logic_vector(3 downto 0) := "0101"; - constant DATA_PHASE : std_logic_vector(3 downto 0) := "0110"; - constant ALMOST_READY : std_logic_vector(3 downto 0) := "0111"; - constant ALMOST_READY2 : std_logic_vector(3 downto 0) := "1001"; - constant ALMOST_READY3 : std_logic_vector(3 downto 0) := "1010"; - - constant IOI_DQ0 : std_logic_vector(4 downto 0) := "00001"; - constant IOI_DQ1 : std_logic_vector(4 downto 0) := "00000"; - constant IOI_DQ2 : std_logic_vector(4 downto 0) := "00011"; - constant IOI_DQ3 : std_logic_vector(4 downto 0) := "00010"; - constant IOI_DQ4 : std_logic_vector(4 downto 0) := "00101"; - constant IOI_DQ5 : std_logic_vector(4 downto 0) := "00100"; - constant IOI_DQ6 : std_logic_vector(4 downto 0) := "00111"; - constant IOI_DQ7 : std_logic_vector(4 downto 0) := "00110"; - constant IOI_DQ8 : std_logic_vector(4 downto 0) := "01001"; - constant IOI_DQ9 : std_logic_vector(4 downto 0) := "01000"; - constant IOI_DQ10 : std_logic_vector(4 downto 0) := "01011"; - constant IOI_DQ11 : std_logic_vector(4 downto 0) := "01010"; - constant IOI_DQ12 : std_logic_vector(4 downto 0) := "01101"; - constant IOI_DQ13 : std_logic_vector(4 downto 0) := "01100"; - constant IOI_DQ14 : std_logic_vector(4 downto 0) := "01111"; - constant IOI_DQ15 : std_logic_vector(4 downto 0) := "01110"; - constant IOI_UDQS_CLK : std_logic_vector(4 downto 0) := "11101"; - constant IOI_UDQS_PIN : std_logic_vector(4 downto 0) := "11100"; - constant IOI_LDQS_CLK : std_logic_vector(4 downto 0) := "11111"; - constant IOI_LDQS_PIN : std_logic_vector(4 downto 0) := "11110"; - - - signal memcell_addr_reg : std_logic_vector(7 downto 0); - signal data_reg : std_logic_vector(7 downto 0); - signal shift_through_reg : std_logic_vector(8 downto 0); - signal load_shift_n : std_logic; - signal addr_data_sel_n : std_logic; - signal bit_cnt : std_logic_vector(2 downto 0); - signal rd_not_write_reg : std_logic; - signal AddressPhase : std_logic; - signal DRP_CS_pre : std_logic; - signal extra_cs : std_logic; - signal state : std_logic_vector(3 downto 0); - signal nextstate : std_logic_vector(3 downto 0); - signal data_out : std_logic_vector(8 downto 0); - signal data_out_mux : std_logic_vector(8 downto 0); - signal DRP_SDI_pre : std_logic; - - --synthesis translate_off - signal state_ascii : std_logic_vector(32 * 8 - 1 downto 0); - -- case(state) - --synthesis translate_on - - -- The changes below are to compensate for an issue with 1.0 silicon. - -- It may still be necessary to add a clock cycle to the ADD and CS signals - - --`define DRP_v1_0_FIX // Uncomment out this line for synthesis - - procedure shift_n_expand( - data_in : in std_logic_vector(7 downto 0); - data_out : out std_logic_vector(8 downto 0)) is - - variable data_out_xilinx2 : std_logic_vector(8 downto 0); - begin - if ((data_in(0)) = '1') then - data_out_xilinx2(1 downto 0) := "11"; - else - - data_out_xilinx2(1 downto 0) := "00"; - end if; - if (data_in(1 downto 0) = "10") then - data_out_xilinx2(2 downto 1) := "11"; - else - - data_out_xilinx2(2 downto 1) := (data_in(1) & data_out_xilinx2(1)); - end if; - if (data_in(2 downto 1) = "10") then - data_out_xilinx2(3 downto 2) := "11"; - else - - data_out_xilinx2(3 downto 2) := (data_in(2) & data_out_xilinx2(2)); - end if; - if (data_in(3 downto 2) = "10") then - data_out_xilinx2(4 downto 3) := "11"; - else - - data_out_xilinx2(4 downto 3) := (data_in(3) & data_out_xilinx2(3)); - end if; - if (data_in(4 downto 3) = "10") then - data_out_xilinx2(5 downto 4) := "11"; - else - - data_out_xilinx2(5 downto 4) := (data_in(4) & data_out_xilinx2(4)); - end if; - if (data_in(5 downto 4) = "10") then - data_out_xilinx2(6 downto 5) := "11"; - else - - data_out_xilinx2(6 downto 5) := (data_in(5) & data_out_xilinx2(5)); - end if; - if (data_in(6 downto 5) = "10") then - data_out_xilinx2(7 downto 6) := "11"; - else - - data_out_xilinx2(7 downto 6) := (data_in(6) & data_out_xilinx2(6)); - end if; - if (data_in(7 downto 6) = "10") then - data_out_xilinx2(8 downto 7) := "11"; - else - data_out_xilinx2(8 downto 7) := (data_in(7) & data_out_xilinx2(7)); - end if; - end shift_n_expand; - - - -- Declare intermediate signals for referenced outputs - signal DRP_CS_xilinx1 : std_logic; - signal DRP_ADD_xilinx0 : std_logic; - - signal ALMOST_READY2_ST : std_logic; - signal ADDR_PHASE_ST : std_logic; - signal BIT_CNT7 : std_logic; - signal ADDR_PHASE_ST1 : std_logic; - signal DATA_PHASE_ST : std_logic; - -begin - -- Drive referenced outputs - DRP_CS <= DRP_CS_xilinx1; - DRP_ADD <= DRP_ADD_xilinx0; - - --- process (state) --- begin --- case state is --- when READY => --- state_ascii <= "READY"; --- when DECIDE => --- state_ascii <= "DECIDE"; --- when ADDR_PHASE => --- state_ascii <= "ADDR_PHASE"; --- when ADDR_TO_DATA_GAP => --- state_ascii <= "ADDR_TO_DATA_GAP"; --- when ADDR_TO_DATA_GAP2 => --- state_ascii <= "ADDR_TO_DATA_GAP2"; --- when ADDR_TO_DATA_GAP3 => --- state_ascii <= "ADDR_TO_DATA_GAP3"; --- when DATA_PHASE => --- state_ascii <= "DATA_PHASE"; --- when ALMOST_READY => --- state_ascii <= "ALMOST_READY"; --- when ALMOST_READY2 => --- state_ascii <= "ALMOST_READY2"; --- when ALMOST_READY3 => --- state_ascii <= "ALMOST_READY3"; --- when others => --- null; --- end case; --- end process; - - process (DRP_CLK) - begin - if (DRP_CLK'event and DRP_CLK = '1') then - if (state = READY) then - memcell_addr_reg <= memcell_address; - data_reg <= write_data; - rd_not_write_reg <= rd_not_write; - end if; - end if; - end process; - - rdy_busy_n <= '1' when state = READY else '0'; - - process (drp_ioi_addr, data_out) - begin - - case drp_ioi_addr is - when IOI_DQ0 => - data_out_mux <= data_out; - when IOI_DQ1 => - data_out_mux <= data_out; - when IOI_DQ2 => - data_out_mux <= data_out; - when IOI_DQ3 => - data_out_mux <= data_out; - when IOI_DQ4 => - data_out_mux <= data_out; - when IOI_DQ5 => - data_out_mux <= data_out; - when IOI_DQ6 => - data_out_mux <= data_out; - when IOI_DQ7 => - data_out_mux <= data_out; - when IOI_DQ8 => - data_out_mux <= data_out; - when IOI_DQ9 => - data_out_mux <= data_out; - when IOI_DQ10 => - data_out_mux <= data_out; - when IOI_DQ11 => - data_out_mux <= data_out; - when IOI_DQ12 => - data_out_mux <= data_out; - when IOI_DQ13 => - data_out_mux <= data_out; - when IOI_DQ14 => - data_out_mux <= data_out; - when IOI_DQ15 => - data_out_mux <= data_out; - when IOI_UDQS_CLK => - data_out_mux <= data_out; - when IOI_UDQS_PIN => - data_out_mux <= data_out; - when IOI_LDQS_CLK => - data_out_mux <= data_out; - when IOI_LDQS_PIN => - data_out_mux <= data_out; - when others => - data_out_mux <= data_out; - end case; - end process; - - - data_out <= ('0' & memcell_addr_reg) when (addr_data_sel_n = '1') else - ('0' & data_reg); - - process (DRP_CLK) - begin - if (DRP_CLK'event and DRP_CLK = '1') then - if (sync_rst = '1') then - shift_through_reg <= "000000000"; - else - if (load_shift_n = '1') then --Assume the shifter is either loading or shifting, bit 0 is shifted out first - shift_through_reg <= data_out_mux; - else - shift_through_reg <= ('0' & DRP_SDO & shift_through_reg(7 downto 1)); - end if; - end if; - end if; - end process; - - - process (DRP_CLK) - begin - if (DRP_CLK'event and DRP_CLK = '1') then - if (((state = ADDR_PHASE) or (state = DATA_PHASE)) and (not(sync_rst)) = '1') then - bit_cnt <= bit_cnt + "001"; - else - bit_cnt <= "000"; - end if; - end if; - end process; - - - process (DRP_CLK) - begin - if (DRP_CLK'event and DRP_CLK = '1') then - if (sync_rst = '1') then - read_data <= "00000000"; - else - if (state = ALMOST_READY3) then - read_data <= shift_through_reg(7 downto 0); - end if; - end if; - end if; - end process; - - ALMOST_READY2_ST <= '1' when state = ALMOST_READY2 else '0'; - ADDR_PHASE_ST <= '1' when state = ADDR_PHASE else '0'; - BIT_CNT7 <= '1' when bit_cnt = "111" else '0'; - - process (DRP_CLK) - begin - if (DRP_CLK'event and DRP_CLK = '1') then - if (sync_rst = '1') then - AddressPhase <= '0'; - else - if (AddressPhase = '1') then - -- Keep it set until we finish the cycle - AddressPhase <= AddressPhase and (not ALMOST_READY2_ST); - else - -- set the address phase when ever we finish the address phase - AddressPhase <= (ADDR_PHASE_ST and BIT_CNT7); - end if; - end if; - end if; - end process; - -ADDR_PHASE_ST1 <= '1' when nextstate = ADDR_PHASE else '0'; -DATA_PHASE_ST <= '1' when nextstate = DATA_PHASE else '0'; - - - - process (DRP_CLK) - begin - if (DRP_CLK'event and DRP_CLK = '1') then - DRP_ADD_xilinx0 <= ADDR_PHASE_ST1; - -- DRP_CS <= (drp_ioi_addr != IOI_DQ0) ? (nextstate == ADDR_PHASE) | (nextstate == DATA_PHASE) : (bit_cnt != 3'b111) && (nextstate == ADDR_PHASE) | (nextstate == DATA_PHASE); - DRP_CS_xilinx1 <= ADDR_PHASE_ST1 or DATA_PHASE_ST; - MCB_UIREAD <= DATA_PHASE_ST and rd_not_write_reg; - if (state = READY) then - DRP_BKST <= use_broadcast; - end if; - end if; - end process; - - - DRP_SDI_pre <= shift_through_reg(0) when (DRP_CS_xilinx1 = '1') else --if DRP_CS is inactive, just drive 0 out - this is a possible place to pipeline for increased performance - '0'; - DRP_SDI <= DRP_SDO when ((rd_not_write_reg and DRP_CS_xilinx1 and not(DRP_ADD_xilinx0)) = '1') else --If reading, then feed SDI back out SDO - this is a possible place to pipeline for increased performance - DRP_SDI_pre; - - process (state, cmd_valid, bit_cnt, rd_not_write_reg, AddressPhase) - begin - addr_data_sel_n <= '0'; - load_shift_n <= '0'; - case state is - when READY => - load_shift_n <= '0'; - if (cmd_valid = '1') then - nextstate <= DECIDE; - else - nextstate <= READY; - end if; - when DECIDE => - load_shift_n <= '1'; - addr_data_sel_n <= '1'; - nextstate <= ADDR_PHASE; - -- After the second pass go to end of statemachine - -- execute a second address phase for the alternative access method. - when ADDR_PHASE => - load_shift_n <= '0'; - if (BIT_CNT7 = '1') then - if (('1' and rd_not_write_reg) = '1') then - if (AddressPhase = '1') then - nextstate <= ALMOST_READY; - else - nextstate <= DECIDE; - end if; - else - nextstate <= ADDR_TO_DATA_GAP; - end if; - else - nextstate <= ADDR_PHASE; - end if; - when ADDR_TO_DATA_GAP => - load_shift_n <= '1'; - nextstate <= ADDR_TO_DATA_GAP2; - when ADDR_TO_DATA_GAP2 => - load_shift_n <= '1'; - nextstate <= ADDR_TO_DATA_GAP3; - when ADDR_TO_DATA_GAP3 => - load_shift_n <= '1'; - nextstate <= DATA_PHASE; - when DATA_PHASE => - load_shift_n <= '0'; - if (BIT_CNT7 = '1') then - nextstate <= ALMOST_READY; - else - nextstate <= DATA_PHASE; - end if; - when ALMOST_READY => - load_shift_n <= '0'; - nextstate <= ALMOST_READY2; - when ALMOST_READY2 => - load_shift_n <= '0'; - nextstate <= ALMOST_READY3; - when ALMOST_READY3 => - load_shift_n <= '0'; - nextstate <= READY; - when others => - load_shift_n <= '0'; - nextstate <= READY; - end case; - end process; - - - process (DRP_CLK) - begin - if (DRP_CLK'event and DRP_CLK = '1') then - if (sync_rst = '1') then - state <= READY; - else - state <= nextstate; - end if; - end if; - end process; - - -end architecture trans; - -
ipcore_dir/mem0/user_design/rtl/iodrp_mcb_controller.vhd Property changes : Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Index: ipcore_dir/mem0/user_design/rtl/memc3_infrastructure.bak.vhd =================================================================== --- ipcore_dir/mem0/user_design/rtl/memc3_infrastructure.bak.vhd (revision 5) +++ ipcore_dir/mem0/user_design/rtl/memc3_infrastructure.bak.vhd (nonexistent) @@ -1,281 +0,0 @@ ---***************************************************************************** --- (c) Copyright 2009 Xilinx, Inc. All rights reserved. --- --- This file contains confidential and proprietary information --- of Xilinx, Inc. and is protected under U.S. and --- international copyright and other intellectual property --- laws. --- --- DISCLAIMER --- This disclaimer is not a license and does not grant any --- rights to the materials distributed herewith. Except as --- otherwise provided in a valid license issued to you by --- Xilinx, and to the maximum extent permitted by applicable --- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND --- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES --- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING --- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- --- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and --- (2) Xilinx shall not be liable (whether in contract or tort, --- including negligence, or under any other theory of --- liability) for any loss or damage of any kind or nature --- related to, arising under or in connection with these --- materials, including for any direct, or any indirect, --- special, incidental, or consequential loss or damage --- (including loss of data, profits, goodwill, or any type of --- loss or damage suffered as a result of any action brought --- by a third party) even if such damage or loss was --- reasonably foreseeable or Xilinx had been advised of the --- possibility of the same. --- --- CRITICAL APPLICATIONS --- Xilinx products are not designed or intended to be fail- --- safe, or for use in any application requiring fail-safe --- performance, such as life-support or safety devices or --- systems, Class III medical devices, nuclear facilities, --- applications related to the deployment of airbags, or any --- other applications that could lead to death, personal --- injury, or severe property or environmental damage --- (individually and collectively, "Critical --- Applications"). Customer assumes the sole risk and --- liability of any use of Xilinx products in Critical --- Applications, subject only to applicable laws and --- regulations governing limitations on product liability. --- --- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS --- PART OF THIS FILE AT ALL TIMES. --- ---***************************************************************************** --- ____ ____ --- / /\/ / --- /___/ \ / Vendor : Xilinx --- \ \ \/ Version : 3.5 --- \ \ Application : MIG --- / / Filename : memc3_infrastructure.vhd --- /___/ /\ Date Last Modified : $Date: 2010/06/10 13:30:57 $ --- \ \ / \ Date Created : Jul 03 2009 --- \___\/\___\ --- ---Device : Spartan-6 ---Design Name : DDR/DDR2/DDR3/LPDDR ---Purpose : Clock generation/distribution and reset synchronization ---Reference : ---Revision History : ---***************************************************************************** -library ieee; -use ieee.std_logic_1164.all; -library unisim; -use unisim.vcomponents.all; - -entity memc3_infrastructure is -generic - ( - C_MEMCLK_PERIOD : integer := 2500; - C_RST_ACT_LOW : integer := 1; - C_INPUT_CLK_TYPE : string := "DIFFERENTIAL"; - C_CLKOUT0_DIVIDE : integer := 2; - C_CLKOUT1_DIVIDE : integer := 2; - C_CLKOUT2_DIVIDE : integer := 16; - C_CLKOUT3_DIVIDE : integer := 8; - C_CLKFBOUT_MULT : integer := 4; - C_DIVCLK_DIVIDE : integer := 1 - - ); -port -( - sys_clk_p : in std_logic; - sys_clk_n : in std_logic; - sys_clk : in std_logic; - sys_rst_n : in std_logic; - clk0 : out std_logic; - rst0 : out std_logic; - async_rst : out std_logic; - sysclk_2x : out std_logic; - sysclk_2x_180 : out std_logic; - mcb_drp_clk : out std_logic; - pll_ce_0 : out std_logic; - pll_ce_90 : out std_logic; - pll_lock : out std_logic - -); -end entity; -architecture syn of memc3_infrastructure is - - -- # of clock cycles to delay deassertion of reset. Needs to be a fairly - -- high number not so much for metastability protection, but to give time - -- for reset (i.e. stable clock cycles) to propagate through all state - -- machines and to all control signals (i.e. not all control signals have - -- resets, instead they rely on base state logic being reset, and the effect - -- of that reset propagating through the logic). Need this because we may not - -- be getting stable clock cycles while reset asserted (i.e. since reset - -- depends on PLL/DCM lock status) - - constant RST_SYNC_NUM : integer := 25; - constant CLK_PERIOD_NS : real := (real(C_MEMCLK_PERIOD)) / 1000.0; - constant CLK_PERIOD_INT : integer := C_MEMCLK_PERIOD/1000; - - - signal clk_2x_0 : std_logic; - signal clk_2x_180 : std_logic; - signal clk0_bufg : std_logic; - signal clk0_bufg_in : std_logic; - signal mcb_drp_clk_bufg_in : std_logic; - signal clkfbout_clkfbin : std_logic; - signal rst_tmp : std_logic; - signal sys_rst : std_logic; - signal rst0_sync_r : std_logic_vector(RST_SYNC_NUM-1 downto 0); - signal powerup_pll_locked : std_logic; - signal locked : std_logic; - signal bufpll_mcb_locked : std_logic; - signal mcb_drp_clk_sig : std_logic; - - attribute max_fanout : string; - attribute syn_maxfan : integer; - attribute KEEP : string; - attribute max_fanout of rst0_sync_r : signal is "10"; - attribute syn_maxfan of rst0_sync_r : signal is 10; - -begin - - sys_rst <= not(sys_rst_n) when (C_RST_ACT_LOW /= 0) else sys_rst_n; - clk0 <= clk0_bufg; - pll_lock <= bufpll_mcb_locked; - mcb_drp_clk <= mcb_drp_clk_sig; - - --*************************************************************************** - -- Global clock generation and distribution - --*************************************************************************** - - u_pll_adv : PLL_ADV - generic map - ( - BANDWIDTH => "OPTIMIZED", - CLKIN1_PERIOD => CLK_PERIOD_NS, - CLKIN2_PERIOD => CLK_PERIOD_NS, - CLKOUT0_DIVIDE => C_CLKOUT0_DIVIDE, - CLKOUT1_DIVIDE => C_CLKOUT1_DIVIDE, - CLKOUT2_DIVIDE => C_CLKOUT2_DIVIDE, - CLKOUT3_DIVIDE => C_CLKOUT3_DIVIDE, - CLKOUT4_DIVIDE => 1, - CLKOUT5_DIVIDE => 1, - CLKOUT0_PHASE => 0.000, - CLKOUT1_PHASE => 180.000, - CLKOUT2_PHASE => 0.000, - CLKOUT3_PHASE => 0.000, - CLKOUT4_PHASE => 0.000, - CLKOUT5_PHASE => 0.000, - CLKOUT0_DUTY_CYCLE => 0.500, - CLKOUT1_DUTY_CYCLE => 0.500, - CLKOUT2_DUTY_CYCLE => 0.500, - CLKOUT3_DUTY_CYCLE => 0.500, - CLKOUT4_DUTY_CYCLE => 0.500, - CLKOUT5_DUTY_CYCLE => 0.500, - COMPENSATION => "INTERNAL", - DIVCLK_DIVIDE => C_DIVCLK_DIVIDE, - CLKFBOUT_MULT => C_CLKFBOUT_MULT, - CLKFBOUT_PHASE => 0.0, - REF_JITTER => 0.005000 - ) - port map - ( - CLKFBIN => clkfbout_clkfbin, - CLKINSEL => '1', - CLKIN1 => sys_clk, - CLKIN2 => '0', - DADDR => (others => '0'), - DCLK => '0', - DEN => '0', - DI => (others => '0'), - DWE => '0', - REL => '0', - RST => sys_rst, - CLKFBDCM => open, - CLKFBOUT => clkfbout_clkfbin, - CLKOUTDCM0 => open, - CLKOUTDCM1 => open, - CLKOUTDCM2 => open, - CLKOUTDCM3 => open, - CLKOUTDCM4 => open, - CLKOUTDCM5 => open, - CLKOUT0 => clk_2x_0, - CLKOUT1 => clk_2x_180, - CLKOUT2 => clk0_bufg_in, - CLKOUT3 => mcb_drp_clk_bufg_in, - CLKOUT4 => open, - CLKOUT5 => open, - DO => open, - DRDY => open, - LOCKED => locked - ); - - U_BUFG_CLK0 : BUFG - port map - ( - O => clk0_bufg, - I => clk0_bufg_in - ); - - U_BUFG_CLK1 : BUFG - port map ( - O => mcb_drp_clk_sig, - I => mcb_drp_clk_bufg_in - ); - - process (clk0_bufg, sys_rst) - begin - if (clk0_bufg'event and clk0_bufg = '1') then - if(sys_rst = '1') then - powerup_pll_locked <= '0'; - elsif (bufpll_mcb_locked = '1') then - powerup_pll_locked <= '1'; - end if; - end if; - end process; - - --*************************************************************************** - -- Reset synchronization - -- NOTES: - -- 1. shut down the whole operation if the PLL hasn't yet locked (and - -- by inference, this means that external sys_rst has been asserted - - -- PLL deasserts LOCKED as soon as sys_rst asserted) - -- 2. asynchronously assert reset. This was we can assert reset even if - -- there is no clock (needed for things like 3-stating output buffers). - -- reset deassertion is synchronous. - -- 3. asynchronous reset only look at pll_lock from PLL during power up. After - -- power up and pll_lock is asserted, the powerup_pll_locked will be asserted - -- forever until sys_rst is asserted again. PLL will lose lock when FPGA - -- enters suspend mode. We don't want reset to MCB get - -- asserted in the application that needs suspend feature. - --*************************************************************************** - - rst_tmp <= sys_rst or not(powerup_pll_locked); - - async_rst <= rst_tmp; - -process (clk0_bufg, rst_tmp) - begin - if (rst_tmp = '1') then - rst0_sync_r <= (others => '1'); - elsif (rising_edge(clk0_bufg)) then - rst0_sync_r <= rst0_sync_r(RST_SYNC_NUM-2 downto 0) & '0'; -- logical left shift by one (pads with 0) - end if; - end process; - - rst0 <= rst0_sync_r(RST_SYNC_NUM-1); - - -BUFPLL_MCB_INST : BUFPLL_MCB -port map -( IOCLK0 => sysclk_2x, - IOCLK1 => sysclk_2x_180, - LOCKED => locked, - GCLK => mcb_drp_clk_sig, - SERDESSTROBE0 => pll_ce_0, - SERDESSTROBE1 => pll_ce_90, - PLLIN0 => clk_2x_0, - PLLIN1 => clk_2x_180, - LOCK => bufpll_mcb_locked - ); - -end architecture syn; - Index: ipcore_dir/mem0/user_design/rtl/memc3_wrapper.vhd =================================================================== --- ipcore_dir/mem0/user_design/rtl/memc3_wrapper.vhd (revision 5) +++ ipcore_dir/mem0/user_design/rtl/memc3_wrapper.vhd (nonexistent) @@ -1,1022 +0,0 @@ ---***************************************************************************** --- (c) Copyright 2009 Xilinx, Inc. All rights reserved. --- --- This file contains confidential and proprietary information --- of Xilinx, Inc. and is protected under U.S. and --- international copyright and other intellectual property --- laws. --- --- DISCLAIMER --- This disclaimer is not a license and does not grant any --- rights to the materials distributed herewith. Except as --- otherwise provided in a valid license issued to you by --- Xilinx, and to the maximum extent permitted by applicable --- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND --- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES --- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING --- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- --- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and --- (2) Xilinx shall not be liable (whether in contract or tort, --- including negligence, or under any other theory of --- liability) for any loss or damage of any kind or nature --- related to, arising under or in connection with these --- materials, including for any direct, or any indirect, --- special, incidental, or consequential loss or damage --- (including loss of data, profits, goodwill, or any type of --- loss or damage suffered as a result of any action brought --- by a third party) even if such damage or loss was --- reasonably foreseeable or Xilinx had been advised of the --- possibility of the same. --- --- CRITICAL APPLICATIONS --- Xilinx products are not designed or intended to be fail- --- safe, or for use in any application requiring fail-safe --- performance, such as life-support or safety devices or --- systems, Class III medical devices, nuclear facilities, --- applications related to the deployment of airbags, or any --- other applications that could lead to death, personal --- injury, or severe property or environmental damage --- (individually and collectively, "Critical --- Applications"). Customer assumes the sole risk and --- liability of any use of Xilinx products in Critical --- Applications, subject only to applicable laws and --- regulations governing limitations on product liability. --- --- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS --- PART OF THIS FILE AT ALL TIMES. --- ---***************************************************************************** --- ____ ____ --- / /\/ / --- /___/ \ / Vendor : Xilinx --- \ \ \/ Version : 3.5 --- \ \ Application : MIG --- / / Filename : memc3_wrapper.vhd --- /___/ /\ Date Last Modified : $Date: 2010/06/04 11:24:37 $ --- \ \ / \ Date Created : Jul 03 2009 --- \___\/\___\ --- ---Device : Spartan-6 ---Design Name : DDR/DDR2/DDR3/LPDDR ---Purpose : This module instantiates mcb_raw_wrapper module. ---Reference : ---Revision History : ---***************************************************************************** -library ieee; -use ieee.std_logic_1164.all; - -entity memc3_wrapper is -generic ( - - C_MEMCLK_PERIOD : integer := 2500; - C_P0_MASK_SIZE : integer := 4; - C_P0_DATA_PORT_SIZE : integer := 32; - C_P1_MASK_SIZE : integer := 4; - C_P1_DATA_PORT_SIZE : integer := 32; - - C_ARB_NUM_TIME_SLOTS : integer := 12; - C_ARB_TIME_SLOT_0 : bit_vector := "000"; - C_ARB_TIME_SLOT_1 : bit_vector := "000"; - C_ARB_TIME_SLOT_2 : bit_vector := "000"; - C_ARB_TIME_SLOT_3 : bit_vector := "000"; - C_ARB_TIME_SLOT_4 : bit_vector := "000"; - C_ARB_TIME_SLOT_5 : bit_vector := "000"; - C_ARB_TIME_SLOT_6 : bit_vector := "000"; - C_ARB_TIME_SLOT_7 : bit_vector := "000"; - C_ARB_TIME_SLOT_8 : bit_vector := "000"; - C_ARB_TIME_SLOT_9 : bit_vector := "000"; - C_ARB_TIME_SLOT_10 : bit_vector := "000"; - C_ARB_TIME_SLOT_11 : bit_vector := "000"; - - C_MEM_TRAS : integer := 45000; - C_MEM_TRCD : integer := 12500; - C_MEM_TREFI : integer := 7800000; - C_MEM_TRFC : integer := 127500; - C_MEM_TRP : integer := 12500; - C_MEM_TWR : integer := 15000; - C_MEM_TRTP : integer := 7500; - C_MEM_TWTR : integer := 7500; - - C_MEM_ADDR_ORDER : string :="ROW_BANK_COLUMN"; - C_MEM_TYPE : string :="DDR2"; - C_MEM_DENSITY : string :="1Gb"; - C_NUM_DQ_PINS : integer := 4; - C_MEM_BURST_LEN : integer := 8; - C_MEM_CAS_LATENCY : integer := 5; - C_MEM_ADDR_WIDTH : integer := 14; - C_MEM_BANKADDR_WIDTH : integer := 3; - C_MEM_NUM_COL_BITS : integer := 11; - - C_MEM_DDR1_2_ODS : string := "FULL"; - C_MEM_DDR2_RTT : string := "50OHMS"; - C_MEM_DDR2_DIFF_DQS_EN : string := "YES"; - C_MEM_DDR2_3_PA_SR : string := "FULL"; - C_MEM_DDR2_3_HIGH_TEMP_SR : string := "NORMAL"; - - C_MEM_DDR3_CAS_LATENCY : integer:= 7; - C_MEM_DDR3_CAS_WR_LATENCY : integer:= 5; - C_MEM_DDR3_ODS : string := "DIV6"; - C_MEM_DDR3_RTT : string := "DIV2"; - C_MEM_DDR3_AUTO_SR : string := "ENABLED"; - C_MEM_DDR3_DYN_WRT_ODT : string := "OFF"; - C_MEM_MOBILE_PA_SR : string := "FULL"; - C_MEM_MDDR_ODS : string := "FULL"; - - C_MC_CALIB_BYPASS : string := "NO"; - C_LDQSP_TAP_DELAY_VAL : integer := 0; - C_UDQSP_TAP_DELAY_VAL : integer := 0; - C_LDQSN_TAP_DELAY_VAL : integer := 0; - C_UDQSN_TAP_DELAY_VAL : integer := 0; - C_DQ0_TAP_DELAY_VAL : integer := 0; - C_DQ1_TAP_DELAY_VAL : integer := 0; - C_DQ2_TAP_DELAY_VAL : integer := 0; - C_DQ3_TAP_DELAY_VAL : integer := 0; - C_DQ4_TAP_DELAY_VAL : integer := 0; - C_DQ5_TAP_DELAY_VAL : integer := 0; - C_DQ6_TAP_DELAY_VAL : integer := 0; - C_DQ7_TAP_DELAY_VAL : integer := 0; - C_DQ8_TAP_DELAY_VAL : integer := 0; - C_DQ9_TAP_DELAY_VAL : integer := 0; - C_DQ10_TAP_DELAY_VAL : integer := 0; - C_DQ11_TAP_DELAY_VAL : integer := 0; - C_DQ12_TAP_DELAY_VAL : integer := 0; - C_DQ13_TAP_DELAY_VAL : integer := 0; - C_DQ14_TAP_DELAY_VAL : integer := 0; - C_DQ15_TAP_DELAY_VAL : integer := 0; - - - C_SKIP_IN_TERM_CAL : integer := 0; - C_SKIP_DYNAMIC_CAL : integer := 0; - - C_SIMULATION : string := "FALSE"; - C_MC_CALIBRATION_MODE : string := "CALIBRATION"; - C_MC_CALIBRATION_DELAY : string := "QUARTER"; - C_CALIB_SOFT_IP : string := "TRUE" - - - ); - port - ( - - -- high-speed PLL clock interface - sysclk_2x : in std_logic; - sysclk_2x_180 : in std_logic; - pll_ce_0 : in std_logic; - pll_ce_90 : in std_logic; - pll_lock : in std_logic; - async_rst : in std_logic; - - --User Port0 Interface Signals - - p0_cmd_clk : in std_logic; - p0_cmd_en : in std_logic; - p0_cmd_instr : in std_logic_vector(2 downto 0) ; - p0_cmd_bl : in std_logic_vector(5 downto 0) ; - p0_cmd_byte_addr : in std_logic_vector(29 downto 0) ; - p0_cmd_empty : out std_logic; - p0_cmd_full : out std_logic; - - -- Data Wr Port signals - p0_wr_clk : in std_logic; - p0_wr_en : in std_logic; - p0_wr_mask : in std_logic_vector(C_P0_MASK_SIZE - 1 downto 0) ; - p0_wr_data : in std_logic_vector(C_P0_DATA_PORT_SIZE - 1 downto 0) ; - p0_wr_full : out std_logic; - p0_wr_empty : out std_logic; - p0_wr_count : out std_logic_vector(6 downto 0) ; - p0_wr_underrun : out std_logic; - p0_wr_error : out std_logic; - - --Data Rd Port signals - p0_rd_clk : in std_logic; - p0_rd_en : in std_logic; - p0_rd_data : out std_logic_vector(C_P0_DATA_PORT_SIZE - 1 downto 0) ; - p0_rd_full : out std_logic; - p0_rd_empty : out std_logic; - p0_rd_count : out std_logic_vector(6 downto 0) ; - p0_rd_overflow : out std_logic; - p0_rd_error : out std_logic; - - --User Port1 Interface Signals - - p1_cmd_clk : in std_logic; - p1_cmd_en : in std_logic; - p1_cmd_instr : in std_logic_vector(2 downto 0) ; - p1_cmd_bl : in std_logic_vector(5 downto 0) ; - p1_cmd_byte_addr : in std_logic_vector(29 downto 0) ; - p1_cmd_empty : out std_logic; - p1_cmd_full : out std_logic; - - -- Data Wr Port signals - p1_wr_clk : in std_logic; - p1_wr_en : in std_logic; - p1_wr_mask : in std_logic_vector(C_P1_MASK_SIZE - 1 downto 0) ; - p1_wr_data : in std_logic_vector(C_P1_DATA_PORT_SIZE - 1 downto 0) ; - p1_wr_full : out std_logic; - p1_wr_empty : out std_logic; - p1_wr_count : out std_logic_vector(6 downto 0) ; - p1_wr_underrun : out std_logic; - p1_wr_error : out std_logic; - - --Data Rd Port signals - p1_rd_clk : in std_logic; - p1_rd_en : in std_logic; - p1_rd_data : out std_logic_vector(C_P1_DATA_PORT_SIZE - 1 downto 0) ; - p1_rd_full : out std_logic; - p1_rd_empty : out std_logic; - p1_rd_count : out std_logic_vector(6 downto 0) ; - p1_rd_overflow : out std_logic; - p1_rd_error : out std_logic; - - --User Port2 Interface Signals - - p2_cmd_clk : in std_logic; - p2_cmd_en : in std_logic; - p2_cmd_instr : in std_logic_vector(2 downto 0) ; - p2_cmd_bl : in std_logic_vector(5 downto 0) ; - p2_cmd_byte_addr : in std_logic_vector(29 downto 0) ; - p2_cmd_empty : out std_logic; - p2_cmd_full : out std_logic; - - --Data Wr Port signals - p2_wr_clk : in std_logic; - p2_wr_en : in std_logic; - p2_wr_mask : in std_logic_vector(3 downto 0) ; - p2_wr_data : in std_logic_vector(31 downto 0) ; - p2_wr_full : out std_logic; - p2_wr_empty : out std_logic; - p2_wr_count : out std_logic_vector(6 downto 0) ; - p2_wr_underrun : out std_logic; - p2_wr_error : out std_logic; - - --User Port3 Interface Signals - - p3_cmd_clk : in std_logic; - p3_cmd_en : in std_logic; - p3_cmd_instr : in std_logic_vector(2 downto 0) ; - p3_cmd_bl : in std_logic_vector(5 downto 0) ; - p3_cmd_byte_addr : in std_logic_vector(29 downto 0) ; - p3_cmd_empty : out std_logic; - p3_cmd_full : out std_logic; - - --Data Rd Port signals - p3_rd_clk : in std_logic; - p3_rd_en : in std_logic; - p3_rd_data : out std_logic_vector(31 downto 0) ; - p3_rd_full : out std_logic; - p3_rd_empty : out std_logic; - p3_rd_count : out std_logic_vector(6 downto 0) ; - p3_rd_overflow : out std_logic; - p3_rd_error : out std_logic; - - --User Port4 Interface Signals - - p4_cmd_clk : in std_logic; - p4_cmd_en : in std_logic; - p4_cmd_instr : in std_logic_vector(2 downto 0) ; - p4_cmd_bl : in std_logic_vector(5 downto 0) ; - p4_cmd_byte_addr : in std_logic_vector(29 downto 0) ; - p4_cmd_empty : out std_logic; - p4_cmd_full : out std_logic; - - --Data Wr Port signals - p4_wr_clk : in std_logic; - p4_wr_en : in std_logic; - p4_wr_mask : in std_logic_vector(3 downto 0) ; - p4_wr_data : in std_logic_vector(31 downto 0) ; - p4_wr_full : out std_logic; - p4_wr_empty : out std_logic; - p4_wr_count : out std_logic_vector(6 downto 0) ; - p4_wr_underrun : out std_logic; - p4_wr_error : out std_logic; - - --User Port5 Interface Signals - - p5_cmd_clk : in std_logic; - p5_cmd_en : in std_logic; - p5_cmd_instr : in std_logic_vector(2 downto 0) ; - p5_cmd_bl : in std_logic_vector(5 downto 0) ; - p5_cmd_byte_addr : in std_logic_vector(29 downto 0) ; - p5_cmd_empty : out std_logic; - p5_cmd_full : out std_logic; - - --Data Rd Port signals - p5_rd_clk : in std_logic; - p5_rd_en : in std_logic; - p5_rd_data : out std_logic_vector(31 downto 0) ; - p5_rd_full : out std_logic; - p5_rd_empty : out std_logic; - p5_rd_count : out std_logic_vector(6 downto 0) ; - p5_rd_overflow : out std_logic; - p5_rd_error : out std_logic; - - - - -- memory interface signals - mcb3_dram_ck : out std_logic; - mcb3_dram_ck_n : out std_logic; - mcb3_dram_a : out std_logic_vector(C_MEM_ADDR_WIDTH-1 downto 0); - mcb3_dram_ba : out std_logic_vector(C_MEM_BANKADDR_WIDTH-1 downto 0); - mcb3_dram_ras_n : out std_logic; - mcb3_dram_cas_n : out std_logic; - mcb3_dram_we_n : out std_logic; - mcb3_dram_cke : out std_logic; - mcb3_dram_dq : inout std_logic_vector(C_NUM_DQ_PINS-1 downto 0); - mcb3_dram_dqs : inout std_logic; - - -mcb3_dram_udqs : inout std_logic; -mcb3_dram_udm : out std_logic; - - - -mcb3_dram_dm : out std_logic; - - mcb3_rzq : inout std_logic; - - - -- Calibration signals - mcb_drp_clk : in std_logic; - calib_done : out std_logic; - selfrefresh_enter : in std_logic; - selfrefresh_mode : out std_logic - - ); -end entity; -architecture acch of memc3_wrapper is -component mcb_raw_wrapper IS - GENERIC ( - - C_MEMCLK_PERIOD : integer; - C_PORT_ENABLE : std_logic_vector(5 downto 0); - C_MEM_ADDR_ORDER : string; - C_ARB_NUM_TIME_SLOTS : integer; - C_ARB_TIME_SLOT_0 : bit_vector(17 downto 0); - C_ARB_TIME_SLOT_1 : bit_vector(17 downto 0); - C_ARB_TIME_SLOT_2 : bit_vector(17 downto 0); - C_ARB_TIME_SLOT_3 : bit_vector(17 downto 0); - C_ARB_TIME_SLOT_4 : bit_vector(17 downto 0); - C_ARB_TIME_SLOT_5 : bit_vector(17 downto 0); - C_ARB_TIME_SLOT_6 : bit_vector(17 downto 0); - C_ARB_TIME_SLOT_7 : bit_vector(17 downto 0); - C_ARB_TIME_SLOT_8 : bit_vector(17 downto 0); - C_ARB_TIME_SLOT_9 : bit_vector(17 downto 0); - C_ARB_TIME_SLOT_10 : bit_vector(17 downto 0); - C_ARB_TIME_SLOT_11 : bit_vector(17 downto 0); - C_PORT_CONFIG : string; - - - C_MEM_TRAS : integer; - C_MEM_TRCD : integer; - C_MEM_TREFI : integer; - C_MEM_TRFC : integer; - C_MEM_TRP : integer; - C_MEM_TWR : integer; - C_MEM_TRTP : integer; - C_MEM_TWTR : integer; - - C_NUM_DQ_PINS : integer; - C_MEM_TYPE : string; - C_MEM_DENSITY : string; - C_MEM_BURST_LEN : integer; - - C_MEM_CAS_LATENCY : integer; - C_MEM_ADDR_WIDTH : integer; - C_MEM_BANKADDR_WIDTH : integer; - C_MEM_NUM_COL_BITS : integer; - - C_MEM_DDR3_CAS_LATENCY : integer; - C_MEM_MOBILE_PA_SR : string; - C_MEM_DDR1_2_ODS : string; - C_MEM_DDR3_ODS : string; - C_MEM_DDR2_RTT : string; - C_MEM_DDR3_RTT : string; - C_MEM_MDDR_ODS : string; - - C_MEM_DDR2_DIFF_DQS_EN : string; - C_MEM_DDR2_3_PA_SR : string; - C_MEM_DDR3_CAS_WR_LATENCY : integer; - - C_MEM_DDR3_AUTO_SR : string; - C_MEM_DDR2_3_HIGH_TEMP_SR : string; - C_MEM_DDR3_DYN_WRT_ODT : string; - - C_MC_CALIB_BYPASS : string; - C_MC_CALIBRATION_RA : bit_vector(15 DOWNTO 0); - C_MC_CALIBRATION_BA : bit_vector(2 DOWNTO 0); - C_CALIB_SOFT_IP : string; - C_MC_CALIBRATION_CA : bit_vector(11 DOWNTO 0); - C_MC_CALIBRATION_CLK_DIV : integer; - C_MC_CALIBRATION_MODE : string; - C_MC_CALIBRATION_DELAY : string; - - LDQSP_TAP_DELAY_VAL : integer; - UDQSP_TAP_DELAY_VAL : integer; - LDQSN_TAP_DELAY_VAL : integer; - UDQSN_TAP_DELAY_VAL : integer; - DQ0_TAP_DELAY_VAL : integer; - DQ1_TAP_DELAY_VAL : integer; - DQ2_TAP_DELAY_VAL : integer; - DQ3_TAP_DELAY_VAL : integer; - DQ4_TAP_DELAY_VAL : integer; - DQ5_TAP_DELAY_VAL : integer; - DQ6_TAP_DELAY_VAL : integer; - DQ7_TAP_DELAY_VAL : integer; - DQ8_TAP_DELAY_VAL : integer; - DQ9_TAP_DELAY_VAL : integer; - DQ10_TAP_DELAY_VAL : integer; - DQ11_TAP_DELAY_VAL : integer; - DQ12_TAP_DELAY_VAL : integer; - DQ13_TAP_DELAY_VAL : integer; - DQ14_TAP_DELAY_VAL : integer; - DQ15_TAP_DELAY_VAL : integer; - - C_P0_MASK_SIZE : integer; - C_P0_DATA_PORT_SIZE : integer; - C_P1_MASK_SIZE : integer; - C_P1_DATA_PORT_SIZE : integer; - - C_SIMULATION : string ; - C_SKIP_IN_TERM_CAL : integer; - C_SKIP_DYNAMIC_CAL : integer; - C_SKIP_DYN_IN_TERM : integer; - - C_MEM_TZQINIT_MAXCNT : std_logic_vector(9 downto 0) - ); - PORT ( - -- HIGH-SPEED PLL clock interface - - sysclk_2x : in std_logic; - sysclk_2x_180 : in std_logic; - pll_ce_0 : in std_logic; - pll_ce_90 : in std_logic; - pll_lock : in std_logic; - sys_rst : in std_logic; - - p0_arb_en : in std_logic; - p0_cmd_clk : in std_logic; - p0_cmd_en : in std_logic; - p0_cmd_instr : in std_logic_vector(2 DOWNTO 0); - p0_cmd_bl : in std_logic_vector(5 DOWNTO 0); - p0_cmd_byte_addr : in std_logic_vector(29 DOWNTO 0); - p0_cmd_empty : out std_logic; - p0_cmd_full : out std_logic; - p0_wr_clk : in std_logic; - p0_wr_en : in std_logic; - p0_wr_mask : in std_logic_vector(C_P0_MASK_SIZE - 1 DOWNTO 0); - p0_wr_data : in std_logic_vector(C_P0_DATA_PORT_SIZE - 1 DOWNTO 0); - p0_wr_full : out std_logic; - p0_wr_empty : out std_logic; - p0_wr_count : out std_logic_vector(6 DOWNTO 0); - p0_wr_underrun : out std_logic; - p0_wr_error : out std_logic; - p0_rd_clk : in std_logic; - p0_rd_en : in std_logic; - p0_rd_data : out std_logic_vector(C_P0_DATA_PORT_SIZE - 1 DOWNTO 0); - p0_rd_full : out std_logic; - p0_rd_empty : out std_logic; - p0_rd_count : out std_logic_vector(6 DOWNTO 0); - p0_rd_overflow : out std_logic; - p0_rd_error : out std_logic; - p1_arb_en : in std_logic; - p1_cmd_clk : in std_logic; - p1_cmd_en : in std_logic; - p1_cmd_instr : in std_logic_vector(2 DOWNTO 0); - p1_cmd_bl : in std_logic_vector(5 DOWNTO 0); - p1_cmd_byte_addr : in std_logic_vector(29 DOWNTO 0); - p1_cmd_empty : out std_logic; - p1_cmd_full : out std_logic; - p1_wr_clk : in std_logic; - p1_wr_en : in std_logic; - p1_wr_mask : in std_logic_vector(C_P1_MASK_SIZE - 1 DOWNTO 0); - p1_wr_data : in std_logic_vector(C_P1_DATA_PORT_SIZE - 1 DOWNTO 0); - p1_wr_full : out std_logic; - p1_wr_empty : out std_logic; - p1_wr_count : out std_logic_vector(6 DOWNTO 0); - p1_wr_underrun : out std_logic; - p1_wr_error : out std_logic; - p1_rd_clk : in std_logic; - p1_rd_en : in std_logic; - p1_rd_data : out std_logic_vector(C_P1_DATA_PORT_SIZE - 1 DOWNTO 0); - p1_rd_full : out std_logic; - p1_rd_empty : out std_logic; - p1_rd_count : out std_logic_vector(6 DOWNTO 0); - p1_rd_overflow : out std_logic; - p1_rd_error : out std_logic; - p2_arb_en : in std_logic; - p2_cmd_clk : in std_logic; - p2_cmd_en : in std_logic; - p2_cmd_instr : in std_logic_vector(2 DOWNTO 0); - p2_cmd_bl : in std_logic_vector(5 DOWNTO 0); - p2_cmd_byte_addr : in std_logic_vector(29 DOWNTO 0); - p2_cmd_empty : out std_logic; - p2_cmd_full : out std_logic; - p2_wr_clk : in std_logic; - p2_wr_en : in std_logic; - p2_wr_mask : in std_logic_vector(3 DOWNTO 0); - p2_wr_data : in std_logic_vector(31 DOWNTO 0); - p2_wr_full : out std_logic; - p2_wr_empty : out std_logic; - p2_wr_count : out std_logic_vector(6 DOWNTO 0); - p2_wr_underrun : out std_logic; - p2_wr_error : out std_logic; - p2_rd_clk : in std_logic; - p2_rd_en : in std_logic; - p2_rd_data : out std_logic_vector(31 DOWNTO 0); - p2_rd_full : out std_logic; - p2_rd_empty : out std_logic; - p2_rd_count : out std_logic_vector(6 DOWNTO 0); - p2_rd_overflow : out std_logic; - p2_rd_error : out std_logic; - p3_arb_en : in std_logic; - p3_cmd_clk : in std_logic; - p3_cmd_en : in std_logic; - p3_cmd_instr : in std_logic_vector(2 DOWNTO 0); - p3_cmd_bl : in std_logic_vector(5 DOWNTO 0); - p3_cmd_byte_addr : in std_logic_vector(29 DOWNTO 0); - p3_cmd_empty : out std_logic; - p3_cmd_full : out std_logic; - p3_wr_clk : in std_logic; - p3_wr_en : in std_logic; - p3_wr_mask : in std_logic_vector(3 DOWNTO 0); - p3_wr_data : in std_logic_vector(31 DOWNTO 0); - p3_wr_full : out std_logic; - p3_wr_empty : out std_logic; - p3_wr_count : out std_logic_vector(6 DOWNTO 0); - p3_wr_underrun : out std_logic; - p3_wr_error : out std_logic; - p3_rd_clk : in std_logic; - p3_rd_en : in std_logic; - p3_rd_data : out std_logic_vector(31 DOWNTO 0); - p3_rd_full : out std_logic; - p3_rd_empty : out std_logic; - p3_rd_count : out std_logic_vector(6 DOWNTO 0); - p3_rd_overflow : out std_logic; - p3_rd_error : out std_logic; - p4_arb_en : in std_logic; - p4_cmd_clk : in std_logic; - p4_cmd_en : in std_logic; - p4_cmd_instr : in std_logic_vector(2 DOWNTO 0); - p4_cmd_bl : in std_logic_vector(5 DOWNTO 0); - p4_cmd_byte_addr : in std_logic_vector(29 DOWNTO 0); - p4_cmd_empty : out std_logic; - p4_cmd_full : out std_logic; - p4_wr_clk : in std_logic; - p4_wr_en : in std_logic; - p4_wr_mask : in std_logic_vector(3 DOWNTO 0); - p4_wr_data : in std_logic_vector(31 DOWNTO 0); - p4_wr_full : out std_logic; - p4_wr_empty : out std_logic; - p4_wr_count : out std_logic_vector(6 DOWNTO 0); - p4_wr_underrun : out std_logic; - p4_wr_error : out std_logic; - p4_rd_clk : in std_logic; - p4_rd_en : in std_logic; - p4_rd_data : out std_logic_vector(31 DOWNTO 0); - p4_rd_full : out std_logic; - p4_rd_empty : out std_logic; - p4_rd_count : out std_logic_vector(6 DOWNTO 0); - p4_rd_overflow : out std_logic; - p4_rd_error : out std_logic; - p5_arb_en : in std_logic; - p5_cmd_clk : in std_logic; - p5_cmd_en : in std_logic; - p5_cmd_instr : in std_logic_vector(2 DOWNTO 0); - p5_cmd_bl : in std_logic_vector(5 DOWNTO 0); - p5_cmd_byte_addr : in std_logic_vector(29 DOWNTO 0); - p5_cmd_empty : out std_logic; - p5_cmd_full : out std_logic; - p5_wr_clk : in std_logic; - p5_wr_en : in std_logic; - p5_wr_mask : in std_logic_vector(3 DOWNTO 0); - p5_wr_data : in std_logic_vector(31 DOWNTO 0); - p5_wr_full : out std_logic; - p5_wr_empty : out std_logic; - p5_wr_count : out std_logic_vector(6 DOWNTO 0); - p5_wr_underrun : out std_logic; - p5_wr_error : out std_logic; - p5_rd_clk : in std_logic; - p5_rd_en : in std_logic; - p5_rd_data : out std_logic_vector(31 DOWNTO 0); - p5_rd_full : out std_logic; - p5_rd_empty : out std_logic; - p5_rd_count : out std_logic_vector(6 DOWNTO 0); - p5_rd_overflow : out std_logic; - p5_rd_error : out std_logic; - - mcbx_dram_addr : out std_logic_vector(C_MEM_ADDR_WIDTH - 1 DOWNTO 0); - mcbx_dram_ba : out std_logic_vector(C_MEM_BANKADDR_WIDTH - 1 DOWNTO 0); - mcbx_dram_ras_n : out std_logic; - mcbx_dram_cas_n : out std_logic; - mcbx_dram_we_n : out std_logic; - mcbx_dram_cke : out std_logic; - mcbx_dram_clk : out std_logic; - mcbx_dram_clk_n : out std_logic; - mcbx_dram_dq : inout std_logic_vector(C_NUM_DQ_PINS-1 DOWNTO 0); - mcbx_dram_dqs : inout std_logic; - mcbx_dram_dqs_n : inout std_logic; - mcbx_dram_udqs : inout std_logic; - mcbx_dram_udqs_n : inout std_logic; - mcbx_dram_udm : out std_logic; - mcbx_dram_ldm : out std_logic; - mcbx_dram_odt : out std_logic; - mcbx_dram_ddr3_rst : out std_logic; - calib_recal : in std_logic; - rzq : inout std_logic; - zio : inout std_logic; - ui_read : in std_logic; - ui_add : in std_logic; - ui_cs : in std_logic; - ui_clk : in std_logic; - ui_sdi : in std_logic; - ui_addr : in std_logic_vector(4 DOWNTO 0); - ui_broadcast : in std_logic; - ui_drp_update : in std_logic; - ui_done_cal : in std_logic; - ui_cmd : in std_logic; - ui_cmd_in : in std_logic; - ui_cmd_en : in std_logic; - ui_dqcount : in std_logic_vector(3 DOWNTO 0); - ui_dq_lower_dec : in std_logic; - ui_dq_lower_inc : in std_logic; - ui_dq_upper_dec : in std_logic; - ui_dq_upper_inc : in std_logic; - ui_udqs_inc : in std_logic; - ui_udqs_dec : in std_logic; - ui_ldqs_inc : in std_logic; - ui_ldqs_dec : in std_logic; - uo_data : out std_logic_vector(7 DOWNTO 0); - uo_data_valid : out std_logic; - uo_done_cal : out std_logic; - uo_cmd_ready_in : out std_logic; - uo_refrsh_flag : out std_logic; - uo_cal_start : out std_logic; - uo_sdo : out std_logic; - status : out std_logic_vector(31 DOWNTO 0); - selfrefresh_enter : in std_logic; - selfrefresh_mode : out std_logic - ); -end component; - -signal uo_data : std_logic_vector(7 downto 0); - - constant C_PORT_ENABLE : std_logic_vector(5 downto 0) := "111111"; - -constant C_PORT_CONFIG : string := "B32_B32_W32_R32_W32_R32"; - - -constant ARB_TIME_SLOT_0 : bit_vector(17 downto 0) := (C_ARB_TIME_SLOT_0(2 downto 0) & C_ARB_TIME_SLOT_0(5 downto 3) & C_ARB_TIME_SLOT_0(8 downto 6) & C_ARB_TIME_SLOT_0(11 downto 9) & C_ARB_TIME_SLOT_0(14 downto 12) & C_ARB_TIME_SLOT_0(17 downto 15)); -constant ARB_TIME_SLOT_1 : bit_vector(17 downto 0) := (C_ARB_TIME_SLOT_1(2 downto 0) & C_ARB_TIME_SLOT_1(5 downto 3) & C_ARB_TIME_SLOT_1(8 downto 6) & C_ARB_TIME_SLOT_1(11 downto 9) & C_ARB_TIME_SLOT_1(14 downto 12) & C_ARB_TIME_SLOT_1(17 downto 15)); -constant ARB_TIME_SLOT_2 : bit_vector(17 downto 0) := (C_ARB_TIME_SLOT_2(2 downto 0) & C_ARB_TIME_SLOT_2(5 downto 3) & C_ARB_TIME_SLOT_2(8 downto 6) & C_ARB_TIME_SLOT_2(11 downto 9) & C_ARB_TIME_SLOT_2(14 downto 12) & C_ARB_TIME_SLOT_2(17 downto 15)); -constant ARB_TIME_SLOT_3 : bit_vector(17 downto 0) := (C_ARB_TIME_SLOT_3(2 downto 0) & C_ARB_TIME_SLOT_3(5 downto 3) & C_ARB_TIME_SLOT_3(8 downto 6) & C_ARB_TIME_SLOT_3(11 downto 9) & C_ARB_TIME_SLOT_3(14 downto 12) & C_ARB_TIME_SLOT_3(17 downto 15)); -constant ARB_TIME_SLOT_4 : bit_vector(17 downto 0) := (C_ARB_TIME_SLOT_4(2 downto 0) & C_ARB_TIME_SLOT_4(5 downto 3) & C_ARB_TIME_SLOT_4(8 downto 6) & C_ARB_TIME_SLOT_4(11 downto 9) & C_ARB_TIME_SLOT_4(14 downto 12) & C_ARB_TIME_SLOT_4(17 downto 15)); -constant ARB_TIME_SLOT_5 : bit_vector(17 downto 0) := (C_ARB_TIME_SLOT_5(2 downto 0) & C_ARB_TIME_SLOT_5(5 downto 3) & C_ARB_TIME_SLOT_5(8 downto 6) & C_ARB_TIME_SLOT_5(11 downto 9) & C_ARB_TIME_SLOT_5(14 downto 12) & C_ARB_TIME_SLOT_5(17 downto 15)); -constant ARB_TIME_SLOT_6 : bit_vector(17 downto 0) := (C_ARB_TIME_SLOT_6(2 downto 0) & C_ARB_TIME_SLOT_6(5 downto 3) & C_ARB_TIME_SLOT_6(8 downto 6) & C_ARB_TIME_SLOT_6(11 downto 9) & C_ARB_TIME_SLOT_6(14 downto 12) & C_ARB_TIME_SLOT_6(17 downto 15)); -constant ARB_TIME_SLOT_7 : bit_vector(17 downto 0) := (C_ARB_TIME_SLOT_7(2 downto 0) & C_ARB_TIME_SLOT_7(5 downto 3) & C_ARB_TIME_SLOT_7(8 downto 6) & C_ARB_TIME_SLOT_7(11 downto 9) & C_ARB_TIME_SLOT_7(14 downto 12) & C_ARB_TIME_SLOT_7(17 downto 15)); -constant ARB_TIME_SLOT_8 : bit_vector(17 downto 0) := (C_ARB_TIME_SLOT_8(2 downto 0) & C_ARB_TIME_SLOT_8(5 downto 3) & C_ARB_TIME_SLOT_8(8 downto 6) & C_ARB_TIME_SLOT_8(11 downto 9) & C_ARB_TIME_SLOT_8(14 downto 12) & C_ARB_TIME_SLOT_8(17 downto 15)); -constant ARB_TIME_SLOT_9 : bit_vector(17 downto 0) := (C_ARB_TIME_SLOT_9(2 downto 0) & C_ARB_TIME_SLOT_9(5 downto 3) & C_ARB_TIME_SLOT_9(8 downto 6) & C_ARB_TIME_SLOT_9(11 downto 9) & C_ARB_TIME_SLOT_9(14 downto 12) & C_ARB_TIME_SLOT_9(17 downto 15)); -constant ARB_TIME_SLOT_10 : bit_vector(17 downto 0) := (C_ARB_TIME_SLOT_10(2 downto 0) & C_ARB_TIME_SLOT_10(5 downto 3) & C_ARB_TIME_SLOT_10(8 downto 6) & C_ARB_TIME_SLOT_10(11 downto 9) & C_ARB_TIME_SLOT_10(14 downto 12) & C_ARB_TIME_SLOT_10(17 downto 15)); -constant ARB_TIME_SLOT_11 : bit_vector(17 downto 0) := (C_ARB_TIME_SLOT_11(2 downto 0) & C_ARB_TIME_SLOT_11(5 downto 3) & C_ARB_TIME_SLOT_11(8 downto 6) & C_ARB_TIME_SLOT_11(11 downto 9) & C_ARB_TIME_SLOT_11(14 downto 12) & C_ARB_TIME_SLOT_11(17 downto 15)); - - -constant C_MC_CALIBRATION_CLK_DIV : integer := 1; -constant C_MEM_TZQINIT_MAXCNT : std_logic_vector(9 downto 0) := "1000000000"; -constant C_SKIP_DYN_IN_TERM : integer := 1; - -constant C_MC_CALIBRATION_RA : bit_vector(15 downto 0) := X"0000"; -constant C_MC_CALIBRATION_BA : bit_vector(2 downto 0) := o"0"; -constant C_MC_CALIBRATION_CA : bit_vector(11 downto 0) := X"000"; - -signal status : std_logic_vector(31 downto 0); -signal uo_data_valid : std_logic; -signal uo_cmd_ready_in : std_logic; -signal uo_refrsh_flag : std_logic; -signal uo_cal_start : std_logic; -signal uo_sdo : std_logic; -signal mcb3_zio : std_logic; - - -attribute X_CORE_INFO : string; -attribute X_CORE_INFO of acch : architecture IS - "mig_v3_5_ddr_s6, Coregen 12.2"; - -attribute CORE_GENERATION_INFO : string; -attribute CORE_GENERATION_INFO of acch : architecture IS "mcb3_ddr_s6,mig_v3_5,{LANGUAGE=VHDL, SYNTHESIS_TOOL=ISE, NO_OF_CONTROLLERS=1, AXI_ENABLE=0, MEM_INTERFACE_TYPE=DDR_SDRAM,CLK_PERIOD=5000, MEMORY_PART=mt46v32m16xx-5b-it, OUTPUT_DRV=FULL, PORT_CONFIG=Two 32-bit bi-directional and four 32-bit unidirectional ports, MEM_ADDR_ORDER=ROW_BANK_COLUMN, PORT_ENABLE=Port0_Port1_Port2_Port3_Port4_Port5, CLASS_ADDR=II, CLASS_DATA=II, INPUT_PIN_TERMINATION=UNCALIB_TERM, DATA_TERMINATION=50 Ohms, CLKFBOUT_MULT_F=4, CLKOUT_DIVIDE=2, DEBUG_PORT=0, INPUT_CLK_TYPE=Single-Ended}"; - -begin - - -memc3_mcb_raw_wrapper_inst : mcb_raw_wrapper -generic map - ( - C_MEMCLK_PERIOD => C_MEMCLK_PERIOD, - C_P0_MASK_SIZE => C_P0_MASK_SIZE, - C_P0_DATA_PORT_SIZE => C_P0_DATA_PORT_SIZE, - C_P1_MASK_SIZE => C_P1_MASK_SIZE, - C_P1_DATA_PORT_SIZE => C_P1_DATA_PORT_SIZE, - - C_ARB_NUM_TIME_SLOTS => C_ARB_NUM_TIME_SLOTS, - C_ARB_TIME_SLOT_0 => ARB_TIME_SLOT_0, - C_ARB_TIME_SLOT_1 => ARB_TIME_SLOT_1, - C_ARB_TIME_SLOT_2 => ARB_TIME_SLOT_2, - C_ARB_TIME_SLOT_3 => ARB_TIME_SLOT_3, - C_ARB_TIME_SLOT_4 => ARB_TIME_SLOT_4, - C_ARB_TIME_SLOT_5 => ARB_TIME_SLOT_5, - C_ARB_TIME_SLOT_6 => ARB_TIME_SLOT_6, - C_ARB_TIME_SLOT_7 => ARB_TIME_SLOT_7, - C_ARB_TIME_SLOT_8 => ARB_TIME_SLOT_8, - C_ARB_TIME_SLOT_9 => ARB_TIME_SLOT_9, - C_ARB_TIME_SLOT_10 => ARB_TIME_SLOT_10, - C_ARB_TIME_SLOT_11 => ARB_TIME_SLOT_11, - - C_PORT_CONFIG => C_PORT_CONFIG, - C_PORT_ENABLE => C_PORT_ENABLE, - - C_MEM_TRAS => C_MEM_TRAS, - C_MEM_TRCD => C_MEM_TRCD, - C_MEM_TREFI => C_MEM_TREFI, - C_MEM_TRFC => C_MEM_TRFC, - C_MEM_TRP => C_MEM_TRP, - C_MEM_TWR => C_MEM_TWR, - C_MEM_TRTP => C_MEM_TRTP, - C_MEM_TWTR => C_MEM_TWTR, - - C_MEM_ADDR_ORDER => C_MEM_ADDR_ORDER, - C_NUM_DQ_PINS => C_NUM_DQ_PINS, - C_MEM_TYPE => C_MEM_TYPE, - C_MEM_DENSITY => C_MEM_DENSITY, - C_MEM_BURST_LEN => C_MEM_BURST_LEN, - C_MEM_CAS_LATENCY => C_MEM_CAS_LATENCY, - C_MEM_ADDR_WIDTH => C_MEM_ADDR_WIDTH, - C_MEM_BANKADDR_WIDTH => C_MEM_BANKADDR_WIDTH, - C_MEM_NUM_COL_BITS => C_MEM_NUM_COL_BITS, - - C_MEM_DDR1_2_ODS => C_MEM_DDR1_2_ODS, - C_MEM_DDR2_RTT => C_MEM_DDR2_RTT, - C_MEM_DDR2_DIFF_DQS_EN => C_MEM_DDR2_DIFF_DQS_EN, - C_MEM_DDR2_3_PA_SR => C_MEM_DDR2_3_PA_SR, - C_MEM_DDR2_3_HIGH_TEMP_SR => C_MEM_DDR2_3_HIGH_TEMP_SR, - - C_MEM_DDR3_CAS_LATENCY => C_MEM_DDR3_CAS_LATENCY, - C_MEM_DDR3_ODS => C_MEM_DDR3_ODS, - C_MEM_DDR3_RTT => C_MEM_DDR3_RTT, - C_MEM_DDR3_CAS_WR_LATENCY => C_MEM_DDR3_CAS_WR_LATENCY, - C_MEM_DDR3_AUTO_SR => C_MEM_DDR3_AUTO_SR, - C_MEM_DDR3_DYN_WRT_ODT => C_MEM_DDR3_DYN_WRT_ODT, - C_MEM_MOBILE_PA_SR => C_MEM_MOBILE_PA_SR, - C_MEM_MDDR_ODS => C_MEM_MDDR_ODS, - C_MC_CALIBRATION_CLK_DIV => C_MC_CALIBRATION_CLK_DIV, - C_MC_CALIBRATION_MODE => C_MC_CALIBRATION_MODE, - C_MC_CALIBRATION_DELAY => C_MC_CALIBRATION_DELAY, - - C_MC_CALIB_BYPASS => C_MC_CALIB_BYPASS, - C_MC_CALIBRATION_RA => C_MC_CALIBRATION_RA, - C_MC_CALIBRATION_BA => C_MC_CALIBRATION_BA, - C_MC_CALIBRATION_CA => C_MC_CALIBRATION_CA, - C_CALIB_SOFT_IP => C_CALIB_SOFT_IP, - - C_SIMULATION => C_SIMULATION, - C_SKIP_IN_TERM_CAL => C_SKIP_IN_TERM_CAL, - C_SKIP_DYNAMIC_CAL => C_SKIP_DYNAMIC_CAL, - C_SKIP_DYN_IN_TERM => C_SKIP_DYN_IN_TERM, - C_MEM_TZQINIT_MAXCNT => C_MEM_TZQINIT_MAXCNT, - - LDQSP_TAP_DELAY_VAL => C_LDQSP_TAP_DELAY_VAL, - UDQSP_TAP_DELAY_VAL => C_UDQSP_TAP_DELAY_VAL, - LDQSN_TAP_DELAY_VAL => C_LDQSN_TAP_DELAY_VAL, - UDQSN_TAP_DELAY_VAL => C_UDQSN_TAP_DELAY_VAL, - DQ0_TAP_DELAY_VAL => C_DQ0_TAP_DELAY_VAL, - DQ1_TAP_DELAY_VAL => C_DQ1_TAP_DELAY_VAL, - DQ2_TAP_DELAY_VAL => C_DQ2_TAP_DELAY_VAL, - DQ3_TAP_DELAY_VAL => C_DQ3_TAP_DELAY_VAL, - DQ4_TAP_DELAY_VAL => C_DQ4_TAP_DELAY_VAL, - DQ5_TAP_DELAY_VAL => C_DQ5_TAP_DELAY_VAL, - DQ6_TAP_DELAY_VAL => C_DQ6_TAP_DELAY_VAL, - DQ7_TAP_DELAY_VAL => C_DQ7_TAP_DELAY_VAL, - DQ8_TAP_DELAY_VAL => C_DQ8_TAP_DELAY_VAL, - DQ9_TAP_DELAY_VAL => C_DQ9_TAP_DELAY_VAL, - DQ10_TAP_DELAY_VAL => C_DQ10_TAP_DELAY_VAL, - DQ11_TAP_DELAY_VAL => C_DQ11_TAP_DELAY_VAL, - DQ12_TAP_DELAY_VAL => C_DQ12_TAP_DELAY_VAL, - DQ13_TAP_DELAY_VAL => C_DQ13_TAP_DELAY_VAL, - DQ14_TAP_DELAY_VAL => C_DQ14_TAP_DELAY_VAL, - DQ15_TAP_DELAY_VAL => C_DQ15_TAP_DELAY_VAL - ) - -port map -( - sys_rst => async_rst, - sysclk_2x => sysclk_2x, - sysclk_2x_180 => sysclk_2x_180, - pll_ce_0 => pll_ce_0, - pll_ce_90 => pll_ce_90, - pll_lock => pll_lock, - mcbx_dram_addr => mcb3_dram_a, - mcbx_dram_ba => mcb3_dram_ba, - mcbx_dram_ras_n => mcb3_dram_ras_n, - mcbx_dram_cas_n => mcb3_dram_cas_n, - mcbx_dram_we_n => mcb3_dram_we_n, - mcbx_dram_cke => mcb3_dram_cke, - mcbx_dram_clk => mcb3_dram_ck, - mcbx_dram_clk_n => mcb3_dram_ck_n, - mcbx_dram_dq => mcb3_dram_dq, - mcbx_dram_odt => open, - mcbx_dram_ldm => mcb3_dram_dm, - mcbx_dram_udm => mcb3_dram_udm, - mcbx_dram_dqs => mcb3_dram_dqs, - mcbx_dram_dqs_n => open, - mcbx_dram_udqs => mcb3_dram_udqs, - mcbx_dram_udqs_n => open, - mcbx_dram_ddr3_rst => open, - calib_recal => '0', - rzq => mcb3_rzq, - zio => mcb3_zio, - ui_read => '0', - ui_add => '0', - ui_cs => '0', - ui_clk => mcb_drp_clk, - ui_sdi => '0', - ui_addr => (others => '0'), - ui_broadcast => '0', - ui_drp_update => '0', - ui_done_cal => '1', - ui_cmd => '0', - ui_cmd_in => '0', - ui_cmd_en => '0', - ui_dqcount => (others => '0'), - ui_dq_lower_dec => '0', - ui_dq_lower_inc => '0', - ui_dq_upper_dec => '0', - ui_dq_upper_inc => '0', - ui_udqs_inc => '0', - ui_udqs_dec => '0', - ui_ldqs_inc => '0', - ui_ldqs_dec => '0', - uo_data => uo_data, - uo_data_valid => uo_data_valid, - uo_done_cal => calib_done, - uo_cmd_ready_in => uo_cmd_ready_in, - uo_refrsh_flag => uo_refrsh_flag, - uo_cal_start => uo_cal_start, - uo_sdo => uo_sdo, - status => status, - selfrefresh_enter => '0', - selfrefresh_mode => selfrefresh_mode, - - - p0_arb_en => '1', - p0_cmd_clk => p0_cmd_clk, - p0_cmd_en => p0_cmd_en, - p0_cmd_instr => p0_cmd_instr, - p0_cmd_bl => p0_cmd_bl, - p0_cmd_byte_addr => p0_cmd_byte_addr, - p0_cmd_empty => p0_cmd_empty, - p0_cmd_full => p0_cmd_full, - p0_wr_clk => p0_wr_clk, - p0_wr_en => p0_wr_en, - p0_wr_mask => p0_wr_mask, - p0_wr_data => p0_wr_data, - p0_wr_full => p0_wr_full, - p0_wr_empty => p0_wr_empty, - p0_wr_count => p0_wr_count, - p0_wr_underrun => p0_wr_underrun, - p0_wr_error => p0_wr_error, - p0_rd_clk => p0_rd_clk, - p0_rd_en => p0_rd_en, - p0_rd_data => p0_rd_data, - p0_rd_full => p0_rd_full, - p0_rd_empty => p0_rd_empty, - p0_rd_count => p0_rd_count, - p0_rd_overflow => p0_rd_overflow, - p0_rd_error => p0_rd_error, - p1_arb_en => '1', - p1_cmd_clk => p1_cmd_clk, - p1_cmd_en => p1_cmd_en, - p1_cmd_instr => p1_cmd_instr, - p1_cmd_bl => p1_cmd_bl, - p1_cmd_byte_addr => p1_cmd_byte_addr, - p1_cmd_empty => p1_cmd_empty, - p1_cmd_full => p1_cmd_full, - p1_wr_clk => p1_wr_clk, - p1_wr_en => p1_wr_en, - p1_wr_mask => p1_wr_mask, - p1_wr_data => p1_wr_data, - p1_wr_full => p1_wr_full, - p1_wr_empty => p1_wr_empty, - p1_wr_count => p1_wr_count, - p1_wr_underrun => p1_wr_underrun, - p1_wr_error => p1_wr_error, - p1_rd_clk => p1_rd_clk, - p1_rd_en => p1_rd_en, - p1_rd_data => p1_rd_data, - p1_rd_full => p1_rd_full, - p1_rd_empty => p1_rd_empty, - p1_rd_count => p1_rd_count, - p1_rd_overflow => p1_rd_overflow, - p1_rd_error => p1_rd_error, - p2_arb_en => '1', - p2_cmd_clk => p2_cmd_clk, - p2_cmd_en => p2_cmd_en, - p2_cmd_instr => p2_cmd_instr, - p2_cmd_bl => p2_cmd_bl, - p2_cmd_byte_addr => p2_cmd_byte_addr, - p2_cmd_empty => p2_cmd_empty, - p2_cmd_full => p2_cmd_full, - p2_rd_clk => '0', - p2_rd_en => '0', - p2_rd_data => open, - p2_rd_full => open, - p2_rd_empty => open, - p2_rd_count => open, - p2_rd_overflow => open, - p2_rd_error => open, - p2_wr_clk => p2_wr_clk, - p2_wr_en => p2_wr_en, - p2_wr_mask => p2_wr_mask, - p2_wr_data => p2_wr_data, - p2_wr_full => p2_wr_full, - p2_wr_empty => p2_wr_empty, - p2_wr_count => p2_wr_count, - p2_wr_underrun => p2_wr_underrun, - p2_wr_error => p2_wr_error, - p3_arb_en => '1', - p3_cmd_clk => p3_cmd_clk, - p3_cmd_en => p3_cmd_en, - p3_cmd_instr => p3_cmd_instr, - p3_cmd_bl => p3_cmd_bl, - p3_cmd_byte_addr => p3_cmd_byte_addr, - p3_cmd_empty => p3_cmd_empty, - p3_cmd_full => p3_cmd_full, - p3_rd_clk => p3_rd_clk, - p3_rd_en => p3_rd_en, - p3_rd_data => p3_rd_data, - p3_rd_full => p3_rd_full, - p3_rd_empty => p3_rd_empty, - p3_rd_count => p3_rd_count, - p3_rd_overflow => p3_rd_overflow, - p3_rd_error => p3_rd_error, - p3_wr_clk => '0', - p3_wr_en => '0', - p3_wr_mask => (others => '0'), - p3_wr_data => (others => '0'), - p3_wr_full => open, - p3_wr_empty => open, - p3_wr_count => open, - p3_wr_underrun => open, - p3_wr_error => open, - p4_arb_en => '1', - p4_cmd_clk => p4_cmd_clk, - p4_cmd_en => p4_cmd_en, - p4_cmd_instr => p4_cmd_instr, - p4_cmd_bl => p4_cmd_bl, - p4_cmd_byte_addr => p4_cmd_byte_addr, - p4_cmd_empty => p4_cmd_empty, - p4_cmd_full => p4_cmd_full, - p4_rd_clk => '0', - p4_rd_en => '0', - p4_rd_data => open, - p4_rd_full => open, - p4_rd_empty => open, - p4_rd_count => open, - p4_rd_overflow => open, - p4_rd_error => open, - p4_wr_clk => p4_wr_clk, - p4_wr_en => p4_wr_en, - p4_wr_mask => p4_wr_mask, - p4_wr_data => p4_wr_data, - p4_wr_full => p4_wr_full, - p4_wr_empty => p4_wr_empty, - p4_wr_count => p4_wr_count, - p4_wr_underrun => p4_wr_underrun, - p4_wr_error => p4_wr_error, - p5_arb_en => '1', - p5_cmd_clk => p5_cmd_clk, - p5_cmd_en => p5_cmd_en, - p5_cmd_instr => p5_cmd_instr, - p5_cmd_bl => p5_cmd_bl, - p5_cmd_byte_addr => p5_cmd_byte_addr, - p5_cmd_empty => p5_cmd_empty, - p5_cmd_full => p5_cmd_full, - p5_rd_clk => p5_rd_clk, - p5_rd_en => p5_rd_en, - p5_rd_data => p5_rd_data, - p5_rd_full => p5_rd_full, - p5_rd_empty => p5_rd_empty, - p5_rd_count => p5_rd_count, - p5_rd_overflow => p5_rd_overflow, - p5_rd_error => p5_rd_error, - p5_wr_clk => '0', - p5_wr_en => '0', - p5_wr_mask => (others => '0'), - p5_wr_data => (others => '0'), - p5_wr_full => open, - p5_wr_empty => open, - p5_wr_count => open, - p5_wr_underrun => open, - p5_wr_error => open -); - - - -end architecture; - Index: ipcore_dir/mem0/user_design/rtl/mcb_raw_wrapper.vhd =================================================================== --- ipcore_dir/mem0/user_design/rtl/mcb_raw_wrapper.vhd (revision 5) +++ ipcore_dir/mem0/user_design/rtl/mcb_raw_wrapper.vhd (nonexistent) @@ -1,6943 +0,0 @@ ---***************************************************************************** --- (c) Copyright 2009 Xilinx, Inc. All rights reserved. --- --- This file contains confidential and proprietary information --- of Xilinx, Inc. and is protected under U.S. and --- international copyright and other intellectual property --- laws. --- --- DISCLAIMER --- This disclaimer is not a license and does not grant any --- rights to the materials distributed herewith. Except as --- otherwise provided in a valid license issued to you by --- Xilinx, and to the maximum extent permitted by applicable --- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND --- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES --- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING --- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- --- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and --- (2) Xilinx shall not be liable (whether in contract or tort, --- including negligence, or under any other theory of --- liability) for any loss or damage of any kind or nature --- related to, arising under or in connection with these --- materials, including for any direct, or any indirect, --- special, incidental, or consequential loss or damage --- (including loss of data, profits, goodwill, or any type of --- loss or damage suffered as a result of any action brought --- by a third party) even if such damage or loss was --- reasonably foreseeable or Xilinx had been advised of the --- possibility of the same. --- --- CRITICAL APPLICATIONS --- Xilinx products are not designed or intended to be fail- --- safe, or for use in any application requiring fail-safe --- performance, such as life-support or safety devices or --- systems, Class III medical devices, nuclear facilities, --- applications related to the deployment of airbags, or any --- other applications that could lead to death, personal --- injury, or severe property or environmental damage --- (individually and collectively, "Critical --- Applications"). Customer assumes the sole risk and --- liability of any use of Xilinx products in Critical --- Applications, subject only to applicable laws and --- regulations governing limitations on product liability. --- --- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS --- PART OF THIS FILE AT ALL TIMES. --- ---***************************************************************************** --- ____ ____ --- / /\/ / --- /___/ \ / Vendor: Xilinx --- \ \ \/ Version: %version --- \ \ Application: MIG --- / / Filename: mcb_raw_wrapper.v --- /___/ /\ Date Last Modified: $Date: 2010/06/04 11:24:37 $ --- \ \ / \ Date Created: Thu June 24 2008 --- \___\/\___\ --- ---Device: Spartan6 ---Design Name: DDR/DDR2/DDR3/LPDDR ---Purpose: ---Reference: --- This module is the intialization control logic of the memory interface. --- All commands are issued from here acoording to the burst, CAS Latency and --- the user commands. --- --- Revised History: --- Rev 1.1 - added port_enable assignment for all configurations and rearrange --- assignment siganls according to port number --- - added timescale directive -SN 7-28-08 --- - added C_ARB_NUM_TIME_SLOTS and removed the slot 12 through --- 15 -SN 7-28-08 --- - changed C_MEM_DDR2_WRT_RECOVERY = (C_MEM_TWR /C_MEMCLK_PERIOD) -SN 7-28-08 --- - removed ghighb, gpwrdnb, gsr, gwe in port declaration. --- For now tb need to force the signals inside the MCB and Wrapper --- until a glbl.v is ready. Not sure how to do this in NCVerilog --- flow. -SN 7-28-08 --- --- Rev 1.2 -- removed p*_cmd_error signals -SN 8-05-08 --- Rev 1.3 -- Added gate logic for data port rd_en and wr_en in Config 3,4,5 - SN 8-8-08 --- Rev 1.4 -- update changes that required by MCB core. - SN 9-11-09 --- Rev 1.5 -- update. CMD delays has been removed in Sept 26 database. -- SN 9-28-08 --- delay_cas_90,delay_ras_90,delay_cke_90,delay_odt_90,delay_rst_90 --- delay_we_90 ,delay_address,delay_ba_90 = --- --removed :assign #50 delay_dqnum = dqnum; --- --removed :assign #50 delay_dqpum = dqpum; --- --removed :assign #50 delay_dqnlm = dqnlm; --- --removed :assign #50 delay_dqplm = dqplm; --- --removed : delay_dqsIO_w_en_90_n --- --removed : delay_dqsIO_w_en_90_p --- --removed : delay_dqsIO_w_en_0 --- -- corrected spelling error: C_MEM_RTRAS --- Rev 1.6 -- update IODRP2 and OSERDES connection and was updated by Chip. 1-12-09 --- -- rename the memc_wrapper.v to mcb_raw_wrapper.v --- Rev 1.7 -- -- .READEN is removed in IODRP2_MCB 1-28-09 --- -- connection has been updated --- Rev 1.8 -- update memory parameter equations. 1-30_2009 --- -- added portion of Soft IP --- -- CAL_CLK_DIV is not used but MCB still has it --- Rev 1.9 -- added Error checking for Invalid command to unidirectional port --- Rev 1.10 -- changed the backend connection so that Simulation will work while --- sw tools try to fix the model issues. 2-3-2009 --- sysclk_2x_90 name is changed to sysclk_2x_180 . It created confusions. --- It is acutally 180 degree difference. --- Rev 1.11 -- Added MCB_Soft_Calibration_top. --- Rev 1.12 -- fixed ui_clk connection to MCB when soft_calib_ip is on. 5-14-2009 --- Rev 1.13 -- Added PULLUP/PULLDN for DQS/DQSN, UDQS/UDQSN lines. --- Rev 1.14 -- Added minium condition for tRTP valud/ --- REv 1.15 -- Bring the SKIP_IN_TERM_CAL and SKIP_DYNAMIC_CAL from calib_ip to top. 6-16-2009 --- Rev 1.16 -- Fixed the WTR for DDR. 6-23-2009 --- Rev 1.17 -- Fixed width mismatch for px_cmd_ra,px_cmd_ca,px_cmd_ba 7-02-2009 --- Rev 1.18 -- Added lumpdelay parameters for 1.0 silicon support to bypass Calibration 7-10-2010 --- Rev 1.19 -- Added soft fix to support refresh command. 7-15-2009. --- Rev 1.20 -- Turned on the CALIB_SOFT_IP and C_MC_CALIBRATION_MODE is used to enable/disable --- Dynamic DQS calibration in Soft Calibration module. --- Rev 1.21 -- Added extra generate mcbx_dram_odt pin condition. It will not be generated if --- RTT value is set to "disabled" --- -- Corrected the UIUDQSDEC connection between soft_calib and MCB. --- -- PLL_LOCK pin to MCB tie high. Soft Calib module asserts MCB_RST when pll_lock is deasserted. 1-19-2010 --- Rev 1.22 -- Added DDR2 Initialization fix to meet 400 ns wait as outlined in step d) of JEDEC DDR2 spec . --- Rev 1.23 -- Fixed CR 558661. In Config "B64B64" mode, mig_p5_wr_data <= p1_wr_data(63 downto 32). ---************************************************************************************************************************* -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; -library unisim; -use unisim.vcomponents.all; - -entity mcb_raw_wrapper is -generic( - C_MEMCLK_PERIOD : integer := 2500; - C_PORT_ENABLE : std_logic_vector(5 downto 0) := (others => '1'); - - C_MEM_ADDR_ORDER : string := "BANK_ROW_COLUMN"; - - C_ARB_NUM_TIME_SLOTS : integer := 12; - C_ARB_TIME_SLOT_0 : bit_vector(17 downto 0):= "000" & "001" & "010" & "011" & "100" & "101"; - C_ARB_TIME_SLOT_1 : bit_vector(17 downto 0):= "001" & "010" & "011" & "100" & "101" & "000"; - C_ARB_TIME_SLOT_2 : bit_vector(17 downto 0):= "010" & "011" & "100" & "101" & "000" & "011"; - C_ARB_TIME_SLOT_3 : bit_vector(17 downto 0):= "011" & "100" & "101" & "000" & "001" & "010"; - C_ARB_TIME_SLOT_4 : bit_vector(17 downto 0):= "100" & "101" & "000" & "001" & "010" & "011"; - C_ARB_TIME_SLOT_5 : bit_vector(17 downto 0):= "101" & "000" & "001" & "010" & "011" & "100"; - C_ARB_TIME_SLOT_6 : bit_vector(17 downto 0):= "000" & "001" & "010" & "011" & "100" & "101"; - C_ARB_TIME_SLOT_7 : bit_vector(17 downto 0):= "001" & "010" & "011" & "100" & "101" & "000"; - C_ARB_TIME_SLOT_8 : bit_vector(17 downto 0):= "010" & "011" & "100" & "101" & "000" & "011"; - C_ARB_TIME_SLOT_9 : bit_vector(17 downto 0):= "011" & "100" & "101" & "000" & "001" & "010"; - C_ARB_TIME_SLOT_10 : bit_vector(17 downto 0):= "100" & "101" & "000" & "001" & "010" & "011"; - C_ARB_TIME_SLOT_11 : bit_vector(17 downto 0):= "101" & "000" & "001" & "010" & "011" & "100"; - C_PORT_CONFIG : string := "B32_B32_W32_W32_W32_W32"; - - - C_MEM_TRAS : integer := 45000; - C_MEM_TRCD : integer := 12500; - C_MEM_TREFI : integer := 7800; - C_MEM_TRFC : integer := 127500; - C_MEM_TRP : integer := 12500; - C_MEM_TWR : integer := 15000; - C_MEM_TRTP : integer := 7500; - C_MEM_TWTR : integer := 7500; - - C_NUM_DQ_PINS : integer := 8; - C_MEM_TYPE : string := "DDR3"; - C_MEM_DENSITY : string := "512M"; - C_MEM_BURST_LEN : integer := 8; - - C_MEM_CAS_LATENCY : integer := 4; - C_MEM_ADDR_WIDTH : integer := 13; - C_MEM_BANKADDR_WIDTH : integer := 3; - C_MEM_NUM_COL_BITS : integer := 11; - - C_MEM_DDR3_CAS_LATENCY : integer := 7; - C_MEM_MOBILE_PA_SR : string := "FULL"; - C_MEM_DDR1_2_ODS : string := "FULL"; - C_MEM_DDR3_ODS : string := "DIV6"; - C_MEM_DDR2_RTT : string := "50OHMS"; - C_MEM_DDR3_RTT : string := "DIV2"; - C_MEM_MDDR_ODS : string := "FULL"; - - C_MEM_DDR2_DIFF_DQS_EN : string := "YES"; - C_MEM_DDR2_3_PA_SR : string := "OFF"; - C_MEM_DDR3_CAS_WR_LATENCY : integer := 5; - - C_MEM_DDR3_AUTO_SR : string := "ENABLED"; - C_MEM_DDR2_3_HIGH_TEMP_SR : string := "NORMAL"; - C_MEM_DDR3_DYN_WRT_ODT : string := "OFF"; - C_MEM_TZQINIT_MAXCNT : std_logic_vector(9 downto 0) := "1000000000"; -- DDR3 Minimum delay between resets - - C_MC_CALIB_BYPASS : string := "NO"; - C_MC_CALIBRATION_RA : bit_vector(15 downto 0) := X"0000"; - C_MC_CALIBRATION_BA : bit_vector(2 downto 0) := "000"; - - C_CALIB_SOFT_IP : string := "TRUE"; - C_SKIP_IN_TERM_CAL : integer := 0; --provides option to skip the input termination calibration - C_SKIP_DYNAMIC_CAL : integer := 0; --provides option to skip the dynamic delay calibration - C_SKIP_DYN_IN_TERM : integer := 1; -- provides option to skip the input termination calibration - C_SIMULATION : string := "FALSE"; -- Tells us whether the design is being simulated or implemented - - ---- ADDED for 1.0 silicon support to bypass Calibration ////// --- 07-10-09 chipl ---//////////////////////////////////////////////////////////// - LDQSP_TAP_DELAY_VAL : integer := 0; - UDQSP_TAP_DELAY_VAL : integer := 0; - LDQSN_TAP_DELAY_VAL : integer := 0; - UDQSN_TAP_DELAY_VAL : integer := 0; - DQ0_TAP_DELAY_VAL : integer := 0; - DQ1_TAP_DELAY_VAL : integer := 0; - DQ2_TAP_DELAY_VAL : integer := 0; - DQ3_TAP_DELAY_VAL : integer := 0; - DQ4_TAP_DELAY_VAL : integer := 0; - DQ5_TAP_DELAY_VAL : integer := 0; - DQ6_TAP_DELAY_VAL : integer := 0; - DQ7_TAP_DELAY_VAL : integer := 0; - DQ8_TAP_DELAY_VAL : integer := 0; - DQ9_TAP_DELAY_VAL : integer := 0; - DQ10_TAP_DELAY_VAL : integer := 0; - DQ11_TAP_DELAY_VAL : integer := 0; - DQ12_TAP_DELAY_VAL : integer := 0; - DQ13_TAP_DELAY_VAL : integer := 0; - DQ14_TAP_DELAY_VAL : integer := 0; - DQ15_TAP_DELAY_VAL : integer := 0; - - C_MC_CALIBRATION_CA : bit_vector(11 downto 0) := X"000"; - C_MC_CALIBRATION_CLK_DIV : integer := 1; - C_MC_CALIBRATION_MODE : string := "CALIBRATION"; - C_MC_CALIBRATION_DELAY : string := "HALF"; - - C_P0_MASK_SIZE : integer := 4; - C_P0_DATA_PORT_SIZE : integer := 32; - C_P1_MASK_SIZE : integer := 4; - C_P1_DATA_PORT_SIZE : integer := 32 - ); - PORT ( - - sysclk_2x : in std_logic; - sysclk_2x_180 : in std_logic; - pll_ce_0 : in std_logic; - pll_ce_90 : in std_logic; - pll_lock : in std_logic; - sys_rst : in std_logic; - - p0_arb_en : in std_logic; - p0_cmd_clk : in std_logic; - p0_cmd_en : in std_logic; - p0_cmd_instr : in std_logic_vector(2 downto 0); - p0_cmd_bl : in std_logic_vector(5 downto 0); - p0_cmd_byte_addr : in std_logic_vector(29 downto 0); - p0_cmd_empty : out std_logic; - p0_cmd_full : out std_logic; - - p0_wr_clk : in std_logic; - p0_wr_en : in std_logic; - p0_wr_mask : in std_logic_vector(C_P0_MASK_SIZE - 1 downto 0); - p0_wr_data : in std_logic_vector(C_P0_DATA_PORT_SIZE - 1 downto 0); - p0_wr_full : out std_logic; - p0_wr_empty : out std_logic; - p0_wr_count : out std_logic_vector(6 downto 0); - p0_wr_underrun : out std_logic; - p0_wr_error : out std_logic; - - p0_rd_clk : in std_logic; - p0_rd_en : in std_logic; - p0_rd_data : out std_logic_vector(C_P0_DATA_PORT_SIZE - 1 downto 0); - p0_rd_full : out std_logic; - p0_rd_empty : out std_logic; - p0_rd_count : out std_logic_vector(6 downto 0); - p0_rd_overflow : out std_logic; - p0_rd_error : out std_logic; - - p1_arb_en : in std_logic; - p1_cmd_clk : in std_logic; - p1_cmd_en : in std_logic; - p1_cmd_instr : in std_logic_vector(2 downto 0); - p1_cmd_bl : in std_logic_vector(5 downto 0); - p1_cmd_byte_addr : in std_logic_vector(29 downto 0); - p1_cmd_empty : out std_logic; - p1_cmd_full : out std_logic; - p1_wr_clk : in std_logic; - p1_wr_en : in std_logic; - p1_wr_mask : in std_logic_vector(C_P1_MASK_SIZE - 1 downto 0); - p1_wr_data : in std_logic_vector(C_P1_DATA_PORT_SIZE - 1 downto 0); - p1_wr_full : out std_logic; - p1_wr_empty : out std_logic; - p1_wr_count : out std_logic_vector(6 downto 0); - p1_wr_underrun : out std_logic; - p1_wr_error : out std_logic; - p1_rd_clk : in std_logic; - p1_rd_en : in std_logic; - p1_rd_data : out std_logic_vector(C_P1_DATA_PORT_SIZE - 1 downto 0); - p1_rd_full : out std_logic; - p1_rd_empty : out std_logic; - p1_rd_count : out std_logic_vector(6 downto 0); - p1_rd_overflow : out std_logic; - p1_rd_error : out std_logic; - - p2_arb_en : in std_logic; - p2_cmd_clk : in std_logic; - p2_cmd_en : in std_logic; - p2_cmd_instr : in std_logic_vector(2 downto 0); - p2_cmd_bl : in std_logic_vector(5 downto 0); - p2_cmd_byte_addr : in std_logic_vector(29 downto 0); - p2_cmd_empty : out std_logic; - p2_cmd_full : out std_logic; - p2_wr_clk : in std_logic; - p2_wr_en : in std_logic; - p2_wr_mask : in std_logic_vector(3 downto 0); - p2_wr_data : in std_logic_vector(31 downto 0); - p2_wr_full : out std_logic; - p2_wr_empty : out std_logic; - p2_wr_count : out std_logic_vector(6 downto 0); - p2_wr_underrun : out std_logic; - p2_wr_error : out std_logic; - p2_rd_clk : in std_logic; - p2_rd_en : in std_logic; - p2_rd_data : out std_logic_vector(31 downto 0); - p2_rd_full : out std_logic; - p2_rd_empty : out std_logic; - p2_rd_count : out std_logic_vector(6 downto 0); - p2_rd_overflow : out std_logic; - p2_rd_error : out std_logic; - - p3_arb_en : in std_logic; - p3_cmd_clk : in std_logic; - p3_cmd_en : in std_logic; - p3_cmd_instr : in std_logic_vector(2 downto 0); - p3_cmd_bl : in std_logic_vector(5 downto 0); - p3_cmd_byte_addr : in std_logic_vector(29 downto 0); - p3_cmd_empty : out std_logic; - p3_cmd_full : out std_logic; - p3_wr_clk : in std_logic; - p3_wr_en : in std_logic; - p3_wr_mask : in std_logic_vector(3 downto 0); - p3_wr_data : in std_logic_vector(31 downto 0); - p3_wr_full : out std_logic; - p3_wr_empty : out std_logic; - p3_wr_count : out std_logic_vector(6 downto 0); - p3_wr_underrun : out std_logic; - p3_wr_error : out std_logic; - p3_rd_clk : in std_logic; - p3_rd_en : in std_logic; - p3_rd_data : out std_logic_vector(31 downto 0); - p3_rd_full : out std_logic; - p3_rd_empty : out std_logic; - p3_rd_count : out std_logic_vector(6 downto 0); - p3_rd_overflow : out std_logic; - p3_rd_error : out std_logic; - - p4_arb_en : in std_logic; - p4_cmd_clk : in std_logic; - p4_cmd_en : in std_logic; - p4_cmd_instr : in std_logic_vector(2 downto 0); - p4_cmd_bl : in std_logic_vector(5 downto 0); - p4_cmd_byte_addr : in std_logic_vector(29 downto 0); - p4_cmd_empty : out std_logic; - p4_cmd_full : out std_logic; - p4_wr_clk : in std_logic; - p4_wr_en : in std_logic; - p4_wr_mask : in std_logic_vector(3 downto 0); - p4_wr_data : in std_logic_vector(31 downto 0); - p4_wr_full : out std_logic; - p4_wr_empty : out std_logic; - p4_wr_count : out std_logic_vector(6 downto 0); - p4_wr_underrun : out std_logic; - p4_wr_error : out std_logic; - p4_rd_clk : in std_logic; - p4_rd_en : in std_logic; - p4_rd_data : out std_logic_vector(31 downto 0); - p4_rd_full : out std_logic; - p4_rd_empty : out std_logic; - p4_rd_count : out std_logic_vector(6 downto 0); - p4_rd_overflow : out std_logic; - p4_rd_error : out std_logic; - - p5_arb_en : in std_logic; - p5_cmd_clk : in std_logic; - p5_cmd_en : in std_logic; - p5_cmd_instr : in std_logic_vector(2 downto 0); - p5_cmd_bl : in std_logic_vector(5 downto 0); - p5_cmd_byte_addr : in std_logic_vector(29 downto 0); - p5_cmd_empty : out std_logic; - p5_cmd_full : out std_logic; - p5_wr_clk : in std_logic; - p5_wr_en : in std_logic; - p5_wr_mask : in std_logic_vector(3 downto 0); - p5_wr_data : in std_logic_vector(31 downto 0); - p5_wr_full : out std_logic; - p5_wr_empty : out std_logic; - p5_wr_count : out std_logic_vector(6 downto 0); - p5_wr_underrun : out std_logic; - p5_wr_error : out std_logic; - p5_rd_clk : in std_logic; - p5_rd_en : in std_logic; - p5_rd_data : out std_logic_vector(31 downto 0); - p5_rd_full : out std_logic; - p5_rd_empty : out std_logic; - p5_rd_count : out std_logic_vector(6 downto 0); - p5_rd_overflow : out std_logic; - p5_rd_error : out std_logic; - - mcbx_dram_addr : out std_logic_vector(C_MEM_ADDR_WIDTH - 1 downto 0); - mcbx_dram_ba : out std_logic_vector(C_MEM_BANKADDR_WIDTH - 1 downto 0); - mcbx_dram_ras_n : out std_logic; - mcbx_dram_cas_n : out std_logic; - mcbx_dram_we_n : out std_logic; - mcbx_dram_cke : out std_logic; - mcbx_dram_clk : out std_logic; - mcbx_dram_clk_n : out std_logic; - mcbx_dram_dq : INOUT std_logic_vector(C_NUM_DQ_PINS-1 downto 0); - mcbx_dram_dqs : INOUT std_logic; - mcbx_dram_dqs_n : INOUT std_logic; - mcbx_dram_udqs : INOUT std_logic; - mcbx_dram_udqs_n : INOUT std_logic; - mcbx_dram_udm : out std_logic; - mcbx_dram_ldm : out std_logic; - mcbx_dram_odt : out std_logic; - mcbx_dram_ddr3_rst : out std_logic; - - calib_recal : in std_logic; - rzq : INOUT std_logic; - zio : INOUT std_logic; - ui_read : in std_logic; - ui_add : in std_logic; - ui_cs : in std_logic; - ui_clk : in std_logic; - ui_sdi : in std_logic; - ui_addr : in std_logic_vector(4 downto 0); - ui_broadcast : in std_logic; - ui_drp_update : in std_logic; - ui_done_cal : in std_logic; - ui_cmd : in std_logic; - ui_cmd_in : in std_logic; - ui_cmd_en : in std_logic; - ui_dqcount : in std_logic_vector(3 downto 0); - ui_dq_lower_dec : in std_logic; - ui_dq_lower_inc : in std_logic; - ui_dq_upper_dec : in std_logic; - ui_dq_upper_inc : in std_logic; - ui_udqs_inc : in std_logic; - ui_udqs_dec : in std_logic; - ui_ldqs_inc : in std_logic; - ui_ldqs_dec : in std_logic; - uo_data : out std_logic_vector(7 downto 0); - uo_data_valid : out std_logic; - uo_done_cal : out std_logic; - uo_cmd_ready_in : out std_logic; - uo_refrsh_flag : out std_logic; - uo_cal_start : out std_logic; - uo_sdo : out std_logic; - status : out std_logic_vector(31 downto 0); - selfrefresh_enter : in std_logic; - selfrefresh_mode : out std_logic - ); -end mcb_raw_wrapper; - - architecture aarch of mcb_raw_wrapper is - -component mcb_soft_calibration_top is - generic ( - C_MEM_TZQINIT_MAXCNT : std_logic_vector(9 downto 0) := "1000000000"; -- DDR3 Minimum delay between resets - C_MC_CALIBRATION_MODE : string := "CALIBRATION"; -- if set to CALIBRATION will reset DQS IDELAY to DQS_NUMERATOR/DQS_DENOMINATOR local_param values, - -- and does dynamic recal, - -- if set to NOCALIBRATION then defaults to hard cal blocks setting of C_MC_CALBRATION_DELAY *and* - -- no dynamic recal will be done - SKIP_IN_TERM_CAL : integer := 0; -- provides option to skip the input termination calibration - SKIP_DYNAMIC_CAL : integer := 0; -- provides option to skip the dynamic delay calibration - SKIP_DYN_IN_TERM : integer := 0; -- provides option to skip the dynamic delay calibration - C_SIMULATION : string := "FALSE"; -- Tells us whether the design is being simulated or implemented - C_MEM_TYPE : string := "DDR3" -- provides the memory device used for the design - - ); - port ( - UI_CLK : in std_logic; -- Input - global clock to be used for input_term_tuner and IODRP clock - RST : in std_logic; -- Input - reset for input_term_tuner - synchronous for input_term_tuner state machine, asynch for - -- IODRP (sub)controller - IOCLK : in std_logic; -- Input - IOCLK input to the IODRP's - DONE_SOFTANDHARD_CAL : out std_logic; -- active high flag signals soft calibration of input delays is complete and MCB_UODONECAL is high - -- (MCB hard calib complete) - PLL_LOCK : in std_logic; -- Lock signal from PLL - SELFREFRESH_REQ : in std_logic; - SELFREFRESH_MCB_MODE : in std_logic; - SELFREFRESH_MCB_REQ : out std_logic; - SELFREFRESH_MODE : out std_logic; - MCB_UIADD : out std_logic; -- to MCB's UIADD port - MCB_UISDI : out std_logic; -- to MCB's UISDI port - MCB_UOSDO : in std_logic; - MCB_UODONECAL : in std_logic; - MCB_UOREFRSHFLAG : in std_logic; - MCB_UICS : out std_logic; - MCB_UIDRPUPDATE : out std_logic; - MCB_UIBROADCAST : out std_logic; - MCB_UIADDR : out std_logic_vector(4 downto 0); - MCB_UICMDEN : out std_logic; - MCB_UIDONECAL : out std_logic; - MCB_UIDQLOWERDEC : out std_logic; - MCB_UIDQLOWERINC : out std_logic; - MCB_UIDQUPPERDEC : out std_logic; - MCB_UIDQUPPERINC : out std_logic; - MCB_UILDQSDEC : out std_logic; - MCB_UILDQSINC : out std_logic; - MCB_UIREAD : out std_logic; - MCB_UIUDQSDEC : out std_logic; - MCB_UIUDQSINC : out std_logic; - MCB_RECAL : out std_logic; - MCB_SYSRST : out std_logic; - MCB_UICMD : out std_logic; - MCB_UICMDIN : out std_logic; - MCB_UIDQCOUNT : out std_logic_vector(3 downto 0); - MCB_UODATA : in std_logic_vector(7 downto 0); - MCB_UODATAVALID : in std_logic; - MCB_UOCMDREADY : in std_logic; - MCB_UO_CAL_START : in std_logic; - RZQ_PIN : inout std_logic; - ZIO_PIN : inout std_logic; - CKE_Train : out std_logic - ); -end component; - -constant C_OSERDES2_DATA_RATE_OQ : STRING := "SDR"; -constant C_OSERDES2_DATA_RATE_OT : STRING := "SDR"; -constant C_OSERDES2_SERDES_MODE_MASTER : STRING := "MASTER"; -constant C_OSERDES2_SERDES_MODE_SLAVE : STRING := "SLAVE"; -constant C_OSERDES2_OUTPUT_MODE_SE : STRING := "SINGLE_ENDED"; -constant C_OSERDES2_OUTPUT_MODE_DIFF : STRING := "DIFFERENTIAL"; - -constant C_BUFPLL_0_LOCK_SRC : STRING := "LOCK_TO_0"; - -constant C_DQ_IODRP2_DATA_RATE : STRING := "SDR"; -constant C_DQ_IODRP2_SERDES_MODE_MASTER : STRING := "MASTER"; -constant C_DQ_IODRP2_SERDES_MODE_SLAVE : STRING := "SLAVE"; - -constant C_DQS_IODRP2_DATA_RATE : STRING := "SDR"; -constant C_DQS_IODRP2_SERDES_MODE_MASTER : STRING := "MASTER"; -constant C_DQS_IODRP2_SERDES_MODE_SLAVE : STRING := "SLAVE"; - --- MIG always set the below ADD_LATENCY to zero -constant C_MEM_DDR3_ADD_LATENCY : STRING := "OFF"; -constant C_MEM_DDR2_ADD_LATENCY : INTEGER := 0; -constant C_MEM_MOBILE_TC_SR : INTEGER := 0; - --- convert the memory timing to memory clock units. I -constant MEM_RAS_VAL : INTEGER := ((C_MEM_TRAS + C_MEMCLK_PERIOD - 1) / C_MEMCLK_PERIOD); -constant MEM_RCD_VAL : INTEGER := ((C_MEM_TRCD + C_MEMCLK_PERIOD - 1) / C_MEMCLK_PERIOD); -constant MEM_REFI_VAL : INTEGER := ((C_MEM_TREFI + C_MEMCLK_PERIOD - 1) / C_MEMCLK_PERIOD); -constant MEM_RFC_VAL : INTEGER := ((C_MEM_TRFC + C_MEMCLK_PERIOD - 1) / C_MEMCLK_PERIOD); -constant MEM_RP_VAL : INTEGER := ((C_MEM_TRP + C_MEMCLK_PERIOD - 1) / C_MEMCLK_PERIOD); -constant MEM_WR_VAL : INTEGER := ((C_MEM_TWR + C_MEMCLK_PERIOD - 1) / C_MEMCLK_PERIOD); - - function cdiv return integer is - begin - if ( (C_MEM_TRTP mod C_MEMCLK_PERIOD)>0) then - return (C_MEM_TRTP/C_MEMCLK_PERIOD)+1; - else - return (C_MEM_TRTP/C_MEMCLK_PERIOD); - end if; - end function cdiv; - -constant MEM_RTP_VAL1 : INTEGER := cdiv; - - -function MEM_RTP_CYC1 return integer is - begin - if (MEM_RTP_VAL1 < 4 and C_MEM_TYPE = "DDR3") then - return 4; - else if(MEM_RTP_VAL1 < 2) then - return 2; - else - return MEM_RTP_VAL1; - end if; - end if; - end function MEM_RTP_CYC1; - -constant MEM_RTP_VAL : INTEGER := MEM_RTP_CYC1; - -function MEM_WTR_CYC return integer is - begin - if (C_MEM_TYPE = "DDR") then - return 2; - elsif (C_MEM_TYPE = "DDR3") then - return 4; - elsif (C_MEM_TYPE = "MDDR" OR C_MEM_TYPE = "LPDDR") then - return C_MEM_TWTR; - elsif (C_MEM_TYPE = "DDR2" AND (((C_MEM_TWTR + C_MEMCLK_PERIOD -1) /C_MEMCLK_PERIOD) > 2)) then - return ((C_MEM_TWTR + C_MEMCLK_PERIOD -1) /C_MEMCLK_PERIOD); - elsif (C_MEM_TYPE = "DDR2")then - return 2; - else - return 3; - end if; - end function MEM_WTR_CYC; - -constant MEM_WTR_VAL : INTEGER := MEM_WTR_CYC; - -function DDR2_WRT_RECOVERY_CYC return integer is - begin - if (not(C_MEM_TYPE = "DDR2")) then - return 5; - else - return ((C_MEM_TWR + C_MEMCLK_PERIOD - 1) / C_MEMCLK_PERIOD); - end if; - end function DDR2_WRT_RECOVERY_CYC; - - -constant C_MEM_DDR2_WRT_RECOVERY : INTEGER := DDR2_WRT_RECOVERY_CYC; - -function DDR3_WRT_RECOVERY_CYC return integer is - begin - if (not(C_MEM_TYPE = "DDR3")) then - return 5; - else - return ((C_MEM_TWR + C_MEMCLK_PERIOD - 1) / C_MEMCLK_PERIOD); - end if; - end function DDR3_WRT_RECOVERY_CYC; - -constant C_MEM_DDR3_WRT_RECOVERY : INTEGER := DDR3_WRT_RECOVERY_CYC; ----------------------------------------------------------------------------- --- signla Declarations ----------------------------------------------------------------------------- -signal addr_in0 : std_logic_vector(31 downto 0); -signal allzero : std_logic_vector(127 downto 0) := (others => '0'); -signal dqs_out_p : std_logic; -signal dqs_out_n : std_logic; -signal dqs_sys_p : std_logic; --from dqs_gen to IOclk network -signal dqs_sys_n : std_logic; --from dqs_gen to IOclk network -signal udqs_sys_p: std_logic; -signal udqs_sys_n: std_logic; -signal dqs_p : std_logic; -- open net now ? -signal dqs_n : std_logic; -- open net now ? - --- IOI and IOB enable/tristate interface -signal dqIO_w_en_0 : std_logic; --enable DQ pads -signal dqsIO_w_en_90_p : std_logic; --enable p side of DQS -signal dqsIO_w_en_90_n : std_logic; --enable n side of DQS - ---memory chip control interface -signal address_90 : std_logic_vector(14 downto 0); -signal ba_90 : std_logic_vector(2 downto 0); -signal ras_90 : std_logic; -signal cas_90 : std_logic; -signal we_90 : std_logic; -signal cke_90 : std_logic; -signal odt_90 : std_logic; -signal rst_90 : std_logic; - --- calibration IDELAY control signals -signal ioi_drp_clk : std_logic; --DRP interface - synchronous clock output -signal ioi_drp_addr : std_logic_vector(4 downto 0); --DRP interface - IOI selection -signal ioi_drp_sdo : std_logic; --DRP interface - serial output for commmands -signal ioi_drp_sdi : std_logic; --DRP interface - serial input for commands -signal ioi_drp_cs : std_logic; --DRP interface - chip select doubles as DONE signal -signal ioi_drp_add : std_logic; --DRP interface - serial address signal -signal ioi_drp_broadcast : std_logic; -signal ioi_drp_train : std_logic; - --- Calibration datacapture siganls -signal dqdonecount : std_logic_vector(3 downto 0); --select signal for the datacapture 16 to 1 mux -signal dq_in_p : std_logic; --positive signal sent to calibration logic -signal dq_in_n : std_logic; --negative signal sent to calibration logic -signal cal_done: std_logic; - ---DQS calibration interface -signal udqs_n : std_logic; -signal udqs_p : std_logic; -signal udqs_dqocal_p : std_logic; -signal udqs_dqocal_n : std_logic; - --- MUI enable interface -signal df_en_n90 : std_logic; - ---INTERNAL signal FOR DRP chain --- IOI <-> MUI -signal ioi_int_tmp : std_logic; - -signal dqo_n : std_logic_vector(15 downto 0); -signal dqo_p : std_logic_vector(15 downto 0); -signal dqnlm : std_logic; -signal dqplm : std_logic; -signal dqnum : std_logic; -signal dqpum : std_logic; - --- IOI <-> IOB routes -signal ioi_addr : std_logic_vector(C_MEM_ADDR_WIDTH-1 downto 0); -signal ioi_ba : std_logic_vector(C_MEM_BANKADDR_WIDTH-1 downto 0); -signal ioi_cas : std_logic; -signal ioi_ck : std_logic; -signal ioi_ckn : std_logic; -signal ioi_cke : std_logic; -signal ioi_dq : std_logic_vector(C_NUM_DQ_PINS-1 downto 0); -signal ioi_dqs : std_logic; -signal ioi_dqsn : std_logic; -signal ioi_udqs : std_logic; -signal ioi_udqsn : std_logic; -signal ioi_odt : std_logic; -signal ioi_ras : std_logic; -signal ioi_rst : std_logic; -signal ioi_we : std_logic; -signal ioi_udm : std_logic; -signal ioi_ldm : std_logic; - -signal in_dq : std_logic_vector(15 downto 0); -signal in_pre_dq : std_logic_vector(C_NUM_DQ_PINS-1 downto 0); -signal in_dqs : std_logic; -signal in_pre_dqsp : std_logic; -signal in_pre_dqsn : std_logic; -signal in_pre_udqsp : std_logic; -signal in_pre_udqsn : std_logic; -signal in_udqs : std_logic; - --- Memory tri-state control signals -signal t_addr : std_logic_vector(C_MEM_ADDR_WIDTH-1 downto 0); -signal t_ba : std_logic_vector(C_MEM_BANKADDR_WIDTH-1 downto 0); -signal t_cas : std_logic; -signal t_ck : std_logic; -signal t_ckn : std_logic; -signal t_cke : std_logic; -signal t_dq : std_logic_vector(C_NUM_DQ_PINS-1 downto 0); -signal t_dqs : std_logic; -signal t_dqsn : std_logic; -signal t_udqs : std_logic; -signal t_udqsn : std_logic; -signal t_odt : std_logic; -signal t_ras : std_logic; -signal t_rst : std_logic; -signal t_we : std_logic; - -signal t_udm : std_logic; -signal t_ldm : std_logic; - -signal idelay_dqs_ioi_s : std_logic; -signal idelay_dqs_ioi_m : std_logic; -signal idelay_udqs_ioi_s : std_logic; -signal idelay_udqs_ioi_m : std_logic; - -signal dqs_pin : std_logic; -signal udqs_pin : std_logic; - --- USER Interface signals --- translated memory addresses -signal p0_cmd_ra : std_logic_vector(14 downto 0); -signal p0_cmd_ba : std_logic_vector(2 downto 0); -signal p0_cmd_ca : std_logic_vector(11 downto 0); -signal p1_cmd_ra : std_logic_vector(14 downto 0); -signal p1_cmd_ba : std_logic_vector(2 downto 0); -signal p1_cmd_ca : std_logic_vector(11 downto 0); -signal p2_cmd_ra : std_logic_vector(14 downto 0); -signal p2_cmd_ba : std_logic_vector(2 downto 0); -signal p2_cmd_ca : std_logic_vector(11 downto 0); -signal p3_cmd_ra : std_logic_vector(14 downto 0); -signal p3_cmd_ba : std_logic_vector(2 downto 0); -signal p3_cmd_ca : std_logic_vector(11 downto 0); -signal p4_cmd_ra : std_logic_vector(14 downto 0); -signal p4_cmd_ba : std_logic_vector(2 downto 0); -signal p4_cmd_ca : std_logic_vector(11 downto 0); -signal p5_cmd_ra : std_logic_vector(14 downto 0); -signal p5_cmd_ba : std_logic_vector(2 downto 0); -signal p5_cmd_ca : std_logic_vector(11 downto 0); - - -- user command wires mapped from logical ports to physical ports -signal mig_p0_arb_en : std_logic; -signal mig_p0_cmd_clk : std_logic; -signal mig_p0_cmd_en : std_logic; -signal mig_p0_cmd_ra : std_logic_vector(14 downto 0); -signal mig_p0_cmd_ba : std_logic_vector(2 downto 0); -signal mig_p0_cmd_ca : std_logic_vector(11 downto 0); - -signal mig_p0_cmd_instr : std_logic_vector(2 downto 0); -signal mig_p0_cmd_bl : std_logic_vector(5 downto 0); -signal mig_p0_cmd_empty : std_logic; -signal mig_p0_cmd_full : std_logic; - -signal mig_p1_arb_en : std_logic; -signal mig_p1_cmd_clk : std_logic; -signal mig_p1_cmd_en : std_logic; -signal mig_p1_cmd_ra : std_logic_vector(14 downto 0); -signal mig_p1_cmd_ba : std_logic_vector(2 downto 0); -signal mig_p1_cmd_ca : std_logic_vector(11 downto 0); - -signal mig_p1_cmd_instr : std_logic_vector(2 downto 0); -signal mig_p1_cmd_bl : std_logic_vector(5 downto 0); -signal mig_p1_cmd_empty : std_logic; -signal mig_p1_cmd_full : std_logic; - -signal mig_p2_arb_en : std_logic; -signal mig_p2_cmd_clk : std_logic; -signal mig_p2_cmd_en : std_logic; -signal mig_p2_cmd_ra : std_logic_vector(14 downto 0); -signal mig_p2_cmd_ba : std_logic_vector(2 downto 0); -signal mig_p2_cmd_ca : std_logic_vector(11 downto 0); - -signal mig_p2_cmd_instr : std_logic_vector(2 downto 0); -signal mig_p2_cmd_bl : std_logic_vector(5 downto 0); -signal mig_p2_cmd_empty : std_logic; -signal mig_p2_cmd_full : std_logic; - -signal mig_p3_arb_en : std_logic; -signal mig_p3_cmd_clk : std_logic; -signal mig_p3_cmd_en : std_logic; -signal mig_p3_cmd_ra : std_logic_vector(14 downto 0); -signal mig_p3_cmd_ba : std_logic_vector(2 downto 0); -signal mig_p3_cmd_ca : std_logic_vector(11 downto 0); - -signal mig_p3_cmd_instr : std_logic_vector(2 downto 0); -signal mig_p3_cmd_bl : std_logic_vector(5 downto 0); -signal mig_p3_cmd_empty : std_logic; -signal mig_p3_cmd_full : std_logic; - -signal mig_p4_arb_en : std_logic; -signal mig_p4_cmd_clk : std_logic; -signal mig_p4_cmd_en : std_logic; -signal mig_p4_cmd_ra : std_logic_vector(14 downto 0); -signal mig_p4_cmd_ba : std_logic_vector(2 downto 0); -signal mig_p4_cmd_ca : std_logic_vector(11 downto 0); - -signal mig_p4_cmd_instr : std_logic_vector(2 downto 0); -signal mig_p4_cmd_bl : std_logic_vector(5 downto 0); -signal mig_p4_cmd_empty : std_logic; -signal mig_p4_cmd_full : std_logic; - -signal mig_p5_arb_en : std_logic; -signal mig_p5_cmd_clk : std_logic; -signal mig_p5_cmd_en : std_logic; -signal mig_p5_cmd_ra : std_logic_vector(14 downto 0); -signal mig_p5_cmd_ba : std_logic_vector(2 downto 0); -signal mig_p5_cmd_ca : std_logic_vector(11 downto 0); - -signal mig_p5_cmd_instr : std_logic_vector(2 downto 0); -signal mig_p5_cmd_bl : std_logic_vector(5 downto 0); -signal mig_p5_cmd_empty : std_logic; -signal mig_p5_cmd_full : std_logic; - -signal mig_p0_wr_clk : std_logic; -signal mig_p0_rd_clk : std_logic; -signal mig_p1_wr_clk : std_logic; -signal mig_p1_rd_clk : std_logic; -signal mig_p2_clk : std_logic; -signal mig_p3_clk : std_logic; -signal mig_p4_clk : std_logic; -signal mig_p5_clk : std_logic; - -signal mig_p0_wr_en : std_logic; -signal mig_p0_rd_en : std_logic; -signal mig_p1_wr_en : std_logic; -signal mig_p1_rd_en : std_logic; -signal mig_p2_en : std_logic; -signal mig_p3_en : std_logic; -signal mig_p4_en : std_logic; -signal mig_p5_en : std_logic; - -signal mig_p0_wr_data : std_logic_vector(31 downto 0); -signal mig_p1_wr_data : std_logic_vector(31 downto 0); -signal mig_p2_wr_data : std_logic_vector(31 downto 0); -signal mig_p3_wr_data : std_logic_vector(31 downto 0); -signal mig_p4_wr_data : std_logic_vector(31 downto 0); -signal mig_p5_wr_data : std_logic_vector(31 downto 0); - -signal mig_p0_wr_mask : std_logic_vector(C_P0_MASK_SIZE - 1 downto 0); -signal mig_p1_wr_mask : std_logic_vector(C_P1_MASK_SIZE - 1 downto 0); -signal mig_p2_wr_mask : std_logic_vector(3 downto 0); -signal mig_p3_wr_mask : std_logic_vector(3 downto 0); -signal mig_p4_wr_mask : std_logic_vector(3 downto 0); -signal mig_p5_wr_mask : std_logic_vector(3 downto 0); - -signal mig_p0_rd_data : std_logic_vector(31 downto 0); -signal mig_p1_rd_data : std_logic_vector(31 downto 0); -signal mig_p2_rd_data : std_logic_vector(31 downto 0); -signal mig_p3_rd_data : std_logic_vector(31 downto 0); -signal mig_p4_rd_data : std_logic_vector(31 downto 0); -signal mig_p5_rd_data : std_logic_vector(31 downto 0); - -signal mig_p0_rd_overflow : std_logic; -signal mig_p1_rd_overflow : std_logic; -signal mig_p2_overflow : std_logic; -signal mig_p3_overflow : std_logic; - -signal mig_p4_overflow : std_logic; -signal mig_p5_overflow : std_logic; - -signal mig_p0_wr_underrun : std_logic; -signal mig_p1_wr_underrun : std_logic; -signal mig_p2_underrun : std_logic; -signal mig_p3_underrun : std_logic; -signal mig_p4_underrun : std_logic; -signal mig_p5_underrun : std_logic; - -signal mig_p0_rd_error : std_logic; -signal mig_p0_wr_error : std_logic; -signal mig_p1_rd_error : std_logic; -signal mig_p1_wr_error : std_logic; -signal mig_p2_error : std_logic; -signal mig_p3_error : std_logic; -signal mig_p4_error : std_logic; -signal mig_p5_error : std_logic; - -signal mig_p0_wr_count : std_logic_vector(6 downto 0); -signal mig_p1_wr_count : std_logic_vector(6 downto 0); -signal mig_p0_rd_count : std_logic_vector(6 downto 0); -signal mig_p1_rd_count : std_logic_vector(6 downto 0); - -signal mig_p2_count : std_logic_vector(6 downto 0); -signal mig_p3_count : std_logic_vector(6 downto 0); -signal mig_p4_count : std_logic_vector(6 downto 0); -signal mig_p5_count : std_logic_vector(6 downto 0); - -signal mig_p0_wr_full : std_logic; -signal mig_p1_wr_full : std_logic; - -signal mig_p0_rd_empty : std_logic; -signal mig_p1_rd_empty : std_logic; -signal mig_p0_wr_empty : std_logic; -signal mig_p1_wr_empty : std_logic; -signal mig_p0_rd_full : std_logic; -signal mig_p1_rd_full : std_logic; -signal mig_p2_full : std_logic; -signal mig_p3_full : std_logic; -signal mig_p4_full : std_logic; -signal mig_p5_full : std_logic; -signal mig_p2_empty : std_logic; -signal mig_p3_empty : std_logic; -signal mig_p4_empty : std_logic; -signal mig_p5_empty : std_logic; - --- SELFREESH control signal for suspend feature -signal selfrefresh_mcb_enter : std_logic; -signal selfrefresh_mcb_mode : std_logic; - -signal MCB_SYSRST : std_logic; -signal ioclk0 : std_logic; -signal ioclk90 : std_logic; -signal hard_done_cal : std_logic; -signal uo_data_int : std_logic_vector(7 downto 0); -signal uo_data_valid_int : std_logic; -signal uo_cmd_ready_in_int : std_logic; -signal syn_uiclk_pll_lock : std_logic; -signal int_sys_rst : std_logic; - ---testing -signal ioi_drp_update : std_logic; -signal aux_sdi_sdo : std_logic_vector(7 downto 0); - - - signal mcb_recal : std_logic; - signal mcb_ui_read : std_logic; - signal mcb_ui_add : std_logic; - signal mcb_ui_cs : std_logic; - signal mcb_ui_clk : std_logic; - signal mcb_ui_sdi : std_logic; - signal mcb_ui_addr : STD_LOGIC_vector(4 downto 0); - signal mcb_ui_broadcast : std_logic; - signal mcb_ui_drp_update : std_logic; - signal mcb_ui_done_cal : std_logic; - signal mcb_ui_cmd : std_logic; - signal mcb_ui_cmd_in : std_logic; - signal mcb_ui_cmd_en : std_logic; - signal mcb_ui_dqcount : std_logic_vector(3 downto 0); - signal mcb_ui_dq_lower_dec : std_logic; - signal mcb_ui_dq_lower_inc : std_logic; - signal mcb_ui_dq_upper_dec : std_logic; - signal mcb_ui_dq_upper_inc : std_logic; - signal mcb_ui_udqs_inc : std_logic; - signal mcb_ui_udqs_dec : std_logic; - signal mcb_ui_ldqs_inc : std_logic; - signal mcb_ui_ldqs_dec : std_logic; - - signal DONE_SOFTANDHARD_CAL : std_logic; - - - signal ck_shiftout0_1 : std_logic; - signal ck_shiftout0_2 : std_logic; - signal ck_shiftout1_3 : std_logic; - signal ck_shiftout1_4 : std_logic; - - signal udm_oq : std_logic; - signal udm_t : std_logic; - signal ldm_oq : std_logic; - signal ldm_t : std_logic; - signal dqsp_oq : std_logic; - signal dqsp_tq : std_logic; - signal dqs_shiftout0_1 : std_logic; - signal dqs_shiftout0_2 : std_logic; - signal dqs_shiftout1_3 : std_logic; - signal dqs_shiftout1_4 : std_logic; - - signal dqsn_oq : std_logic; - signal dqsn_tq : std_logic; - - signal udqsp_oq : std_logic; - signal udqsp_tq : std_logic; - signal udqs_shiftout0_1 : std_logic; - signal udqs_shiftout0_2 : std_logic; - signal udqs_shiftout1_3 : std_logic; - signal udqs_shiftout1_4 : std_logic; - - signal udqsn_oq : std_logic; - signal udqsn_tq : std_logic; - - signal aux_sdi_out_dqsp : std_logic; - signal aux_sdi_out_udqsp : std_logic; - signal aux_sdi_out_udqsn : std_logic; - signal aux_sdi_out_0 : std_logic; - signal aux_sdi_out_1 : std_logic; - signal aux_sdi_out_2 : std_logic; - signal aux_sdi_out_3 : std_logic; - signal aux_sdi_out_5 : std_logic; - signal aux_sdi_out_6 : std_logic; - signal aux_sdi_out_7 : std_logic; - signal aux_sdi_out_9 : std_logic; - signal aux_sdi_out_10 : std_logic; - signal aux_sdi_out_11 : std_logic; - signal aux_sdi_out_12 : std_logic; - signal aux_sdi_out_13 : std_logic; - signal aux_sdi_out_14 : std_logic; - signal aux_sdi_out_15 : std_logic; - signal aux_sdi_out_8 : std_logic; - signal aux_sdi_out_dqsn : std_logic; - signal aux_sdi_out_4 : std_logic; - signal aux_sdi_out_udm : std_logic; - signal aux_sdi_out_ldm : std_logic; - signal uo_cal_start_int : std_logic; - - signal cke_train : std_logic; - signal dq_oq : std_logic_vector(C_NUM_DQ_PINS-1 downto 0); - signal dq_tq : std_logic_vector(C_NUM_DQ_PINS-1 downto 0); - - signal p0_wr_full_i : std_logic; - signal p0_rd_empty_i : std_logic; - signal p1_wr_full_i : std_logic; - signal p1_rd_empty_i : std_logic; - signal pllclk1 : std_logic_vector(1 downto 0); - signal pllce1 : std_logic_vector(1 downto 0); - signal uo_refrsh_flag_xhdl23 : std_logic; - SIGNAL uo_sdo_xhdl24 : STD_LOGIC; - signal Max_Value_Cal_Error : std_logic; - - attribute max_fanout : string; - attribute syn_maxfan : integer; - attribute max_fanout of int_sys_rst : signal is "1"; - attribute syn_maxfan of int_sys_rst : signal is 1; - -begin - uo_cmd_ready_in <= uo_cmd_ready_in_int; - uo_data_valid <= uo_data_valid_int; - uo_data <= uo_data_int; - uo_refrsh_flag <= uo_refrsh_flag_xhdl23; - uo_sdo <= uo_sdo_xhdl24; - - p0_wr_full <= p0_wr_full_i; - p0_rd_empty <= p0_rd_empty_i; - p1_wr_full <= p1_wr_full_i; - p1_rd_empty <= p1_rd_empty_i; - ioclk0 <= sysclk_2x; - ioclk90 <= sysclk_2x_180; - pllclk1 <= (ioclk90 & ioclk0); - pllce1 <= (pll_ce_90 & pll_ce_0); - - -- Added 2/22 - Add flop to pll_lock status signal to improve timing - process (ui_clk) - begin - if (ui_clk'event and ui_clk = '1') then - syn_uiclk_pll_lock <= pll_lock; - end if; - end process; - - int_sys_rst <= sys_rst or not(syn_uiclk_pll_lock); - ---Address Remapping --- Byte Address remapping --- --- Bank Address[x:0] & Row Address[x:0] & Column Address[x:0] --- column address remap for port 0 - -x16_addr : if(C_NUM_DQ_PINS = 16) generate -- port bus remapping sections for CONFIG 2 15,3,12 -x16_addr_rbc : if (C_MEM_ADDR_ORDER = "ROW_BANK_COLUMN") generate -- C_MEM_ADDR_ORDER = 0 : Bank Row Column - --- port 0 address remapping - - x16_p0_a15 : if (C_MEM_ADDR_WIDTH = 15) generate - p0_cmd_ra <= p0_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS + 1); - end generate; - - x16_p0_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate - p0_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p0_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS + 1)); - end generate; - - - x16_p0_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p0_cmd_ba <= p0_cmd_byte_addr( C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_NUM_COL_BITS + 1); - end generate; - - x16_p0_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p0_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH) & p0_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto + C_MEM_NUM_COL_BITS + 1)); - end generate; - - - x16_p0_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p0_cmd_ca <= p0_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1); - end generate; - - x16_p0_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p0_cmd_ca <= (allzero(12 downto C_MEM_NUM_COL_BITS + 1) & p0_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1)); - end generate; - --- port 1 address remapping - - x16_p1_a15 : if (C_MEM_ADDR_WIDTH = 15) generate --Row - p1_cmd_ra <= p1_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS + 1); - end generate; - - x16_p1_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p1_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p1_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS + 1)); - end generate; - - - x16_p1_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p1_cmd_ba <= p1_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_NUM_COL_BITS + 1); - end generate; - - x16_p1_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p1_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH) & p1_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto + C_MEM_NUM_COL_BITS + 1)); - - end generate; - - - x16_p1_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p1_cmd_ca <= p1_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1); - - end generate; - - x16_p1_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p1_cmd_ca <= (allzero(12 downto C_MEM_NUM_COL_BITS + 1) & p1_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1)); - - end generate; - - -- port 2 address remapping - x16_p2_a15 : if (C_MEM_ADDR_WIDTH = 15) generate --Row - p2_cmd_ra <= p2_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS + 1); - end generate; - - x16_p2_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p2_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p2_cmd_byte_addr (C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS + 1)); - end generate; - - - x16_p2_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p2_cmd_ba <= p2_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_NUM_COL_BITS + 1); - end generate; - - x16_p2_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p2_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH) & p2_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_NUM_COL_BITS + 1)); - end generate; - - - x16_p2_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p2_cmd_ca <= p2_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1); - - end generate; - - x16_p2_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p2_cmd_ca <= (allzero(12 downto C_MEM_NUM_COL_BITS + 1) & p2_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1)); - - end generate; - - --- port 3 address remapping - x16_p3_a15 : if (C_MEM_ADDR_WIDTH = 15) generate --Row - p3_cmd_ra <= p3_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS + 1); - - end generate; - - x16_p3_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p3_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p3_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS + 1)); - end generate; - - - x16_p3_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p3_cmd_ba <= p3_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_NUM_COL_BITS + 1); - - end generate; - - x16_p3_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p3_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH) & p3_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto + C_MEM_NUM_COL_BITS + 1)); - - end generate; - - - x16_p3_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p3_cmd_ca <= p3_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1); - - end generate; - - x16_p3_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p3_cmd_ca <= (allzero(12 downto C_MEM_NUM_COL_BITS +1 ) & p3_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1)); - end generate; - - - - - -- port 4 address remapping - - x16_p4_a15 : if (C_MEM_ADDR_WIDTH = 15) generate --Row - p4_cmd_ra <= p4_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS + 1); - - end generate; - - x16_p4_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p4_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p4_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS + 1)); - end generate; - - - x16_p4_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p4_cmd_ba <= p4_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_NUM_COL_BITS + 1); - end generate; - - x16_p4_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p4_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH) & p4_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_NUM_COL_BITS + 1)); - end generate; - - - x16_p4_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p4_cmd_ca <= p4_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1); - - end generate; - - x16_p4_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p4_cmd_ca <= (allzero(12 downto C_MEM_NUM_COL_BITS +1)& p4_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1)); - end generate; - - - --- port 5 address remapping - x16_p5_a15 : if (C_MEM_ADDR_WIDTH = 15) generate --Row - p5_cmd_ra <= p5_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS + 1); - end generate; - - x16_p5_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p5_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p5_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS + 1)); - end generate; - - - x16_p5_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p5_cmd_ba <= p5_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_NUM_COL_BITS + 1); - end generate; - - x16_p5_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p5_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH) & p5_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS downto + C_MEM_NUM_COL_BITS + 1)); - end generate; - - - x16_p5_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p5_cmd_ca <= p5_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1); - end generate; - - x16_p5_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p5_cmd_ca <= (allzero(12 downto C_MEM_NUM_COL_BITS+1) & p5_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1)); - end generate; -end generate; --x16_addr_rbc - -x16_addr_rbc_n : if (not(C_MEM_ADDR_ORDER = "ROW_BANK_COLUMN")) generate - - - -- port 0 address remapping - -x16_rbc_n_p0_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p0_cmd_ba <= p0_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1); - end generate; - -x16_rbc_n_p0_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p0_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH) & p0_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1)); - end generate; - -x16_rbc_n_p0_a15 : if (C_MEM_ADDR_WIDTH = 15 ) generate --row - p0_cmd_ra <= p0_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_NUM_COL_BITS + 1); - end generate; - -x16_rbc_n_p0_a15_n : if (not(C_MEM_ADDR_WIDTH = 15 )) generate --row - p0_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p0_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_NUM_COL_BITS + 1)); - end generate; - -x16_rbc_n_p0_c12 : if (C_MEM_NUM_COL_BITS = 12 ) generate --column - p0_cmd_ca <= p0_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1); - - end generate; - -x16_rbc_n_p0_c12_n : if (not(C_MEM_NUM_COL_BITS = 12 )) generate --column - p0_cmd_ca <= (allzero(12 downto C_MEM_NUM_COL_BITS+1)& p0_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1)); - end generate; - - - - - --- port 1 address remapping - x16_rbc_n_p1_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p1_cmd_ba <= p1_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1); - end generate; - -x16_rbc_n_p1_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p1_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH) & p1_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1)); - end generate; - -x16_rbc_n_p1_a15 : if (C_MEM_ADDR_WIDTH = 15 ) generate --row - p1_cmd_ra <= p1_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_NUM_COL_BITS + 1); - end generate; - -x16_rbc_n_p1_a15_n : if (not(C_MEM_ADDR_WIDTH = 15 )) generate --row - p1_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p1_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_NUM_COL_BITS + 1)); - end generate; - -x16_rbc_n_p1_c12 : if (C_MEM_NUM_COL_BITS = 12 ) generate --column - p1_cmd_ca <= p1_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1); - end generate; - -x16_rbc_n_p1_c12_n : if (not(C_MEM_NUM_COL_BITS = 12 )) generate --column - p1_cmd_ca <= (allzero(12 downto C_MEM_NUM_COL_BITS+1) & p1_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1)); - end generate; - - - - -- port 2 address remapping -x16_rbc_n_p2_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p2_cmd_ba <= p2_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1); - end generate; - -x16_rbc_n_p2_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p2_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH) & p2_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1)); - - end generate; - -x16_rbc_n_p2_a15 : if (C_MEM_ADDR_WIDTH = 15 ) generate --row - p2_cmd_ra <= p2_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_NUM_COL_BITS + 1); - - end generate; - -x16_rbc_n_p2_a15_n : if (not(C_MEM_ADDR_WIDTH = 15 )) generate --row - p2_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p2_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_NUM_COL_BITS + 1)); - end generate; - -x16_rbc_n_p2_c12 : if (C_MEM_NUM_COL_BITS = 12 ) generate --column - p2_cmd_ca <= p2_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1); - - end generate; - -x16_rbc_n_p2_c12_n : if (not(C_MEM_NUM_COL_BITS = 12 )) generate --column - p2_cmd_ca <= (allzero( 12 downto C_MEM_NUM_COL_BITS +1)& p2_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1)); - - end generate; - - - -- port 3 address remapping -x16_rbc_n_p3_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p3_cmd_ba <= p3_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1); - - end generate; - -x16_rbc_n_p3_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p3_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH) & p3_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1)); - - end generate; - -x16_rbc_n_p3_a15 : if (C_MEM_ADDR_WIDTH = 15 ) generate --row - p3_cmd_ra <= p3_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_NUM_COL_BITS + 1); - - end generate; - -x16_rbc_n_p3_a15_n : if (not(C_MEM_ADDR_WIDTH = 15 )) generate --row - p3_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p3_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_NUM_COL_BITS + 1)); - - end generate; - -x16_rbc_n_p3_c12 : if (C_MEM_NUM_COL_BITS = 12 ) generate --column - p3_cmd_ca <= p3_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1); - - end generate; - -x16_rbc_n_p3_c12_n : if (not(C_MEM_NUM_COL_BITS = 12 )) generate --column - p3_cmd_ca <= (allzero(12 downto C_MEM_NUM_COL_BITS +1)& p3_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1)); - - end generate; - - - -- port 4 address remapping -x16_rbc_n_p4_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p4_cmd_ba <= p4_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1); - - end generate; - -x16_rbc_n_p4_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p4_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH) & p4_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1)); - - end generate; - -x16_rbc_n_p4_a15 : if (C_MEM_ADDR_WIDTH = 15 ) generate --row - p4_cmd_ra <= p4_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_NUM_COL_BITS + 1); - - end generate; - -x16_rbc_n_p4_a15_n : if (not(C_MEM_ADDR_WIDTH = 15 )) generate --row - p4_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p4_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_NUM_COL_BITS + 1)); - end generate; - -x16_rbc_n_p4_c12 : if (C_MEM_NUM_COL_BITS = 12 ) generate --column - p4_cmd_ca <= p4_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1); - - end generate; - -x16_rbc_n_p4_c12_n : if (not(C_MEM_NUM_COL_BITS = 12 )) generate --column - p4_cmd_ca <= (allzero(12 downto C_MEM_NUM_COL_BITS +1) & p4_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1)); - - end generate; - - -- port 5 address remapping -x16_rbc_n_p5_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p5_cmd_ba <= p5_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1); - - end generate; - -x16_rbc_n_p5_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p5_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH) & p5_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS + 1)); - - end generate; - -x16_rbc_n_p5_a15 : if (C_MEM_ADDR_WIDTH = 15 ) generate --row - p5_cmd_ra <= p5_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_NUM_COL_BITS + 1); - end generate; - -x16_rbc_n_p5_a15_n : if (not(C_MEM_ADDR_WIDTH = 15 )) generate --row - p5_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p5_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS downto C_MEM_NUM_COL_BITS + 1)); - - end generate; - -x16_rbc_n_p5_c12 : if (C_MEM_NUM_COL_BITS = 12 ) generate --column - p5_cmd_ca <= p5_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1); - - end generate; - -x16_rbc_n_p5_c12_n : if (not(C_MEM_NUM_COL_BITS = 12 )) generate --column - p5_cmd_ca <= (allzero(12 downto C_MEM_NUM_COL_BITS +1) & p5_cmd_byte_addr(C_MEM_NUM_COL_BITS downto 1)); - - end generate; - end generate;--x16_addr_rbc_n -end generate; --x16_addr - - - - - - -x8_addr : if(C_NUM_DQ_PINS = 8) generate -x8_addr_rbc : if (C_MEM_ADDR_ORDER = "ROW_BANK_COLUMN") generate --- port 0 address remapping - -x8_p0_a15 : if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p0_cmd_ra <= p0_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS ); - - end generate; - - x8_p0_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p0_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p0_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS )); - - end generate; - - - x8_p0_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p0_cmd_ba <= p0_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS ); --14,3,10 - - end generate; - - x8_p0_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p0_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH)& - p0_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS )); --14,3,10 - - end generate; - - - x8_p0_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p0_cmd_ca(11 downto 0) <= p0_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0); - - end generate; - - x8_p0_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p0_cmd_ca(11 downto 0) <= (allzero(11 downto C_MEM_NUM_COL_BITS) & p0_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0)); - - end generate; - - - - --- port 1 address remapping - x8_p1_a15 : if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p1_cmd_ra <= p1_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS ); - - end generate; - - x8_p1_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p1_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p1_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS )); - - end generate; - - - x8_p1_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p1_cmd_ba <= p1_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS ); --14,3,10 - - end generate; - - x8_p1_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p1_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH)& - p1_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS )); --14,3,10 - - end generate; - - - x8_p1_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p1_cmd_ca(11 downto 0) <= p1_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0); - - end generate; - - x8_p1_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p1_cmd_ca(11 downto 0) <= (allzero(11 downto C_MEM_NUM_COL_BITS) & p1_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0)); - - end generate; - - - - -- port 2 address remapping - x8_p2_a15 : if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p2_cmd_ra <= p2_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS ); - - end generate; - - x8_p2_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p2_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p2_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS )); - - end generate; - - - x8_p2_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p2_cmd_ba <= p2_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS ); --14,3,10 - - end generate; - - x8_p2_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p2_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH)& - p2_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS )); --14,2,10 *** - - end generate; - - - x8_p2_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p2_cmd_ca(11 downto 0) <= p2_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0); - - end generate; - - x8_p2_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p2_cmd_ca(11 downto 0) <= (allzero(11 downto C_MEM_NUM_COL_BITS) & p2_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0)); - - end generate; - - - - --- port 3 address remapping - x8_p3_a15 : if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p3_cmd_ra <= p3_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS ); - - end generate; - - x8_p3_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p3_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p3_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS )); - - end generate; - - - x8_p3_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p3_cmd_ba <= p3_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS ); --14,3,10 - - end generate; - - x8_p3_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p3_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH)& - p3_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS )); --14,3,10 - - end generate; - - - x8_p3_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p3_cmd_ca(11 downto 0) <= p3_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0); - - end generate; - - x8_p3_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p3_cmd_ca(11 downto 0) <= (allzero(11 downto C_MEM_NUM_COL_BITS) & p3_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0)); - - end generate; - - --- port 4 address remapping - x8_p4_a15 : if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p4_cmd_ra <= p4_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS ); - - end generate; - - x8_p4_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p4_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p4_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS )); - - end generate; - - - x8_p4_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p4_cmd_ba <= p4_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS ); --14,3,10 - - end generate; - - x8_p4_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p4_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH)& - p4_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS )); --14,3,10 - - end generate; - - - x8_p4_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p4_cmd_ca(11 downto 0) <= p4_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0); - - end generate; - - x8_p4_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p4_cmd_ca(11 downto 0) <= (allzero(11 downto C_MEM_NUM_COL_BITS) & p4_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0)); - - end generate; - - - - -- port 5 address remapping - x8_p5_a15 : if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p5_cmd_ra <= p5_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS ); - - end generate; - - x8_p5_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p5_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p5_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS )); - - end generate; - - - x8_p5_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p5_cmd_ba <= p5_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS ); --14,3,10 - - end generate; - - x8_p5_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p5_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH)& - p5_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS )); --14,3,10 - - end generate; - - - x8_p5_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p5_cmd_ca(11 downto 0) <= p5_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0); - - end generate; - - x8_p5_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p5_cmd_ca(11 downto 0) <= (allzero(11 downto C_MEM_NUM_COL_BITS) & p5_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0)); - - end generate; - end generate; --x8_addr_rbc - - - -x8_addr_rbc_n : if (not(C_MEM_ADDR_ORDER = "ROW_BANK_COLUMN")) generate - -- port 0 address remapping - x8_rbc_n_p0_ba3 :if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p0_cmd_ba <= p0_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS ); - - end generate; - - x8_rbc_n_p0_ba3_n :if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p0_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH)& - p0_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS )); - - end generate; - - x8_rbc_n_p0_a15: if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p0_cmd_ra <= p0_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS ); - - end generate; - - x8_rbc_n_p0_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p0_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p0_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS )); - - end generate; - - - x8_rbc_n_p0_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p0_cmd_ca(11 downto 0) <= p0_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0); - - end generate; - - x8_rbc_n_p0_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p0_cmd_ca(11 downto 0) <= (allzero(11 downto C_MEM_NUM_COL_BITS) & p0_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0)); - - end generate; - - - -- port 1 address remapping - x8_rbc_n_p1_ba3 :if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p1_cmd_ba <= p1_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS ); - - end generate; - - x8_rbc_n_p1_ba3_n :if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p1_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH)& - p1_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS )); - - end generate; - - x8_rbc_n_p1_a15: if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p1_cmd_ra <= p1_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS ); - - end generate; - - x8_rbc_n_p1_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p1_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p1_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS )); - - end generate; - - - x8_rbc_n_p1_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p1_cmd_ca(11 downto 0) <= p1_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0); - - end generate; - - x8_rbc_n_p1_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p1_cmd_ca(11 downto 0) <= (allzero(11 downto C_MEM_NUM_COL_BITS) & p1_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0)); - - end generate; - - ---port 2 address remapping - x8_rbc_n_p2_ba3 :if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p2_cmd_ba <= p2_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS ); - - end generate; - - x8_rbc_n_p2_ba3_n :if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p2_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH)& - p2_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS )); - - end generate; - - x8_rbc_n_p2_a15: if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p2_cmd_ra <= p2_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS ); - - end generate; - - x8_rbc_n_p2_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p2_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p2_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS )); - - end generate; - - - x8_rbc_n_p2_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p2_cmd_ca(11 downto 0) <= p2_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0); - - end generate; - - x8_rbc_n_p2_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p2_cmd_ca(11 downto 0) <= (allzero(11 downto C_MEM_NUM_COL_BITS) & p2_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0)); - - end generate; - - - -- port 3 address remapping - x8_rbc_n_p3_ba3 :if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p3_cmd_ba <= p3_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS ); - - end generate; - - x8_rbc_n_p3_ba3_n :if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p3_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH)& - p3_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS )); - - end generate; - - x8_rbc_n_p3_a15: if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p3_cmd_ra <= p3_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS ); - - end generate; - - x8_rbc_n_p3_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p3_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p3_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS )); - - end generate; - - - x8_rbc_n_p3_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p3_cmd_ca(11 downto 0) <= p3_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0); - - end generate; - - x8_rbc_n_p3_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p3_cmd_ca(11 downto 0) <= (allzero(11 downto C_MEM_NUM_COL_BITS) & p3_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0)); - - end generate; - - - --- port 4 address remapping - x8_rbc_n_p4_ba3 :if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p4_cmd_ba <= p4_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS ); - - end generate; - - x8_rbc_n_p4_ba3_n :if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p4_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH) & - p4_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS )); - end generate; - - x8_rbc_n_p4_a15: if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p4_cmd_ra <= p4_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS ); - - end generate; - - x8_rbc_n_p4_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p4_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p4_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS )); - - end generate; - - - x8_rbc_n_p4_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p4_cmd_ca(11 downto 0) <= p4_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0); - - end generate; - - x8_rbc_n_p4_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p4_cmd_ca(11 downto 0) <= (allzero(11 downto C_MEM_NUM_COL_BITS) & p4_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0)); - - end generate; - - --- port 5 address remapping - x8_rbc_n_p5_ba3 :if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p5_cmd_ba <= p5_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS ); - - end generate; - - x8_rbc_n_p5_ba3_n :if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p5_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH)& - p5_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS )); - - end generate; - - x8_rbc_n_p5_a15: if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p5_cmd_ra <= p5_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS ); - - end generate; - - x8_rbc_n_p5_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p5_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH) & p5_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1 downto C_MEM_NUM_COL_BITS )); - - end generate; - - - x8_rbc_n_p5_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p5_cmd_ca(11 downto 0) <= p5_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0); - - end generate; - - x8_rbc_n_p5_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p5_cmd_ca(11 downto 0) <= (allzero(11 downto C_MEM_NUM_COL_BITS) & p5_cmd_byte_addr(C_MEM_NUM_COL_BITS - 1 downto 0)); - - end generate; - end generate; --x8_addr_rbc_n - end generate; --x8_addr - - - - - - - - - -x4_addr : if(C_NUM_DQ_PINS = 4) generate -x4_addr_rbc : if (C_MEM_ADDR_ORDER = "ROW_BANK_COLUMN") generate - --- port 0 address remapping -x4_p0_a15 : if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p0_cmd_ra <= p0_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1); - - end generate; - - x4_p0_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p0_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH ) & p0_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1)); - - end generate; - - - x4_p0_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p0_cmd_ba <= p0_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1); - - end generate; - - x4_p0_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p0_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH ) & p0_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1)); - - end generate; - - - x4_p0_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p0_cmd_ca <= (p0_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); --14,3,11 - - end generate; - - x4_p0_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p0_cmd_ca <= (allzero(11 downto C_MEM_NUM_COL_BITS ) & p0_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); - - end generate; - - --- port 1 address remapping -x4_p1_a15 : if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p1_cmd_ra <= p1_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1); - - end generate; - - x4_p1_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p1_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH ) & p1_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1)); - - end generate; - - - x4_p1_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p1_cmd_ba <= p1_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1); - - end generate; - - x4_p1_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p1_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH ) & p1_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1)); - - end generate; - - - x4_p1_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p1_cmd_ca <= (p1_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); --14,3,11 - - end generate; - - x4_p1_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p1_cmd_ca <= (allzero(11 downto C_MEM_NUM_COL_BITS ) & p1_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); - - end generate; - - --- port 2 address remapping -x4_p2_a15 : if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p2_cmd_ra <= p2_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1); - - end generate; - - x4_p2_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p2_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH ) & p2_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1)); - end generate; - - - x4_p2_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p2_cmd_ba <= p2_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1); - - end generate; - - x4_p2_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p2_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH ) & p2_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1)); - - end generate; - - - x4_p2_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p2_cmd_ca <= (p2_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); --14,3,11 - - end generate; - - x4_p2_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p2_cmd_ca <= (allzero(11 downto C_MEM_NUM_COL_BITS ) & p2_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); - - end generate; - - --- port 3 address remapping -x4_p3_a15 : if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p3_cmd_ra <= p3_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1); - - end generate; - - x4_p3_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p3_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH ) & p3_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1)); - - end generate; - - - x4_p3_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p3_cmd_ba <= p3_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1); - - end generate; - - x4_p3_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p3_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH ) & p3_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1)); - - end generate; - - - x4_p3_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p3_cmd_ca <= (p3_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); --14,3,11 - - end generate; - - x4_p3_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p3_cmd_ca <= (allzero(11 downto C_MEM_NUM_COL_BITS ) & p3_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); - - end generate; - - - - - - - x4_p4_p5:if(C_PORT_CONFIG = "B32_B32_R32_R32_R32_R32" or - C_PORT_CONFIG = "B32_B32_R32_R32_R32_W32" or - C_PORT_CONFIG = "B32_B32_R32_R32_W32_R32" or - C_PORT_CONFIG = "B32_B32_R32_R32_W32_W32" or - C_PORT_CONFIG = "B32_B32_R32_W32_R32_R32" or - C_PORT_CONFIG = "B32_B32_R32_W32_R32_W32" or - C_PORT_CONFIG = "B32_B32_R32_W32_W32_R32" or - C_PORT_CONFIG = "B32_B32_R32_W32_W32_W32" or - C_PORT_CONFIG = "B32_B32_W32_R32_R32_R32" or - C_PORT_CONFIG = "B32_B32_W32_R32_R32_W32" or - C_PORT_CONFIG = "B32_B32_W32_R32_W32_R32" or - C_PORT_CONFIG = "B32_B32_W32_R32_W32_W32" or - C_PORT_CONFIG = "B32_B32_W32_W32_R32_R32" or - C_PORT_CONFIG = "B32_B32_W32_W32_R32_W32" or - C_PORT_CONFIG = "B32_B32_W32_W32_W32_R32" or - C_PORT_CONFIG = "B32_B32_W32_W32_W32_W32" - ) generate --- port 4 address remapping - -x4_p4_a15 : if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p4_cmd_ra <= p4_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1); - - end generate; - -x4_p4_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p4_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH ) & p4_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1)); - - end generate; - - -x4_p4_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p4_cmd_ba <= p4_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1); - - end generate; - -x4_p4_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p4_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH ) & p4_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1)); - - end generate; - - -x4_p4_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p4_cmd_ca <= (p4_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); --14,3,11 - - end generate; - -x4_p4_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p4_cmd_ca <= (allzero(11 downto C_MEM_NUM_COL_BITS ) & p4_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); - - end generate; --- port 5 address remapping - - -x4_p5_a15 : if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p5_cmd_ra <= p5_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1); - - end generate; - -x4_p5_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p5_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH ) & p5_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 1)); - - end generate; - - -x4_p5_ba3 : if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p5_cmd_ba <= p5_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1); - - end generate; - -x4_p5_ba3_n : if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p5_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH ) & p5_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1)); - - end generate; - - -x4_p5_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p5_cmd_ca <= (p5_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); --14,3,11 - - end generate; - -x4_p5_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p5_cmd_ca <= (allzero(11 downto C_MEM_NUM_COL_BITS ) & p5_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); - - end generate; - end generate; --x4_p4_p5 - end generate; --x4_addr_rbc - - - - -x4_addr_rbc_n : if (not(C_MEM_ADDR_ORDER = "ROW_BANK_COLUMN")) generate - --- port 0 address remapping - x4_rbc_n_p0_ba3 :if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p0_cmd_ba <= p0_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1); - end generate; - - x4_rbc_n_p0_ba3_n :if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p0_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH ) & p0_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1)); - end generate; - - x4_rbc_n_p0_a15: if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p0_cmd_ra <= p0_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1); - end generate; - - x4_rbc_n_p0_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p0_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH ) & p0_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1)); - end generate; - - - x4_rbc_n_p0_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p0_cmd_ca <= (p0_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); - end generate; - - x4_rbc_n_p0_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p0_cmd_ca <= (allzero(11 downto C_MEM_NUM_COL_BITS ) & p0_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); - end generate; - - --- port 1 address remapping - x4_rbc_n_p1_ba3 :if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p1_cmd_ba <= p1_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1); - - - end generate; - - x4_rbc_n_p1_ba3_n :if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p1_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH ) & p1_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1)); - - end generate; - - x4_rbc_n_p1_a15: if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p1_cmd_ra <= p1_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1); - - - end generate; - - x4_rbc_n_p1_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p1_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH ) & p1_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1)); - - - end generate; - - - x4_rbc_n_p1_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p1_cmd_ca <= (p1_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); - - - end generate; - - x4_rbc_n_p1_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p1_cmd_ca <= (allzero(11 downto C_MEM_NUM_COL_BITS ) & p1_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); - - - end generate; - --- port 2 address remapping - x4_rbc_n_p2_ba3 :if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p2_cmd_ba <= p2_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1); - - - end generate; - - x4_rbc_n_p2_ba3_n :if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p2_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH ) & p2_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1)); - - end generate; - - x4_rbc_n_p2_a15: if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p2_cmd_ra <= p2_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1); - - - end generate; - - x4_rbc_n_p2_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p2_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH ) & p2_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1)); - - - end generate; - - - x4_rbc_n_p2_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p2_cmd_ca <= (p2_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); - - - end generate; - - x4_rbc_n_p2_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p2_cmd_ca <= (allzero(11 downto C_MEM_NUM_COL_BITS ) & p2_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); - - - end generate; - --- port 3 address remapping - x4_rbc_n_p3_ba3 :if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p3_cmd_ba <= p3_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1); - - - end generate; - - x4_rbc_n_p3_ba3_n :if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p3_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH ) & p3_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1)); - - end generate; - - x4_rbc_n_p3_a15: if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p3_cmd_ra <= p3_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1); - - - end generate; - - x4_rbc_n_p3_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p3_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH ) & p3_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1)); - - - end generate; - - - x4_rbc_n_p3_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p3_cmd_ca <= (p3_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); - - - end generate; - - x4_rbc_n_p3_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p3_cmd_ca <= (allzero(11 downto C_MEM_NUM_COL_BITS ) & p3_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); - - - end generate; - - - x4_p4_p5_n: if(C_PORT_CONFIG = "B32_B32_R32_R32_R32_R32" or - C_PORT_CONFIG = "B32_B32_R32_R32_R32_W32" or - C_PORT_CONFIG = "B32_B32_R32_R32_W32_R32" or - C_PORT_CONFIG = "B32_B32_R32_R32_W32_W32" or - C_PORT_CONFIG = "B32_B32_R32_W32_R32_R32" or - C_PORT_CONFIG = "B32_B32_R32_W32_R32_W32" or - C_PORT_CONFIG = "B32_B32_R32_W32_W32_R32" or - C_PORT_CONFIG = "B32_B32_R32_W32_W32_W32" or - C_PORT_CONFIG = "B32_B32_W32_R32_R32_R32" or - C_PORT_CONFIG = "B32_B32_W32_R32_R32_W32" or - C_PORT_CONFIG = "B32_B32_W32_R32_W32_R32" or - C_PORT_CONFIG = "B32_B32_W32_R32_W32_W32" or - C_PORT_CONFIG = "B32_B32_W32_W32_R32_R32" or - C_PORT_CONFIG = "B32_B32_W32_W32_R32_W32" or - C_PORT_CONFIG = "B32_B32_W32_W32_W32_R32" or - C_PORT_CONFIG = "B32_B32_W32_W32_W32_W32" - ) generate --- port 4 address remapping - - x4_rbc_n_p4_ba3 :if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p4_cmd_ba <= p4_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1); - - - end generate; - - x4_rbc_n_p4_ba3_n :if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p4_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH ) & p4_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1)); - - end generate; - - x4_rbc_n_p4_a15: if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p4_cmd_ra <= p4_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1); - - - end generate; - - x4_rbc_n_p4_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p4_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH ) & p4_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1)); - - - end generate; - - - x4_rbc_n_p4_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p4_cmd_ca <= (p4_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); - - - end generate; - - x4_rbc_n_p4_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p4_cmd_ca <= (allzero(11 downto C_MEM_NUM_COL_BITS ) & p4_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); - end generate; - - --- port 5 address remapping - - x4_rbc_n_p5_ba3 :if (C_MEM_BANKADDR_WIDTH = 3 ) generate --Bank - p5_cmd_ba <= p5_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1); - - - end generate; - - x4_rbc_n_p5_ba3_n :if (not(C_MEM_BANKADDR_WIDTH = 3 )) generate --Bank - p5_cmd_ba <= (allzero(2 downto C_MEM_BANKADDR_WIDTH ) & p5_cmd_byte_addr(C_MEM_BANKADDR_WIDTH + C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 1)); - - end generate; - - x4_rbc_n_p5_a15: if (C_MEM_ADDR_WIDTH = 15) generate -- Row - p5_cmd_ra <= p5_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1); - - - end generate; - - x4_rbc_n_p5_a15_n : if (not(C_MEM_ADDR_WIDTH = 15)) generate --Row - p5_cmd_ra <= (allzero(14 downto C_MEM_ADDR_WIDTH ) & p5_cmd_byte_addr(C_MEM_ADDR_WIDTH + C_MEM_NUM_COL_BITS - 2 downto C_MEM_NUM_COL_BITS - 1)); - - - end generate; - - - x4_rbc_n_p5_ca12 : if (C_MEM_NUM_COL_BITS = 12) generate --Column - p5_cmd_ca <= (p5_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); - - - end generate; - - x4_rbc_n_p5_ca12_n : if (not(C_MEM_NUM_COL_BITS = 12)) generate --Column - p5_cmd_ca <= (allzero(11 downto C_MEM_NUM_COL_BITS ) & p5_cmd_byte_addr(C_MEM_NUM_COL_BITS - 2 downto 0) & '0'); - - - end generate; - -end generate; --x4_p4_p5_n - -end generate; --x4_addr_rbc_n -end generate; --x4_addr - - - - - -- if(C_PORT_CONFIG[183:160] == "B32") begin : u_config1_0 -u_config1_0: if(C_PORT_CONFIG = "B32_B32_R32_R32_R32_R32" or - C_PORT_CONFIG = "B32_B32_R32_R32_R32_W32" or - C_PORT_CONFIG = "B32_B32_R32_R32_W32_R32" or - C_PORT_CONFIG = "B32_B32_R32_R32_W32_W32" or - C_PORT_CONFIG = "B32_B32_R32_W32_R32_R32" or - C_PORT_CONFIG = "B32_B32_R32_W32_R32_W32" or - C_PORT_CONFIG = "B32_B32_R32_W32_W32_R32" or - C_PORT_CONFIG = "B32_B32_R32_W32_W32_W32" or - C_PORT_CONFIG = "B32_B32_W32_R32_R32_R32" or - C_PORT_CONFIG = "B32_B32_W32_R32_R32_W32" or - C_PORT_CONFIG = "B32_B32_W32_R32_W32_R32" or - C_PORT_CONFIG = "B32_B32_W32_R32_W32_W32" or - C_PORT_CONFIG = "B32_B32_W32_W32_R32_R32" or - C_PORT_CONFIG = "B32_B32_W32_W32_R32_W32" or - C_PORT_CONFIG = "B32_B32_W32_W32_W32_R32" or - C_PORT_CONFIG = "B32_B32_W32_W32_W32_W32" - ) generate - - --synthesis translate_off - -- PORT2 - process (p2_cmd_en,p2_cmd_instr) - begin - if((C_PORT_CONFIG = "B32_B32_W32_R32_R32_R32" or - C_PORT_CONFIG = "B32_B32_W32_R32_R32_W32" or - C_PORT_CONFIG = "B32_B32_W32_R32_W32_R32" or - C_PORT_CONFIG = "B32_B32_W32_R32_W32_W32" or - C_PORT_CONFIG = "B32_B32_W32_W32_R32_R32" or - C_PORT_CONFIG = "B32_B32_W32_W32_R32_W32" or - C_PORT_CONFIG = "B32_B32_W32_W32_W32_R32" or - C_PORT_CONFIG = "B32_B32_W32_W32_W32_W32") and - p2_cmd_en = '1' and p2_cmd_instr(2) = '0' and p2_cmd_instr(0) = '1') then - report "ERROR - Invalid Command for write only port 2"; - end if; - end process; - - process (p2_cmd_en,p2_cmd_instr) - begin - if((C_PORT_CONFIG = "B32_B32_R32_R32_R32_R32" or - C_PORT_CONFIG = "B32_B32_R32_R32_R32_W32" or - C_PORT_CONFIG = "B32_B32_R32_R32_W32_R32" or - C_PORT_CONFIG = "B32_B32_R32_R32_W32_W32" or - C_PORT_CONFIG = "B32_B32_R32_W32_R32_R32" or - C_PORT_CONFIG = "B32_B32_R32_W32_R32_W32" or - C_PORT_CONFIG = "B32_B32_R32_W32_W32_R32" or - C_PORT_CONFIG = "B32_B32_R32_W32_W32_W32") and - p2_cmd_en = '1' and p2_cmd_instr(2) = '0' and p2_cmd_instr(0) = '0') then - report "ERROR - Invalid Command for read only port 2"; - end if; - end process; - - -- PORT3 - process (p3_cmd_en,p3_cmd_instr) - begin - if((C_PORT_CONFIG = "B32_B32_R32_W32_R32_R32" or - C_PORT_CONFIG = "B32_B32_R32_W32_R32_W32" or - C_PORT_CONFIG = "B32_B32_R32_W32_W32_R32" or - C_PORT_CONFIG = "B32_B32_R32_W32_W32_W32" or - C_PORT_CONFIG = "B32_B32_W32_W32_R32_R32" or - C_PORT_CONFIG = "B32_B32_W32_W32_R32_W32" or - C_PORT_CONFIG = "B32_B32_W32_W32_W32_R32" or - C_PORT_CONFIG = "B32_B32_W32_W32_W32_W32") and - p3_cmd_en = '1' and p3_cmd_instr(2) = '0' and p3_cmd_instr(0) = '1') then - report "ERROR - Invalid Command for write only port 3"; - end if; - end process; - - process (p3_cmd_en,p3_cmd_instr) - begin - if((C_PORT_CONFIG = "B32_B32_R32_R32_R32_R32" or - C_PORT_CONFIG = "B32_B32_R32_R32_R32_W32" or - C_PORT_CONFIG = "B32_B32_R32_R32_W32_R32" or - C_PORT_CONFIG = "B32_B32_R32_R32_W32_W32" or - C_PORT_CONFIG = "B32_B32_W32_R32_R32_R32" or - C_PORT_CONFIG = "B32_B32_W32_R32_R32_W32" or - C_PORT_CONFIG = "B32_B32_W32_R32_W32_R32" or - C_PORT_CONFIG = "B32_B32_W32_R32_W32_W32") and - p3_cmd_en = '1' and p3_cmd_instr(2) = '0' and p3_cmd_instr(0) = '0') then - report "ERROR - Invalid Command for read only port 3"; - end if; - end process; - - -- PORT4 - process (p4_cmd_en,p4_cmd_instr) - begin - if((C_PORT_CONFIG = "B32_B32_R32_R32_W32_R32" or - C_PORT_CONFIG = "B32_B32_R32_R32_W32_W32" or - C_PORT_CONFIG = "B32_B32_R32_W32_W32_R32" or - C_PORT_CONFIG = "B32_B32_R32_W32_W32_W32" or - C_PORT_CONFIG = "B32_B32_W32_R32_W32_R32" or - C_PORT_CONFIG = "B32_B32_W32_R32_W32_W32" or - C_PORT_CONFIG = "B32_B32_W32_W32_W32_R32" or - C_PORT_CONFIG = "B32_B32_W32_W32_W32_W32") and - p4_cmd_en = '1' and p4_cmd_instr(2) = '0' and p4_cmd_instr(0) = '1') then - report "ERROR - Invalid Command for write only port 4"; - end if; - end process; - - process (p4_cmd_en,p4_cmd_instr) - begin - if((C_PORT_CONFIG = "B32_B32_R32_R32_R32_R32" or - C_PORT_CONFIG = "B32_B32_R32_R32_R32_W32" or - C_PORT_CONFIG = "B32_B32_R32_W32_R32_R32" or - C_PORT_CONFIG = "B32_B32_R32_W32_R32_W32" or - C_PORT_CONFIG = "B32_B32_W32_R32_R32_R32" or - C_PORT_CONFIG = "B32_B32_W32_R32_R32_W32" or - C_PORT_CONFIG = "B32_B32_W32_W32_R32_R32" or - C_PORT_CONFIG = "B32_B32_W32_W32_R32_W32") and - p4_cmd_en = '1' and p4_cmd_instr(2) = '0' and p4_cmd_instr(0) = '0') then - report "ERROR - Invalid Command for read only port 4"; - end if; - end process; - - -- PORT5 - process (p5_cmd_en,p5_cmd_instr) - begin - if((C_PORT_CONFIG = "B32_B32_R32_R32_R32_W32" or - C_PORT_CONFIG = "B32_B32_R32_R32_W32_W32" or - C_PORT_CONFIG = "B32_B32_R32_W32_R32_W32" or - C_PORT_CONFIG = "B32_B32_R32_W32_W32_W32" or - C_PORT_CONFIG = "B32_B32_W32_R32_R32_W32" or - C_PORT_CONFIG = "B32_B32_W32_R32_W32_W32" or - C_PORT_CONFIG = "B32_B32_W32_W32_R32_W32" or - C_PORT_CONFIG = "B32_B32_W32_W32_W32_W32") and - p5_cmd_en = '1' and p5_cmd_instr(2) = '0' and p5_cmd_instr(0) = '1') then - report "ERROR - Invalid Command for write only port 5"; - end if; - end process; - - process (p5_cmd_en,p5_cmd_instr) - begin - if((C_PORT_CONFIG = "B32_B32_R32_R32_R32_R32" or - C_PORT_CONFIG = "B32_B32_R32_R32_W32_R32" or - C_PORT_CONFIG = "B32_B32_R32_W32_R32_R32" or - C_PORT_CONFIG = "B32_B32_R32_W32_W32_R32" or - C_PORT_CONFIG = "B32_B32_W32_R32_R32_R32" or - C_PORT_CONFIG = "B32_B32_W32_R32_W32_R32" or - C_PORT_CONFIG = "B32_B32_W32_W32_R32_R32" or - C_PORT_CONFIG = "B32_B32_W32_W32_W32_R32") and - p5_cmd_en = '1' and p5_cmd_instr(2) = '0' and p5_cmd_instr(0) = '0') then - report "ERROR - Invalid Command for read only port 5"; - end if; - end process; - - - - - --synthesis translate_on - - - -- the local declaration of input port signals doesn't work. The mig_p1_xxx through mig_p5_xxx always ends up - -- high Z even though there are signals on p1_cmd_xxx through p5_cmd_xxxx. - -- The only solutions that I have is to have MIG tool remove the entire internal codes that doesn't belongs to the Configuration.. - -- - - -- Inputs from Application CMD Port - - p0_cmd_ena: if (C_PORT_ENABLE(0) = '1') generate - - mig_p0_arb_en <= p0_arb_en ; - mig_p0_cmd_clk <= p0_cmd_clk ; - mig_p0_cmd_en <= p0_cmd_en ; - mig_p0_cmd_ra <= p0_cmd_ra ; - mig_p0_cmd_ba <= p0_cmd_ba ; - mig_p0_cmd_ca <= p0_cmd_ca ; - mig_p0_cmd_instr <= p0_cmd_instr; - mig_p0_cmd_bl <= ((p0_cmd_instr(2) or p0_cmd_bl(5)) & p0_cmd_bl(4 downto 0)) ; - p0_cmd_empty <= mig_p0_cmd_empty; - p0_cmd_full <= mig_p0_cmd_full ; - end generate; - - p0_cmd_dis: if (C_PORT_ENABLE(0) = '0') generate - mig_p0_arb_en <= '0'; - mig_p0_cmd_clk <= '0'; - mig_p0_cmd_en <= '0'; - mig_p0_cmd_ra <= (others => '0'); - mig_p0_cmd_ba <= (others => '0'); - mig_p0_cmd_ca <= (others => '0'); - mig_p0_cmd_instr <= (others => '0'); - mig_p0_cmd_bl <= (others => '0'); - p0_cmd_empty <= '0'; - p0_cmd_full <= '0'; - - end generate; - - p1_cmd_ena: if (C_PORT_ENABLE(1) = '1') generate - mig_p1_arb_en <= p1_arb_en ; - mig_p1_cmd_clk <= p1_cmd_clk ; - mig_p1_cmd_en <= p1_cmd_en ; - mig_p1_cmd_ra <= p1_cmd_ra ; - mig_p1_cmd_ba <= p1_cmd_ba ; - mig_p1_cmd_ca <= p1_cmd_ca ; - mig_p1_cmd_instr <= p1_cmd_instr; - mig_p1_cmd_bl <= ((p1_cmd_instr(2) or p1_cmd_bl(5)) & p1_cmd_bl(4 downto 0)) ; - p1_cmd_empty <= mig_p1_cmd_empty; - p1_cmd_full <= mig_p1_cmd_full ; - end generate; - - p1_cmd_dis: if (C_PORT_ENABLE(1) = '0') generate - - mig_p1_arb_en <= '0'; - mig_p1_cmd_clk <= '0'; - mig_p1_cmd_en <= '0'; - mig_p1_cmd_ra <= (others => '0'); - mig_p1_cmd_ba <= (others => '0'); - mig_p1_cmd_ca <= (others => '0'); - mig_p1_cmd_instr <= (others => '0'); - mig_p1_cmd_bl <= (others => '0'); - p1_cmd_empty <= '0'; - p1_cmd_full <= '0'; - end generate; - - - p2_cmd_ena: if (C_PORT_ENABLE(2) = '1') generate - mig_p2_arb_en <= p2_arb_en ; - mig_p2_cmd_clk <= p2_cmd_clk ; - mig_p2_cmd_en <= p2_cmd_en ; - mig_p2_cmd_ra <= p2_cmd_ra ; - mig_p2_cmd_ba <= p2_cmd_ba ; - mig_p2_cmd_ca <= p2_cmd_ca ; - mig_p2_cmd_instr <= p2_cmd_instr; - mig_p2_cmd_bl <= ((p2_cmd_instr(2) or p2_cmd_bl(5)) & p2_cmd_bl(4 downto 0)) ; - - p2_cmd_empty <= mig_p2_cmd_empty; - p2_cmd_full <= mig_p2_cmd_full ; - end generate; - - p2_cmd_dis: if (C_PORT_ENABLE(2) = '0') generate - mig_p2_arb_en <= '0'; - mig_p2_cmd_clk <= '0'; - mig_p2_cmd_en <= '0'; - mig_p2_cmd_ra <= (others => '0'); - mig_p2_cmd_ba <= (others => '0'); - mig_p2_cmd_ca <= (others => '0'); - mig_p2_cmd_instr <= (others => '0'); - mig_p2_cmd_bl <= (others => '0'); - p2_cmd_empty <= '0'; - p2_cmd_full <= '0'; - end generate; - - p3_cmd_ena: if (C_PORT_ENABLE(3) = '1') generate - - mig_p3_arb_en <= p3_arb_en ; - mig_p3_cmd_clk <= p3_cmd_clk ; - mig_p3_cmd_en <= p3_cmd_en ; - mig_p3_cmd_ra <= p3_cmd_ra ; - mig_p3_cmd_ba <= p3_cmd_ba ; - mig_p3_cmd_ca <= p3_cmd_ca ; - mig_p3_cmd_instr <= p3_cmd_instr; - mig_p3_cmd_bl <= ((p3_cmd_instr(2) or p3_cmd_bl(5)) & p3_cmd_bl(4 downto 0)) ; - p3_cmd_empty <= mig_p3_cmd_empty; - p3_cmd_full <= mig_p3_cmd_full ; - end generate; - - p3_cmd_dis: if (C_PORT_ENABLE(3) = '0') generate - mig_p3_arb_en <= '0'; - mig_p3_cmd_clk <= '0'; - mig_p3_cmd_en <= '0'; - mig_p3_cmd_ra <= (others => '0'); - mig_p3_cmd_ba <= (others => '0'); - mig_p3_cmd_ca <= (others => '0'); - mig_p3_cmd_instr <= (others => '0'); - mig_p3_cmd_bl <= (others => '0'); - p3_cmd_empty <= '0'; - p3_cmd_full <= '0'; - end generate; - - - p4_cmd_ena: if (C_PORT_ENABLE(4) = '1') generate - - mig_p4_arb_en <= p4_arb_en ; - mig_p4_cmd_clk <= p4_cmd_clk ; - mig_p4_cmd_en <= p4_cmd_en ; - mig_p4_cmd_ra <= p4_cmd_ra ; - mig_p4_cmd_ba <= p4_cmd_ba ; - mig_p4_cmd_ca <= p4_cmd_ca ; - mig_p4_cmd_instr <= p4_cmd_instr; - mig_p4_cmd_bl <= ((p4_cmd_instr(2) or p4_cmd_bl(5)) & p4_cmd_bl(4 downto 0)) ; - - p4_cmd_empty <= mig_p4_cmd_empty; - p4_cmd_full <= mig_p4_cmd_full ; -end generate; - - p4_cmd_dis: if (C_PORT_ENABLE(4) = '0') generate - - mig_p4_arb_en <= '0'; - mig_p4_cmd_clk <= '0'; - mig_p4_cmd_en <= '0'; - mig_p4_cmd_ra <= (others => '0'); - mig_p4_cmd_ba <= (others => '0'); - mig_p4_cmd_ca <= (others => '0'); - mig_p4_cmd_instr <= (others => '0'); - mig_p4_cmd_bl <= (others => '0'); - p4_cmd_empty <= '0'; - p4_cmd_full <= '0'; -end generate; - - p5_cmd_ena: if (C_PORT_ENABLE(5) = '1') generate - mig_p5_arb_en <= p5_arb_en ; - mig_p5_cmd_clk <= p5_cmd_clk ; - mig_p5_cmd_en <= p5_cmd_en ; - mig_p5_cmd_ra <= p5_cmd_ra ; - mig_p5_cmd_ba <= p5_cmd_ba ; - mig_p5_cmd_ca <= p5_cmd_ca ; - mig_p5_cmd_instr <= p5_cmd_instr; - mig_p5_cmd_bl <= ((p5_cmd_instr(2) or p5_cmd_bl(5)) & p5_cmd_bl(4 downto 0)) ; - - p5_cmd_empty <= mig_p5_cmd_empty; - p5_cmd_full <= mig_p5_cmd_full ; - -end generate; - - p5_cmd_dis: if (C_PORT_ENABLE(5) = '0') generate - - mig_p5_arb_en <= '0'; - mig_p5_cmd_clk <= '0'; - mig_p5_cmd_en <= '0'; - mig_p5_cmd_ra <= (others => '0'); - mig_p5_cmd_ba <= (others => '0'); - mig_p5_cmd_ca <= (others => '0'); - mig_p5_cmd_instr <= (others => '0'); - mig_p5_cmd_bl <= (others => '0'); - p5_cmd_empty <= '0'; - p5_cmd_full <= '0'; -end generate; - - - -p0_wr_rd_ena: if (C_PORT_ENABLE(0) = '1') generate - mig_p0_wr_clk <= p0_wr_clk; - mig_p0_rd_clk <= p0_rd_clk; - mig_p0_wr_en <= p0_wr_en; - mig_p0_rd_en <= p0_rd_en; - mig_p0_wr_mask <= p0_wr_mask(3 downto 0); - mig_p0_wr_data <= p0_wr_data(31 downto 0); - p0_rd_data <= mig_p0_rd_data; - p0_rd_full <= mig_p0_rd_full; - p0_rd_empty_i <= mig_p0_rd_empty; - p0_rd_error <= mig_p0_rd_error; - p0_wr_error <= mig_p0_wr_error; - p0_rd_overflow <= mig_p0_rd_overflow; - p0_wr_underrun <= mig_p0_wr_underrun; - p0_wr_empty <= mig_p0_wr_empty; - p0_wr_full_i <= mig_p0_wr_full; - p0_wr_count <= mig_p0_wr_count; - p0_rd_count <= mig_p0_rd_count ; -end generate; -p0_wr_rd_dis: if (C_PORT_ENABLE(0) = '0') generate - mig_p0_wr_clk <= '0'; - mig_p0_rd_clk <= '0'; - mig_p0_wr_en <= '0'; - mig_p0_rd_en <= '0'; - mig_p0_wr_mask <= (others => '0'); - mig_p0_wr_data <= (others => '0'); - p0_rd_data <= (others => '0'); - p0_rd_full <= '0'; - p0_rd_empty_i <= '0'; - p0_rd_error <= '0'; - p0_wr_error <= '0'; - p0_rd_overflow <= '0'; - p0_wr_underrun <= '0'; - p0_wr_empty <= '0'; - p0_wr_full_i <= '0'; - p0_wr_count <= (others => '0'); - p0_rd_count <= (others => '0'); -end generate; - -p1_wr_rd_ena: if (C_PORT_ENABLE(1) = '1') generate - - mig_p1_wr_clk <= p1_wr_clk; - mig_p1_rd_clk <= p1_rd_clk; - mig_p1_wr_en <= p1_wr_en; - mig_p1_wr_mask <= p1_wr_mask(3 downto 0); - mig_p1_wr_data <= p1_wr_data(31 downto 0); - mig_p1_rd_en <= p1_rd_en; - p1_rd_data <= mig_p1_rd_data; - p1_rd_empty_i <= mig_p1_rd_empty; - p1_rd_full <= mig_p1_rd_full; - p1_rd_error <= mig_p1_rd_error; - p1_wr_error <= mig_p1_wr_error; - p1_rd_overflow <= mig_p1_rd_overflow; - p1_wr_underrun <= mig_p1_wr_underrun; - p1_wr_empty <= mig_p1_wr_empty; - p1_wr_full_i <= mig_p1_wr_full; - p1_wr_count <= mig_p1_wr_count; - p1_rd_count <= mig_p1_rd_count ; - -end generate; -p1_wr_rd_dis: if (C_PORT_ENABLE(1) = '0') generate - - mig_p1_wr_clk <= '0'; - mig_p1_rd_clk <= '0'; - mig_p1_wr_en <= '0'; - mig_p1_wr_mask <= (others => '0'); - mig_p1_wr_data <= (others => '0'); - mig_p1_rd_en <= '0'; - p1_rd_data <= (others => '0'); - p1_rd_empty_i <= '0'; - p1_rd_full <= '0'; - p1_rd_error <= '0'; - p1_wr_error <= '0'; - p1_rd_overflow <= '0'; - p1_wr_underrun <= '0'; - p1_wr_empty <= '0'; - p1_wr_full_i <= '0'; - p1_wr_count <= (others => '0'); - p1_rd_count <= (others => '0'); -end generate; -end generate; - - - - ---whenever PORT 2 is in Write mode --- xhdl272 : IF (C_PORT_CONFIG(23 downto 21) = "B32" AND C_PORT_CONFIG(15 downto 13) = "W32") GENERATE ---u_config1_2W: if(C_PORT_CONFIG(183 downto 160) = "B32" and C_PORT_CONFIG(119 downto 96) = "W32") generate - -u_config1_2W: if( C_PORT_CONFIG = "B32_B32_W32_R32_R32_R32" or - C_PORT_CONFIG = "B32_B32_W32_R32_R32_W32" or - C_PORT_CONFIG = "B32_B32_W32_R32_W32_R32" or - C_PORT_CONFIG = "B32_B32_W32_R32_W32_W32" or - C_PORT_CONFIG = "B32_B32_W32_W32_R32_R32" or - C_PORT_CONFIG = "B32_B32_W32_W32_R32_W32" or - C_PORT_CONFIG = "B32_B32_W32_W32_W32_R32" or - C_PORT_CONFIG = "B32_B32_W32_W32_W32_W32" - ) generate - -p2_wr_ena: if (C_PORT_ENABLE(2) = '1') generate - mig_p2_clk <= p2_wr_clk; - mig_p2_wr_data <= p2_wr_data(31 downto 0); - mig_p2_wr_mask <= p2_wr_mask(3 downto 0); - mig_p2_en <= p2_wr_en;-- this signal will not shown up if the port 5 is for read dir - p2_wr_error <= mig_p2_error; - p2_wr_full <= mig_p2_full; - p2_wr_empty <= mig_p2_empty; - p2_wr_underrun <= mig_p2_underrun; - p2_wr_count <= mig_p2_count ;-- wr port - end generate; -p2_wr_dis: if (C_PORT_ENABLE(2) = '0') generate - mig_p2_clk <= '0'; - mig_p2_wr_data <= (others => '0'); - mig_p2_wr_mask <= (others => '0'); - mig_p2_en <= '0'; - p2_wr_error <= '0'; - p2_wr_full <= '0'; - p2_wr_empty <= '0'; - p2_wr_underrun <= '0'; - p2_wr_count <= (others => '0'); -end generate; - p2_rd_data <= (others => '0'); - p2_rd_overflow <= '0'; - p2_rd_error <= '0'; - p2_rd_full <= '0'; - p2_rd_empty <= '0'; - p2_rd_count <= (others => '0'); --- p2_rd_error <= '0'; - end generate; ---u_config1_2R: if(C_PORT_CONFIG(183 downto 160) = "B32" and C_PORT_CONFIG(119 downto 96) = "R32") generate - -u_config1_2R: if(C_PORT_CONFIG = "B32_B32_R32_R32_R32_R32" or - C_PORT_CONFIG = "B32_B32_R32_R32_R32_W32" or - C_PORT_CONFIG = "B32_B32_R32_R32_W32_R32" or - C_PORT_CONFIG = "B32_B32_R32_R32_W32_W32" or - C_PORT_CONFIG = "B32_B32_R32_W32_R32_R32" or - C_PORT_CONFIG = "B32_B32_R32_W32_R32_W32" or - C_PORT_CONFIG = "B32_B32_R32_W32_W32_R32" or - C_PORT_CONFIG = "B32_B32_R32_W32_W32_W32" ) generate - - p2_rd_ena : if (C_PORT_ENABLE(2) = '1') generate - mig_p2_clk <= p2_rd_clk; - p2_rd_data <= mig_p2_rd_data; - mig_p2_en <= p2_rd_en; - p2_rd_overflow <= mig_p2_overflow; - p2_rd_error <= mig_p2_error; - p2_rd_full <= mig_p2_full; - p2_rd_empty <= mig_p2_empty; - p2_rd_count <= mig_p2_count ;-- wr port - end generate; - p2_rd_dis : if (C_PORT_ENABLE(2) = '0') generate - mig_p2_clk <= '0'; - p2_rd_data <= (others => '0'); - mig_p2_en <= '0'; - - p2_rd_overflow <= '0'; - p2_rd_error <= '0'; - p2_rd_full <= '0'; - p2_rd_empty <= '0'; - p2_rd_count <= (others => '0'); - end generate; - mig_p2_wr_data <= (others => '0'); - mig_p2_wr_mask <= (others => '0'); - p2_wr_error <= '0'; - p2_wr_full <= '0'; - p2_wr_empty <= '0'; - p2_wr_underrun <= '0'; - p2_wr_count <= (others => '0'); - - end generate; ---u_config1_3W: if(C_PORT_CONFIG(183 downto 160) = "B32" and C_PORT_CONFIG(87 downto 64) = "W32") generate --whenever PORT 3 is in Write mode - -u_config1_3W: if( - C_PORT_CONFIG = "B32_B32_R32_W32_R32_R32" or - C_PORT_CONFIG = "B32_B32_R32_W32_R32_W32" or - C_PORT_CONFIG = "B32_B32_R32_W32_W32_R32" or - C_PORT_CONFIG = "B32_B32_R32_W32_W32_W32" or - C_PORT_CONFIG = "B32_B32_W32_W32_R32_R32" or - C_PORT_CONFIG = "B32_B32_W32_W32_R32_W32" or - C_PORT_CONFIG = "B32_B32_W32_W32_W32_R32" or - C_PORT_CONFIG = "B32_B32_W32_W32_W32_W32") generate --whenever PORT 3 is in Write mode - -p3_wr_ena: if (C_PORT_ENABLE(3) = '1')generate - - mig_p3_clk <= p3_wr_clk; - mig_p3_wr_data <= p3_wr_data(31 downto 0); - mig_p3_wr_mask <= p3_wr_mask(3 downto 0); - mig_p3_en <= p3_wr_en; - p3_wr_full <= mig_p3_full; - p3_wr_empty <= mig_p3_empty; - p3_wr_underrun <= mig_p3_underrun; - p3_wr_count <= mig_p3_count ;-- wr port - p3_wr_error <= mig_p3_error; - end generate; - -p3_wr_dis: if (C_PORT_ENABLE(3) = '0')generate - mig_p3_clk <= '0'; - mig_p3_wr_data <= (others => '0'); - mig_p3_wr_mask <= (others => '0'); - mig_p3_en <= '0'; - p3_wr_full <= '0'; - p3_wr_empty <= '0'; - p3_wr_underrun <= '0'; - p3_wr_count <= (others => '0'); - p3_wr_error <= '0'; - - end generate; - p3_rd_overflow <= '0'; - p3_rd_error <= '0'; - p3_rd_full <= '0'; - p3_rd_empty <= '0'; - p3_rd_count <= (others => '0'); - p3_rd_data <= (others => '0'); - end generate; - -u_config1_3R : if( - C_PORT_CONFIG = "B32_B32_R32_R32_R32_R32" or - C_PORT_CONFIG = "B32_B32_R32_R32_R32_W32" or - C_PORT_CONFIG = "B32_B32_R32_R32_W32_R32" or - C_PORT_CONFIG = "B32_B32_R32_R32_W32_W32" or - C_PORT_CONFIG = "B32_B32_W32_R32_R32_R32" or - C_PORT_CONFIG = "B32_B32_W32_R32_R32_W32" or - C_PORT_CONFIG = "B32_B32_W32_R32_W32_R32" or - C_PORT_CONFIG = "B32_B32_W32_R32_W32_W32") generate - -p3_rd_ena: if (C_PORT_ENABLE(3) = '1') generate - - mig_p3_clk <= p3_rd_clk; - p3_rd_data <= mig_p3_rd_data; - mig_p3_en <= p3_rd_en; -- this signal will not shown up if the port 5 is for write dir - p3_rd_overflow <= mig_p3_overflow; - p3_rd_error <= mig_p3_error; - p3_rd_full <= mig_p3_full; - p3_rd_empty <= mig_p3_empty; - p3_rd_count <= mig_p3_count ;-- wr port - end generate; -p3_rd_dis: if (C_PORT_ENABLE(3) = '0') generate - mig_p3_clk <= '0'; - mig_p3_en <= '0'; - p3_rd_overflow <= '0'; - p3_rd_full <= '0'; - p3_rd_empty <= '0'; - p3_rd_count <= (others => '0'); - p3_rd_error <= '0'; - p3_rd_data <= (others => '0'); - end generate; - p3_wr_full <= '0'; - p3_wr_empty <= '0'; - p3_wr_underrun <= '0'; - p3_wr_count <= (others => '0'); - p3_wr_error <= '0'; - mig_p3_wr_data <= (others => '0'); - mig_p3_wr_mask <= (others => '0'); - end generate; - - -u_config1_4W: if( - C_PORT_CONFIG = "B32_B32_R32_R32_W32_R32" or - C_PORT_CONFIG = "B32_B32_R32_R32_W32_W32" or - C_PORT_CONFIG = "B32_B32_R32_W32_W32_R32" or - C_PORT_CONFIG = "B32_B32_R32_W32_W32_W32" or - C_PORT_CONFIG = "B32_B32_W32_R32_W32_R32" or - C_PORT_CONFIG = "B32_B32_W32_R32_W32_W32" or - C_PORT_CONFIG = "B32_B32_W32_W32_W32_R32" or - C_PORT_CONFIG = "B32_B32_W32_W32_W32_W32") generate - -- whenever PORT 4 is in Write mode - -p4_wr_ena : if (C_PORT_ENABLE(4) = '1') generate - mig_p4_clk <= p4_wr_clk; - mig_p4_wr_data <= p4_wr_data(31 downto 0); - mig_p4_wr_mask <= p4_wr_mask(3 downto 0); - mig_p4_en <= p4_wr_en;-- this signal will not shown up if the port 5 is for read dir - p4_wr_full <= mig_p4_full; - p4_wr_empty <= mig_p4_empty; - p4_wr_underrun <= mig_p4_underrun; - p4_wr_count <= mig_p4_count ;-- wr port - p4_wr_error <= mig_p4_error; - end generate; - -p4_wr_dis : if (C_PORT_ENABLE(4) = '0') generate - mig_p4_clk <= '0'; - mig_p4_wr_data <= (others => '0'); - mig_p4_wr_mask <= (others => '0'); - mig_p4_en <= '0'; - p4_wr_full <= '0'; - p4_wr_empty <= '0'; - p4_wr_underrun <= '0'; - p4_wr_count <= (others => '0'); - p4_wr_error <= '0'; - end generate; - - p4_rd_overflow <= '0'; - p4_rd_error <= '0'; - p4_rd_full <= '0'; - p4_rd_empty <= '0'; - p4_rd_count <= (others => '0'); - p4_rd_data <= (others => '0'); - end generate; - -u_config1_4R : if( - C_PORT_CONFIG = "B32_B32_R32_R32_R32_R32" or - C_PORT_CONFIG = "B32_B32_R32_R32_R32_W32" or - C_PORT_CONFIG = "B32_B32_R32_W32_R32_R32" or - C_PORT_CONFIG = "B32_B32_R32_W32_R32_W32" or - C_PORT_CONFIG = "B32_B32_W32_R32_R32_R32" or - C_PORT_CONFIG = "B32_B32_W32_R32_R32_W32" or - C_PORT_CONFIG = "B32_B32_W32_W32_R32_R32" or - C_PORT_CONFIG = "B32_B32_W32_W32_R32_W32") generate - -p4_rd_ena: if (C_PORT_ENABLE(4) = '1') generate - mig_p4_clk <= p4_rd_clk; - p4_rd_data <= mig_p4_rd_data; - mig_p4_en <= p4_rd_en; -- this signal will not shown up if the port 5 is for write dir - p4_rd_overflow <= mig_p4_overflow; - p4_rd_error <= mig_p4_error; - p4_rd_full <= mig_p4_full; - p4_rd_empty <= mig_p4_empty; - p4_rd_count <= mig_p4_count ;-- wr port - end generate; -p4_rd_dis: if (C_PORT_ENABLE(4) = '0') generate - mig_p4_clk <= '0'; - p4_rd_data <= (others => '0'); - mig_p4_en <= '0'; - p4_rd_overflow <= '0'; - p4_rd_error <= '0'; - p4_rd_full <= '0'; - p4_rd_empty <= '0'; - p4_rd_count <= (others => '0'); - end generate; - p4_wr_full <= '0'; - p4_wr_empty <= '0'; - p4_wr_underrun <= '0'; - p4_wr_count <= (others => '0'); - p4_wr_error <= '0'; - mig_p4_wr_data <= (others => '0'); - mig_p4_wr_mask <= (others => '0'); - end generate; - -u_config1_5W: if( - C_PORT_CONFIG = "B32_B32_R32_R32_R32_W32" or - C_PORT_CONFIG = "B32_B32_R32_R32_W32_W32" or - C_PORT_CONFIG = "B32_B32_R32_W32_R32_W32" or - C_PORT_CONFIG = "B32_B32_R32_W32_W32_W32" or - C_PORT_CONFIG = "B32_B32_W32_R32_R32_W32" or - C_PORT_CONFIG = "B32_B32_W32_R32_W32_W32" or - C_PORT_CONFIG = "B32_B32_W32_W32_R32_W32" or - C_PORT_CONFIG = "B32_B32_W32_W32_W32_W32") generate - -- whenever PORT 5 is in Write mode - - -p5_wr_ena: if (C_PORT_ENABLE(5) = '1') generate - mig_p5_clk <= p5_wr_clk; - mig_p5_wr_data <= p5_wr_data(31 downto 0); - mig_p5_wr_mask <= p5_wr_mask(3 downto 0); - mig_p5_en <= p5_wr_en; - p5_wr_full <= mig_p5_full; - p5_wr_empty <= mig_p5_empty; - p5_wr_underrun <= mig_p5_underrun; - p5_wr_count <= mig_p5_count ; - p5_wr_error <= mig_p5_error; - -end generate; -p5_wr_dis: if (C_PORT_ENABLE(5) = '0') generate - mig_p5_clk <= '0'; - mig_p5_wr_data <= (others => '0'); - mig_p5_wr_mask <= (others => '0'); - mig_p5_en <= '0'; - p5_wr_full <= '0'; - p5_wr_empty <= '0'; - p5_wr_underrun <= '0'; - p5_wr_count <= (others => '0'); - p5_wr_error <= '0'; -end generate; - p5_rd_data <= (others => '0'); - p5_rd_overflow <= '0'; - p5_rd_error <= '0'; - p5_rd_full <= '0'; - p5_rd_empty <= '0'; - p5_rd_count <= (others => '0'); -end generate; - - - -u_config1_5R :if( - C_PORT_CONFIG = "B32_B32_R32_R32_R32_R32" or - C_PORT_CONFIG = "B32_B32_R32_R32_W32_R32" or - C_PORT_CONFIG = "B32_B32_R32_W32_R32_R32" or - C_PORT_CONFIG = "B32_B32_R32_W32_W32_R32" or - C_PORT_CONFIG = "B32_B32_W32_R32_R32_R32" or - C_PORT_CONFIG = "B32_B32_W32_R32_W32_R32" or - C_PORT_CONFIG = "B32_B32_W32_W32_R32_R32" or - C_PORT_CONFIG = "B32_B32_W32_W32_W32_R32") generate - -p5_rd_ena:if (C_PORT_ENABLE(5) = '1')generate - mig_p5_clk <= p5_rd_clk; - p5_rd_data <= mig_p5_rd_data; - mig_p5_en <= p5_rd_en; - p5_rd_overflow <= mig_p5_overflow; - p5_rd_error <= mig_p5_error; - p5_rd_full <= mig_p5_full; - p5_rd_empty <= mig_p5_empty; - p5_rd_count <= mig_p5_count ; - -end generate; - -p5_rd_dis:if (C_PORT_ENABLE(5) = '0')generate - - mig_p5_clk <= '0'; - p5_rd_data <= (others => '0'); - mig_p5_en <= '0'; - p5_rd_overflow <= '0'; - p5_rd_error <= '0'; - p5_rd_full <= '0'; - p5_rd_empty <= '0'; - p5_rd_count <= (others => '0'); - -end generate; - p5_wr_full <= '0'; - p5_wr_empty <= '0'; - p5_wr_underrun <= '0'; - p5_wr_count <= (others => '0'); - p5_wr_error <= '0'; - mig_p5_wr_data <= (others => '0'); - mig_p5_wr_mask <= (others => '0'); - -end generate; - - --////////////////////////////////////////////////////////////////////////// - --/////////////////////////////////////////////////////////////////////////// - ---- - ---- B32_B32_B32_B32 - ---- - --/////////////////////////////////////////////////////////////////////////// - --////////////////////////////////////////////////////////////////////////// - -u_config_2 : if(C_PORT_CONFIG = "B32_B32_B32_B32" ) generate - - - -- Inputs from Application CMD Port - -- ************* need to hook up rd /wr error outputs - -p0_c2_ena: if (C_PORT_ENABLE(0) = '1') generate - -- command port signals - mig_p0_arb_en <= p0_arb_en ; - mig_p0_cmd_clk <= p0_cmd_clk ; - mig_p0_cmd_en <= p0_cmd_en ; - mig_p0_cmd_ra <= p0_cmd_ra ; - mig_p0_cmd_ba <= p0_cmd_ba ; - mig_p0_cmd_ca <= p0_cmd_ca ; - mig_p0_cmd_instr <= p0_cmd_instr; - mig_p0_cmd_bl <= ((p0_cmd_instr(2) or p0_cmd_bl(5)) & p0_cmd_bl(4 downto 0)) ; - -- Data port signals - mig_p0_rd_en <= p0_rd_en; - mig_p0_wr_clk <= p0_wr_clk; - mig_p0_rd_clk <= p0_rd_clk; - mig_p0_wr_en <= p0_wr_en; - mig_p0_wr_data <= p0_wr_data(31 downto 0); - mig_p0_wr_mask <= p0_wr_mask(3 downto 0); - p0_wr_count <= mig_p0_wr_count; - p0_rd_count <= mig_p0_rd_count ; -end generate; - -p0_c2_dis: if (C_PORT_ENABLE(0) = '0') generate - - mig_p0_arb_en <= '0'; - mig_p0_cmd_clk <= '0'; - mig_p0_cmd_en <= '0'; - mig_p0_cmd_ra <= (others => '0'); - mig_p0_cmd_ba <= (others => '0'); - mig_p0_cmd_ca <= (others => '0'); - mig_p0_cmd_instr <= (others => '0'); - mig_p0_cmd_bl <= (others => '0'); - - mig_p0_rd_en <= '0'; - mig_p0_wr_clk <= '0'; - mig_p0_rd_clk <= '0'; - mig_p0_wr_en <= '0'; - mig_p0_wr_data <= (others => '0'); - mig_p0_wr_mask <= (others => '0'); - p0_wr_count <= (others => '0'); - p0_rd_count <= (others => '0'); - - -end generate; - - - -p1_c2_ena: if (C_PORT_ENABLE(1) = '1') generate - -- command port signals - - mig_p1_arb_en <= p1_arb_en ; - mig_p1_cmd_clk <= p1_cmd_clk ; - mig_p1_cmd_en <= p1_cmd_en ; - mig_p1_cmd_ra <= p1_cmd_ra ; - mig_p1_cmd_ba <= p1_cmd_ba ; - mig_p1_cmd_ca <= p1_cmd_ca ; - mig_p1_cmd_instr <= p1_cmd_instr; - mig_p1_cmd_bl <= ((p1_cmd_instr(2) or p1_cmd_bl(5)) & p1_cmd_bl(4 downto 0)) ; - - -- Data port signals - - mig_p1_wr_en <= p1_wr_en; - mig_p1_wr_clk <= p1_wr_clk; - mig_p1_rd_en <= p1_rd_en; - mig_p1_wr_data <= p1_wr_data(31 downto 0); - mig_p1_wr_mask <= p1_wr_mask(3 downto 0); - mig_p1_rd_clk <= p1_rd_clk; - p1_wr_count <= mig_p1_wr_count; - p1_rd_count <= mig_p1_rd_count; - -end generate; -p1_c2_dis: if (C_PORT_ENABLE(1) = '0') generate - - mig_p1_arb_en <= '0'; - mig_p1_cmd_clk <= '0'; - mig_p1_cmd_en <= '0'; - mig_p1_cmd_ra <= (others => '0'); - mig_p1_cmd_ba <= (others => '0'); - mig_p1_cmd_ca <= (others => '0'); - mig_p1_cmd_instr <= (others => '0'); - mig_p1_cmd_bl <= (others => '0'); - -- Data port signals - mig_p1_wr_en <= '0'; - mig_p1_wr_clk <= '0'; - mig_p1_rd_en <= '0'; - mig_p1_wr_data <= (others => '0'); - mig_p1_wr_mask <= (others => '0'); - mig_p1_rd_clk <= '0'; - p1_wr_count <= (others => '0'); - p1_rd_count <= (others => '0'); - -end generate; - - - -p2_c2_ena :if (C_PORT_ENABLE(2) = '1') generate - --MCB Physical port Logical Port - mig_p2_arb_en <= p2_arb_en ; - mig_p2_cmd_clk <= p2_cmd_clk ; - mig_p2_cmd_en <= p2_cmd_en ; - mig_p2_cmd_ra <= p2_cmd_ra ; - mig_p2_cmd_ba <= p2_cmd_ba ; - mig_p2_cmd_ca <= p2_cmd_ca ; - mig_p2_cmd_instr <= p2_cmd_instr; - mig_p2_cmd_bl <= ((p2_cmd_instr(2) or p2_cmd_bl(5)) & p2_cmd_bl(4 downto 0)) ; - - mig_p2_en <= p2_rd_en; - mig_p2_clk <= p2_rd_clk; - mig_p3_en <= p2_wr_en; - mig_p3_clk <= p2_wr_clk; - mig_p3_wr_data <= p2_wr_data(31 downto 0); - mig_p3_wr_mask <= p2_wr_mask(3 downto 0); - p2_wr_count <= mig_p3_count; - p2_rd_count <= mig_p2_count; -end generate; -p2_c2_dis :if (C_PORT_ENABLE(2) = '0') generate - - mig_p2_arb_en <= '0'; - mig_p2_cmd_clk <= '0'; - mig_p2_cmd_en <= '0'; - mig_p2_cmd_ra <= (others => '0'); - mig_p2_cmd_ba <= (others => '0'); - mig_p2_cmd_ca <= (others => '0'); - mig_p2_cmd_instr <= (others => '0'); - mig_p2_cmd_bl <= (others => '0'); - - mig_p2_en <= '0'; - mig_p2_clk <= '0'; - mig_p3_en <= '0'; - mig_p3_clk <= '0'; - mig_p3_wr_data <= (others => '0'); - mig_p3_wr_mask <= (others => '0'); - p2_rd_count <= (others => '0'); - p2_wr_count <= (others => '0'); - -end generate; - - -p3_c2_ena: if (C_PORT_ENABLE(3) = '1') generate - --MCB Physical port Logical Port - mig_p4_arb_en <= p3_arb_en ; - mig_p4_cmd_clk <= p3_cmd_clk ; - mig_p4_cmd_en <= p3_cmd_en ; - mig_p4_cmd_ra <= p3_cmd_ra ; - mig_p4_cmd_ba <= p3_cmd_ba ; - mig_p4_cmd_ca <= p3_cmd_ca ; - mig_p4_cmd_instr <= p3_cmd_instr; - mig_p4_cmd_bl <= ((p3_cmd_instr(2) or p3_cmd_bl(5)) & p3_cmd_bl(4 downto 0)) ; - - mig_p4_clk <= p3_rd_clk; - mig_p4_en <= p3_rd_en; - mig_p5_clk <= p3_wr_clk; - mig_p5_en <= p3_wr_en; - mig_p5_wr_data <= p3_wr_data(31 downto 0); - mig_p5_wr_mask <= p3_wr_mask(3 downto 0); - p3_rd_count <= mig_p4_count; - p3_wr_count <= mig_p5_count; -end generate; - -p3_c2_dis: if (C_PORT_ENABLE(3) = '0') generate - mig_p4_arb_en <= '0'; - mig_p4_cmd_clk <= '0'; - mig_p4_cmd_en <= '0'; - mig_p4_cmd_ra <= (others => '0'); - mig_p4_cmd_ba <= (others => '0'); - mig_p4_cmd_ca <= (others => '0'); - mig_p4_cmd_instr <= (others => '0'); - mig_p4_cmd_bl <= (others => '0'); - - mig_p4_clk <= '0'; - mig_p4_en <= '0'; - mig_p5_clk <= '0'; - mig_p5_en <= '0'; - mig_p5_wr_data <= (others => '0'); - mig_p5_wr_mask <= (others => '0'); - p3_rd_count <= (others => '0'); - p3_wr_count <= (others => '0'); -end generate; - - p0_cmd_empty <= mig_p0_cmd_empty ; - p0_cmd_full <= mig_p0_cmd_full ; - p1_cmd_empty <= mig_p1_cmd_empty ; - p1_cmd_full <= mig_p1_cmd_full ; - p2_cmd_empty <= mig_p2_cmd_empty ; - p2_cmd_full <= mig_p2_cmd_full ; - p3_cmd_empty <= mig_p4_cmd_empty ; - p3_cmd_full <= mig_p4_cmd_full ; - - - -- outputs to Applications User Port - p0_rd_data <= mig_p0_rd_data; - p1_rd_data <= mig_p1_rd_data; - p2_rd_data <= mig_p2_rd_data; - p3_rd_data <= mig_p4_rd_data; - - p0_rd_empty_i <= mig_p0_rd_empty; - p1_rd_empty_i <= mig_p1_rd_empty; - p2_rd_empty <= mig_p2_empty; - p3_rd_empty <= mig_p4_empty; - - p0_rd_full <= mig_p0_rd_full; - p1_rd_full <= mig_p1_rd_full; - p2_rd_full <= mig_p2_full; - p3_rd_full <= mig_p4_full; - - p0_rd_error <= mig_p0_rd_error; - p1_rd_error <= mig_p1_rd_error; - p2_rd_error <= mig_p2_error; - p3_rd_error <= mig_p4_error; - - p0_rd_overflow <= mig_p0_rd_overflow; - p1_rd_overflow <= mig_p1_rd_overflow; - p2_rd_overflow <= mig_p2_overflow; - p3_rd_overflow <= mig_p4_overflow; - - p0_wr_underrun <= mig_p0_wr_underrun; - p1_wr_underrun <= mig_p1_wr_underrun; - p2_wr_underrun <= mig_p3_underrun; - p3_wr_underrun <= mig_p5_underrun; - - p0_wr_empty <= mig_p0_wr_empty; - p1_wr_empty <= mig_p1_wr_empty; - p2_wr_empty <= mig_p3_empty; - p3_wr_empty <= mig_p5_empty; - - p0_wr_full_i <= mig_p0_wr_full; - p1_wr_full_i <= mig_p1_wr_full; - p2_wr_full <= mig_p3_full; - p3_wr_full <= mig_p5_full; - - p0_wr_error <= mig_p0_wr_error; - p1_wr_error <= mig_p1_wr_error; - p2_wr_error <= mig_p3_error; - p3_wr_error <= mig_p5_error; - - -- unused ports signals - p4_cmd_empty <= '0'; - p4_cmd_full <= '0'; - mig_p2_wr_mask <= (others => '0'); - mig_p4_wr_mask <= (others => '0'); - - mig_p2_wr_data <= (others => '0'); - mig_p4_wr_data <= (others => '0'); - - - p5_cmd_empty <= '0'; - p5_cmd_full <= '0'; - - - mig_p3_cmd_clk <= '0'; - mig_p3_cmd_en <= '0'; - mig_p3_cmd_ra <= (others => '0'); - mig_p3_cmd_ba <= (others => '0'); - mig_p3_cmd_ca <= (others => '0'); - mig_p3_cmd_instr <= (others => '0'); - mig_p3_cmd_bl <= (others => '0'); - mig_p3_arb_en <= '0'; -- physical cmd port 3 is not used in this config - - - - - mig_p5_arb_en <= '0'; -- physical cmd port 3 is not used in this config - mig_p5_cmd_clk <= '0'; - mig_p5_cmd_en <= '0'; - mig_p5_cmd_ra <= (others => '0'); - mig_p5_cmd_ba <= (others => '0'); - mig_p5_cmd_ca <= (others => '0'); - mig_p5_cmd_instr <= (others => '0'); - mig_p5_cmd_bl <= (others => '0'); - -end generate; --- --- --- --////////////////////////////////////////////////////////////////////////// --- --/////////////////////////////////////////////////////////////////////////// --- ---- --- ---- B64_B32_B32 --- ---- --- --/////////////////////////////////////////////////////////////////////////// --- --////////////////////////////////////////////////////////////////////////// --- --- --- -u_config_3:if(C_PORT_CONFIG = "B64_B32_B32" ) generate - - -- Inputs from Application CMD Port - - -p0_c3_ena : if (C_PORT_ENABLE(0) = '1') generate - mig_p0_arb_en <= p0_arb_en ; - mig_p0_cmd_clk <= p0_cmd_clk ; - mig_p0_cmd_en <= p0_cmd_en ; - mig_p0_cmd_ra <= p0_cmd_ra ; - mig_p0_cmd_ba <= p0_cmd_ba ; - mig_p0_cmd_ca <= p0_cmd_ca ; - mig_p0_cmd_instr <= p0_cmd_instr; - mig_p0_cmd_bl <= ((p0_cmd_instr(2) or p0_cmd_bl(5)) & p0_cmd_bl(4 downto 0)) ; - p0_cmd_empty <= mig_p0_cmd_empty ; - p0_cmd_full <= mig_p0_cmd_full ; - - mig_p0_wr_clk <= p0_wr_clk; - mig_p0_rd_clk <= p0_rd_clk; - mig_p1_wr_clk <= p0_wr_clk; - mig_p1_rd_clk <= p0_rd_clk; - - mig_p0_wr_en <= p0_wr_en and not p0_wr_full_i; - mig_p1_wr_en <= p0_wr_en and not p0_wr_full_i; - mig_p0_wr_data <= p0_wr_data(31 downto 0); - mig_p0_wr_mask(3 downto 0) <= p0_wr_mask(3 downto 0); - mig_p1_wr_data <= p0_wr_data(63 downto 32); - mig_p1_wr_mask(3 downto 0) <= p0_wr_mask(7 downto 4); - - p0_rd_empty_i <= mig_p1_rd_empty; - p0_rd_data <= (mig_p1_rd_data & mig_p0_rd_data); - mig_p0_rd_en <= p0_rd_en and not p0_rd_empty_i; - mig_p1_rd_en <= p0_rd_en and not p0_rd_empty_i; - - - p0_wr_count <= mig_p1_wr_count; -- B64 for port 0, map most significant port to output - p0_rd_count <= mig_p1_rd_count; - p0_wr_empty <= mig_p1_wr_empty; - p0_wr_error <= mig_p1_wr_error or mig_p0_wr_error; - p0_wr_full_i <= mig_p1_wr_full; - p0_wr_underrun <= mig_p1_wr_underrun or mig_p0_wr_underrun; - p0_rd_overflow <= mig_p1_rd_overflow or mig_p0_rd_overflow; - p0_rd_error <= mig_p1_rd_error or mig_p0_rd_error; - p0_rd_full <= mig_p1_rd_full; - -end generate; -p0_c3_dis: if (C_PORT_ENABLE(0) = '0') generate - - mig_p0_arb_en <= '0'; - mig_p0_cmd_clk <= '0'; - mig_p0_cmd_en <= '0'; - mig_p0_cmd_ra <= (others => '0'); - mig_p0_cmd_ba <= (others => '0'); - mig_p0_cmd_ca <= (others => '0'); - mig_p0_cmd_instr <= (others => '0'); - mig_p0_cmd_bl <= (others => '0'); - p0_cmd_empty <= '0'; - p0_cmd_full <= '0'; - - - mig_p0_wr_clk <= '0'; - mig_p0_rd_clk <= '0'; - mig_p1_wr_clk <= '0'; - mig_p1_rd_clk <= '0'; - - mig_p0_wr_en <= '0'; - mig_p1_wr_en <= '0'; - mig_p0_wr_data <= (others => '0'); - mig_p0_wr_mask <= (others => '0'); - mig_p1_wr_data <= (others => '0'); - mig_p1_wr_mask <= (others => '0'); - - p0_rd_empty_i <= '0'; - p0_rd_data <= (others => '0'); - mig_p0_rd_en <= '0'; - mig_p1_rd_en <= '0'; - - - p0_wr_count <= (others => '0'); - p0_rd_count <= (others => '0'); - p0_wr_empty <= '0'; - p0_wr_error <= '0'; - p0_wr_full_i <= '0'; - p0_wr_underrun <= '0'; - p0_rd_overflow <= '0'; - p0_rd_error <= '0'; - p0_rd_full <= '0'; -end generate; - - - - -p1_c3_ena: if (C_PORT_ENABLE(1) = '1')generate - - mig_p2_arb_en <= p1_arb_en ; - mig_p2_cmd_clk <= p1_cmd_clk ; - mig_p2_cmd_en <= p1_cmd_en ; - mig_p2_cmd_ra <= p1_cmd_ra ; - mig_p2_cmd_ba <= p1_cmd_ba ; - mig_p2_cmd_ca <= p1_cmd_ca ; - mig_p2_cmd_instr <= p1_cmd_instr; - mig_p2_cmd_bl <= ((p1_cmd_instr(2) or p1_cmd_bl(5)) & p1_cmd_bl(4 downto 0)) ; - - p1_cmd_empty <= mig_p2_cmd_empty; - p1_cmd_full <= mig_p2_cmd_full; - - mig_p2_clk <= p1_rd_clk; - mig_p3_clk <= p1_wr_clk; - - mig_p3_en <= p1_wr_en; - mig_p3_wr_data <= p1_wr_data(31 downto 0); - mig_p3_wr_mask <= p1_wr_mask(3 downto 0); - mig_p2_en <= p1_rd_en; - - p1_rd_data <= mig_p2_rd_data; - p1_wr_count <= mig_p3_count; - p1_rd_count <= mig_p2_count; - p1_wr_empty <= mig_p3_empty; - p1_wr_error <= mig_p3_error; - p1_wr_full_i <= mig_p3_full; - p1_wr_underrun <= mig_p3_underrun; - p1_rd_overflow <= mig_p2_overflow; - p1_rd_error <= mig_p2_error; - p1_rd_full <= mig_p2_full; - p1_rd_empty_i <= mig_p2_empty; - end generate; - -p1_c3_dis: if (C_PORT_ENABLE(1) = '0')generate - - mig_p2_arb_en <= '0'; - mig_p2_cmd_clk <= '0'; - mig_p2_cmd_en <= '0'; - mig_p2_cmd_ra <= (others => '0'); - mig_p2_cmd_ba <= (others => '0'); - mig_p2_cmd_ca <= (others => '0'); - mig_p2_cmd_instr <= (others => '0'); - mig_p2_cmd_bl <= (others => '0'); - p1_cmd_empty <= '0'; - p1_cmd_full <= '0'; - mig_p3_en <= '0'; - mig_p3_wr_data <= (others => '0'); - mig_p3_wr_mask <= (others => '0'); - mig_p2_en <= '0'; - - mig_p2_clk <= '0'; - mig_p3_clk <= '0'; - - p1_rd_data <= (others => '0'); - p1_wr_count <= (others => '0'); - p1_rd_count <= (others => '0'); - p1_wr_empty <= '0'; - p1_wr_error <= '0'; - p1_wr_full_i <= '0'; - p1_wr_underrun <= '0'; - p1_rd_overflow <= '0'; - p1_rd_error <= '0'; - p1_rd_full <= '0'; - p1_rd_empty_i <= '0'; - -end generate; - -p2_c3_ena: if (C_PORT_ENABLE(2) = '1')generate - mig_p4_arb_en <= p2_arb_en ; - mig_p4_cmd_clk <= p2_cmd_clk ; - mig_p4_cmd_en <= p2_cmd_en ; - mig_p4_cmd_ra <= p2_cmd_ra ; - mig_p4_cmd_ba <= p2_cmd_ba ; - mig_p4_cmd_ca <= p2_cmd_ca ; - mig_p4_cmd_instr <= p2_cmd_instr; - mig_p4_cmd_bl <= ((p2_cmd_instr(2) or p2_cmd_bl(5)) & p2_cmd_bl(4 downto 0)) ; - - p2_cmd_empty <= mig_p4_cmd_empty ; - p2_cmd_full <= mig_p4_cmd_full ; - mig_p5_en <= p2_wr_en; - mig_p5_wr_data <= p2_wr_data(31 downto 0); - mig_p5_wr_mask <= p2_wr_mask(3 downto 0); - mig_p4_en <= p2_rd_en; - - mig_p4_clk <= p2_rd_clk; - mig_p5_clk <= p2_wr_clk; - - p2_rd_data <= mig_p4_rd_data; - p2_wr_count <= mig_p5_count; - p2_rd_count <= mig_p4_count; - p2_wr_empty <= mig_p5_empty; - p2_wr_full <= mig_p5_full; - p2_wr_error <= mig_p5_error; - p2_wr_underrun <= mig_p5_underrun; - p2_rd_overflow <= mig_p4_overflow; - p2_rd_error <= mig_p4_error; - p2_rd_full <= mig_p4_full; - p2_rd_empty <= mig_p4_empty; - -end generate; - -p2_c3_dis: if (C_PORT_ENABLE(2) = '0')generate - - mig_p4_arb_en <= '0'; - mig_p4_cmd_clk <= '0'; - mig_p4_cmd_en <= '0'; - mig_p4_cmd_ra <= (others => '0'); - mig_p4_cmd_ba <= (others => '0'); - mig_p4_cmd_ca <= (others => '0'); - mig_p4_cmd_instr <= (others => '0'); - mig_p4_cmd_bl <= (others => '0'); - p2_cmd_empty <= '0'; - p2_cmd_full <= '0'; - mig_p5_en <= '0'; - mig_p5_wr_data <= (others => '0'); - mig_p5_wr_mask <= (others => '0'); - mig_p4_en <= '0'; - - mig_p4_clk <= '0'; - mig_p5_clk <= '0'; - - p2_rd_data <= (others => '0'); - p2_wr_count <= (others => '0'); - p2_rd_count <= (others => '0'); - p2_wr_empty <= '0'; - p2_wr_full <= '0'; - p2_wr_error <= '0'; - p2_wr_underrun <= '0'; - p2_rd_overflow <= '0'; - p2_rd_error <= '0'; - p2_rd_full <= '0'; - p2_rd_empty <= '0'; - -end generate; - - -- MCB's port 1,3,5 is not used in this Config mode - mig_p1_arb_en <= '0'; - mig_p1_cmd_clk <= '0'; - mig_p1_cmd_en <= '0'; - mig_p1_cmd_ra <= (others => '0'); - mig_p1_cmd_ba <= (others => '0'); - mig_p1_cmd_ca <= (others => '0'); - - mig_p1_cmd_instr <= (others => '0'); - mig_p1_cmd_bl <= (others => '0'); - - mig_p3_arb_en <= '0'; - mig_p3_cmd_clk <= '0'; - mig_p3_cmd_en <= '0'; - mig_p3_cmd_ra <= (others => '0'); - mig_p3_cmd_ba <= (others => '0'); - mig_p3_cmd_ca <= (others => '0'); - - mig_p3_cmd_instr <= (others => '0'); - mig_p3_cmd_bl <= (others => '0'); - - mig_p5_arb_en <= '0'; - mig_p5_cmd_clk <= '0'; - mig_p5_cmd_en <= '0'; - mig_p5_cmd_ra <= (others => '0'); - mig_p5_cmd_ba <= (others => '0'); - mig_p5_cmd_ca <= (others => '0'); - - mig_p5_cmd_instr <= (others => '0'); - mig_p5_cmd_bl <= (others => '0'); - -end generate; - -u_config_4 : if(C_PORT_CONFIG = "B64_B64" ) generate - - -- Inputs from Application CMD Port - -p0_c4_ena: if (C_PORT_ENABLE(0) = '1') generate - - mig_p0_arb_en <= p0_arb_en ; - mig_p1_arb_en <= p0_arb_en ; - - mig_p0_cmd_clk <= p0_cmd_clk ; - mig_p0_cmd_en <= p0_cmd_en ; - mig_p0_cmd_ra <= p0_cmd_ra ; - mig_p0_cmd_ba <= p0_cmd_ba ; - mig_p0_cmd_ca <= p0_cmd_ca ; - mig_p0_cmd_instr <= p0_cmd_instr; - mig_p0_cmd_bl <= ((p0_cmd_instr(2) or p0_cmd_bl(5)) & p0_cmd_bl(4 downto 0)) ; - - mig_p0_wr_clk <= p0_wr_clk; - mig_p0_rd_clk <= p0_rd_clk; - mig_p1_wr_clk <= p0_wr_clk; - mig_p1_rd_clk <= p0_rd_clk; - mig_p0_wr_en <= p0_wr_en and not p0_wr_full_i; - mig_p0_wr_data <= p0_wr_data(31 downto 0); - mig_p0_wr_mask(3 downto 0) <= p0_wr_mask(3 downto 0); - mig_p1_wr_data <= p0_wr_data(63 downto 32); - mig_p1_wr_mask(3 downto 0) <= p0_wr_mask(7 downto 4); - mig_p1_wr_en <= p0_wr_en and not p0_wr_full_i; - mig_p0_rd_en <= p0_rd_en and not p0_rd_empty_i; - mig_p1_rd_en <= p0_rd_en and not p0_rd_empty_i; - p0_rd_data <= (mig_p1_rd_data & mig_p0_rd_data); - - p0_cmd_empty <= mig_p0_cmd_empty ; - p0_cmd_full <= mig_p0_cmd_full ; - p0_wr_empty <= mig_p1_wr_empty; - p0_wr_full_i <= mig_p1_wr_full; - p0_wr_error <= mig_p1_wr_error or mig_p0_wr_error; - p0_wr_count <= mig_p1_wr_count; - p0_rd_count <= mig_p1_rd_count; - p0_wr_underrun <= mig_p1_wr_underrun or mig_p0_wr_underrun; - p0_rd_overflow <= mig_p1_rd_overflow or mig_p0_rd_overflow; - p0_rd_error <= mig_p1_rd_error or mig_p0_rd_error; - p0_rd_full <= mig_p1_rd_full; - p0_rd_empty_i <= mig_p1_rd_empty; -end generate; - -p0_c4_dis: if (C_PORT_ENABLE(0) = '0') generate - mig_p0_arb_en <= '0'; - mig_p0_cmd_clk <= '0'; - mig_p0_cmd_en <= '0'; - mig_p0_cmd_ra <= (others => '0'); - mig_p0_cmd_ba <= (others => '0'); - mig_p0_cmd_ca <= (others => '0'); - mig_p0_cmd_instr <= (others => '0'); - mig_p0_cmd_bl <= (others => '0'); - - mig_p0_wr_clk <= '0'; - mig_p0_rd_clk <= '0'; - mig_p1_wr_clk <= '0'; - mig_p1_rd_clk <= '0'; - mig_p0_wr_en <= '0'; - mig_p1_wr_en <= '0'; - mig_p0_wr_data <= (others => '0'); - mig_p0_wr_mask <= (others => '0'); - mig_p1_wr_data <= (others => '0'); - mig_p1_wr_mask <= (others => '0'); - -- mig_p1_wr_en <= (others => '0'); - mig_p0_rd_en <= '0'; - mig_p1_rd_en <= '0'; - p0_rd_data <= (others => '0'); - - - p0_cmd_empty <= '0'; - p0_cmd_full <= '0'; - p0_wr_empty <= '0'; - p0_wr_full_i <= '0'; - p0_wr_error <= '0'; - p0_wr_count <= (others => '0'); - p0_rd_count <= (others => '0'); - p0_wr_underrun <= '0'; - p0_rd_overflow <= '0'; - p0_rd_error <= '0'; - p0_rd_full <= '0'; - p0_rd_empty_i <= '0'; - - -end generate; - - -p1_c4_ena: if (C_PORT_ENABLE(1) = '1') generate - - mig_p2_arb_en <= p1_arb_en ; - - mig_p2_cmd_clk <= p1_cmd_clk ; - mig_p2_cmd_en <= p1_cmd_en ; - mig_p2_cmd_ra <= p1_cmd_ra ; - mig_p2_cmd_ba <= p1_cmd_ba ; - mig_p2_cmd_ca <= p1_cmd_ca ; - mig_p2_cmd_instr <= p1_cmd_instr; - mig_p2_cmd_bl <= ((p1_cmd_instr(2) or p1_cmd_bl(5)) & p1_cmd_bl(4 downto 0)) ; - - - mig_p2_clk <= p1_rd_clk; - mig_p3_clk <= p1_wr_clk; - mig_p4_clk <= p1_rd_clk; - mig_p5_clk <= p1_wr_clk; - mig_p3_en <= p1_wr_en and not p1_wr_full_i; - mig_p5_en <= p1_wr_en and not p1_wr_full_i; - mig_p3_wr_data <= p1_wr_data(31 downto 0); - mig_p3_wr_mask <= p1_wr_mask(3 downto 0); - mig_p5_wr_data <= p1_wr_data(63 downto 32); - mig_p5_wr_mask <= p1_wr_mask(3 downto 0); - mig_p2_en <= p1_rd_en and not p1_rd_empty_i; - mig_p4_en <= p1_rd_en and not p1_rd_empty_i; - - p1_cmd_empty <= mig_p2_cmd_empty ; - p1_cmd_full <= mig_p2_cmd_full ; - - p1_wr_count <= mig_p5_count; - p1_rd_count <= mig_p4_count; - p1_wr_full_i <= mig_p5_full; - p1_wr_error <= mig_p5_error or mig_p5_error; - p1_wr_empty <= mig_p5_empty; - p1_wr_underrun <= mig_p3_underrun or mig_p5_underrun; - p1_rd_overflow <= mig_p4_overflow; - p1_rd_error <= mig_p4_error; - p1_rd_full <= mig_p4_full; - p1_rd_empty_i <= mig_p4_empty; - - p1_rd_data <= (mig_p4_rd_data & mig_p2_rd_data); - -end generate; -p1_c4_dis: if (C_PORT_ENABLE(1) = '0') generate - - mig_p2_arb_en <= '0'; - -- mig_p3_arb_en <= (others => '0'); - -- mig_p4_arb_en <= (others => '0'); - -- mig_p5_arb_en <= (others => '0'); - - mig_p2_cmd_clk <= '0'; - mig_p2_cmd_en <= '0'; - mig_p2_cmd_ra <= (others => '0'); - mig_p2_cmd_ba <= (others => '0'); - mig_p2_cmd_ca <= (others => '0'); - mig_p2_cmd_instr <= (others => '0'); - mig_p2_cmd_bl <= (others => '0'); - mig_p2_clk <= '0'; - mig_p3_clk <= '0'; - mig_p4_clk <= '0'; - mig_p5_clk <= '0'; - mig_p3_en <= '0'; - mig_p5_en <= '0'; - mig_p3_wr_data <= (others => '0'); - mig_p3_wr_mask <= (others => '0'); - mig_p5_wr_data <= (others => '0'); - mig_p5_wr_mask <= (others => '0'); - mig_p2_en <= '0'; - mig_p4_en <= '0'; - p1_cmd_empty <= '0'; - p1_cmd_full <= '0'; - - p1_wr_count <= (others => '0'); - p1_rd_count <= (others => '0'); - p1_wr_full_i <= '0'; - p1_wr_error <= '0'; - p1_wr_empty <= '0'; - p1_wr_underrun <= '0'; - p1_rd_overflow <= '0'; - p1_rd_error <= '0'; - p1_rd_full <= '0'; - p1_rd_empty_i <= '0'; - p1_rd_data <= (others => '0'); - -end generate; - - -- unused MCB's signals in this configuration - mig_p3_arb_en <= '0'; - mig_p4_arb_en <= '0'; - mig_p5_arb_en <= '0'; - - mig_p3_cmd_clk <= '0'; - mig_p3_cmd_en <= '0'; - mig_p3_cmd_ra <= (others => '0'); - mig_p3_cmd_ba <= (others => '0'); - mig_p3_cmd_ca <= (others => '0'); - mig_p3_cmd_instr <= (others => '0'); - - mig_p4_cmd_clk <= '0'; - mig_p4_cmd_en <= '0'; - mig_p4_cmd_ra <= (others => '0'); - mig_p4_cmd_ba <= (others => '0'); - mig_p4_cmd_ca <= (others => '0'); - mig_p4_cmd_instr <= (others => '0'); - mig_p4_cmd_bl <= (others => '0'); - - mig_p5_cmd_clk <= '0'; - mig_p5_cmd_en <= '0'; - mig_p5_cmd_ra <= (others => '0'); - mig_p5_cmd_ba <= (others => '0'); - mig_p5_cmd_ca <= (others => '0'); - mig_p5_cmd_instr <= (others => '0'); - mig_p5_cmd_bl <= (others => '0'); - - end generate; - - ---*******************************BEGIN OF CONFIG 5 SIGNALS ******************************** - -u_config_5: if(C_PORT_CONFIG = "B128" ) generate - - - -- Inputs from Application CMD Port - - mig_p0_arb_en <= p0_arb_en ; - mig_p0_cmd_clk <= p0_cmd_clk ; - mig_p0_cmd_en <= p0_cmd_en ; - mig_p0_cmd_ra <= p0_cmd_ra ; - mig_p0_cmd_ba <= p0_cmd_ba ; - mig_p0_cmd_ca <= p0_cmd_ca ; - mig_p0_cmd_instr <= p0_cmd_instr; - mig_p0_cmd_bl <= ((p0_cmd_instr(2) or p0_cmd_bl(5)) & p0_cmd_bl(4 downto 0)) ; - p0_cmd_empty <= mig_p0_cmd_empty ; - p0_cmd_full <= mig_p0_cmd_full ; - - - - -- Inputs from Application User Port - - mig_p0_wr_clk <= p0_wr_clk; - mig_p0_rd_clk <= p0_rd_clk; - mig_p1_wr_clk <= p0_wr_clk; - mig_p1_rd_clk <= p0_rd_clk; - - mig_p2_clk <= p0_rd_clk; - mig_p3_clk <= p0_wr_clk; - mig_p4_clk <= p0_rd_clk; - mig_p5_clk <= p0_wr_clk; - - - - mig_p0_wr_en <= p0_wr_en and not p0_wr_full_i; - mig_p1_wr_en <= p0_wr_en and not p0_wr_full_i; - mig_p3_en <= p0_wr_en and not p0_wr_full_i; - mig_p5_en <= p0_wr_en and not p0_wr_full_i; - - - - mig_p0_wr_data <= p0_wr_data(31 downto 0); - mig_p0_wr_mask(3 downto 0) <= p0_wr_mask(3 downto 0); - mig_p1_wr_data <= p0_wr_data(63 downto 32); - mig_p1_wr_mask(3 downto 0) <= p0_wr_mask(7 downto 4); - mig_p3_wr_data <= p0_wr_data(95 downto 64); - mig_p3_wr_mask(3 downto 0) <= p0_wr_mask(11 downto 8); - mig_p5_wr_data <= p0_wr_data(127 downto 96); - mig_p5_wr_mask(3 downto 0) <= p0_wr_mask(15 downto 12); - - mig_p0_rd_en <= p0_rd_en and not p0_rd_empty_i; - mig_p1_rd_en <= p0_rd_en and not p0_rd_empty_i; - mig_p2_en <= p0_rd_en and not p0_rd_empty_i; - mig_p4_en <= p0_rd_en and not p0_rd_empty_i; - - -- outputs to Applications User Port - p0_rd_data <= (mig_p4_rd_data & mig_p2_rd_data & mig_p1_rd_data & mig_p0_rd_data); - p0_rd_empty_i <= mig_p4_empty; - p0_rd_full <= mig_p4_full; - p0_rd_error <= mig_p0_rd_error or mig_p1_rd_error or mig_p2_error or mig_p4_error; - p0_rd_overflow <= mig_p0_rd_overflow or mig_p1_rd_overflow or mig_p2_overflow or mig_p4_overflow; - - p0_wr_underrun <= mig_p0_wr_underrun or mig_p1_wr_underrun or mig_p3_underrun or mig_p5_underrun; - p0_wr_empty <= mig_p5_empty; - p0_wr_full_i <= mig_p5_full; - p0_wr_error <= mig_p0_wr_error or mig_p1_wr_error or mig_p3_error or mig_p5_error; - - p0_wr_count <= mig_p5_count; - p0_rd_count <= mig_p4_count; - - - -- unused MCB's siganls in this configuration - - mig_p1_arb_en <= '0'; - mig_p1_cmd_clk <= '0'; - mig_p1_cmd_en <= '0'; - mig_p1_cmd_ra <= (others => '0'); - mig_p1_cmd_ba <= (others => '0'); - mig_p1_cmd_ca <= (others => '0'); - - mig_p1_cmd_instr <= (others => '0'); - mig_p1_cmd_bl <= (others => '0'); - - mig_p2_arb_en <= '0'; - mig_p2_cmd_clk <= '0'; - mig_p2_cmd_en <= '0'; - mig_p2_cmd_ra <= (others => '0'); - mig_p2_cmd_ba <= (others => '0'); - mig_p2_cmd_ca <= (others => '0'); - - mig_p2_cmd_instr <= (others => '0'); - mig_p2_cmd_bl <= (others => '0'); - - mig_p3_arb_en <= '0'; - mig_p3_cmd_clk <= '0'; - mig_p3_cmd_en <= '0'; - mig_p3_cmd_ra <= (others => '0'); - mig_p3_cmd_ba <= (others => '0'); - mig_p3_cmd_ca <= (others => '0'); - - mig_p3_cmd_instr <= (others => '0'); - mig_p3_cmd_bl <= (others => '0'); - - mig_p4_arb_en <= '0'; - mig_p4_cmd_clk <= '0'; - mig_p4_cmd_en <= '0'; - mig_p4_cmd_ra <= (others => '0'); - mig_p4_cmd_ba <= (others => '0'); - mig_p4_cmd_ca <= (others => '0'); - - mig_p4_cmd_instr <= (others => '0'); - mig_p4_cmd_bl <= (others => '0'); - - mig_p5_arb_en <= '0'; - mig_p5_cmd_clk <= '0'; - mig_p5_cmd_en <= '0'; - mig_p5_cmd_ra <= (others => '0'); - mig_p5_cmd_ba <= (others => '0'); - mig_p5_cmd_ca <= (others => '0'); - - mig_p5_cmd_instr <= (others => '0'); - mig_p5_cmd_bl <= (others => '0'); - ---*******************************END OF CONFIG 5 SIGNALS ******************************** - -end generate; - -uo_cal_start <= uo_cal_start_int; - - - -samc_0: MCB - GENERIC MAP - ( PORT_CONFIG => C_PORT_CONFIG, - MEM_WIDTH => C_NUM_DQ_PINS , - MEM_TYPE => C_MEM_TYPE , - MEM_BURST_LEN => C_MEM_BURST_LEN , - MEM_ADDR_ORDER => C_MEM_ADDR_ORDER, - MEM_CAS_LATENCY => C_MEM_CAS_LATENCY, - MEM_DDR3_CAS_LATENCY => C_MEM_DDR3_CAS_LATENCY , - MEM_DDR2_WRT_RECOVERY => C_MEM_DDR2_WRT_RECOVERY , - MEM_DDR3_WRT_RECOVERY => C_MEM_DDR3_WRT_RECOVERY , - MEM_MOBILE_PA_SR => C_MEM_MOBILE_PA_SR , - MEM_DDR1_2_ODS => C_MEM_DDR1_2_ODS , - MEM_DDR3_ODS => C_MEM_DDR3_ODS , - MEM_DDR2_RTT => C_MEM_DDR2_RTT , - MEM_DDR3_RTT => C_MEM_DDR3_RTT , - MEM_DDR3_ADD_LATENCY => C_MEM_DDR3_ADD_LATENCY , - MEM_DDR2_ADD_LATENCY => C_MEM_DDR2_ADD_LATENCY , - MEM_MOBILE_TC_SR => C_MEM_MOBILE_TC_SR , - MEM_MDDR_ODS => C_MEM_MDDR_ODS , - MEM_DDR2_DIFF_DQS_EN => C_MEM_DDR2_DIFF_DQS_EN , - MEM_DDR2_3_PA_SR => C_MEM_DDR2_3_PA_SR , - MEM_DDR3_CAS_WR_LATENCY => C_MEM_DDR3_CAS_WR_LATENCY, - MEM_DDR3_AUTO_SR => C_MEM_DDR3_AUTO_SR , - MEM_DDR2_3_HIGH_TEMP_SR => C_MEM_DDR2_3_HIGH_TEMP_SR, - MEM_DDR3_DYN_WRT_ODT => C_MEM_DDR3_DYN_WRT_ODT , - MEM_RA_SIZE => C_MEM_ADDR_WIDTH , - MEM_BA_SIZE => C_MEM_BANKADDR_WIDTH , - MEM_CA_SIZE => C_MEM_NUM_COL_BITS , - MEM_RAS_VAL => MEM_RAS_VAL , - MEM_RCD_VAL => MEM_RCD_VAL , - MEM_REFI_VAL => MEM_REFI_VAL , - MEM_RFC_VAL => MEM_RFC_VAL , - MEM_RP_VAL => MEM_RP_VAL , - MEM_WR_VAL => MEM_WR_VAL , - MEM_RTP_VAL => MEM_RTP_VAL , - MEM_WTR_VAL => MEM_WTR_VAL , - CAL_BYPASS => C_MC_CALIB_BYPASS, - CAL_RA => C_MC_CALIBRATION_RA, - CAL_BA => C_MC_CALIBRATION_BA , - CAL_CA => C_MC_CALIBRATION_CA, - CAL_CLK_DIV => C_MC_CALIBRATION_CLK_DIV, - CAL_DELAY => C_MC_CALIBRATION_DELAY, --- CAL_CALIBRATION_MODE=> C_MC_CALIBRATION_MODE, - ARB_NUM_TIME_SLOTS => C_ARB_NUM_TIME_SLOTS, - ARB_TIME_SLOT_0 => C_ARB_TIME_SLOT_0, - ARB_TIME_SLOT_1 => C_ARB_TIME_SLOT_1, - ARB_TIME_SLOT_2 => C_ARB_TIME_SLOT_2, - ARB_TIME_SLOT_3 => C_ARB_TIME_SLOT_3, - ARB_TIME_SLOT_4 => C_ARB_TIME_SLOT_4, - ARB_TIME_SLOT_5 => C_ARB_TIME_SLOT_5, - ARB_TIME_SLOT_6 => C_ARB_TIME_SLOT_6, - ARB_TIME_SLOT_7 => C_ARB_TIME_SLOT_7, - ARB_TIME_SLOT_8 => C_ARB_TIME_SLOT_8, - ARB_TIME_SLOT_9 => C_ARB_TIME_SLOT_9, - ARB_TIME_SLOT_10 => C_ARB_TIME_SLOT_10, - ARB_TIME_SLOT_11 => C_ARB_TIME_SLOT_11 - ) PORT MAP - ( - - -- HIGH-SPEED PLL clock interface - - PLLCLK => pllclk1, - PLLCE => pllce1, - - PLLLOCK => '1', - - -- DQS CLOCK NETWork interface - - DQSIOIN => idelay_dqs_ioi_s, - DQSIOIP => idelay_dqs_ioi_m, - UDQSIOIN => idelay_udqs_ioi_s, - UDQSIOIP => idelay_udqs_ioi_m, - - - --DQSPIN => in_pre_dqsp, - DQI => in_dq, - -- RESETS - GLOBAl and local - SYSRST => MCB_SYSRST , - - -- command port 0 - P0ARBEN => mig_p0_arb_en, - P0CMDCLK => mig_p0_cmd_clk, - P0CMDEN => mig_p0_cmd_en, - P0CMDRA => mig_p0_cmd_ra, - P0CMDBA => mig_p0_cmd_ba, - P0CMDCA => mig_p0_cmd_ca, - - P0CMDINSTR => mig_p0_cmd_instr, - P0CMDBL => mig_p0_cmd_bl, - P0CMDEMPTY => mig_p0_cmd_empty, - P0CMDFULL => mig_p0_cmd_full, - - -- command port 1 - - P1ARBEN => mig_p1_arb_en, - P1CMDCLK => mig_p1_cmd_clk, - P1CMDEN => mig_p1_cmd_en, - P1CMDRA => mig_p1_cmd_ra, - P1CMDBA => mig_p1_cmd_ba, - P1CMDCA => mig_p1_cmd_ca, - - P1CMDINSTR => mig_p1_cmd_instr, - P1CMDBL => mig_p1_cmd_bl, - P1CMDEMPTY => mig_p1_cmd_empty, - P1CMDFULL => mig_p1_cmd_full, - - -- command port 2 - - P2ARBEN => mig_p2_arb_en, - P2CMDCLK => mig_p2_cmd_clk, - P2CMDEN => mig_p2_cmd_en, - P2CMDRA => mig_p2_cmd_ra, - P2CMDBA => mig_p2_cmd_ba, - P2CMDCA => mig_p2_cmd_ca, - - P2CMDINSTR => mig_p2_cmd_instr, - P2CMDBL => mig_p2_cmd_bl, - P2CMDEMPTY => mig_p2_cmd_empty, - P2CMDFULL => mig_p2_cmd_full, - - -- command port 3 - - P3ARBEN => mig_p3_arb_en, - P3CMDCLK => mig_p3_cmd_clk, - P3CMDEN => mig_p3_cmd_en, - P3CMDRA => mig_p3_cmd_ra, - P3CMDBA => mig_p3_cmd_ba, - P3CMDCA => mig_p3_cmd_ca, - - P3CMDINSTR => mig_p3_cmd_instr, - P3CMDBL => mig_p3_cmd_bl, - P3CMDEMPTY => mig_p3_cmd_empty, - P3CMDFULL => mig_p3_cmd_full, - - -- command port 4 -- don't care in config 2 - - P4ARBEN => mig_p4_arb_en, - P4CMDCLK => mig_p4_cmd_clk, - P4CMDEN => mig_p4_cmd_en, - P4CMDRA => mig_p4_cmd_ra, - P4CMDBA => mig_p4_cmd_ba, - P4CMDCA => mig_p4_cmd_ca, - - P4CMDINSTR => mig_p4_cmd_instr, - P4CMDBL => mig_p4_cmd_bl, - P4CMDEMPTY => mig_p4_cmd_empty, - P4CMDFULL => mig_p4_cmd_full, - - -- command port 5-- don't care in config 2 - - P5ARBEN => mig_p5_arb_en, - P5CMDCLK => mig_p5_cmd_clk, - P5CMDEN => mig_p5_cmd_en, - P5CMDRA => mig_p5_cmd_ra, - P5CMDBA => mig_p5_cmd_ba, - P5CMDCA => mig_p5_cmd_ca, - - P5CMDINSTR => mig_p5_cmd_instr, - P5CMDBL => mig_p5_cmd_bl, - P5CMDEMPTY => mig_p5_cmd_empty, - P5CMDFULL => mig_p5_cmd_full, - - - -- IOI & IOB SIGNals/tristate interface - - DQIOWEN0 => dqIO_w_en_0, - DQSIOWEN90P => dqsIO_w_en_90_p, - DQSIOWEN90N => dqsIO_w_en_90_n, - - - -- IOB MEMORY INTerface signals - ADDR => address_90, - BA => ba_90 , - RAS => ras_90 , - CAS => cas_90 , - WE => we_90 , - CKE => cke_90 , - ODT => odt_90 , - RST => rst_90 , - - -- CALIBRATION DRP interface - IOIDRPCLK => ioi_drp_clk , - IOIDRPADDR => ioi_drp_addr , - IOIDRPSDO => ioi_drp_sdo , - IOIDRPSDI => ioi_drp_sdi , - IOIDRPCS => ioi_drp_cs , - IOIDRPADD => ioi_drp_add , - IOIDRPBROADCAST => ioi_drp_broadcast , - IOIDRPTRAIN => ioi_drp_train , - IOIDRPUPDATE => ioi_drp_update , - - -- CALIBRATION DAtacapture interface - --SPECIAL COMMANDs - RECAL => mcb_recal , - UIREAD => mcb_ui_read, - UIADD => mcb_ui_add , - UICS => mcb_ui_cs , - UICLK => mcb_ui_clk , - UISDI => mcb_ui_sdi , - UIADDR => mcb_ui_addr , - UIBROADCAST => mcb_ui_broadcast, - UIDRPUPDATE => mcb_ui_drp_update, - UIDONECAL => mcb_ui_done_cal, - UICMD => mcb_ui_cmd, - UICMDIN => mcb_ui_cmd_in, - UICMDEN => mcb_ui_cmd_en, - UIDQCOUNT => mcb_ui_dqcount, - UIDQLOWERDEC => mcb_ui_dq_lower_dec, - UIDQLOWERINC => mcb_ui_dq_lower_inc, - UIDQUPPERDEC => mcb_ui_dq_upper_dec, - UIDQUPPERINC => mcb_ui_dq_upper_inc, - UIUDQSDEC => mcb_ui_udqs_dec, - UIUDQSINC => mcb_ui_udqs_inc, - UILDQSDEC => mcb_ui_ldqs_dec, - UILDQSINC => mcb_ui_ldqs_inc, - UODATA => uo_data_int, - UODATAVALID => uo_data_valid_int, - UODONECAL => hard_done_cal , - UOCMDREADYIN => uo_cmd_ready_in_int, - UOREFRSHFLAG => uo_refrsh_flag_xhdl23, - UOCALSTART => uo_cal_start_int, - UOSDO => uo_sdo_xhdl24, - - --CONTROL SIGNALS - STATUS => status, - SELFREFRESHENTER => selfrefresh_mcb_enter, - SELFREFRESHMODE => selfrefresh_mcb_mode, ------------------------------------------------- ---MUIs ------------------------------------------------- - - P0RDDATA => mig_p0_rd_data ( 31 downto 0), - P1RDDATA => mig_p1_rd_data ( 31 downto 0), - P2RDDATA => mig_p2_rd_data ( 31 downto 0), - P3RDDATA => mig_p3_rd_data ( 31 downto 0), - P4RDDATA => mig_p4_rd_data ( 31 downto 0), - P5RDDATA => mig_p5_rd_data ( 31 downto 0), - LDMN => dqnlm , - UDMN => dqnum , - DQON => dqo_n , - DQOP => dqo_p , - LDMP => dqplm , - UDMP => dqpum , - - P0RDCOUNT => mig_p0_rd_count , - P0WRCOUNT => mig_p0_wr_count , - P1RDCOUNT => mig_p1_rd_count , - P1WRCOUNT => mig_p1_wr_count , - P2COUNT => mig_p2_count , - P3COUNT => mig_p3_count , - P4COUNT => mig_p4_count , - P5COUNT => mig_p5_count , - - -- NEW ADDED FIFo status siganls - -- MIG USER PORT 0 - P0RDEMPTY => mig_p0_rd_empty, - P0RDFULL => mig_p0_rd_full, - P0RDOVERFLOW => mig_p0_rd_overflow, - P0WREMPTY => mig_p0_wr_empty, - P0WRFULL => mig_p0_wr_full, - P0WRUNDERRUN => mig_p0_wr_underrun, - -- MIG USER PORT 1 - P1RDEMPTY => mig_p1_rd_empty, - P1RDFULL => mig_p1_rd_full, - P1RDOVERFLOW => mig_p1_rd_overflow, - P1WREMPTY => mig_p1_wr_empty, - P1WRFULL => mig_p1_wr_full, - P1WRUNDERRUN => mig_p1_wr_underrun, - - -- MIG USER PORT 2 - P2EMPTY => mig_p2_empty, - P2FULL => mig_p2_full, - P2RDOVERFLOW => mig_p2_overflow, - P2WRUNDERRUN => mig_p2_underrun, - - P3EMPTY => mig_p3_empty , - P3FULL => mig_p3_full , - P3RDOVERFLOW => mig_p3_overflow, - P3WRUNDERRUN => mig_p3_underrun , - -- MIG USER PORT 3 - P4EMPTY => mig_p4_empty, - P4FULL => mig_p4_full, - P4RDOVERFLOW => mig_p4_overflow, - P4WRUNDERRUN => mig_p4_underrun, - - P5EMPTY => mig_p5_empty , - P5FULL => mig_p5_full , - P5RDOVERFLOW => mig_p5_overflow, - P5WRUNDERRUN => mig_p5_underrun, - - --------------------------------------------------------- - P0WREN => mig_p0_wr_en, - P0RDEN => mig_p0_rd_en, - P1WREN => mig_p1_wr_en, - P1RDEN => mig_p1_rd_en, - P2EN => mig_p2_en, - P3EN => mig_p3_en, - P4EN => mig_p4_en, - P5EN => mig_p5_en, - -- WRITE MASK BIts connection - P0RWRMASK => mig_p0_wr_mask(3 downto 0), - P1RWRMASK => mig_p1_wr_mask(3 downto 0), - P2WRMASK => mig_p2_wr_mask(3 downto 0), - P3WRMASK => mig_p3_wr_mask(3 downto 0), - P4WRMASK => mig_p4_wr_mask(3 downto 0), - P5WRMASK => mig_p5_wr_mask(3 downto 0), - -- DATA WRITE COnnection - P0WRDATA => mig_p0_wr_data(31 downto 0), - P1WRDATA => mig_p1_wr_data(31 downto 0), - P2WRDATA => mig_p2_wr_data(31 downto 0), - P3WRDATA => mig_p3_wr_data(31 downto 0), - P4WRDATA => mig_p4_wr_data(31 downto 0), - P5WRDATA => mig_p5_wr_data(31 downto 0), - - P0WRERROR => mig_p0_wr_error, - P1WRERROR => mig_p1_wr_error, - P0RDERROR => mig_p0_rd_error, - P1RDERROR => mig_p1_rd_error, - - P2ERROR => mig_p2_error, - P3ERROR => mig_p3_error, - P4ERROR => mig_p4_error, - P5ERROR => mig_p5_error, - - -- USER SIDE DAta ports clock - -- 128 BITS CONnections - P0WRCLK => mig_p0_wr_clk , - P1WRCLK => mig_p1_wr_clk , - P0RDCLK => mig_p0_rd_clk , - P1RDCLK => mig_p1_rd_clk , - P2CLK => mig_p2_clk , - P3CLK => mig_p3_clk , - P4CLK => mig_p4_clk , - P5CLK => mig_p5_clk - ); - ---////////////////////////////////////////////////////// ---// Input Termination Calibration ---////////////////////////////////////////////////////// - - uo_done_cal <= DONE_SOFTANDHARD_CAL WHEN (C_CALIB_SOFT_IP = "TRUE") ELSE - hard_done_cal; - - - gen_term_calib : IF (C_CALIB_SOFT_IP = "TRUE") GENERATE - mcb_soft_calibration_top_inst : mcb_soft_calibration_top - generic map ( C_MEM_TZQINIT_MAXCNT => C_MEM_TZQINIT_MAXCNT, - C_MC_CALIBRATION_MODE => C_MC_CALIBRATION_MODE, - SKIP_IN_TERM_CAL => C_SKIP_IN_TERM_CAL, - SKIP_DYNAMIC_CAL => C_SKIP_DYNAMIC_CAL, - SKIP_DYN_IN_TERM => C_SKIP_DYN_IN_TERM, - C_SIMULATION => C_SIMULATION, - C_MEM_TYPE => C_MEM_TYPE - ) - - PORT MAP ( - UI_CLK => ui_clk, - RST => int_sys_rst, - IOCLK => ioclk0, - DONE_SOFTANDHARD_CAL => DONE_SOFTANDHARD_CAL, - PLL_LOCK => pll_lock, - - SELFREFRESH_REQ => selfrefresh_enter, -- from user app - SELFREFRESH_MCB_MODE => selfrefresh_mcb_mode, -- from MCB - SELFREFRESH_MCB_REQ => selfrefresh_mcb_enter, -- to mcb - SELFREFRESH_MODE => selfrefresh_mode, -- to user app - - MCB_UIADD => mcb_ui_add, - MCB_UISDI => mcb_ui_sdi, - MCB_UOSDO => uo_sdo_xhdl24, - MCB_UODONECAL => hard_done_cal, - MCB_UOREFRSHFLAG => uo_refrsh_flag_xhdl23, - MCB_UICS => mcb_ui_cs, - MCB_UIDRPUPDATE => mcb_ui_drp_update, - MCB_UIBROADCAST => mcb_ui_broadcast, - MCB_UIADDR => mcb_ui_addr, - MCB_UICMDEN => mcb_ui_cmd_en, - MCB_UIDONECAL => mcb_ui_done_cal, - MCB_UIDQLOWERDEC => mcb_ui_dq_lower_dec, - MCB_UIDQLOWERINC => mcb_ui_dq_lower_inc, - MCB_UIDQUPPERDEC => mcb_ui_dq_upper_dec, - MCB_UIDQUPPERINC => mcb_ui_dq_upper_inc, - MCB_UILDQSDEC => mcb_ui_ldqs_dec, - MCB_UILDQSINC => mcb_ui_ldqs_inc, - MCB_UIREAD => mcb_ui_read, - MCB_UIUDQSDEC => mcb_ui_udqs_dec, - MCB_UIUDQSINC => mcb_ui_udqs_inc, - MCB_RECAL => mcb_recal, - MCB_SYSRST => MCB_SYSRST, - MCB_UICMD => mcb_ui_cmd, - MCB_UICMDIN => mcb_ui_cmd_in, - MCB_UIDQCOUNT => mcb_ui_dqcount, - MCB_UODATA => uo_data_int, - MCB_UODATAVALID => uo_data_valid_int, - MCB_UOCMDREADY => uo_cmd_ready_in_int, - MCB_UO_CAL_START => uo_cal_start_int, - RZQ_PIN => rzq, - ZIO_PIN => zio, - CKE_Train => cke_train - ); - mcb_ui_clk <= ui_clk; - END GENERATE; - - - gen_no_term_calib : if (NOT(C_CALIB_SOFT_IP = "TRUE")) generate - DONE_SOFTANDHARD_CAL <= '0'; - MCB_SYSRST <= int_sys_rst; - mcb_recal <= calib_recal; - mcb_ui_read <= ui_read; - mcb_ui_add <= ui_add; - mcb_ui_cs <= ui_cs; - mcb_ui_clk <= ui_clk; - mcb_ui_sdi <= ui_sdi; - mcb_ui_addr <= ui_addr; - mcb_ui_broadcast <= ui_broadcast; - mcb_ui_drp_update <= ui_drp_update; - mcb_ui_done_cal <= ui_done_cal; - mcb_ui_cmd <= ui_cmd; - mcb_ui_cmd_in <= ui_cmd_in; - mcb_ui_cmd_en <= ui_cmd_en; - mcb_ui_dqcount <= ui_dqcount; - mcb_ui_dq_lower_dec <= ui_dq_lower_dec; - mcb_ui_dq_lower_inc <= ui_dq_lower_inc; - mcb_ui_dq_upper_dec <= ui_dq_upper_dec; - mcb_ui_dq_upper_inc <= ui_dq_upper_inc; - mcb_ui_udqs_inc <= ui_udqs_inc; - mcb_ui_udqs_dec <= ui_udqs_dec; - mcb_ui_ldqs_inc <= ui_ldqs_inc; - mcb_ui_ldqs_dec <= ui_ldqs_dec; - end generate; - - - ---////////////////////////////////////////////////////// ---//ODDRDES2 instantiations ---////////////////////////////////////////////////////// - --------- ---ADDR --------- - - gen_addr_oserdes2 : FOR addr_ioi IN 0 TO C_MEM_ADDR_WIDTH - 1 GENERATE - - - ioi_addr_0 : OSERDES2 - GENERIC MAP ( - BYPASS_GCLK_FF => TRUE, - DATA_RATE_OQ => C_OSERDES2_DATA_RATE_OQ, - DATA_RATE_OT => C_OSERDES2_DATA_RATE_OT, - OUTPUT_MODE => C_OSERDES2_OUTPUT_MODE_SE, - SERDES_MODE => C_OSERDES2_SERDES_MODE_MASTER, - DATA_WIDTH => 2 - ) - PORT MAP ( - OQ => ioi_addr(addr_ioi), - SHIFTOUT1 => open, - SHIFTOUT2 => open, - SHIFTOUT3 => open, - SHIFTOUT4 => open, - TQ => t_addr(addr_ioi), - CLK0 => ioclk0, - CLK1 => '0', - CLKDIV => '0', - D1 => address_90(addr_ioi), - D2 => address_90(addr_ioi), - D3 => '0', - D4 => '0', - IOCE => pll_ce_0, - OCE => '1', - RST => int_sys_rst, - SHIFTIN1 => '0', - SHIFTIN2 => '0', - SHIFTIN3 => '0', - SHIFTIN4 => '0', - T1 => '0', - T2 => '0', - T3 => '0', - T4 => '0', - TCE => '1', - TRAIN => '0' - ); - END GENERATE; - --------- ---BA --------- - - gen_ba_oserdes2 : FOR ba_ioi IN 0 TO C_MEM_BANKADDR_WIDTH - 1 GENERATE - - - ioi_ba_0 : OSERDES2 - GENERIC MAP ( - BYPASS_GCLK_FF => TRUE, - DATA_RATE_OQ => C_OSERDES2_DATA_RATE_OQ, - DATA_RATE_OT => C_OSERDES2_DATA_RATE_OT, - OUTPUT_MODE => C_OSERDES2_OUTPUT_MODE_SE, - SERDES_MODE => C_OSERDES2_SERDES_MODE_MASTER, - DATA_WIDTH => 2 - ) - PORT MAP ( - OQ => ioi_ba(ba_ioi), - SHIFTOUT1 => open, - SHIFTOUT2 => open, - SHIFTOUT3 => open, - SHIFTOUT4 => open, - TQ => t_ba(ba_ioi), - CLK0 => ioclk0, - CLK1 => '0', - CLKDIV => '0', - D1 => ba_90(ba_ioi), - D2 => ba_90(ba_ioi), - D3 => '0', - D4 => '0', - IOCE => pll_ce_0, - OCE => '1', - RST => int_sys_rst, - SHIFTIN1 => '0', - SHIFTIN2 => '0', - SHIFTIN3 => '0', - SHIFTIN4 => '0', - T1 => '0', - T2 => '0', - T3 => '0', - T4 => '0', - TCE => '1', - TRAIN => '0' - ); - END GENERATE; - --------- ---CAS --------- - ioi_cas_0 : OSERDES2 - GENERIC MAP ( - BYPASS_GCLK_FF => TRUE, - DATA_RATE_OQ => C_OSERDES2_DATA_RATE_OQ, - DATA_RATE_OT => C_OSERDES2_DATA_RATE_OT, - OUTPUT_MODE => C_OSERDES2_OUTPUT_MODE_SE, - SERDES_MODE => C_OSERDES2_SERDES_MODE_MASTER, - DATA_WIDTH => 2 - ) - PORT MAP ( - OQ => ioi_cas, - SHIFTOUT1 => open, - SHIFTOUT2 => open, - SHIFTOUT3 => open, - SHIFTOUT4 => open, - TQ => t_cas, - CLK0 => ioclk0, - CLK1 => '0', - CLKDIV => '0', - D1 => cas_90, - D2 => cas_90, - D3 => '0', - D4 => '0', - IOCE => pll_ce_0, - OCE => '1', - RST => int_sys_rst, - SHIFTIN1 => '0', - SHIFTIN2 => '0', - SHIFTIN3 => '0', - SHIFTIN4 => '0', - T1 => '0', - T2 => '0', - T3 => '0', - T4 => '0', - TCE => '1', - TRAIN => '0' - ); - --------- ---CKE --------- - ioi_cke_0 : OSERDES2 - GENERIC MAP ( - BYPASS_GCLK_FF => TRUE, - DATA_RATE_OQ => C_OSERDES2_DATA_RATE_OQ, - DATA_RATE_OT => C_OSERDES2_DATA_RATE_OT, - OUTPUT_MODE => C_OSERDES2_OUTPUT_MODE_SE, - SERDES_MODE => C_OSERDES2_SERDES_MODE_MASTER, - DATA_WIDTH => 2, - TRAIN_PATTERN => 15 - ) - PORT MAP ( - OQ => ioi_cke, - SHIFTOUT1 => open, - SHIFTOUT2 => open, - SHIFTOUT3 => open, - SHIFTOUT4 => open, - TQ => t_cke, - CLK0 => ioclk0, - CLK1 => '0', - CLKDIV => '0', - D1 => cke_90, - D2 => cke_90, - D3 => '0', - D4 => '0', - IOCE => pll_ce_0, - OCE => '1', - RST => '0', --int_sys_rst - SHIFTIN1 => '0', - SHIFTIN2 => '0', - SHIFTIN3 => '0', - SHIFTIN4 => '0', - T1 => '0', - T2 => '0', - T3 => '0', - T4 => '0', - TCE => '1', - TRAIN => cke_train - ); --------- ---ODT --------- - xhdl330 : IF (C_MEM_TYPE = "DDR3" OR C_MEM_TYPE = "DDR2") GENERATE - - ioi_odt_0 : OSERDES2 - GENERIC MAP ( - BYPASS_GCLK_FF => TRUE, - DATA_RATE_OQ => C_OSERDES2_DATA_RATE_OQ, - DATA_RATE_OT => C_OSERDES2_DATA_RATE_OT, - OUTPUT_MODE => C_OSERDES2_OUTPUT_MODE_SE, - SERDES_MODE => C_OSERDES2_SERDES_MODE_MASTER, - DATA_WIDTH => 2 --- TRAIN_PATTERN => 0 - ) - PORT MAP ( - OQ => ioi_odt, - SHIFTOUT1 => open, - SHIFTOUT2 => open, - SHIFTOUT3 => open, - SHIFTOUT4 => open, - TQ => t_odt, - CLK0 => ioclk0, - CLK1 => '0', - CLKDIV => '0', - D1 => odt_90, - D2 => odt_90, - D3 => '0', - D4 => '0', - IOCE => pll_ce_0, - OCE => '1', - RST => int_sys_rst, - SHIFTIN1 => '0', - SHIFTIN2 => '0', - SHIFTIN3 => '0', - SHIFTIN4 => '0', - T1 => '0', - T2 => '0', - T3 => '0', - T4 => '0', - TCE => '1', - TRAIN => '0' - ); - END GENERATE; - --------- ---RAS --------- - ioi_ras_0 : OSERDES2 - GENERIC MAP ( - BYPASS_GCLK_FF => TRUE, - DATA_RATE_OQ => C_OSERDES2_DATA_RATE_OQ, - DATA_RATE_OT => C_OSERDES2_DATA_RATE_OT, - OUTPUT_MODE => C_OSERDES2_OUTPUT_MODE_SE, - SERDES_MODE => C_OSERDES2_SERDES_MODE_MASTER, - DATA_WIDTH => 2 - ) - PORT MAP ( - OQ => ioi_ras, - SHIFTOUT1 => open, - SHIFTOUT2 => open, - SHIFTOUT3 => open, - SHIFTOUT4 => open, - TQ => t_ras, - CLK0 => ioclk0, - CLK1 => '0', - CLKDIV => '0', - D1 => ras_90, - D2 => ras_90, - D3 => '0', - D4 => '0', - IOCE => pll_ce_0, - OCE => '1', - RST => int_sys_rst, - SHIFTIN1 => '0', - SHIFTIN2 => '0', - SHIFTIN3 => '0', - SHIFTIN4 => '0', - T1 => '0', - T2 => '0', - T3 => '0', - T4 => '0', - TCE => '1', - TRAIN => '0' - ); --------- ---RST --------- - xhdl331 : IF (C_MEM_TYPE = "DDR3") GENERATE - ioi_rst_0 : OSERDES2 - GENERIC MAP ( - BYPASS_GCLK_FF => TRUE, - DATA_RATE_OQ => C_OSERDES2_DATA_RATE_OQ, - DATA_RATE_OT => C_OSERDES2_DATA_RATE_OT, - OUTPUT_MODE => C_OSERDES2_OUTPUT_MODE_SE, - SERDES_MODE => C_OSERDES2_SERDES_MODE_MASTER, - DATA_WIDTH => 2 - ) - PORT MAP ( - OQ => ioi_rst, - SHIFTOUT1 => open, - SHIFTOUT2 => open, - SHIFTOUT3 => open, - SHIFTOUT4 => open, - TQ => t_rst, - CLK0 => ioclk0, - CLK1 => '0', - CLKDIV => '0', - D1 => rst_90, - D2 => rst_90, - D3 => '0', - D4 => '0', - IOCE => pll_ce_0, - OCE => '1', - RST => int_sys_rst, - SHIFTIN1 => '0', - SHIFTIN2 => '0', - SHIFTIN3 => '0', - SHIFTIN4 => '0', - T1 => '0', - T2 => '0', - T3 => '0', - T4 => '0', - TCE => '1', - TRAIN => '0' - ); - END GENERATE; --------- ---WE --------- - ioi_we_0 : OSERDES2 - GENERIC MAP ( - BYPASS_GCLK_FF => TRUE, - DATA_RATE_OQ => C_OSERDES2_DATA_RATE_OQ, - DATA_RATE_OT => C_OSERDES2_DATA_RATE_OT, - OUTPUT_MODE => C_OSERDES2_OUTPUT_MODE_SE, - SERDES_MODE => C_OSERDES2_SERDES_MODE_MASTER, - DATA_WIDTH => 2 - ) - PORT MAP ( - OQ => ioi_we, - TQ => t_we, - SHIFTOUT1 => open, - SHIFTOUT2 => open, - SHIFTOUT3 => open, - SHIFTOUT4 => open, - CLK0 => ioclk0, - CLK1 => '0', - CLKDIV => '0', - D1 => we_90, - D2 => we_90, - D3 => '0', - D4 => '0', - IOCE => pll_ce_0, - OCE => '1', - RST => int_sys_rst, - SHIFTIN1 => '0', - SHIFTIN2 => '0', - SHIFTIN3 => '0', - SHIFTIN4 => '0', - T1 => '0', - T2 => '0', - T3 => '0', - T4 => '0', - TCE => '1', - TRAIN => '0' - ); - --------- ---CK --------- - ioi_ck_0 : OSERDES2 - GENERIC MAP ( - BYPASS_GCLK_FF => TRUE, - DATA_RATE_OQ => C_OSERDES2_DATA_RATE_OQ, - DATA_RATE_OT => C_OSERDES2_DATA_RATE_OT, - OUTPUT_MODE => C_OSERDES2_OUTPUT_MODE_SE, - SERDES_MODE => C_OSERDES2_SERDES_MODE_MASTER, - DATA_WIDTH => 2 - ) - PORT MAP ( - OQ => ioi_ck, - SHIFTOUT1 => open,--ck_shiftout0_1, - SHIFTOUT2 => open,--ck_shiftout0_2, - SHIFTOUT3 => open, - SHIFTOUT4 => open, - TQ => t_ck, - CLK0 => ioclk0, - CLK1 => '0', - CLKDIV => '0', - D1 => '0', - D2 => '1', - D3 => '0', - D4 => '0', - IOCE => pll_ce_0, - OCE => '1', - RST => '0', --int_sys_rst - SHIFTIN1 => '0', - SHIFTIN2 => '0', - SHIFTIN3 => '0', - SHIFTIN4 => '0', - T1 => '0', - T2 => '0', - T3 => '0', - T4 => '0', - TCE => '1', - TRAIN => '0' - ); - ----------- -----CKN ----------- --- ioi_ckn_0 : OSERDES2 --- GENERIC MAP ( --- BYPASS_GCLK_FF => TRUE, --- DATA_RATE_OQ => C_OSERDES2_DATA_RATE_OQ, --- DATA_RATE_OT => C_OSERDES2_DATA_RATE_OT, --- OUTPUT_MODE => C_OSERDES2_OUTPUT_MODE_SE, --- SERDES_MODE => C_OSERDES2_SERDES_MODE_SLAVE, --- DATA_WIDTH => 2 --- ) --- PORT MAP ( --- OQ => ioi_ckn, --- SHIFTOUT1 => open, --- SHIFTOUT2 => open, --- SHIFTOUT3 => open,--ck_shiftout1_3, --- SHIFTOUT4 => open,--ck_shiftout1_4, --- TQ => t_ckn, --- CLK0 => ioclk0, --- CLK1 => '0', --- CLKDIV => '0', --- D1 => '1', --- D2 => '0', --- D3 => '0', --- D4 => '0', --- IOCE => pll_ce_0, --- OCE => '1', --- RST => '0', --- SHIFTIN1 => '0', --- SHIFTIN2 => '0', --- SHIFTIN3 => '0', --- SHIFTIN4 => '0', --- T1 => '0', --- T2 => '0', --- T3 => '0', --- T4 => '0', --- TCE => '1', --- TRAIN => '0' --- ); --- --------- ---UDM --------- - - ioi_udm_0 : OSERDES2 - GENERIC MAP ( - BYPASS_GCLK_FF => TRUE, - DATA_RATE_OQ => C_OSERDES2_DATA_RATE_OQ, - DATA_RATE_OT => C_OSERDES2_DATA_RATE_OT, - OUTPUT_MODE => C_OSERDES2_OUTPUT_MODE_SE, - SERDES_MODE => C_OSERDES2_SERDES_MODE_MASTER, - DATA_WIDTH => 2 - ) - PORT MAP ( - OQ => udm_oq, - SHIFTOUT1 => open, - SHIFTOUT2 => open, - SHIFTOUT3 => open, - SHIFTOUT4 => open, - TQ => udm_t, - CLK0 => ioclk90, - CLK1 => '0', - CLKDIV => '0', - D1 => dqpum, - D2 => dqnum, - D3 => '0', - D4 => '0', - IOCE => pll_ce_90, - OCE => '1', - RST => int_sys_rst, - SHIFTIN1 => '0', - SHIFTIN2 => '0', - SHIFTIN3 => '0', - SHIFTIN4 => '0', - T1 => dqIO_w_en_0, - T2 => dqIO_w_en_0, - T3 => '0', - T4 => '0', - TCE => '1', - TRAIN => '0' - ); - --------- ---LDM --------- - ioi_ldm_0 : OSERDES2 - GENERIC MAP ( - BYPASS_GCLK_FF => TRUE, - DATA_RATE_OQ => C_OSERDES2_DATA_RATE_OQ, - DATA_RATE_OT => C_OSERDES2_DATA_RATE_OT, - OUTPUT_MODE => C_OSERDES2_OUTPUT_MODE_SE, - SERDES_MODE => C_OSERDES2_SERDES_MODE_MASTER, - DATA_WIDTH => 2 - ) - PORT MAP ( - OQ => ldm_oq, - SHIFTOUT1 => open, - SHIFTOUT2 => open, - SHIFTOUT3 => open, - SHIFTOUT4 => open, - TQ => ldm_t, - CLK0 => ioclk90, - CLK1 => '0', - CLKDIV => '0', - D1 => dqplm, - D2 => dqnlm, - D3 => '0', - D4 => '0', - IOCE => pll_ce_90, - OCE => '1', - RST => int_sys_rst, - SHIFTIN1 => '0', - SHIFTIN2 => '0', - SHIFTIN3 => '0', - SHIFTIN4 => '0', - T1 => dqIO_w_en_0, - T2 => dqIO_w_en_0, - T3 => '0', - T4 => '0', - TCE => '1', - TRAIN => '0' - ); --------- ---DQ --------- - gen_dq : FOR dq IN 0 TO C_NUM_DQ_PINS-1 GENERATE - oserdes2_dq_0 : OSERDES2 - GENERIC MAP ( - BYPASS_GCLK_FF => TRUE, - DATA_RATE_OQ => C_OSERDES2_DATA_RATE_OQ, - DATA_RATE_OT => C_OSERDES2_DATA_RATE_OT, - OUTPUT_MODE => C_OSERDES2_OUTPUT_MODE_SE, - SERDES_MODE => C_OSERDES2_SERDES_MODE_MASTER, - DATA_WIDTH => 2, - TRAIN_PATTERN => 5 - ) - PORT MAP ( - OQ => dq_oq(dq), - SHIFTOUT1 => open, - SHIFTOUT2 => open, - SHIFTOUT3 => open, - SHIFTOUT4 => open, - TQ => dq_tq(dq), - CLK0 => ioclk90, - CLK1 => '0', - CLKDIV => '0', - D1 => dqo_p(dq), - D2 => dqo_n(dq), - D3 => '0', - D4 => '0', - IOCE => pll_ce_90, - OCE => '1', - RST => int_sys_rst, - SHIFTIN1 => '0', - SHIFTIN2 => '0', - SHIFTIN3 => '0', - SHIFTIN4 => '0', - T1 => dqIO_w_en_0, - T2 => dqIO_w_en_0, - T3 => '0', - T4 => '0', - TCE => '1', - TRAIN => ioi_drp_train - ); - END GENERATE; - --------- ---DQSP --------- - - - oserdes2_dqsp_0 : OSERDES2 - GENERIC MAP ( - BYPASS_GCLK_FF => TRUE, - DATA_RATE_OQ => C_OSERDES2_DATA_RATE_OQ, - DATA_RATE_OT => C_OSERDES2_DATA_RATE_OT, - OUTPUT_MODE => C_OSERDES2_OUTPUT_MODE_SE, - SERDES_MODE => C_OSERDES2_SERDES_MODE_MASTER, - DATA_WIDTH => 2 - -- TRAIN_PATTERN => 0 - ) - PORT MAP ( - OQ => dqsp_oq, - SHIFTOUT1 => open,--dqs_shiftout0_1, - SHIFTOUT2 => open,--dqs_shiftout0_2, - SHIFTOUT3 => open, - SHIFTOUT4 => open, - TQ => dqsp_tq, - CLK0 => ioclk0, - CLK1 => '0', - CLKDIV => '0', - D1 => '0', - D2 => '1', - D3 => '0', - D4 => '0', - IOCE => pll_ce_0, - OCE => '1', - RST => int_sys_rst, - SHIFTIN1 => '0', - SHIFTIN2 => '0', - SHIFTIN3 => '0',--dqs_shiftout1_3, - SHIFTIN4 => '0',--dqs_shiftout1_4, - T1 => dqsIO_w_en_90_n, - T2 => dqsIO_w_en_90_p, - T3 => '0', - T4 => '0', - TCE => '1', - TRAIN => '0' - ); - --------- ---DQSN --------- - - oserdes2_dqsn_0 : OSERDES2 - GENERIC MAP ( - BYPASS_GCLK_FF => TRUE, - DATA_RATE_OQ => C_OSERDES2_DATA_RATE_OQ, - DATA_RATE_OT => C_OSERDES2_DATA_RATE_OT, - OUTPUT_MODE => C_OSERDES2_OUTPUT_MODE_SE, - SERDES_MODE => C_OSERDES2_SERDES_MODE_SLAVE, - DATA_WIDTH => 2 - -- TRAIN_PATTERN => 0 - ) - PORT MAP ( - OQ => dqsn_oq, - SHIFTOUT1 => open, - SHIFTOUT2 => open, - SHIFTOUT3 => open,--dqs_shiftout1_3, - SHIFTOUT4 => open,--dqs_shiftout1_4, - TQ => dqsn_tq, - CLK0 => ioclk0, - CLK1 => '0', - CLKDIV => '0', - D1 => '1', - D2 => '0', - D3 => '0', - D4 => '0', - IOCE => pll_ce_0, - OCE => '1', - RST => int_sys_rst, - SHIFTIN1 => '0',--dqs_shiftout0_1, - SHIFTIN2 => '0',--dqs_shiftout0_2, - SHIFTIN3 => '0', - SHIFTIN4 => '0', - T1 => dqsIO_w_en_90_n, - T2 => dqsIO_w_en_90_p, - T3 => '0', - T4 => '0', - TCE => '1', - TRAIN => '0' - ); - --------- ---UDQSP --------- - - oserdeS2_UDQSP_0 : OSERDES2 - GENERIC MAP ( - BYPASS_GCLK_FF => TRUE, - DATA_RATE_OQ => C_OSERDES2_DATA_RATE_OQ, - DATA_RATE_OT => C_OSERDES2_DATA_RATE_OT, - OUTPUT_MODE => C_OSERDES2_OUTPUT_MODE_SE, - SERDES_MODE => C_OSERDES2_SERDES_MODE_MASTER, - DATA_WIDTH => 2 --- TRAIN_PATTERN => 0 - ) - PORT MAP ( - OQ => udqsp_oq, - SHIFTOUT1 => open,--udqs_shiftout0_1, - SHIFTOUT2 => open,--udqs_shiftout0_2, - SHIFTOUT3 => open, - SHIFTOUT4 => open, - TQ => udqsp_tq, - CLK0 => ioclk0, - CLK1 => '0', - CLKDIV => '0', - D1 => '0', - D2 => '1', - D3 => '0', - D4 => '0', - IOCE => pll_ce_0, - OCE => '1', - RST => int_sys_rst, - SHIFTIN1 => '0', - SHIFTIN2 => '0', - SHIFTIN3 => '0',--udqs_shiftout1_3, - SHIFTIN4 => '0',--udqs_shiftout1_4, - T1 => dqsIO_w_en_90_n, - t2 => dqsIO_w_en_90_p, - T3 => '0', - T4 => '0', - tce => '1', - train => '0' - ); - --------- ---UDQSN --------- - - oserdes2_udqsn_0 : OSERDES2 - GENERIC MAP ( - BYPASS_GCLK_FF => TRUE, - DATA_RATE_OQ => C_OSERDES2_DATA_RATE_OQ, - DATA_RATE_OT => C_OSERDES2_DATA_RATE_OT, - OUTPUT_MODE => C_OSERDES2_OUTPUT_MODE_SE, - SERDES_MODE => C_OSERDES2_SERDES_MODE_SLAVE, - DATA_WIDTH => 2 --- TRAIN_PATTERN => 0 - ) - PORT MAP ( - OQ => udqsn_oq, - SHIFTOUT1 => open, - SHIFTOUT2 => open, - SHIFTOUT3 => open,--udqs_shiftout1_3, - SHIFTOUT4 => open,--udqs_shiftout1_4, - TQ => udqsn_tq, - CLK0 => ioclk0, - CLK1 => '0', - CLKDIV => '0', - D1 => '1', - D2 => '0', - D3 => '0', - D4 => '0', - IOCE => pll_ce_0, - OCE => '1', - RST => int_sys_rst, - SHIFTIN1 => '0',--udqs_shiftout0_1, - SHIFTIN2 => '0',--udqs_shiftout0_2, - SHIFTIN3 => '0', - SHIFTIN4 => '0', - T1 => dqsIO_w_en_90_n, - T2 => dqsIO_w_en_90_p, - T3 => '0', - T4 => '0', - TCE => '1', - TRAIN => '0' - ); - ------------------------------------------------------- ---*********************************** OSERDES2 instantiations end ******************************************* ------------------------------------------------------- - ------------------------------------------------- ---&&&&&&&&&&&&&&&&&&&&&&&&&&& IODRP2 instantiations &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ------------------------------------------------- ----#####################################--X16 MEMORY WIDTH-############################################# - - dq_15_0_data : if (C_NUM_DQ_PINS = 16) GENERATE - ---//////////////////////////////////////////////// ---DQ14 ---//////////////////////////////////////////////// - - iodrp2_DQ_14 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ14_TAP_DELAY_VAL, - MCB_ADDRESS => 7, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_MASTER, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_14, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(14), - DQSOUTN => open, - DQSOUTP => in_dq(14), - SDO => open, - TOUT => t_dq(14), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_15, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(14), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(14), - SDI => ioi_drp_sdo, - T => dq_tq(14) - ); - ---//////////////////////////////////////////////// ---DQ15 ---//////////////////////////////////////////////// - - - iodrp2_dq_15 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ15_TAP_DELAY_VAL, - MCB_ADDRESS => 7, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_SLAVE, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_15, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(15), - DQSOUTN => open, - DQSOUTP => in_dq(15), - SDO => open, - TOUT => t_dq(15), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => '0', - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(15), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(15), - SDI => ioi_drp_sdo, - T => dq_tq(15) - ); - ---//////////////////////////////////////////////// ---DQ12 ---//////////////////////////////////////////////// - - iodrp2_DQ_12 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ12_TAP_DELAY_VAL, - MCB_ADDRESS => 6, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_MASTER, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_12, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(12), - DQSOUTN => open, - DQSOUTP => in_dq(12), - SDO => open, - TOUT => t_dq(12), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_13, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(12), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(12), - SDI => ioi_drp_sdo, - T => dq_tq(12) - ); - ---//////////////////////////////////////////////// ---DQ13 ---//////////////////////////////////////////////// - - iodrp2_dq_13 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ13_TAP_DELAY_VAL, - MCB_ADDRESS => 6, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_SLAVE, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_13, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(13), - DQSOUTN => open, - DQSOUTP => in_dq(13), - SDO => open, - TOUT => t_dq(13), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_14, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(13), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(13), - SDI => ioi_drp_sdo, - T => dq_tq(13) - ); - ---///////// ---UDQSP ---///////// - - iodrp2_UDQSP_0 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQS_IODRP2_DATA_RATE, - IDELAY_VALUE => UDQSP_TAP_DELAY_VAL, - MCB_ADDRESS => 14, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQS_IODRP2_SERDES_MODE_MASTER, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_udqsp, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_udqs, - DQSOUTN => open, - DQSOUTP => idelay_udqs_ioi_m, - SDO => open, - TOUT => t_udqs, - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_udqsn, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_udqsp, - IOCLK0 => ioclk0, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => udqsp_oq, - SDI => ioi_drp_sdo, - T => udqsp_tq - ); - ---///////// ---UDQSN ---///////// - - iodrp2_udqsn_0 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQS_IODRP2_DATA_RATE, - IDELAY_VALUE => UDQSN_TAP_DELAY_VAL, - MCB_ADDRESS => 14, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQS_IODRP2_SERDES_MODE_SLAVE, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_udqsn, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_udqsn, - DQSOUTN => open, - DQSOUTP => idelay_udqs_ioi_s, - SDO => open, - TOUT => t_udqsn, - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_12, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_udqsp, - IOCLK0 => ioclk0, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => udqsn_oq, - SDI => ioi_drp_sdo, - T => udqsn_tq - ); - ---///////////////////////////////////////////////// ---//DQ10 ---//////////////////////////////////////////////// - iodrp2_DQ_10 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ10_TAP_DELAY_VAL, - MCB_ADDRESS => 5, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_MASTER, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_10, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(10), - DQSOUTN => open, - DQSOUTP => in_dq(10), - SDO => open, - TOUT => t_dq(10), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_11, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(10), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(10), - SDI => ioi_drp_sdo, - T => dq_tq(10) - ); - ---///////////////////////////////////////////////// ---//DQ11 ---//////////////////////////////////////////////// - - iodrp2_dq_11 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ11_TAP_DELAY_VAL, - MCB_ADDRESS => 5, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_SLAVE, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_11, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(11), - DQSOUTN => open, - DQSOUTP => in_dq(11), - SDO => open, - TOUT => t_dq(11), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_udqsp, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(11), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(11), - SDI => ioi_drp_sdo, - T => dq_tq(11) - ); - ---///////////////////////////////////////////////// ---//DQ8 ---//////////////////////////////////////////////// - - iodrp2_DQ_8 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ8_TAP_DELAY_VAL, - MCB_ADDRESS => 4, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_MASTER, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_8, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(8), - DQSOUTN => open, - DQSOUTP => in_dq(8), - SDO => open, - TOUT => t_dq(8), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_9, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(8), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(8), - SDI => ioi_drp_sdo, - T => dq_tq(8) - ); - ---///////////////////////////////////////////////// ---//DQ9 ---//////////////////////////////////////////////// - - iodrp2_dq_9 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ9_TAP_DELAY_VAL, - MCB_ADDRESS => 4, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_SLAVE, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_9, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(9), - DQSOUTN => open, - DQSOUTP => in_dq(9), - SDO => open, - TOUT => t_dq(9), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_10, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(9), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(9), - SDI => ioi_drp_sdo, - T => dq_tq(9) - ); - ---///////////////////////////////////////////////// ---//DQ0 ---//////////////////////////////////////////////// - - iodrp2_DQ_0 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ0_TAP_DELAY_VAL, - MCB_ADDRESS => 0, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_MASTER, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_0, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(0), - DQSOUTN => open, - DQSOUTP => in_dq(0), - SDO => open, - TOUT => t_dq(0), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_1, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(0), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(0), - SDI => ioi_drp_sdo, - T => dq_tq(0) - ); - ---///////////////////////////////////////////////// ---//DQ1 ---//////////////////////////////////////////////// - - iodrp2_dq_1 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ1_TAP_DELAY_VAL, - MCB_ADDRESS => 0, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_SLAVE, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_1, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(1), - DQSOUTN => open, - DQSOUTP => in_dq(1), - SDO => open, - TOUT => t_dq(1), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_8, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(1), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(1), - SDI => ioi_drp_sdo, - T => dq_tq(1) - ); - ---///////////////////////////////////////////////// ---//DQ2 ---//////////////////////////////////////////////// - - iodrp2_DQ_2 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ2_TAP_DELAY_VAL, - MCB_ADDRESS => 1, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_MASTER, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_2, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(2), - DQSOUTN => open, - DQSOUTP => in_dq(2), - SDO => open, - TOUT => t_dq(2), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_3, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(2), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(2), - SDI => ioi_drp_sdo, - T => dq_tq(2) - ); - ---///////////////////////////////////////////////// ---//DQ3 ---//////////////////////////////////////////////// - - iodrp2_dq_3 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ3_TAP_DELAY_VAL, - MCB_ADDRESS => 1, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_SLAVE, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_3, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(3), - DQSOUTN => open, - DQSOUTP => in_dq(3), - SDO => open, - TOUT => t_dq(3), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_0, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(3), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(3), - SDI => ioi_drp_sdo, - T => dq_tq(3) - ); - ---///////// ---//DQSP ---///////// - - iodrp2_DQSP_0 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQS_IODRP2_DATA_RATE, - IDELAY_VALUE => LDQSP_TAP_DELAY_VAL, - MCB_ADDRESS => 15, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQS_IODRP2_SERDES_MODE_MASTER, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_dqsp, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dqs, - DQSOUTN => open, - DQSOUTP => idelay_dqs_ioi_m, - SDO => open, - TOUT => t_dqs, - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_dqsn, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dqsp, - IOCLK0 => ioclk0, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dqsp_oq, - SDI => ioi_drp_sdo, - T => dqsp_tq - ); - ---///////// ---//DQSN ---///////// - - iodrp2_dqsn_0 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQS_IODRP2_DATA_RATE, - IDELAY_VALUE => LDQSN_TAP_DELAY_VAL, - MCB_ADDRESS => 15, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQS_IODRP2_SERDES_MODE_SLAVE, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_dqsn, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dqsn, - DQSOUTN => open, - DQSOUTP => idelay_dqs_ioi_s, - SDO => open, - TOUT => t_dqsn, - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_2, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dqsp, - IOCLK0 => ioclk0, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dqsn_oq, - SDI => ioi_drp_sdo, - T => dqsn_tq - ); - ---///////////////////////////////////////////////// ---//DQ6 ---//////////////////////////////////////////////// - - iodrp2_DQ_6 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ6_TAP_DELAY_VAL, - MCB_ADDRESS => 3, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_MASTER, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_6, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(6), - DQSOUTN => open, - DQSOUTP => in_dq(6), - SDO => open, - TOUT => t_dq(6), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_7, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(6), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(6), - SDI => ioi_drp_sdo, - T => dq_tq(6) - ); - ---///////////////////////////////////////////////// ---//DQ7 ---//////////////////////////////////////////////// - - iodrp2_dq_7 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ7_TAP_DELAY_VAL, - MCB_ADDRESS => 3, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_SLAVE, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_7, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(7), - DQSOUTN => open, - DQSOUTP => in_dq(7), - SDO => open, - TOUT => t_dq(7), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_dqsp, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(7), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(7), - SDI => ioi_drp_sdo, - T => dq_tq(7) - ); - ---///////////////////////////////////////////////// ---//DQ4 ---//////////////////////////////////////////////// - - iodrp2_DQ_4 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ4_TAP_DELAY_VAL, - MCB_ADDRESS => 2, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_MASTER, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_4, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(4), - DQSOUTN => open, - DQSOUTP => in_dq(4), - SDO => open, - TOUT => t_dq(4), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_5, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(4), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(4), - SDI => ioi_drp_sdo, - T => dq_tq(4) - ); - ---///////////////////////////////////////////////// ---//DQ5 ---//////////////////////////////////////////////// - - iodrp2_dq_5 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ5_TAP_DELAY_VAL, - MCB_ADDRESS => 2, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_SLAVE, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_5, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(5), - DQSOUTN => open, - DQSOUTP => in_dq(5), - SDO => open, - TOUT => t_dq(5), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_6, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(5), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(5), - SDI => ioi_drp_sdo, - T => dq_tq(5) - ); - - - - ---///////////////////////////////////////////////// ---//UDM ---//////////////////////////////////////////////// - - iodrp2_dq_udm : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => 0, - MCB_ADDRESS => 8, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_MASTER, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => ioi_drp_sdi, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_udm, - DQSOUTN => open, - DQSOUTP => open, - SDO => open, - TOUT => t_udm, - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_ldm, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => '0', - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => udm_oq, - SDI => ioi_drp_sdo, - T => udm_t - ); - ---///////////////////////////////////////////////// ---//LDM ---//////////////////////////////////////////////// - - iodrp2_dq_ldm : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => 0, - MCB_ADDRESS => 8, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_SLAVE, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_ldm, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_ldm, - DQSOUTN => open, - DQSOUTP => open, - SDO => open, - TOUT => t_ldm, - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_4, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => '0', - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => ldm_oq, - SDI => ioi_drp_sdo, - T => ldm_t - ); - -end generate; - ----#####################################--X8 MEMORY WIDTH-############################################# - - dq_7_0_data : if (C_NUM_DQ_PINS = 8) GENERATE ---///////////////////////////////////////////////// ---//DQ0 ---//////////////////////////////////////////////// - iodrp2_DQ_0 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ0_TAP_DELAY_VAL, - MCB_ADDRESS => 0, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_MASTER, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_0, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(0), - DQSOUTN => open, - DQSOUTP => in_dq(0), - SDO => open, - TOUT => t_dq(0), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_1, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(0), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(0), - SDI => ioi_drp_sdo, - T => dq_tq(0) - ); - ---///////////////////////////////////////////////// ---//DQ1 ---//////////////////////////////////////////////// - - iodrp2_dq_1 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ1_TAP_DELAY_VAL, - MCB_ADDRESS => 0, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_SLAVE, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_1, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(1), - DQSOUTN => open, - DQSOUTP => in_dq(1), - SDO => open, - TOUT => t_dq(1), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => '0', - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(1), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(1), - SDI => ioi_drp_sdo, - T => dq_tq(1) - ); - ---///////////////////////////////////////////////// ---//DQ2 ---//////////////////////////////////////////////// - - iodrp2_DQ_2 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ2_TAP_DELAY_VAL, - MCB_ADDRESS => 1, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_MASTER, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_2, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(2), - DQSOUTN => open, - DQSOUTP => in_dq(2), - SDO => open, - TOUT => t_dq(2), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_3, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(2), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(2), - SDI => ioi_drp_sdo, - T => dq_tq(2) - ); - ---///////////////////////////////////////////////// ---//DQ3 ---//////////////////////////////////////////////// - - iodrp2_dq_3 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ3_TAP_DELAY_VAL, - MCB_ADDRESS => 1, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_SLAVE, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_3, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(3), - DQSOUTN => open, - DQSOUTP => in_dq(3), - SDO => open, - TOUT => t_dq(3), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_0, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(3), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(3), - SDI => ioi_drp_sdo, - T => dq_tq(3) - ); - ---///////// ---//DQSP ---///////// - - iodrp2_DQSP_0 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQS_IODRP2_DATA_RATE, - IDELAY_VALUE => LDQSP_TAP_DELAY_VAL, - MCB_ADDRESS => 15, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQS_IODRP2_SERDES_MODE_MASTER, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_dqsp, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dqs, - DQSOUTN => open, - DQSOUTP => idelay_dqs_ioi_m, - SDO => open, - TOUT => t_dqs, - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_dqsn, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dqsp, - IOCLK0 => ioclk0, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dqsp_oq, - SDI => ioi_drp_sdo, - T => dqsp_tq - ); - ---///////// ---//DQSN ---///////// - iodrp2_dqsn_0 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQS_IODRP2_DATA_RATE, - IDELAY_VALUE => LDQSN_TAP_DELAY_VAL, - MCB_ADDRESS => 15, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQS_IODRP2_SERDES_MODE_SLAVE, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_dqsn, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dqsn, - DQSOUTN => open, - DQSOUTP => idelay_dqs_ioi_s, - SDO => open, - TOUT => t_dqsn, - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_2, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dqsp, - IOCLK0 => ioclk0, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dqsn_oq, - SDI => ioi_drp_sdo, - T => dqsn_tq - ); - ---///////////////////////////////////////////////// ---//DQ6 ---//////////////////////////////////////////////// - - iodrp2_DQ_6 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ6_TAP_DELAY_VAL, - MCB_ADDRESS => 3, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_MASTER, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_6, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(6), - DQSOUTN => open, - DQSOUTP => in_dq(6), - SDO => open, - TOUT => t_dq(6), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_7, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(6), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(6), - SDI => ioi_drp_sdo, - T => dq_tq(6) - ); - ---///////////////////////////////////////////////// ---//DQ7 ---//////////////////////////////////////////////// - - iodrp2_dq_7 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ7_TAP_DELAY_VAL, - MCB_ADDRESS => 3, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_SLAVE, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_7, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(7), - DQSOUTN => open, - DQSOUTP => in_dq(7), - SDO => open, - TOUT => t_dq(7), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_dqsp, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(7), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(7), - SDI => ioi_drp_sdo, - T => dq_tq(7) - ); - ---///////////////////////////////////////////////// ---//DQ4 ---//////////////////////////////////////////////// - - iodrp2_DQ_4 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ4_TAP_DELAY_VAL, - MCB_ADDRESS => 2, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_MASTER, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_4, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(4), - DQSOUTN => open, - DQSOUTP => in_dq(4), - SDO => open, - TOUT => t_dq(4), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_5, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(4), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(4), - SDI => ioi_drp_sdo, - T => dq_tq(4) - ); ---///////////////////////////////////////////////// ---//DQ5 ---//////////////////////////////////////////////// - - - iodrp2_dq_5 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ5_TAP_DELAY_VAL, - MCB_ADDRESS => 2, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_SLAVE, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_5, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(5), - DQSOUTN => open, - DQSOUTP => in_dq(5), - SDO => open, - TOUT => t_dq(5), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_6, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(5), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(5), - SDI => ioi_drp_sdo, - T => dq_tq(5) - ); - - - ---NEED TO GENERATE UDM so that user won't instantiate in this location - ---///////////////////////////////////////////////// ---//UDM ---//////////////////////////////////////////////// - - iodrp2_dq_udm : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => 0, - MCB_ADDRESS => 8, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_MASTER, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => ioi_drp_sdi, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_udm, - DQSOUTN => open, - DQSOUTP => open, - SDO => open, - TOUT => t_udm, - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_ldm, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => '0', - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => udm_oq, - SDI => ioi_drp_sdo, - T => udm_t - ); - ---///////////////////////////////////////////////// ---//LDM ---//////////////////////////////////////////////// - - iodrp2_dq_ldm : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => 0, - MCB_ADDRESS => 8, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_SLAVE, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_ldm, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_ldm, - DQSOUTN => open, - DQSOUTP => open, - SDO => open, - TOUT => t_ldm, - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_4, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => '0', - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => ldm_oq, - SDI => ioi_drp_sdo, - T => ldm_t - ); - -end generate; - ----#####################################--X4 MEMORY WIDTH-############################################# - - dq_3_0_data : if (C_NUM_DQ_PINS = 4) GENERATE ---///////////////////////////////////////////////// ---//DQ0 ---//////////////////////////////////////////////// - - iodrp2_DQ_0 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ0_TAP_DELAY_VAL, - MCB_ADDRESS => 0, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_MASTER, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_0, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(0), - DQSOUTN => open, - DQSOUTP => in_dq(0), - SDO => open, - TOUT => t_dq(0), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_1, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(0), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(0), - SDI => ioi_drp_sdo, - T => dq_tq(0) - ); - - --///////////////////////////////////////////////// ---//DQ1 ---//////////////////////////////////////////////// - - iodrp2_dq_1 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ1_TAP_DELAY_VAL, - MCB_ADDRESS => 0, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_SLAVE, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_1, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(1), - DQSOUTN => open, - DQSOUTP => in_dq(1), - SDO => open, - TOUT => t_dq(1), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => '0', - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(1), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(1), - SDI => ioi_drp_sdo, - T => dq_tq(1) - ); - - --///////////////////////////////////////////////// ---//DQ2 ---//////////////////////////////////////////////// - - iodrp2_DQ_2 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ2_TAP_DELAY_VAL, - MCB_ADDRESS => 1, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_MASTER, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_2, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(2), - DQSOUTN => open, - DQSOUTP => in_dq(2), - SDO => open, - TOUT => t_dq(2), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_3, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(2), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(2), - SDI => ioi_drp_sdo, - T => dq_tq(2) - ); - ---///////////////////////////////////////////////// ---//DQ3 ---//////////////////////////////////////////////// - - iodrp2_dq_3 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => DQ3_TAP_DELAY_VAL, - MCB_ADDRESS => 1, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_SLAVE, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_3, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dq(3), - DQSOUTN => open, - DQSOUTP => in_dq(3), - SDO => open, - TOUT => t_dq(3), - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_0, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dq(3), - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dq_oq(3), - SDI => ioi_drp_sdo, - T => dq_tq(3) - ); - ---/////////////////////////////////////////////// ---DQSP ---/////////////////////////////////////////////// - iodrp2_DQSP_0 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQS_IODRP2_DATA_RATE, - IDELAY_VALUE => LDQSP_TAP_DELAY_VAL, - MCB_ADDRESS => 15, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQS_IODRP2_SERDES_MODE_MASTER, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_dqsp, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dqs, - DQSOUTN => open, - DQSOUTP => idelay_dqs_ioi_m, - SDO => open, - TOUT => t_dqs, - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_dqsn, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dqsp, - IOCLK0 => ioclk0, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dqsp_oq, - SDI => ioi_drp_sdo, - T => dqsp_tq - ); - ---/////////////////////////////////////////////// ---DQSN ---/////////////////////////////////////////////// - - iodrp2_dqsn_0 : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQS_IODRP2_DATA_RATE, - IDELAY_VALUE => LDQSN_TAP_DELAY_VAL, - MCB_ADDRESS => 15, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQS_IODRP2_SERDES_MODE_SLAVE, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_dqsn, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_dqsn, - DQSOUTN => open, - DQSOUTP => idelay_dqs_ioi_s, - SDO => open, - TOUT => t_dqsn, - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_2, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => in_pre_dqsp, - IOCLK0 => ioclk0, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => dqsn_oq, - SDI => ioi_drp_sdo, - T => dqsn_tq - ); ---/////////////////////////////////////////////// ---UDM ---////////////////////////////////////////////// - --NEED TO GENERATE UDM so that user won't instantiate in this location - - - iodrp2_dq_udm : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => 0, - MCB_ADDRESS => 8, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_MASTER, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => ioi_drp_sdi, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_udm, - DQSOUTN => open, - DQSOUTP => open, - SDO => open, - TOUT => t_udm, - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_ldm, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => '0', - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => udm_oq, - SDI => ioi_drp_sdo, - T => udm_t - ); - ---/////////////////////////////////////////////// ---LDM ---////////////////////////////////////////////// - - - iodrp2_dq_ldm : IODRP2_MCB - GENERIC MAP ( - DATA_RATE => C_DQ_IODRP2_DATA_RATE, - IDELAY_VALUE => 0, - MCB_ADDRESS => 8, - ODELAY_VALUE => 0, - SERDES_MODE => C_DQ_IODRP2_SERDES_MODE_SLAVE, - SIM_TAPDELAY_VALUE => 10 - ) - PORT MAP ( - AUXSDO => aux_sdi_out_ldm, - DATAOUT => open, - DATAOUT2 => open, - DOUT => ioi_ldm, - DQSOUTN => open, - DQSOUTP => open, - SDO => open, - TOUT => t_ldm, - ADD => ioi_drp_add, - AUXADDR => ioi_drp_addr, - AUXSDOIN => aux_sdi_out_4, - BKST => ioi_drp_broadcast, - CLK => ioi_drp_clk, - CS => ioi_drp_cs, - IDATAIN => '0', - IOCLK0 => ioclk90, - IOCLK1 => '0', - MEMUPDATE => ioi_drp_update, - ODATAIN => ldm_oq, - SDI => ioi_drp_sdo, - T => ldm_t - ); - -end generate; - ------------------------------------------------- ---&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& IODRP2 instantiations end &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ------------------------------------------------- - - -------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - --IOBs instantiations - -- this part need more inputs from design team - -- for now just use as listed in fpga.v - -----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - --- DRAM Address - gen_addr_obuft : FOR addr_i IN 0 TO C_MEM_ADDR_WIDTH - 1 GENERATE - iob_addr_inst : OBUFT - PORT MAP ( - I => ioi_addr(addr_i), - T => t_addr(addr_i), - O => mcbx_dram_addr(addr_i) - ); - END GENERATE; - - gen_ba_obuft : FOR ba_i IN 0 TO C_MEM_BANKADDR_WIDTH - 1 GENERATE - iob_ba_inst : OBUFT - PORT MAP ( - I => ioi_ba(ba_i), - T => t_ba(ba_i), - O => mcbx_dram_ba(ba_i) - ); - END GENERATE; - --- DRAM control ---RAS - iob_ras : OBUFT - PORT MAP ( - O => mcbx_dram_ras_n, - I => ioi_ras, - T => t_ras - ); - ---CAS - iob_cas : OBUFT - PORT MAP ( - O => mcbx_dram_cas_n, - I => ioi_cas, - T => t_cas - ); - ---WE - iob_we : OBUFT - PORT MAP ( - O => mcbx_dram_we_n, - I => ioi_we, - T => t_we - ); - ---CKE - iob_cke : OBUFT - PORT MAP ( - O => mcbx_dram_cke, - I => ioi_cke, - T => t_cke - ); - ---DDR3 RST - gen_ddr3_rst : IF (C_MEM_TYPE = "DDR3") GENERATE - iob_rst : OBUFT - PORT MAP ( - O => mcbx_dram_ddr3_rst, - I => ioi_rst, - T => t_rst - ); - END GENERATE; - ---ODT - gen_dram_odt : IF ((C_MEM_TYPE = "DDR3" AND (not(C_MEM_DDR3_RTT = "OFF") OR not(C_MEM_DDR3_DYN_WRT_ODT = "OFF"))) - OR (C_MEM_TYPE = "DDR2" AND not(C_MEM_DDR2_RTT = "OFF")) ) GENERATE - iob_odt : OBUFT - PORT MAP ( - O => mcbx_dram_odt, - I => ioi_odt, - t => t_odt - ); - END GENERATE; - ---MEMORY CLOCK - iob_clk : OBUFTDS - PORT MAP ( - I => ioi_ck, - T => t_ck, - O => mcbx_dram_clk, - OB => mcbx_dram_clk_n - ); - ---DQ - gen_dq_iobuft : FOR dq_i IN 0 TO C_NUM_DQ_PINS-1 GENERATE - gen_iob_dq_inst : IOBUF - PORT MAP ( - IO => mcbx_dram_dq(dq_i), - I => ioi_dq(dq_i), - T => t_dq(dq_i), - O => in_pre_dq(dq_i) - ); - END GENERATE; - --- x4 and x8 ---DQS -gen_dqs_iobuf : if((C_MEM_TYPE = "DDR" or C_MEM_TYPE = "MDDR" or (C_MEM_TYPE = "DDR2" and -(C_MEM_DDR2_DIFF_DQS_EN = "NO")))) generate - iob_dqs : IOBUF - PORT MAP ( - IO => mcbx_dram_dqs, - I => ioi_dqs, - T => t_dqs, - O => in_pre_dqsp - ); -end generate; - ---DQSP/DQSN -gen_dqs_iobufds : if((C_MEM_TYPE = "DDR3" or (C_MEM_TYPE = "DDR2" and -(C_MEM_DDR2_DIFF_DQS_EN = "YES")))) generate - iob_dqs : IOBUFDS - PORT MAP ( - IO => mcbx_dram_dqs, - IOB => mcbx_dram_dqs_n, - I => ioi_dqs, - T => t_dqs, - O => in_pre_dqsp - ); -end generate; - --- x16 ---UDQS -gen_udqs_iobuf : if((C_MEM_TYPE = "DDR" or C_MEM_TYPE = "MDDR" or (C_MEM_TYPE = "DDR2" and -(C_MEM_DDR2_DIFF_DQS_EN = "NO"))) and C_NUM_DQ_PINS = 16) generate - iob_udqs : IOBUF - PORT MAP ( - IO => mcbx_dram_udqs, - I => ioi_udqs, - T => t_udqs, - O => in_pre_udqsp - ); -end generate; - -----UDQSP/UDQSN -gen_udqs_iobufds : if((C_MEM_TYPE = "DDR3" or (C_MEM_TYPE = "DDR2" and -(C_MEM_DDR2_DIFF_DQS_EN = "YES"))) and C_NUM_DQ_PINS = 16) generate - iob_udqs : IOBUFDS - PORT MAP ( - IO => mcbx_dram_udqs, - IOB => mcbx_dram_udqs_n, - I => ioi_udqs, - T => t_udqs, - O => in_pre_udqsp - ); -end generate; - --- DQS PULLDWON -gen_dqs_pullupdn: if(C_MEM_TYPE = "DDR" or C_MEM_TYPE ="MDDR" or (C_MEM_TYPE = "DDR2" and (C_MEM_DDR2_DIFF_DQS_EN = "NO"))) generate -dqs_pulldown : PULLDOWN port map (O => mcbx_dram_dqs); -end generate; - -gen_dqs_pullupdn_ds : if((C_MEM_TYPE = "DDR3" or (C_MEM_TYPE = "DDR2" and -(C_MEM_DDR2_DIFF_DQS_EN = "YES")))) generate -dqs_pulldown :PULLDOWN port map (O => mcbx_dram_dqs); -dqs_n_pullup : PULLUP port map (O => mcbx_dram_dqs_n); -end generate; - --- DQSN PULLUP -gen_udqs_pullupdn : if((C_MEM_TYPE = "DDR" or C_MEM_TYPE = "MDDR" or (C_MEM_TYPE = "DDR2" and -(C_MEM_DDR2_DIFF_DQS_EN = "NO"))) and C_NUM_DQ_PINS = 16) generate -udqs_pulldown : PULLDOWN port map (O => mcbx_dram_udqs); -end generate; - -gen_udqs_pullupdn_ds : if ((C_NUM_DQ_PINS = 16) and not(C_MEM_TYPE = "DDR" or C_MEM_TYPE = "MDDR" or (C_MEM_TYPE = "DDR2" and - (C_MEM_DDR2_DIFF_DQS_EN = "NO"))) ) generate -udqs_pulldown :PULLDOWN port map (O => mcbx_dram_udqs); -udqs_n_pullup : PULLUP port map (O => mcbx_dram_udqs_n); -end generate; - ---UDM -gen_udm : if(C_NUM_DQ_PINS = 16) generate - iob_udm : OBUFT - PORT MAP ( - I => ioi_udm, - T => t_udm, - O => mcbx_dram_udm - ); -end generate; ---LDM - iob_ldm : OBUFT - PORT MAP ( - I => ioi_ldm, - T => t_ldm, - O => mcbx_dram_ldm - ); - - end aarch; -
ipcore_dir/mem0/user_design/rtl/mcb_raw_wrapper.vhd Property changes : Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Index: ipcore_dir/mem0/user_design/rtl/memc3_infrastructure.vhd =================================================================== --- ipcore_dir/mem0/user_design/rtl/memc3_infrastructure.vhd (revision 5) +++ ipcore_dir/mem0/user_design/rtl/memc3_infrastructure.vhd (nonexistent) @@ -1,281 +0,0 @@ ---***************************************************************************** --- (c) Copyright 2009 Xilinx, Inc. All rights reserved. --- --- This file contains confidential and proprietary information --- of Xilinx, Inc. and is protected under U.S. and --- international copyright and other intellectual property --- laws. --- --- DISCLAIMER --- This disclaimer is not a license and does not grant any --- rights to the materials distributed herewith. Except as --- otherwise provided in a valid license issued to you by --- Xilinx, and to the maximum extent permitted by applicable --- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND --- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES --- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING --- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- --- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and --- (2) Xilinx shall not be liable (whether in contract or tort, --- including negligence, or under any other theory of --- liability) for any loss or damage of any kind or nature --- related to, arising under or in connection with these --- materials, including for any direct, or any indirect, --- special, incidental, or consequential loss or damage --- (including loss of data, profits, goodwill, or any type of --- loss or damage suffered as a result of any action brought --- by a third party) even if such damage or loss was --- reasonably foreseeable or Xilinx had been advised of the --- possibility of the same. --- --- CRITICAL APPLICATIONS --- Xilinx products are not designed or intended to be fail- --- safe, or for use in any application requiring fail-safe --- performance, such as life-support or safety devices or --- systems, Class III medical devices, nuclear facilities, --- applications related to the deployment of airbags, or any --- other applications that could lead to death, personal --- injury, or severe property or environmental damage --- (individually and collectively, "Critical --- Applications"). Customer assumes the sole risk and --- liability of any use of Xilinx products in Critical --- Applications, subject only to applicable laws and --- regulations governing limitations on product liability. --- --- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS --- PART OF THIS FILE AT ALL TIMES. --- ---***************************************************************************** --- ____ ____ --- / /\/ / --- /___/ \ / Vendor : Xilinx --- \ \ \/ Version : 3.5 --- \ \ Application : MIG --- / / Filename : memc3_infrastructure.vhd --- /___/ /\ Date Last Modified : $Date: 2010/06/10 13:30:57 $ --- \ \ / \ Date Created : Jul 03 2009 --- \___\/\___\ --- ---Device : Spartan-6 ---Design Name : DDR/DDR2/DDR3/LPDDR ---Purpose : Clock generation/distribution and reset synchronization ---Reference : ---Revision History : ---***************************************************************************** -library ieee; -use ieee.std_logic_1164.all; -library unisim; -use unisim.vcomponents.all; - -entity memc3_infrastructure is -generic - ( - C_MEMCLK_PERIOD : integer := 2500; - C_RST_ACT_LOW : integer := 1; - C_INPUT_CLK_TYPE : string := "DIFFERENTIAL"; - C_CLKOUT0_DIVIDE : integer := 2; - C_CLKOUT1_DIVIDE : integer := 2; - C_CLKOUT2_DIVIDE : integer := 16; - C_CLKOUT3_DIVIDE : integer := 8; - C_CLKFBOUT_MULT : integer := 4; - C_DIVCLK_DIVIDE : integer := 1 - - ); -port -( - sys_clk_p : in std_logic; - sys_clk_n : in std_logic; - sys_clk : in std_logic; - sys_rst_n : in std_logic; - clk0 : out std_logic; - rst0 : out std_logic; - async_rst : out std_logic; - sysclk_2x : out std_logic; - sysclk_2x_180 : out std_logic; - mcb_drp_clk : out std_logic; - pll_ce_0 : out std_logic; - pll_ce_90 : out std_logic; - pll_lock : out std_logic - -); -end entity; -architecture syn of memc3_infrastructure is - - -- # of clock cycles to delay deassertion of reset. Needs to be a fairly - -- high number not so much for metastability protection, but to give time - -- for reset (i.e. stable clock cycles) to propagate through all state - -- machines and to all control signals (i.e. not all control signals have - -- resets, instead they rely on base state logic being reset, and the effect - -- of that reset propagating through the logic). Need this because we may not - -- be getting stable clock cycles while reset asserted (i.e. since reset - -- depends on PLL/DCM lock status) - - constant RST_SYNC_NUM : integer := 25; - constant CLK_PERIOD_NS : real := (real(C_MEMCLK_PERIOD)) / 1000.0; - constant CLK_PERIOD_INT : integer := C_MEMCLK_PERIOD/1000; - - - signal clk_2x_0 : std_logic; - signal clk_2x_180 : std_logic; - signal clk0_bufg : std_logic; - signal clk0_bufg_in : std_logic; - signal mcb_drp_clk_bufg_in : std_logic; - signal clkfbout_clkfbin : std_logic; - signal rst_tmp : std_logic; - signal sys_rst : std_logic; - signal rst0_sync_r : std_logic_vector(RST_SYNC_NUM-1 downto 0); - signal powerup_pll_locked : std_logic; - signal locked : std_logic; - signal bufpll_mcb_locked : std_logic; - signal mcb_drp_clk_sig : std_logic; - - attribute max_fanout : string; - attribute syn_maxfan : integer; - attribute KEEP : string; - attribute max_fanout of rst0_sync_r : signal is "10"; - attribute syn_maxfan of rst0_sync_r : signal is 10; - -begin - - sys_rst <= not(sys_rst_n) when (C_RST_ACT_LOW /= 0) else sys_rst_n; - clk0 <= clk0_bufg; - pll_lock <= bufpll_mcb_locked; - mcb_drp_clk <= mcb_drp_clk_sig; - - --*************************************************************************** - -- Global clock generation and distribution - --*************************************************************************** - - u_pll_adv : PLL_ADV - generic map - ( - BANDWIDTH => "OPTIMIZED", - CLKIN1_PERIOD => CLK_PERIOD_NS, - CLKIN2_PERIOD => CLK_PERIOD_NS, - CLKOUT0_DIVIDE => C_CLKOUT0_DIVIDE, - CLKOUT1_DIVIDE => C_CLKOUT1_DIVIDE, - CLKOUT2_DIVIDE => C_CLKOUT2_DIVIDE, - CLKOUT3_DIVIDE => C_CLKOUT3_DIVIDE, - CLKOUT4_DIVIDE => 1, - CLKOUT5_DIVIDE => 1, - CLKOUT0_PHASE => 0.000, - CLKOUT1_PHASE => 180.000, - CLKOUT2_PHASE => 0.000, - CLKOUT3_PHASE => 0.000, - CLKOUT4_PHASE => 0.000, - CLKOUT5_PHASE => 0.000, - CLKOUT0_DUTY_CYCLE => 0.500, - CLKOUT1_DUTY_CYCLE => 0.500, - CLKOUT2_DUTY_CYCLE => 0.500, - CLKOUT3_DUTY_CYCLE => 0.500, - CLKOUT4_DUTY_CYCLE => 0.500, - CLKOUT5_DUTY_CYCLE => 0.500, - COMPENSATION => "INTERNAL", - DIVCLK_DIVIDE => C_DIVCLK_DIVIDE, - CLKFBOUT_MULT => C_CLKFBOUT_MULT, - CLKFBOUT_PHASE => 0.0, - REF_JITTER => 0.005000 - ) - port map - ( - CLKFBIN => clkfbout_clkfbin, - CLKINSEL => '1', - CLKIN1 => sys_clk, - CLKIN2 => '0', - DADDR => (others => '0'), - DCLK => '0', - DEN => '0', - DI => (others => '0'), - DWE => '0', - REL => '0', - RST => sys_rst, - CLKFBDCM => open, - CLKFBOUT => clkfbout_clkfbin, - CLKOUTDCM0 => open, - CLKOUTDCM1 => open, - CLKOUTDCM2 => open, - CLKOUTDCM3 => open, - CLKOUTDCM4 => open, - CLKOUTDCM5 => open, - CLKOUT0 => clk_2x_0, - CLKOUT1 => clk_2x_180, - CLKOUT2 => clk0_bufg_in, - CLKOUT3 => mcb_drp_clk_bufg_in, - CLKOUT4 => open, - CLKOUT5 => open, - DO => open, - DRDY => open, - LOCKED => locked - ); - - U_BUFG_CLK0 : BUFG - port map - ( - O => clk0_bufg, - I => clk0_bufg_in - ); - - U_BUFG_CLK1 : BUFG - port map ( - O => mcb_drp_clk_sig, - I => mcb_drp_clk_bufg_in - ); - - process (clk0_bufg, sys_rst) - begin - if (clk0_bufg'event and clk0_bufg = '1') then - if(sys_rst = '1') then - powerup_pll_locked <= '0'; - elsif (bufpll_mcb_locked = '1') then - powerup_pll_locked <= '1'; - end if; - end if; - end process; - - --*************************************************************************** - -- Reset synchronization - -- NOTES: - -- 1. shut down the whole operation if the PLL hasn't yet locked (and - -- by inference, this means that external sys_rst has been asserted - - -- PLL deasserts LOCKED as soon as sys_rst asserted) - -- 2. asynchronously assert reset. This was we can assert reset even if - -- there is no clock (needed for things like 3-stating output buffers). - -- reset deassertion is synchronous. - -- 3. asynchronous reset only look at pll_lock from PLL during power up. After - -- power up and pll_lock is asserted, the powerup_pll_locked will be asserted - -- forever until sys_rst is asserted again. PLL will lose lock when FPGA - -- enters suspend mode. We don't want reset to MCB get - -- asserted in the application that needs suspend feature. - --*************************************************************************** - - rst_tmp <= sys_rst or not(powerup_pll_locked); - - async_rst <= rst_tmp; - -process (clk0_bufg, rst_tmp) - begin - if (rst_tmp = '1') then - rst0_sync_r <= (others => '1'); - elsif (rising_edge(clk0_bufg)) then - rst0_sync_r <= rst0_sync_r(RST_SYNC_NUM-2 downto 0) & '0'; -- logical left shift by one (pads with 0) - end if; - end process; - - rst0 <= rst0_sync_r(RST_SYNC_NUM-1); - - -BUFPLL_MCB_INST : BUFPLL_MCB -port map -( IOCLK0 => sysclk_2x, - IOCLK1 => sysclk_2x_180, - LOCKED => locked, - GCLK => mcb_drp_clk_sig, - SERDESSTROBE0 => pll_ce_0, - SERDESSTROBE1 => pll_ce_90, - PLLIN0 => clk_2x_0, - PLLIN1 => clk_2x_180, - LOCK => bufpll_mcb_locked - ); - -end architecture syn; - Index: ipcore_dir/mem0/user_design/par/mem_interface_top.ut =================================================================== --- ipcore_dir/mem0/user_design/par/mem_interface_top.ut (revision 5) +++ ipcore_dir/mem0/user_design/par/mem_interface_top.ut (nonexistent) @@ -1,22 +0,0 @@ --w --g DebugBitstream:No --g Binary:no --g CRC:Enable --g M2Pin:PullUp --g ProgPin:PullUp --g DonePin:PullUp --g TckPin:PullUp --g TdiPin:PullUp --g TdoPin:PullUp --g TmsPin:PullUp --g UnusedPin:PullNone --g UserID:0xFFFFFFFF --g StartUpClk:CClk --g DONE_cycle:4 --g GTS_cycle:5 --g GWE_cycle:6 --g LCK_cycle:NoWait --g Security:None --g DonePipe:No --g DriveDone:No --g ConfigRate:6 Index: ipcore_dir/mem0/user_design/par/mem0.ucf =================================================================== --- ipcore_dir/mem0/user_design/par/mem0.ucf (revision 5) +++ ipcore_dir/mem0/user_design/par/mem0.ucf (nonexistent) @@ -1,140 +0,0 @@ -############################################################################ -## -## Xilinx, Inc. 2006 www.xilinx.com -## Fri Aug 20 11:42:53 2010 -## Generated by MIG Version 3.5 -## -############################################################################ -## File name : mem0.ucf -## -## Details : Constraints file -## FPGA family: spartan6 -## FPGA: xc6slx16-ftg256 -## Speedgrade: -2 -## Design Entry: VHDL -## Design: without Test bench -## DCM Used: Enable -## Compatible FPGA's: xc6slx9-ftg256,xc6slx25-ftg256 -## No.Of Memory Controllers: 1 -## -############################################################################ -############################################################################ -# VCC AUX VOLTAGE -############################################################################ -CONFIG VCCAUX=2.5; # Valid values are 2.5 and 3.3 - -############################################################################ -# Extended MCB performance mode requires a different Vccint specification to -# achieve higher maximum frequencies for DDR2 and DDR3.Consult the Spartan-6 -#datasheet (DS162) table 2 and 24 for more information -############################################################################ -CONFIG MCB_PERFORMANCE= STANDARD; - - -################################################################################## -# Timing Ignore constraints for paths crossing the clock domain -################################################################################## -NET "memc?_wrapper_inst/memc?_mcb_raw_wrapper_inst/selfrefresh_mcb_mode" TIG; -NET "c?_pll_lock" TIG; - - -############################################################################ -## Memory Controller 3 -## Memory Device: DDR_SDRAM->MT46V32M16XX-5B-IT -## Frequency: 200 MHz -## Time Period: 5000 ps -## Supported Part Numbers: MT46V32M16BN-5B-IT -############################################################################ - -############################################################################ -## Clock constraints -############################################################################ -NET "memc3_infrastructure_inst/sys_clk_ibufg" TNM_NET = "SYS_CLK3"; -TIMESPEC "TS_SYS_CLK3" = PERIOD "SYS_CLK3" 5 ns HIGH 50 %; -############################################################################ - -############################################################################ -## I/O TERMINATION -############################################################################ -NET "mcb3_dram_dq[*]" IN_TERM = UNTUNED_SPLIT_50; -NET "mcb3_dram_dqs" IN_TERM = UNTUNED_SPLIT_50; -NET "mcb3_dram_udqs" IN_TERM = UNTUNED_SPLIT_50; - -############################################################################ -# I/O STANDARDS -############################################################################ - -NET "mcb3_dram_dq[*]" IOSTANDARD = SSTL2_II; -NET "mcb3_dram_a[*]" IOSTANDARD = SSTL2_II; -NET "mcb3_dram_ba[*]" IOSTANDARD = SSTL2_II; -NET "mcb3_dram_dqs" IOSTANDARD = SSTL2_II; -NET "mcb3_dram_udqs" IOSTANDARD = SSTL2_II; -NET "mcb3_dram_ck" IOSTANDARD = DIFF_SSTL2_II; -NET "mcb3_dram_ck_n" IOSTANDARD = DIFF_SSTL2_II; -NET "mcb3_dram_cke" IOSTANDARD = SSTL2_II; -NET "mcb3_dram_ras_n" IOSTANDARD = SSTL2_II; -NET "mcb3_dram_cas_n" IOSTANDARD = SSTL2_II; -NET "mcb3_dram_we_n" IOSTANDARD = SSTL2_II; -NET "mcb3_dram_dm" IOSTANDARD = SSTL2_II; -NET "mcb3_dram_udm" IOSTANDARD = SSTL2_II; -NET "mcb3_rzq" IOSTANDARD = SSTL2_II; -NET "c3_sys_clk" IOSTANDARD = LVCMOS25; -NET "c3_sys_rst_n" IOSTANDARD = LVCMOS25; -############################################################################ -# MCB 3 -# Pin Location Constraints for Clock, Masks, Address, and Controls -############################################################################ - -NET "mcb3_dram_a[0]" LOC = "K5" ; -NET "mcb3_dram_a[10]" LOC = "G6" ; -NET "mcb3_dram_a[11]" LOC = "E3" ; -NET "mcb3_dram_a[12]" LOC = "F3" ; -NET "mcb3_dram_a[1]" LOC = "K6" ; -NET "mcb3_dram_a[2]" LOC = "D1" ; -NET "mcb3_dram_a[3]" LOC = "L4" ; -NET "mcb3_dram_a[4]" LOC = "G5" ; -NET "mcb3_dram_a[5]" LOC = "H4" ; -NET "mcb3_dram_a[6]" LOC = "H3" ; -NET "mcb3_dram_a[7]" LOC = "D3" ; -NET "mcb3_dram_a[8]" LOC = "B2" ; -NET "mcb3_dram_a[9]" LOC = "A2" ; -NET "mcb3_dram_ba[0]" LOC = "C3" ; -NET "mcb3_dram_ba[1]" LOC = "C2" ; -NET "mcb3_dram_cas_n" LOC = "H5" ; -NET "mcb3_dram_ck" LOC = "E2" ; -NET "mcb3_dram_ck_n" LOC = "E1" ; -NET "mcb3_dram_cke" LOC = "F4" ; -NET "mcb3_dram_dm" LOC = "J4" ; -NET "mcb3_dram_dq[0]" LOC = "K2" ; -NET "mcb3_dram_dq[10]" LOC = "M2" ; -NET "mcb3_dram_dq[11]" LOC = "M1" ; -NET "mcb3_dram_dq[12]" LOC = "P2" ; -NET "mcb3_dram_dq[13]" LOC = "P1" ; -NET "mcb3_dram_dq[14]" LOC = "R2" ; -NET "mcb3_dram_dq[15]" LOC = "R1" ; -NET "mcb3_dram_dq[1]" LOC = "K1" ; -NET "mcb3_dram_dq[2]" LOC = "J3" ; -NET "mcb3_dram_dq[3]" LOC = "J1" ; -NET "mcb3_dram_dq[4]" LOC = "F2" ; -NET "mcb3_dram_dq[5]" LOC = "F1" ; -NET "mcb3_dram_dq[6]" LOC = "G3" ; -NET "mcb3_dram_dq[7]" LOC = "G1" ; -NET "mcb3_dram_dq[8]" LOC = "L3" ; -NET "mcb3_dram_dq[9]" LOC = "L1" ; -NET "mcb3_dram_dqs" LOC = "H2" ; -NET "mcb3_dram_ras_n" LOC = "J6" ; -NET "c3_sys_clk" LOC = "M9" ; -NET "c3_sys_rst_n" LOC = "P6" ; -NET "mcb3_dram_udm" LOC = "K3" ; -NET "mcb3_dram_udqs" LOC = "N3" ; -NET "mcb3_dram_we_n" LOC = "C1" ; - -################################################################################## -#RZQ is required for all MCB designs. Do not move the location # -#of this pin for ES devices.For production devices, RZQ can be moved to any # -#valid package pin within the MCB bank.For designs using Calibrated Input Termination, # -#a 2R resistor should be connected between RZQand ground, where R is the desired# -#input termination value. Otherwise, RZQ should be left as a no-connect (NC) pin.# -################################################################################## -NET "mcb3_rzq" LOC = "M4" ; - Index: ipcore_dir/mem0/user_design/par/readme.txt =================================================================== --- ipcore_dir/mem0/user_design/par/readme.txt (revision 5) +++ ipcore_dir/mem0/user_design/par/readme.txt (nonexistent) @@ -1,146 +0,0 @@ -::**************************************************************************** -:: (c) Copyright 2009 Xilinx, Inc. All rights reserved. -:: -:: This file contains confidential and proprietary information -:: of Xilinx, Inc. and is protected under U.S. and -:: international copyright and other intellectual property -:: laws. -:: -:: DISCLAIMER -:: This disclaimer is not a license and does not grant any -:: rights to the materials distributed herewith. Except as -:: otherwise provided in a valid license issued to you by -:: Xilinx, and to the maximum extent permitted by applicable -:: law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND -:: WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES -:: AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING -:: BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- -:: INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and -:: (2) Xilinx shall not be liable (whether in contract or tort, -:: including negligence, or under any other theory of -:: liability) for any loss or damage of any kind or nature -:: related to, arising under or in connection with these -:: materials, including for any direct, or any indirect, -:: special, incidental, or consequential loss or damage -:: (including loss of data, profits, goodwill, or any type of -:: loss or damage suffered as a result of any action brought -:: by a third party) even if such damage or loss was -:: reasonably foreseeable or Xilinx had been advised of the -:: possibility of the same. -:: -:: CRITICAL APPLICATIONS -:: Xilinx products are not designed or intended to be fail- -:: safe, or for use in any application requiring fail-safe -:: performance, such as life-support or safety devices or -:: systems, Class III medical devices, nuclear facilities, -:: applications related to the deployment of airbags, or any -:: other applications that could lead to death, personal -:: injury, or severe property or environmental damage -:: (individually and collectively, "Critical -:: Applications"). Customer assumes the sole risk and -:: liability of any use of Xilinx products in Critical -:: Applications, subject only to applicable laws and -:: regulations governing limitations on product liability. -:: -:: THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS -:: PART OF THIS FILE AT ALL TIMES. -:: -::**************************************************************************** -:: ____ ____ -:: / /\/ / -:: /___/ \ / Vendor : Xilinx -:: \ \ \/ Version : 3.5 -:: \ \ Application : MIG -:: / / Filename : readme.txt -:: /___/ /\ Date Last Modified : $Date: 2010/05/21 09:18:32 $ -:: \ \ / \ Date Created : Fri Feb 06 2009 -:: \___\/\___\ -:: -:: Device : Spartan-6 -:: Design Name : DDR/DDR2/DDR3/LPDDR -:: Purpose : Information about par folder -:: Reference : -:: Revision History : -::**************************************************************************** - -This folder has the batch files to synthesize using XST or Synplify Pro and -implement the design either in "Command Line Mode" or in "GUI Mode". - -Steps to run the design using the ise_flow (batch mode): - -1. Executing the "ise_flow.bat" file synthesizes the design using XST or - Synplify Pro and does implement the design. - a. First it removes the XST/Synplify Pro report files, implementation - files, supporting scripts, the generated chipscope designs (if - enabled) and the ISE project files (if exist any on previous runs) - b. Synthesizes the design either with XST or Synplicity - c. Implements the design with ISE. - -2. After the design is run, it creates ise_flow_results.txt file that will have - the ISE log information. - -Steps to run the design using the create_ise (GUI mode - for XST cases only): - -1. This file will appear for XST cases only. - -2. On executing the "create_ise.bat" file creates "test.xise" project file - and set all the properties of the design selected. - -3. The design can be implemented in ISE Projnav GUI by invoking the "test.xise" project file. - -4. In Linux operating systems, test.xise project can be invoked by executing the command - 'ise test.xise' from the terminal. - -Other files in PAR folder : - -* "mem0.ucf" file is the constraint file for the design. - It has clock constraints, location constraints and IO standards. - -* "mem_interface_top.ut" file has the options for the Configuration file - generation i.e. the "mem0.bit" file to run in batch mode. - -* "rem_files.bat" file has all the ISE/Synplify Pro generated report files, - implementation files, supporting scripts, the generated chipscope designs - (if enabled) and the ISE project files. - -* "set_ise_prop.tcl" file has all the properties that are to be - set in GUI mode. - -* "ise_run.txt" file has synthesis options for the XST tool. - This file is used for batch mode. - -* "icon_coregen.xco", "ila_coregen.xco" and "vio_coregen.xco"files are used to - generate ChipScope ila,vio and icon EDIF/NGC files. In order to generate the - EDIF/NGC files, you must execute the following commands before starting - synthesis and PAR. - - coregen -b ila_coregen.xco - coregen -b icon_coregen.xco - coregen -b vio_coregen.xco - -Note : When you generate the design using "Debug Signals for Memory Controller" - option Enable, the above mentioned ChipScope coregen commands are printed - into ise_flow.bat and create_ise.bat files. The mem0 rtl file - will have the design debug signals portmapped to vio and icon - ChipScope modules. - -* At the start of a Chip Scope Analyzer project, all of the signals in - every core have generic names. "mem0.cdc" is a file that contains - all the signal names of all cores. Upon importing this file, signal names are - renamed to the specified names in "mem0.cdc" file. This file will work - for the generated designs from MIG. If any of the design parameter values - are changed after generating the design, this file will not work. - For Multiple Controller designs, signal names provided in CDC file are of - the controller that is enabled for Debug in the GUI. - -synth folder: - -1. mem_interface_top_synp.sdc -2. script_synp.tcl -3. mem0.prj -4. mem0.lso - - mem_interface_top_synp.sdc and script_synp.tcl files are being used by - Synplify Pro and mem0.prj and mem0.lso are being used by XST. - - Index: ipcore_dir/mem0/user_design/par/ise_run.txt =================================================================== --- ipcore_dir/mem0/user_design/par/ise_run.txt (revision 5) +++ ipcore_dir/mem0/user_design/par/ise_run.txt (nonexistent) @@ -1,57 +0,0 @@ -set -tmpdir ../synth/__projnav -set -xsthdpdir ../synth/xst -run -#Source Parameters --ifn ../synth/mem0.prj --ifmt mixed --iuc No -#Target Parameters --ofn mem0 --ofmt NGC --p xc6slx16-2ftg256 -#Source Options --top mem0 --fsm_extract Yes --fsm_encoding Auto --safe_implementation No --fsm_style lut --ram_extract Yes --ram_style Auto --rom_extract Yes --rom_style Auto --shreg_extract Yes --resource_sharing Yes --async_to_sync no --mult_style auto --register_balancing No -#Target Options --iobuf Yes -#Max fanout value shouldn't be set below 64 for MCB design --max_fanout 500 --bufg 16 --register_duplication yes --optimize_primitives No --use_clock_enable Auto --use_sync_set Auto --use_sync_reset Auto --iob auto --equivalent_register_removal yes -#General Options --opt_mode Speed --opt_level 1 --lso ../synth/mem0.lso --keep_hierarchy NO --netlist_hierarchy as_optimized --rtlview Yes --glob_opt allclocknets --read_cores Yes --write_timing_constraints No --cross_clock_analysis No --hierarchy_separator / --bus_delimiter <> --case maintain --slice_utilization_ratio 100 --bram_utilization_ratio 100 --auto_bram_packing No --slice_utilization_ratio_maxmargin 5 -quit Index: ipcore_dir/mem0/user_design/par/set_ise_prop.tcl =================================================================== --- ipcore_dir/mem0/user_design/par/set_ise_prop.tcl (revision 5) +++ ipcore_dir/mem0/user_design/par/set_ise_prop.tcl (nonexistent) @@ -1,89 +0,0 @@ -project new test.xise - -project set "Device Family" "spartan6" - -project set "Device" "xc6slx16" - -project set "Package" "ftg256" - -project set "Speed Grade" "-2" - -project set "Synthesis Tool" "XST (VHDL/Verilog)" - -project set "Simulator" "ISim (VHDL/Verilog)" - -xfile add "../rtl/iodrp_controller.vhd" -xfile add "../rtl/iodrp_mcb_controller.vhd" -xfile add "../rtl/mcb_raw_wrapper.vhd" -xfile add "../rtl/mcb_soft_calibration.vhd" -xfile add "../rtl/mcb_soft_calibration_top.vhd" -xfile add "../rtl/mem0.vhd" -xfile add "../rtl/memc3_infrastructure.vhd" -xfile add "../rtl/memc3_wrapper.vhd" - -xfile add "mem0.ucf" - -project set "FSM Encoding Algorithm" "Auto" -process "Synthesize - XST" -project set "Safe Implementation" "No" -process "Synthesize - XST" -project set "FSM Style" "LUT" -process "Synthesize - XST" -project set "RAM Extraction" "True" -process "Synthesize - XST" -project set "RAM Style" "Auto" -process "Synthesize - XST" -project set "ROM Extraction" "True" -process "Synthesize - XST" -project set "ROM Style" "Auto" -process "Synthesize - XST" -project set "Resource Sharing" "True" -process "Synthesize - XST" -project set "Asynchronous To Synchronous" "False" -process "Synthesize - XST" -project set "Register Balancing" "No" -process "Synthesize - XST" -project set "Add I/O Buffers" "True" -process "Synthesize - XST" -project set "Max Fanout" "500" -process "Synthesize - XST" -project set "Number of Clock Buffers" "8" -process "Synthesize - XST" -project set "Register Duplication" "True" -process "Synthesize - XST" -project set "Optimize Instantiated Primitives" "False" -process "Synthesize - XST" -project set "Use Clock Enable" "Yes" -process "Synthesize - XST" -project set "Use Synchronous Set" "Yes" -process "Synthesize - XST" -project set "Use Synchronous Reset" "Yes" -process "Synthesize - XST" -project set "Pack I/O Registers into IOBs" "Auto" -process "Synthesize - XST" -project set "Equivalent Register Removal" "True" -process "Synthesize - XST" -project set "Optimization Goal" "Speed" -process "Synthesize - XST" -project set "Optimization Effort" "Normal" -process "Synthesize - XST" -project set "Library Search Order" "../synth/mem0.lso" -process "Synthesize - XST" -project set "Keep Hierarchy" "Soft" -process "Synthesize - XST" -project set "Netlist Hierarchy" "As Optimized" -process "Synthesize - XST" -project set "Generate RTL Schematic" "Yes" -process "Synthesize - XST" -project set "Global Optimization Goal" "AllClockNets" -process "Synthesize - XST" -project set "Read Cores" "True" -process "Synthesize - XST" -project set "Write Timing Constraints" "False" -process "Synthesize - XST" -project set "Cross Clock Analysis" "False" -process "Synthesize - XST" -project set "Hierarchy Separator" "/" -process "Synthesize - XST" -project set "Bus Delimiter" "<>" -process "Synthesize - XST" -project set "Case" "Maintain" -process "Synthesize - XST" -project set "BRAM Utilization Ratio" "100" -process "Synthesize - XST" -project set "Automatic BRAM Packing" "False" -process "Synthesize - XST" -project set "Pack I/O Registers/Latches into IOBs" "Off" -process Map - -project set "Place & Route Effort Level (Overall)" "Standard" -process "Place & Route" - -project set "Number of Paths in Error/Verbose Report" "100" -process "Generate Post-Map Static Timing" - -project set "Enable Debugging of Serial Mode BitStream" "False" -process "Generate Programming File" -project set "Create Binary Configuration File" "False" -process "Generate Programming File" -project set "Enable Cyclic Redundancy Checking (CRC)" "True" -process "Generate Programming File" -project set "Configuration Rate" "6" -process "Generate Programming File" -project set "Configuration Pin Program" "Pull Up" -process "Generate Programming File" -project set "Configuration Pin Done" "Pull Up" -process "Generate Programming File" -project set "JTAG Pin TCK" "Pull Up" -process "Generate Programming File" -project set "JTAG Pin TDI" "Pull Up" -process "Generate Programming File" -project set "JTAG Pin TDO" "Pull Up" -process "Generate Programming File" -project set "JTAG Pin TMS" "Pull Up" -process "Generate Programming File" -project set "Unused IOB Pins" "Float" -process "Generate Programming File" -project set "UserID Code (8 Digit Hexadecimal)" "0xFFFFFFFF" -process "Generate Programming File" -project set "FPGA Start-Up Clock" "CCLK" -process "Generate Programming File" -project set "Done (Output Events)" "Default (4)" -process "Generate Programming File" -project set "Enable Outputs (Output Events)" "Default (5)" -process "Generate Programming File" -project set "Release Write Enable (Output Events)" "Default (6)" -process "Generate Programming File" -project set "Enable Internal Done Pipe" "False" -process "Generate Programming File" -project set "Drive Done Pin High" "False" -process "Generate Programming File" -project set "Security" "Enable Readback and Reconfiguration" -process "Generate Programming File" - -project close - - Index: ipcore_dir/mem0/user_design/synth/mem0.lso =================================================================== --- ipcore_dir/mem0/user_design/synth/mem0.lso (revision 5) +++ ipcore_dir/mem0/user_design/synth/mem0.lso (nonexistent) @@ -1 +0,0 @@ -work Index: ipcore_dir/mem0/user_design/synth/mem_interface_top_synp.sdc =================================================================== --- ipcore_dir/mem0/user_design/synth/mem_interface_top_synp.sdc (revision 5) +++ ipcore_dir/mem0/user_design/synth/mem_interface_top_synp.sdc (nonexistent) @@ -1,20 +0,0 @@ -# Synplicity, Inc. constraint file -# Written on Mon Jun 27 15:50:39 2005 - -define_attribute {v:work.iodrp_controller} syn_hier {hard} -define_attribute {v:work.iodrp_mcb_controller} syn_hier {hard} -define_attribute {v:work.mcb_raw_wrapper} syn_hier {hard} -define_attribute {v:work.mcb_soft_calibration} syn_hier {hard} -define_attribute {v:work.mcb_soft_calibration_top} syn_hier {hard} -define_attribute {v:work.mem0} syn_hier {hard} -define_attribute {v:work.memc3_infrastructure} syn_hier {hard} -define_attribute {v:work.memc3_wrapper} syn_hier {hard} - -# clock Constraints -define_clock -disable -name {memc3_infrastructure_inst} -period 5000 -clockgroup default_clkgroup_1 -define_clock -name {memc3_infrastructure_inst.SYS_CLK_INST} -period 5000 -clockgroup default_clkgroup_2 -define_clock -disable -name {memc3_infrastructure_inst.u_pll_adv} -period 5000 -clockgroup default_clkgroup_3 - - - - Index: ipcore_dir/mem0/user_design/synth/script_synp.tcl =================================================================== --- ipcore_dir/mem0/user_design/synth/script_synp.tcl (revision 5) +++ ipcore_dir/mem0/user_design/synth/script_synp.tcl (nonexistent) @@ -1,39 +0,0 @@ -project -new -add_file -vhdl "../rtl/iodrp_controller.vhd" -add_file -vhdl "../rtl/iodrp_mcb_controller.vhd" -add_file -vhdl "../rtl/mcb_raw_wrapper.vhd" -add_file -vhdl "../rtl/mcb_soft_calibration.vhd" -add_file -vhdl "../rtl/mcb_soft_calibration_top.vhd" -add_file -vhdl "../rtl/mem0.vhd" -add_file -vhdl "../rtl/memc3_infrastructure.vhd" -add_file -vhdl "../rtl/memc3_wrapper.vhd" -add_file -constraint "../synth/mem_interface_top_synp.sdc" -impl -add rev_1 -set_option -technology spartan6 -set_option -part xc6slx16 -set_option -package ftg256 -set_option -speed_grade -2 -set_option -default_enum_encoding default -set_option -symbolic_fsm_compiler 1 -set_option -resource_sharing 0 -set_option -use_fsm_explorer 0 -set_option -top_module "mem0" -set_option -frequency 200 -set_option -fanout_limit 1000 -set_option -disable_io_insertion 0 -set_option -pipe 1 -set_option -fixgatedclocks 0 -set_option -retiming 0 -set_option -modular 0 -set_option -update_models_cp 0 -set_option -verification_mode 0 -set_option -write_verilog 0 -set_option -write_vhdl 0 -set_option -write_apr_constraint 0 -project -result_file "../synth/rev_1/mem0.edf" -set_option -vlog_std v2001 -set_option -auto_constrain_io 0 -impl -active "../synth/rev_1" -project -run -project -save -

powered by: WebSVN 2.1.0

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