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

Subversion Repositories ddr2_sdram

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /ddr2_sdram/trunk
    from Rev 1 to Rev 2
    Reverse comparison

Rev 1 → Rev 2

/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_rd_gray_cntr.vhd
0,0 → 1,147
--*****************************************************************************
-- 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 2005, 2006, 2007 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_rd_gray_cntr.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
--
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose : This module generates read address for the FIFOs.
--*****************************************************************************
 
-- fifo_rd_addr gray counter with synchronous reset
library ieee;
library UNISIM;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use UNISIM.VCOMPONENTS.all;
 
entity DDR2_Ram_Core_rd_gray_cntr is
port (
clk90 : in std_logic;
reset90 : in std_logic;
cnt_en : in std_logic;
rgc_gcnt : out std_logic_vector(3 downto 0)
);
end DDR2_Ram_Core_rd_gray_cntr;
 
architecture arc of DDR2_Ram_Core_rd_gray_cntr is
 
signal gc_int : std_logic_vector(3 downto 0);
signal d_in : std_logic_vector(3 downto 0);
signal reset90_r : std_logic;
 
begin
 
rgc_gcnt <= gc_int(3 downto 0);
process(clk90)
begin
if(clk90'event and clk90 = '1') then
reset90_r <= reset90;
end if;
end process;
 
process(gc_int)
begin
case gc_int is
when "0000" => d_in <= "0001"; --0 > 1
when "0001" => d_in <= "0011"; --1 > 3
when "0010" => d_in <= "0110"; --2 > 6
when "0011" => d_in <= "0010"; --3 > 2
when "0100" => d_in <= "1100"; --4 > c
when "0101" => d_in <= "0100"; --5 > 4
when "0110" => d_in <= "0111"; --6 > 7
when "0111" => d_in <= "0101"; --7 > 5
when "1000" => d_in <= "0000"; --8 > 0
when "1001" => d_in <= "1000"; --9 > 8
when "1010" => d_in <= "1011"; --10 > b
when "1011" => d_in <= "1001"; --11 > 9
when "1100" => d_in <= "1101"; --12 > d
when "1101" => d_in <= "1111"; --13 > f
when "1110" => d_in <= "1010"; --14 > a
when "1111" => d_in <= "1110"; --15 > e
when others => d_in <= "0001"; --0 > 1
end case;
end process;
 
bit0 : FDRE
port map (
Q => gc_int(0),
C => clk90,
CE => cnt_en,
D => d_in(0),
R => reset90_r
);
 
bit1 : FDRE
port map (
Q => gc_int(1),
C => clk90,
CE => cnt_en,
D => d_in(1),
R => reset90_r
);
 
bit2 : FDRE
port map (
Q => gc_int(2),
C => clk90,
CE => cnt_en,
D => d_in(2),
R => reset90_r
);
 
bit3 : FDRE
port map (
Q => gc_int(3),
C => clk90,
CE => cnt_en,
D => d_in(3),
R => reset90_r
);
end arc;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_controller_iobs_0.vhd
0,0 → 1,255
--*****************************************************************************
-- 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 2005, 2006, 2007, 2008 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_controller_iobs_0.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose : This module has the IOB instantiations to address and control
-- signals.
--*****************************************************************************
library ieee;
library UNISIM;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use UNISIM.VCOMPONENTS.all;
use work.DDR2_Ram_Core_parameters_0.all;
 
entity DDR2_Ram_Core_controller_iobs_0 is
port(
clk0 : in std_logic;
ddr_rasb_cntrl : in std_logic;
ddr_casb_cntrl : in std_logic;
ddr_web_cntrl : in std_logic;
ddr_cke_cntrl : in std_logic;
ddr_csb_cntrl : in std_logic;
ddr_odt_cntrl : in std_logic;
ddr_address_cntrl : in std_logic_vector((ROW_ADDRESS -1) downto 0);
ddr_ba_cntrl : in std_logic_vector((BANK_ADDRESS -1) downto 0);
rst_dqs_div_int : in std_logic;
ddr_odt : out std_logic;
ddr_rasb : out std_logic;
ddr_casb : out std_logic;
ddr_web : out std_logic;
ddr_ba : out std_logic_vector((BANK_ADDRESS -1) downto 0);
ddr_address : out std_logic_vector((ROW_ADDRESS -1) downto 0);
ddr_cke : out std_logic;
ddr_csb : out std_logic;
rst_dqs_div : out std_logic;
rst_dqs_div_in : in std_logic;
rst_dqs_div_out : out std_logic
);
end DDR2_Ram_Core_controller_iobs_0;
 
architecture arc of DDR2_Ram_Core_controller_iobs_0 is
 
signal ddr_web_q : std_logic;
signal ddr_rasb_q : std_logic;
signal ddr_casb_q : std_logic;
signal ddr_cke_q : std_logic;
signal ddr_cke_int : std_logic;
signal ddr_address_reg : std_logic_vector((ROW_ADDRESS -1) downto 0);
signal ddr_ba_reg : std_logic_vector((BANK_ADDRESS -1) downto 0);
signal ddr_odt_reg : std_logic;
signal clk180 : std_logic;
attribute iob : string;
attribute syn_useioff : boolean;
 
attribute iob of iob_rasb : label is "FORCE";
attribute iob of iob_casb : label is "FORCE";
attribute iob of iob_web : label is "FORCE";
attribute iob of iob_cke : label is "FORCE";
attribute iob of iob_odt : label is "FORCE";
attribute syn_useioff of iob_rasb : label is true;
attribute syn_useioff of iob_casb : label is true;
attribute syn_useioff of iob_web : label is true;
attribute syn_useioff of iob_cke : label is true;
attribute syn_useioff of iob_odt : label is true;
 
begin
 
clk180 <= not clk0;
 
---- ******************************************* ----
---- Includes the instantiation of FD for cntrl ----
---- signals ----
---- ******************************************* ----
 
iob_web : FD
port map (
Q => ddr_web_q,
D => ddr_web_cntrl,
C => clk180
);
 
iob_rasb : FD
port map (
Q => ddr_rasb_q,
D => ddr_rasb_cntrl,
C => clk180
);
 
iob_casb : FD
port map (
Q => ddr_casb_q,
D => ddr_casb_cntrl,
C => clk180
);
 
---- ************************************* ----
---- Output buffers for control signals ----
---- ************************************* ----
 
r16 : OBUF
port map (
I => ddr_web_q,
O => ddr_web
);
 
r17 : OBUF
port map (
I => ddr_rasb_q,
O => ddr_rasb
);
 
r18 : OBUF
port map (
I => ddr_casb_q,
O => ddr_casb
);
 
r19 : OBUF
port map (
I => ddr_csb_cntrl,
O => ddr_csb
);
 
iob_cke1 : FD
port map(
Q => ddr_cke_int,
D => ddr_cke_cntrl,
C => clk0
);
 
iob_cke : FD
port map(
Q => ddr_cke_q,
D => ddr_cke_int,
C => clk180
);
 
r20 : OBUF
port map (
I => ddr_cke_q,
O => ddr_cke
);
 
iob_odt : FD
port map (
Q => ddr_ODT_reg,
D => ddr_ODT_cntrl,
C => clk180
);
 
ODT_iob_obuf : OBUF
port map (
I => ddr_ODT_reg,
O => ddr_ODT
);
 
---- ******************************************* ----
---- Includes the instantiation of FD and OBUF ----
---- for row address and bank address ----
---- ******************************************* ----
 
gen_addr : for i in (ROW_ADDRESS -1) downto 0 generate
attribute IOB of iob_addr : label is "FORCE";
attribute syn_useioff of iob_addr : label is true;
begin
iob_addr : FD
port map (
Q => ddr_address_reg(i),
D => ddr_address_cntrl(i),
C => clk180
);
r : OBUF
port map (
I => ddr_address_reg(i),
O => ddr_address(i)
);
end generate;
 
gen_ba : for i in (BANK_ADDRESS -1) downto 0 generate
attribute IOB of iob_ba : label is "FORCE";
attribute syn_useioff of iob_ba : label is true;
begin
iob_ba : FD
port map (
Q => ddr_ba_reg(i),
D => ddr_ba_cntrl(i),
C => clk180
);
r : OBUF
port map (
I => ddr_ba_reg(i),
O => ddr_ba(i)
);
end generate;
 
rst_iob_inbuf : IBUF
port map(
I => rst_dqs_div_in,
O => rst_dqs_div
);
 
rst_iob_outbuf : OBUF
port map (
I => rst_dqs_div_int,
O => rst_dqs_div_out
);
 
end arc;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_infrastructure.vhd
0,0 → 1,110
--*****************************************************************************
-- 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 2005, 2006, 2007 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_infrastructure.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose :
--*****************************************************************************
 
library ieee;
library UNISIM;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use UNISIM.VCOMPONENTS.all;
 
 
entity DDR2_Ram_Core_infrastructure is
port(
delay_sel_val1_val : out std_logic_vector(4 downto 0);
delay_sel_val : in std_logic_vector(4 downto 0);
rst_calib1 : in std_logic;
clk_int : in std_logic;
-- debug signals
dbg_delay_sel : out std_logic_vector(4 downto 0);
dbg_rst_calib : out std_logic
);
end DDR2_Ram_Core_infrastructure;
 
architecture arc of DDR2_Ram_Core_infrastructure is
signal delay_sel_val1 : std_logic_vector(4 downto 0);
signal rst_calib1_r1 : std_logic;
signal rst_calib1_r2 : std_logic;
begin
 
delay_sel_val1_val <= delay_sel_val1;
dbg_delay_sel <= delay_sel_val1;
dbg_rst_calib <= rst_calib1_r2;
 
process(clk_int)
begin
if clk_int 'event and clk_int = '0' then
rst_calib1_r1 <= rst_calib1;
end if;
end process;
 
process(clk_int)
begin
if clk_int 'event and clk_int = '1' then
rst_calib1_r2 <= rst_calib1_r1;
end if;
end process;
 
process(clk_int)
begin
if clk_int 'event and clk_int = '1' then
if (rst_calib1_r2 = '0') then
delay_sel_val1 <= delay_sel_val;
else
delay_sel_val1 <= delay_sel_val1;
end if;
end if;
end process;
 
end arc;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core.vhd
0,0 → 1,289
--*****************************************************************************
-- 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 2005, 2006, 2007, 2008 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : %module_name.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose : This module has the instantiations infrastructure_top and
-- main modules.
--*****************************************************************************
 
library ieee;
library UNISIM;
use ieee.std_logic_1164.all;
use UNISIM.VCOMPONENTS.all;
 
entity DDR2_Ram_Core is
port (
cntrl0_ddr2_dq : inout std_logic_vector(15 downto 0);
cntrl0_ddr2_a : out std_logic_vector(12 downto 0);
cntrl0_ddr2_ba : out std_logic_vector(1 downto 0);
cntrl0_ddr2_cke : out std_logic;
cntrl0_ddr2_cs_n : out std_logic;
cntrl0_ddr2_ras_n : out std_logic;
cntrl0_ddr2_cas_n : out std_logic;
cntrl0_ddr2_we_n : out std_logic;
cntrl0_ddr2_odt : out std_logic;
cntrl0_ddr2_dm : out std_logic_vector(1 downto 0);
cntrl0_rst_dqs_div_in : in std_logic;
cntrl0_rst_dqs_div_out : out std_logic;
sys_clk_in : in std_logic;
reset_in_n : in std_logic;
cntrl0_burst_done : in std_logic;
cntrl0_init_done : out std_logic;
cntrl0_ar_done : out std_logic;
cntrl0_user_data_valid : out std_logic;
cntrl0_auto_ref_req : out std_logic;
cntrl0_user_cmd_ack : out std_logic;
cntrl0_user_command_register : in std_logic_vector(2 downto 0);
cntrl0_clk_tb : out std_logic;
cntrl0_clk90_tb : out std_logic;
cntrl0_sys_rst_tb : out std_logic;
cntrl0_sys_rst90_tb : out std_logic;
cntrl0_sys_rst180_tb : out std_logic;
cntrl0_user_output_data : out std_logic_vector(31 downto 0);
cntrl0_user_input_data : in std_logic_vector(31 downto 0);
cntrl0_user_data_mask : in std_logic_vector(3 downto 0);
cntrl0_user_input_address : in std_logic_vector(24 downto 0);
cntrl0_ddr2_dqs : inout std_logic_vector(1 downto 0);
cntrl0_ddr2_dqs_n : inout std_logic_vector(1 downto 0);
cntrl0_ddr2_ck : out std_logic_vector(0 downto 0);
cntrl0_ddr2_ck_n : out std_logic_vector(0 downto 0)
);
end DDR2_Ram_Core;
 
architecture arc_mem_interface_top of DDR2_Ram_Core is
 
ATTRIBUTE X_CORE_INFO : STRING;
ATTRIBUTE CORE_GENERATION_INFO : STRING;
 
ATTRIBUTE X_CORE_INFO of arc_mem_interface_top : ARCHITECTURE IS "mig_v3_61_ddr2_sp3, Coregen 12.4";
ATTRIBUTE CORE_GENERATION_INFO of arc_mem_interface_top : ARCHITECTURE IS "ddr2_sp3,mig_v3_61,{component_name=ddr2_sp3, data_width=16, memory_width=8, clk_width=1, bank_address=2, row_address=13, column_address=10, no_of_cs=1, cke_width=1, registered=0, data_mask=1, mask_enable=1, load_mode_register=0010100110010, ext_load_mode_register=0000000000000, language=VHDL, synthesis_tool=ISE, interface_type=DDR2_SDRAM, no_of_controllers=1}";
 
component DDR2_Ram_Core_top_0
port(
ddr2_dq : inout std_logic_vector(15 downto 0);
ddr2_a : out std_logic_vector(12 downto 0);
ddr2_ba : out std_logic_vector(1 downto 0);
ddr2_cke : out std_logic;
ddr2_cs_n : out std_logic;
ddr2_ras_n : out std_logic;
ddr2_cas_n : out std_logic;
ddr2_we_n : out std_logic;
ddr2_odt : out std_logic;
ddr2_dm : out std_logic_vector(1 downto 0);
rst_dqs_div_in : in std_logic;
rst_dqs_div_out : out std_logic;
burst_done : in std_logic;
init_done : out std_logic;
ar_done : out std_logic;
user_data_valid : out std_logic;
auto_ref_req : out std_logic;
user_cmd_ack : out std_logic;
user_command_register : in std_logic_vector(2 downto 0);
clk_tb : out std_logic;
clk90_tb : out std_logic;
sys_rst_tb : out std_logic;
sys_rst90_tb : out std_logic;
sys_rst180_tb : out std_logic;
user_output_data : out std_logic_vector(31 downto 0);
user_input_data : in std_logic_vector(31 downto 0);
user_data_mask : in std_logic_vector(3 downto 0);
user_input_address : in std_logic_vector(24 downto 0);
ddr2_dqs : inout std_logic_vector(1 downto 0);
ddr2_dqs_n : inout std_logic_vector(1 downto 0);
ddr2_ck : out std_logic_vector(0 downto 0);
ddr2_ck_n : out std_logic_vector(0 downto 0);
clk_int : in std_logic;
clk90_int : in std_logic;
wait_200us : in std_logic;
sys_rst : in std_logic;
sys_rst90 : in std_logic;
sys_rst180 : in std_logic;
delay_sel_val : in std_logic_vector(4 downto 0);
--Debug ports
 
dbg_delay_sel : out std_logic_vector(4 downto 0);
dbg_rst_calib : out std_logic;
vio_out_dqs : in std_logic_vector(4 downto 0);
vio_out_dqs_en : in std_logic;
vio_out_rst_dqs_div : in std_logic_vector(4 downto 0);
vio_out_rst_dqs_div_en : in std_logic
);
end component;
 
component DDR2_Ram_Core_infrastructure_top
port (
sys_clkb : in std_logic;
sys_clk : in std_logic;
sys_clk_in : in std_logic;
reset_in_n : in std_logic;
wait_200us : out std_logic;
delay_sel_val1_val : out std_logic_vector(4 downto 0);
sys_rst_val : out std_logic;
sys_rst90_val : out std_logic;
clk_int_val : out std_logic;
clk90_int_val : out std_logic;
sys_rst180_val : out std_logic;
dbg_phase_cnt : out std_logic_vector(4 downto 0);
dbg_cnt : out std_logic_vector(5 downto 0);
dbg_trans_onedtct : out std_logic;
dbg_trans_twodtct : out std_logic;
dbg_enb_trans_two_dtct : out std_logic
);
end component;
 
 
 
signal sys_rst : std_logic;
signal wait_200us : std_logic;
signal sys_rst90 : std_logic;
signal sys_rst180 : std_logic;
signal clk_0 : std_logic;
signal clk90_0 : std_logic;
signal delay_sel : std_logic_vector(4 downto 0);
-- debug signals
signal dbg_phase_cnt : std_logic_vector(4 downto 0);
signal dbg_cnt : std_logic_vector(5 downto 0);
signal dbg_trans_onedtct : std_logic;
signal dbg_trans_twodtct : std_logic;
signal dbg_enb_trans_two_dtct : std_logic;
signal dbg_delay_sel : std_logic_vector(4 downto 0);
signal dbg_rst_calib : std_logic;
-- chipscope signals
signal dbg_data : std_logic_vector(19 downto 0);
signal dbg_trig : std_logic_vector(3 downto 0);
signal control0 : std_logic_vector(35 downto 0);
signal control1 : std_logic_vector(35 downto 0);
signal vio_out_dqs : std_logic_vector(4 downto 0);
signal vio_out_dqs_en : std_logic;
signal vio_out_rst_dqs_div : std_logic_vector(4 downto 0);
signal vio_out_rst_dqs_div_en : std_logic;
signal vio_out : std_logic_vector(11 downto 0);
signal sys_clkb : std_logic;
signal sys_clk : std_logic;
 
begin
 
sys_clkb <= '0';
sys_clk <= '0';
 
top_00 : DDR2_Ram_Core_top_0
port map (
ddr2_dq => cntrl0_ddr2_dq,
ddr2_a => cntrl0_ddr2_a,
ddr2_ba => cntrl0_ddr2_ba,
ddr2_cke => cntrl0_ddr2_cke,
ddr2_cs_n => cntrl0_ddr2_cs_n,
ddr2_ras_n => cntrl0_ddr2_ras_n,
ddr2_cas_n => cntrl0_ddr2_cas_n,
ddr2_we_n => cntrl0_ddr2_we_n,
ddr2_odt => cntrl0_ddr2_odt,
ddr2_dm => cntrl0_ddr2_dm,
rst_dqs_div_in => cntrl0_rst_dqs_div_in,
rst_dqs_div_out => cntrl0_rst_dqs_div_out,
burst_done => cntrl0_burst_done,
init_done => cntrl0_init_done,
ar_done => cntrl0_ar_done,
user_data_valid => cntrl0_user_data_valid,
auto_ref_req => cntrl0_auto_ref_req,
user_cmd_ack => cntrl0_user_cmd_ack,
user_command_register => cntrl0_user_command_register,
clk_tb => cntrl0_clk_tb,
clk90_tb => cntrl0_clk90_tb,
sys_rst_tb => cntrl0_sys_rst_tb,
sys_rst90_tb => cntrl0_sys_rst90_tb,
sys_rst180_tb => cntrl0_sys_rst180_tb,
user_output_data => cntrl0_user_output_data,
user_input_data => cntrl0_user_input_data,
user_data_mask => cntrl0_user_data_mask,
user_input_address => cntrl0_user_input_address,
ddr2_dqs => cntrl0_ddr2_dqs,
ddr2_dqs_n => cntrl0_ddr2_dqs_n,
ddr2_ck => cntrl0_ddr2_ck,
ddr2_ck_n => cntrl0_ddr2_ck_n,
wait_200us => wait_200us,
delay_sel_val => delay_sel,
clk_int => clk_0,
clk90_int => clk90_0,
sys_rst => sys_rst,
sys_rst90 => sys_rst90,
sys_rst180 => sys_rst180,
 
--Debug signals
 
dbg_delay_sel => dbg_delay_sel,
dbg_rst_calib => dbg_rst_calib,
vio_out_dqs => vio_out_dqs,
vio_out_dqs_en => vio_out_dqs_en,
vio_out_rst_dqs_div => vio_out_rst_dqs_div,
vio_out_rst_dqs_div_en => vio_out_rst_dqs_div_en
);
 
infrastructure_top0 : DDR2_Ram_Core_infrastructure_top
port map (
wait_200us => wait_200us,
delay_sel_val1_val => delay_sel,
clk_int_val => clk_0,
clk90_int_val => clk90_0,
sys_rst_val => sys_rst,
sys_rst90_val => sys_rst90,
sys_rst180_val => sys_rst180,
dbg_phase_cnt => dbg_phase_cnt,
dbg_cnt => dbg_cnt,
dbg_trans_onedtct => dbg_trans_onedtct,
dbg_trans_twodtct => dbg_trans_twodtct,
dbg_enb_trans_two_dtct => dbg_enb_trans_two_dtct,
sys_clkb => sys_clkb,
sys_clk => sys_clk,
sys_clk_in => sys_clk_in,
reset_in_n => reset_in_n
);
 
 
 
end arc_mem_interface_top;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_data_path_iobs_0.vhd
0,0 → 1,173
--*****************************************************************************
-- 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 2005, 2006, 2007, 2008 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_parameters_0.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose : This module has the instantiations s3_dq_iob, s3_dqs_iob and
-- s3_dm_iob modules.
--*****************************************************************************
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
library UNISIM;
use UNISIM.VCOMPONENTS.all;
use work.DDR2_Ram_Core_parameters_0.all;
 
entity DDR2_Ram_Core_data_path_iobs_0 is
port(
clk : in std_logic;
clk90 : in std_logic;
dqs_reset : in std_logic;
dqs_enable : in std_logic;
ddr_dqs : inout std_logic_vector((DATA_STROBE_WIDTH -1) downto 0);
ddr_dqs_n : inout std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
ddr_dq : inout std_logic_vector((DATA_WIDTH-1) downto 0);
write_data_falling : in std_logic_vector((DATA_WIDTH-1) downto 0);
write_data_rising : in std_logic_vector((DATA_WIDTH-1) downto 0);
write_en_val : in std_logic;
data_mask_f : in std_logic_vector((DATA_MASK_WIDTH-1) downto 0);
data_mask_r : in std_logic_vector((DATA_MASK_WIDTH-1) downto 0);
dqs_int_delay_in : out std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
ddr_dm : out std_logic_vector((DATA_MASK_WIDTH-1) downto 0);
ddr_dq_val : out std_logic_vector((DATA_WIDTH-1) downto 0)
);
end DDR2_Ram_Core_data_path_iobs_0;
 
architecture arc of DDR2_Ram_Core_data_path_iobs_0 is
 
component DDR2_Ram_Core_s3_dqs_iob
port(
clk : in std_logic;
ddr_dqs_reset : in std_logic;
ddr_dqs_enable : in std_logic;
ddr_dqs : inout std_logic;
ddr_dqs_n : inout std_logic;
dqs : out std_logic
);
end component;
 
component DDR2_Ram_Core_s3_dq_iob
port (
ddr_dq_inout : inout std_logic; --Bi-directional SDRAM data bus
write_data_falling : in std_logic; --Transmit data, output on falling edge
write_data_rising : in std_logic; --Transmit data, output on rising edge
read_data_in : out std_logic; -- Received data
clk90 : in std_logic;
write_en_val : in std_logic
);
end component;
 
component DDR2_Ram_Core_s3_dm_iob
port (
ddr_dm : out std_logic;
mask_falling : in std_logic;
mask_rising : in std_logic;
clk90 : in std_logic
);
end component;
 
signal ddr_dq_in : std_logic_vector((DATA_WIDTH-1) downto 0);
 
begin
 
ddr_dq_val <= ddr_dq_in;
 
--***********************************************************************
-- DM IOB instantiations
--***********************************************************************
MASK_INST : if(MASK_ENABLE = 1) generate
begin
gen_dm: for dm_i in 0 to DATA_MASK_WIDTH-1 generate
s3_dm_iob_inst : DDR2_Ram_Core_s3_dm_iob
port map (
ddr_dm => ddr_dm(dm_i),
mask_falling => data_mask_f(dm_i),
mask_rising => data_mask_r(dm_i),
clk90 => clk90
);
end generate;
end generate MASK_INST;
 
--***********************************************************************
-- Read Data Capture Module Instantiations
--***********************************************************************
-- DQS IOB instantiations
--***********************************************************************
gen_dqs: for dqs_i in 0 to DATA_STROBE_WIDTH-1 generate
s3_dqs_iob_inst : DDR2_Ram_Core_s3_dqs_iob
port map (
clk => clk,
ddr_dqs_reset => dqs_reset,
ddr_dqs_enable => dqs_enable,
ddr_dqs => ddr_dqs(dqs_i),
ddr_dqs_n => ddr_dqs_n(dqs_i),
dqs => dqs_int_delay_in(dqs_i)
);
end generate;
 
 
 
--******************************************************************************
-- DDR Data bit instantiations
--******************************************************************************
 
gen_dq: for dq_i in 0 to DATA_WIDTH-1 generate
s3_dq_iob_inst : DDR2_Ram_Core_s3_dq_iob
port map (
ddr_dq_inout => ddr_dq(dq_i),
write_data_falling => write_data_falling(dq_i),
write_data_rising => write_data_rising(dq_i),
read_data_in => ddr_dq_in(dq_i),
clk90 => clk90,
write_en_val => write_en_val
);
end generate;
 
end arc;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_cal_top.vhd
0,0 → 1,134
--*****************************************************************************
-- 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 2005, 2006, 2007 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_cal_to.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose : This module has the instantiations cal_ctl and tap_dly.
--*****************************************************************************
 
library ieee;
library UNISIM;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use UNISIM.VCOMPONENTS.all;
 
entity DDR2_Ram_Core_cal_top is
port(
clk : in std_logic;
clk0dcmlock : in std_logic;
reset : in std_logic;
tapfordqs : out std_logic_vector(4 downto 0);
-- debug signals
dbg_phase_cnt : out std_logic_vector(4 downto 0);
dbg_cnt : out std_logic_vector(5 downto 0);
dbg_trans_onedtct : out std_logic;
dbg_trans_twodtct : out std_logic;
dbg_enb_trans_two_dtct : out std_logic
);
end DDR2_Ram_Core_cal_top;
 
architecture arc of DDR2_Ram_Core_cal_top is
 
ATTRIBUTE X_CORE_INFO : STRING;
ATTRIBUTE CORE_GENERATION_INFO : STRING;
 
ATTRIBUTE X_CORE_INFO of arc : ARCHITECTURE IS "mig_v3_61_ddr2_sp3, Coregen 12.4";
ATTRIBUTE CORE_GENERATION_INFO of arc : ARCHITECTURE IS "ddr2_sp3,mig_v3_61,{component_name=ddr2_sp3, data_width=16, memory_width=8, clk_width=1, bank_address=2, row_address=13, column_address=10, no_of_cs=1, cke_width=1, registered=0, data_mask=1, mask_enable=1, load_mode_register=0010100110010, ext_load_mode_register=0000000000000, language=VHDL, synthesis_tool=ISE, interface_type=DDR2_SDRAM, no_of_controllers=1}";
 
component DDR2_Ram_Core_cal_ctl
port (
clk : in std_logic;
reset : in std_logic;
flop2 : in std_logic_vector(31 downto 0);
tapfordqs : out std_logic_vector(4 downto 0);
dbg_phase_cnt : out std_logic_vector(4 downto 0);
dbg_cnt : out std_logic_vector(5 downto 0);
dbg_trans_onedtct : out std_logic;
dbg_trans_twodtct : out std_logic;
dbg_enb_trans_two_dtct : out std_logic
);
end component;
 
component DDR2_Ram_Core_tap_dly
port (
clk : in std_logic;
reset : in std_logic;
tapin : in std_logic;
flop2 : out std_logic_vector(31 downto 0)
);
end component;
 
signal fpga_rst : std_logic;
signal flop2_val : std_logic_vector(31 downto 0);
 
begin
 
fpga_rst <= (not reset) or (not clk0dcmlock);
 
cal_ctl0 : DDR2_Ram_Core_cal_ctl
port map(
clk => clk,
reset => fpga_rst,
flop2 => flop2_val,
tapfordqs => tapfordqs,
dbg_phase_cnt => dbg_phase_cnt,
dbg_cnt => dbg_cnt,
dbg_trans_onedtct => dbg_trans_onedtct,
dbg_trans_twodtct => dbg_trans_twodtct,
dbg_enb_trans_two_dtct => dbg_enb_trans_two_dtct
);
 
tap_dly0 : DDR2_Ram_Core_tap_dly
port map (
clk => clk,
reset => fpga_rst,
tapin => clk,
flop2 => flop2_val
);
 
end arc;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_top_0.vhd
0,0 → 1,379
--*****************************************************************************
-- 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 2005, 2006, 2007, 2008 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_top_0.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose : This modules has the instantiations infrastructure, iobs,
-- controller and data_paths modules
--*****************************************************************************
 
library ieee;
library UNISIM;
use ieee.std_logic_1164.all;
use work.DDR2_Ram_Core_parameters_0.all;
use UNISIM.VCOMPONENTS.all;
 
entity DDR2_Ram_Core_top_0 is
port(
wait_200us : in std_logic;
rst_dqs_div_in : in std_logic;
rst_dqs_div_out : out std_logic;
 
user_input_data : in std_logic_vector(((2*DATA_WIDTH)-1) downto 0);
user_data_mask : in std_logic_vector(((DATA_MASK_WIDTH*2)-1) downto 0);
user_output_data : out std_logic_vector(((2*DATA_WIDTH)-1)
downto 0) := (others => 'Z');
user_data_valid : out std_logic;
user_input_address : in std_logic_vector(((ROW_ADDRESS +
COLUMN_ADDRESS + BANK_ADDRESS)-1) downto 0);
user_command_register : in std_logic_vector(2 downto 0);
burst_done : in std_logic;
auto_ref_req : out std_logic;
user_cmd_ack : out std_logic;
init_done : out std_logic;
ar_done : out std_logic;
ddr2_dqs : inout std_logic_vector((DATA_STROBE_WIDTH -1) downto 0);
ddr2_dqs_n : inout std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
ddr2_dq : inout std_logic_vector((DATA_WIDTH-1) downto 0)
:= (others => 'Z');
ddr2_cke : out std_logic;
ddr2_cs_n : out std_logic;
ddr2_ras_n : out std_logic;
ddr2_cas_n : out std_logic;
ddr2_we_n : out std_logic;
ddr2_dm : out std_logic_vector((DATA_MASK_WIDTH-1) downto 0);
ddr2_ba : out std_logic_vector((BANK_ADDRESS-1) downto 0);
ddr2_a : out std_logic_vector((ROW_ADDRESS-1) downto 0);
ddr2_odt : out std_logic;
ddr2_ck : out std_logic_vector((CLK_WIDTH-1) downto 0);
ddr2_ck_n : out std_logic_vector((CLK_WIDTH-1) downto 0);
clk_tb : out std_logic;
clk90_tb : out std_logic;
sys_rst_tb : out std_logic;
sys_rst90_tb : out std_logic;
sys_rst180_tb : out std_logic;
clk_int : in std_logic;
clk90_int : in std_logic;
delay_sel_val : in std_logic_vector(4 downto 0);
sys_rst : in std_logic;
sys_rst90 : in std_logic;
sys_rst180 : in std_logic;
-- debug signals
dbg_delay_sel : out std_logic_vector(4 downto 0);
dbg_rst_calib : out std_logic;
vio_out_dqs : in std_logic_vector(4 downto 0);
vio_out_dqs_en : in std_logic;
vio_out_rst_dqs_div : in std_logic_vector(4 downto 0);
vio_out_rst_dqs_div_en : in std_logic
);
 
end DDR2_Ram_Core_top_0;
 
architecture arc of DDR2_Ram_Core_top_0 is
 
component DDR2_Ram_Core_controller_0
port(
auto_ref_req : out std_logic;
wait_200us : in std_logic;
clk : in std_logic;
rst0 : in std_logic;
rst180 : in std_logic;
address : in std_logic_vector(((ROW_ADDRESS + COLUMN_ADDRESS)-1)
downto 0);
bank_addr : in std_logic_vector((BANK_ADDRESS-1) downto 0);
command_register : in std_logic_vector(2 downto 0);
burst_done : in std_logic;
ddr_rasb_cntrl : out std_logic;
ddr_casb_cntrl : out std_logic;
ddr_web_cntrl : out std_logic;
ddr_ba_cntrl : out std_logic_vector((BANK_ADDRESS-1) downto 0);
ddr_address_cntrl : out std_logic_vector((ROW_ADDRESS-1) downto 0);
ddr_cke_cntrl : out std_logic;
ddr_csb_cntrl : out std_logic;
ddr_ODT_cntrl : out std_logic;
dqs_enable : out std_logic;
dqs_reset : out std_logic;
write_enable : out std_logic;
rst_calib : out std_logic;
rst_dqs_div_int : out std_logic;
cmd_ack : out std_logic;
init : out std_logic;
ar_done : out std_logic;
read_fifo_rden : out std_logic -- Added new signal
);
end component;
 
component DDR2_Ram_Core_data_path_0
port(
user_input_data : in std_logic_vector(((2*DATA_WIDTH)-1) downto 0);
user_data_mask : in std_logic_vector(((2*DATA_MASK_WIDTH)-1) downto 0);
clk : in std_logic;
clk90 : in std_logic;
reset : in std_logic;
reset90 : in std_logic;
write_enable : in std_logic;
rst_dqs_div_in : in std_logic;
delay_sel : in std_logic_vector(4 downto 0);
dqs_int_delay_in : in std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
dq : in std_logic_vector((DATA_WIDTH-1) downto 0);
u_data_val : out std_logic;
user_output_data : out std_logic_vector(((2*DATA_WIDTH)-1) downto 0);
write_en_val : out std_logic;
data_mask_f : out std_logic_vector((DATA_MASK_WIDTH-1) downto 0);
data_mask_r : out std_logic_vector((DATA_MASK_WIDTH-1) downto 0);
write_data_falling : out std_logic_vector((DATA_WIDTH-1) downto 0);
write_data_rising : out std_logic_vector((DATA_WIDTH-1) downto 0);
read_fifo_rden : in std_logic; -- Added new signal
-- debug singals
vio_out_dqs : in std_logic_vector(4 downto 0);
vio_out_dqs_en : in std_logic;
vio_out_rst_dqs_div : in std_logic_vector(4 downto 0);
vio_out_rst_dqs_div_en : in std_logic
 
);
end component;
 
component DDR2_Ram_Core_infrastructure
port(
clk_int : in std_logic;
rst_calib1 : in std_logic;
delay_sel_val : in std_logic_vector(4 downto 0);
delay_sel_val1_val : out std_logic_vector(4 downto 0);
-- debug signals
dbg_delay_sel : out std_logic_vector(4 downto 0);
dbg_rst_calib : out std_logic
);
end component;
component DDR2_Ram_Core_iobs_0
port(
clk : in std_logic;
clk90 : in std_logic;
ddr_rasb_cntrl : in std_logic;
ddr_casb_cntrl : in std_logic;
ddr_web_cntrl : in std_logic;
ddr_cke_cntrl : in std_logic;
ddr_csb_cntrl : in std_logic;
ddr_ODT_cntrl : in std_logic;
ddr_address_cntrl : in std_logic_vector((ROW_ADDRESS-1) downto 0);
ddr_ba_cntrl : in std_logic_vector((BANK_ADDRESS-1) downto 0);
rst_dqs_div_int : in std_logic;
dqs_reset : in std_logic;
dqs_enable : in std_logic;
ddr_dqs : inout std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
ddr_dqs_n : inout std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
ddr_dq : inout std_logic_vector((DATA_WIDTH-1) downto 0);
write_data_falling : in std_logic_vector((DATA_WIDTH-1) downto 0);
write_data_rising : in std_logic_vector((DATA_WIDTH-1) downto 0);
write_en_val : in std_logic;
data_mask_f : in std_logic_vector((DATA_MASK_WIDTH-1) downto 0);
data_mask_r : in std_logic_vector((DATA_MASK_WIDTH-1) downto 0);
ddr_odt : out std_logic;
ddr2_ck : out std_logic_vector((CLK_WIDTH-1) downto 0);
ddr2_ck_n : out std_logic_vector((CLK_WIDTH-1) downto 0);
ddr_rasb : out std_logic;
ddr_casb : out std_logic;
ddr_web : out std_logic;
ddr_ba : out std_logic_vector((BANK_ADDRESS-1) downto 0);
ddr_address : out std_logic_vector((ROW_ADDRESS-1) downto 0);
ddr_cke : out std_logic;
ddr_csb : out std_logic;
rst_dqs_div : out std_logic;
rst_dqs_div_in : in std_logic;
rst_dqs_div_out : out std_logic;
dqs_int_delay_in : out std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
ddr_dm : out std_logic_vector((DATA_MASK_WIDTH-1) downto 0);
dq : out std_logic_vector((DATA_WIDTH-1) downto 0)
);
end component;
signal rst_calib : std_logic;
signal delay_sel : std_logic_vector(4 downto 0);
signal write_enable : std_logic;
signal dqs_div_rst : std_logic;
signal dqs_enable : std_logic;
signal dqs_reset : std_logic;
signal dqs_int_delay_in : std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
signal dq : std_logic_vector((DATA_WIDTH-1) downto 0);
signal write_en_val : std_logic;
signal data_mask_f : std_logic_vector((DATA_MASK_WIDTH-1) downto 0);
signal data_mask_r : std_logic_vector((DATA_MASK_WIDTH-1) downto 0);
signal write_data_falling : std_logic_vector((DATA_WIDTH-1) downto 0);
signal write_data_rising : std_logic_vector((DATA_WIDTH-1) downto 0);
signal ddr_rasb_cntrl : std_logic;
signal ddr_casb_cntrl : std_logic;
signal ddr_web_cntrl : std_logic;
signal ddr_ba_cntrl : std_logic_vector((BANK_ADDRESS-1) downto 0);
signal ddr_address_cntrl : std_logic_vector((ROW_ADDRESS-1) downto 0);
signal ddr_cke_cntrl : std_logic;
signal ddr_csb_cntrl : std_logic;
signal ddr_odt_cntrl : std_logic;
signal rst_dqs_div_int : std_logic;
signal read_fifo_rden : std_logic;
begin
 
 
clk_tb <= clk_int after 1 ps;
clk90_tb <= clk90_int after 1 ps;
sys_rst_tb <= sys_rst;
sys_rst90_tb <= sys_rst90;
sys_rst180_tb <= sys_rst180;
 
controller0 : DDR2_Ram_Core_controller_0
port map (
auto_ref_req => auto_ref_req,
wait_200us => wait_200us,
clk => clk_int,
rst0 => sys_rst,
rst180 => sys_rst180,
address => user_input_address(((ROW_ADDRESS + COLUMN_ADDRESS +
BANK_ADDRESS)-1) downto BANK_ADDRESS),
bank_addr => user_input_address(BANK_ADDRESS-1 downto 0),
command_register => user_command_register,
burst_done => burst_done,
ddr_rasb_cntrl => ddr_rasb_cntrl,
ddr_casb_cntrl => ddr_casb_cntrl,
ddr_web_cntrl => ddr_web_cntrl,
ddr_ba_cntrl => ddr_ba_cntrl,
ddr_address_cntrl => ddr_address_cntrl,
ddr_cke_cntrl => ddr_cke_cntrl,
ddr_csb_cntrl => ddr_csb_cntrl,
ddr_odt_cntrl => ddr_odt_cntrl,
dqs_enable => dqs_enable,
dqs_reset => dqs_reset,
write_enable => write_enable,
rst_calib => rst_calib,
rst_dqs_div_int => rst_dqs_div_int,
cmd_ack => user_cmd_ack,
init => init_done,
ar_done => ar_done,
read_fifo_rden => read_fifo_rden -- Added new signal
);
 
data_path0 : DDR2_Ram_Core_data_path_0
port map (
user_input_data => user_input_data,
user_data_mask => user_data_mask,
clk => clk_int,
clk90 => clk90_int,
reset => sys_rst,
reset90 => sys_rst90,
write_enable => write_enable,
rst_dqs_div_in => dqs_div_rst,
delay_sel => delay_sel,
dqs_int_delay_in => dqs_int_delay_in,
dq => dq,
u_data_val => user_data_valid,
user_output_data => user_output_data,
write_en_val => write_en_val,
data_mask_f => data_mask_f,
data_mask_r => data_mask_r,
write_data_falling => write_data_falling,
write_data_rising => write_data_rising,
read_fifo_rden => read_fifo_rden, -- Added new signal
--debug signals
vio_out_dqs => vio_out_dqs,
vio_out_dqs_en => vio_out_dqs_en,
vio_out_rst_dqs_div => vio_out_rst_dqs_div,
vio_out_rst_dqs_div_en => vio_out_rst_dqs_div_en
);
 
infrastructure0 : DDR2_Ram_Core_infrastructure
port map (
clk_int => clk_int,
rst_calib1 => rst_calib,
delay_sel_val => delay_sel_val,
delay_sel_val1_val => delay_sel,
dbg_delay_sel => dbg_delay_sel,
dbg_rst_calib => dbg_rst_calib
);
 
iobs0 : DDR2_Ram_Core_iobs_0
port map (
clk => clk_int,
clk90 => clk90_int,
ddr_rasb_cntrl => ddr_rasb_cntrl,
ddr_casb_cntrl => ddr_casb_cntrl,
ddr_odt_cntrl => ddr_odt_cntrl,
ddr_web_cntrl => ddr_web_cntrl,
ddr_cke_cntrl => ddr_cke_cntrl,
ddr_csb_cntrl => ddr_csb_cntrl,
ddr_address_cntrl => ddr_address_cntrl,
ddr_ba_cntrl => ddr_ba_cntrl,
rst_dqs_div_int => rst_dqs_div_int,
dqs_reset => dqs_reset,
dqs_enable => dqs_enable,
ddr_dqs => ddr2_dqs,
ddr_dqs_n => ddr2_dqs_n,
ddr_dq => ddr2_dq,
write_data_falling => write_data_falling,
write_data_rising => write_data_rising,
write_en_val => write_en_val,
data_mask_f => data_mask_f,
data_mask_r => data_mask_r,
ddr_odt => ddr2_odt,
ddr2_ck => ddr2_ck,
ddr2_ck_n => ddr2_ck_n,
ddr_rasb => ddr2_ras_n,
ddr_casb => ddr2_cas_n,
ddr_web => ddr2_we_n,
ddr_ba => ddr2_ba,
ddr_address => ddr2_a,
ddr_cke => ddr2_cke,
ddr_csb => ddr2_cs_n,
rst_dqs_div => dqs_div_rst,
rst_dqs_div_in => rst_dqs_div_in,
rst_dqs_div_out => rst_dqs_div_out,
dqs_int_delay_in => dqs_int_delay_in,
ddr_dm => ddr2_dm,
dq => dq
);
 
end arc;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_parameters_0.vhd
0,0 → 1,94
--*****************************************************************************
-- 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 2005, 2006, 2007 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_parameters_0.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose : This module has the parameters used in the design
--*****************************************************************************
 
library ieee;
library UNISIM;
use ieee.std_logic_1164.all;
use UNISIM.VCOMPONENTS.all;
 
package DDR2_Ram_Core_parameters_0 is
 
-- The reset polarity is set to active low by default.
-- You can change this by editing the parameter RESET_ACTIVE_LOW.
-- Please do not change any of the other parameters directly by editing the RTL.
-- All other changes should be done through the GUI.
 
constant DATA_WIDTH : INTEGER := 16;
constant DATA_STROBE_WIDTH : INTEGER := 2;
constant DATA_MASK_WIDTH : INTEGER := 2;
constant CLK_WIDTH : INTEGER := 1;
constant CKE_WIDTH : INTEGER := 1;
constant ROW_ADDRESS : INTEGER := 13;
constant MEMORY_WIDTH : INTEGER := 8;
constant REGISTERED : INTEGER := 0;
constant DATABITSPERSTROBE : INTEGER := 8;
constant RESET_PORT : INTEGER := 0;
constant MASK_ENABLE : INTEGER := 1;
constant USE_DM_PORT : INTEGER := 1;
constant COLUMN_ADDRESS : INTEGER := 10;
constant BANK_ADDRESS : INTEGER := 2;
constant DEBUG_EN : INTEGER := 0;
constant CLK_TYPE : string := "SINGLE_ENDED";
constant LOAD_MODE_REGISTER : std_logic_vector(12 downto 0) := "0010100110010";
 
constant EXT_LOAD_MODE_REGISTER : std_logic_vector(12 downto 0) := "0000000000000";
 
constant RESET_ACTIVE_LOW : std_logic := '1';
constant RAS_COUNT_VALUE : std_logic_vector(4 downto 0) := "00101";
constant RP_COUNT_VALUE : std_logic_vector(2 downto 0) := "001";
constant RFC_COUNT_VALUE : std_logic_vector(7 downto 0) := "00001101";
constant TWR_COUNT_VALUE : std_logic_vector(2 downto 0) := "010";
constant MAX_REF_WIDTH : INTEGER := 10;
constant MAX_REF_CNT : std_logic_vector(9 downto 0) := "1111100111";
 
end DDR2_Ram_Core_parameters_0 ;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_data_read_0.vhd
0,0 → 1,247
--*****************************************************************************
-- 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 2005, 2006, 2007, 2008 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_data_read_0.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose : ram8d modules are instantiated for Read data FIFOs. ram8d is
-- each 8 bits or 4 bits depending on number data bits per strobe.
-- Each strobe will have two instances, one for rising edge data
-- and one for falling edge data.
--*****************************************************************************
library ieee;
library UNISIM;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use UNISIM.VCOMPONENTS.all;
use work.DDR2_Ram_Core_parameters_0.all;
 
entity DDR2_Ram_Core_data_read_0 is
port(
clk90 : in std_logic;
reset90 : in std_logic;
ddr_dq_in : in std_logic_vector((DATA_WIDTH-1) downto 0);
fifo_0_wr_en : in std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
fifo_1_wr_en : in std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
fifo_0_wr_addr : in std_logic_vector((4*DATA_STROBE_WIDTH)-1 downto 0);
fifo_1_wr_addr : in std_logic_vector((4*DATA_STROBE_WIDTH)-1 downto 0);
dqs_delayed_col0 : in std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
dqs_delayed_col1 : in std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
read_fifo_rden : in std_logic;
user_output_data : out std_logic_vector((2*DATA_WIDTH-1) downto 0);
u_data_val : out std_logic
);
end DDR2_Ram_Core_data_read_0;
 
architecture arc of DDR2_Ram_Core_data_read_0 is
 
component DDR2_Ram_Core_rd_gray_cntr
port (
clk90 : in std_logic;
reset90 : in std_logic;
cnt_en : in std_logic;
rgc_gcnt : out std_logic_vector(3 downto 0)
);
end component;
 
component DDR2_Ram_Core_ram8d_0 is
port (
DOUT : out std_logic_vector((DATABITSPERSTROBE -1) downto 0);
WADDR : in std_logic_vector(3 downto 0);
DIN : in std_logic_vector((DATABITSPERSTROBE -1) downto 0);
RADDR : in std_logic_vector(3 downto 0);
WCLK0 : in std_logic;
WCLK1 : in std_logic;
WE : in std_logic
);
end component;
 
signal fifo0_rd_addr : std_logic_vector(3 downto 0);
signal fifo1_rd_addr : std_logic_vector(3 downto 0);
 
signal first_sdr_data : std_logic_vector((2*DATA_WIDTH-1) downto 0);
signal reset90_r : std_logic;
signal fifo0_rd_addr_r : std_logic_vector((4*DATA_STROBE_WIDTH-1) downto 0);
signal fifo1_rd_addr_r : std_logic_vector((4*DATA_STROBE_WIDTH-1) downto 0);
signal fifo_0_data_out : std_logic_vector((DATA_WIDTH-1) downto 0);
signal fifo_1_data_out : std_logic_vector((DATA_WIDTH-1) downto 0);
signal fifo_0_data_out_r : std_logic_vector((DATA_WIDTH-1) downto 0);
signal fifo_1_data_out_r : std_logic_vector((DATA_WIDTH-1) downto 0);
signal dqs_delayed_col0_n : std_logic_vector((DATA_STROBE_WIDTH -1) downto 0);
signal dqs_delayed_col1_n : std_logic_vector((DATA_STROBE_WIDTH -1) downto 0);
 
signal read_fifo_rden_90r1 : std_logic;
signal read_fifo_rden_90r2 : std_logic;
signal read_fifo_rden_90r3 : std_logic;
signal read_fifo_rden_90r4 : std_logic;
signal read_fifo_rden_90r5 : std_logic;
signal read_fifo_rden_90r6 : std_logic;
 
attribute syn_preserve : boolean;
 
attribute syn_preserve of fifo0_rd_addr_r : signal is true;
attribute syn_preserve of fifo1_rd_addr_r : signal is true;
 
begin
 
process(clk90)
begin
if(clk90'event and clk90='1') then
reset90_r <= reset90;
end if;
end process;
 
gen_asgn : for asgn_i in 0 to DATA_STROBE_WIDTH-1 generate
dqs_delayed_col0_n(asgn_i) <= not dqs_delayed_col0(asgn_i);
dqs_delayed_col1_n(asgn_i) <= not dqs_delayed_col1(asgn_i);
end generate;
user_output_data <= first_sdr_data;
u_data_val <= read_fifo_rden_90r6;
 
-- Read fifo read enable signal phase is changed from 180 to 90 clock domain
 
process (clk90)
begin
if (rising_edge(clk90)) then
if reset90_r = '1' then
read_fifo_rden_90r1 <= '0';
read_fifo_rden_90r2 <= '0';
read_fifo_rden_90r3 <= '0';
read_fifo_rden_90r4 <= '0';
read_fifo_rden_90r5 <= '0';
read_fifo_rden_90r6<= '0';
else
read_fifo_rden_90r1 <= read_fifo_rden;
read_fifo_rden_90r2 <= read_fifo_rden_90r1;
read_fifo_rden_90r3 <= read_fifo_rden_90r2;
read_fifo_rden_90r4 <= read_fifo_rden_90r3;
read_fifo_rden_90r5 <= read_fifo_rden_90r4;
read_fifo_rden_90r6 <= read_fifo_rden_90r5;
end if;
end if;
end process;
 
 
process(clk90)
begin
if clk90'event and clk90 = '1' then
fifo_0_data_out_r <= fifo_0_data_out;
fifo_1_data_out_r <= fifo_1_data_out;
end if;
end process;
 
gen_addr : for addr_i in 0 to DATA_STROBE_WIDTH-1 generate
process(clk90)
begin
if clk90'event and clk90 = '1' then
fifo0_rd_addr_r((addr_i*4-1)+ 4 downto addr_i*4) <= fifo0_rd_addr;
fifo1_rd_addr_r((addr_i*4-1)+ 4 downto addr_i*4) <= fifo1_rd_addr;
end if;
end process;
end generate;
 
process(clk90)
begin
if clk90'event and clk90 = '1' then
if reset90_r = '1' then
first_sdr_data <= (others => '0');
elsif (read_fifo_rden_90r5 = '1') then
first_sdr_data <= (fifo_0_data_out_r & fifo_1_data_out_r);
else
first_sdr_data <= first_sdr_data;
end if;
end if;
end process;
 
------------------------------------------------------------------------------
-- fifo0_rd_addr and fifo1_rd_addr counters ( gray counters )
-------------------------------------------------------------------------------
 
fifo0_rd_addr_inst : DDR2_Ram_Core_rd_gray_cntr
port map (
clk90 => clk90,
reset90 => reset90,
cnt_en => read_fifo_rden_90r3,
rgc_gcnt => fifo0_rd_addr
);
fifo1_rd_addr_inst : DDR2_Ram_Core_rd_gray_cntr
port map (
clk90 => clk90,
reset90 => reset90,
cnt_en => read_fifo_rden_90r3,
rgc_gcnt => fifo1_rd_addr
);
 
-------------------------------------------------------------------------------
-- ram8d instantiations
-------------------------------------------------------------------------------
 
gen_strobe: for strobe_i in 0 to DATA_STROBE_WIDTH-1 generate
strobe : DDR2_Ram_Core_ram8d_0
Port Map (
dout => fifo_0_data_out((strobe_i*DATABITSPERSTROBE-1)+ DATABITSPERSTROBE downto strobe_i*DATABITSPERSTROBE),
waddr => fifo_0_wr_addr((strobe_i*4-1)+4 downto strobe_i*4),
din => ddr_dq_in((strobe_i*DATABITSPERSTROBE-1)+ DATABITSPERSTROBE downto strobe_i*DATABITSPERSTROBE),
raddr => fifo0_rd_addr_r((strobe_i*4-1)+4 downto strobe_i*4),
wclk0 => dqs_delayed_col0(strobe_i),
wclk1 => dqs_delayed_col1(strobe_i),
we => fifo_0_wr_en(strobe_i)
);
strobe_n : DDR2_Ram_Core_ram8d_0
Port Map (
dout => fifo_1_data_out((strobe_i*DATABITSPERSTROBE-1)+ DATABITSPERSTROBE downto strobe_i*DATABITSPERSTROBE),
waddr => fifo_1_wr_addr((strobe_i*4-1)+4 downto strobe_i*4),
din => ddr_dq_in((strobe_i*DATABITSPERSTROBE-1)+ DATABITSPERSTROBE downto strobe_i*DATABITSPERSTROBE),
raddr => fifo1_rd_addr_r((strobe_i*4-1)+4 downto strobe_i*4),
wclk0 => dqs_delayed_col0_n(strobe_i),
wclk1 => dqs_delayed_col1_n(strobe_i),
we => fifo_1_wr_en(strobe_i)
);
end generate;
 
end arc;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_dqs_delay_0.vhd
0,0 → 1,144
--*****************************************************************************
-- 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 2005, 2006, 2007 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_dqs_delay_0.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose : This module generate the delay in the dqs signal.
--*****************************************************************************
 
library ieee;
library UNISIM;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use UNISIM.VCOMPONENTS.all;
 
entity DDR2_Ram_Core_dqs_delay is
port (
clk_in : in std_logic;
sel_in : in std_logic_vector(4 downto 0);
clk_out : out std_logic
);
end DDR2_Ram_Core_dqs_delay;
 
architecture arc_dqs_delay of DDR2_Ram_Core_dqs_delay is
 
signal delay1 : std_logic;
signal delay2 : std_logic;
signal delay3 : std_logic;
signal delay4 : std_logic;
signal delay5 : std_logic;
signal high : std_logic;
 
attribute syn_preserve : boolean;
attribute syn_preserve of one : label is true;
attribute syn_preserve of two : label is true;
attribute syn_preserve of three : label is true;
attribute syn_preserve of four : label is true;
attribute syn_preserve of five : label is true;
attribute syn_preserve of six : label is true;
 
begin
 
high <= '1';
 
one : LUT4 generic map (INIT => x"f3c0")
port map (
I0 => high,
I1 => sel_in(4),
I2 => delay5,
I3 => clk_in,
O => clk_out
);
two : LUT4 generic map (INIT => x"ee22")
port map (
I0 => clk_in,
I1 => sel_in(2),
I2 => high,
I3 => delay3,
O => delay4
);
 
three : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => clk_in,
I1 => sel_in(0),
I2 => delay1,
I3 => high,
O => delay2
);
 
four : LUT4 generic map (INIT => x"ff00")
port map (
I0 => high,
I1 => high,
I2 => high,
I3 => clk_in,
O => delay1
);
 
five : LUT4 generic map (INIT => x"f3c0")
port map (
I0 => high,
I1 => sel_in(3),
I2 => delay4,
I3 => clk_in,
O => delay5
);
 
six : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => clk_in,
I1 => sel_in(1),
I2 => delay2,
I3 => high,
O => delay3
);
 
end arc_dqs_delay;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_s3_dqs_iob.vhd
0,0 → 1,148
--*****************************************************************************
-- 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 2005, 2006, 2007, 2008 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_s3_dqs_iob.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose : This module instantiates DDR IOB output flip-flops, an
-- output buffer with registered tri-state, and an input buffer
-- for a single strobe/dqs bit. The DDR IOB output flip-flops
-- are used to forward strobe to memory during a write. During
-- a read, the output of the IBUF is routed to the internal
-- delay module, dqs_delay.
--*****************************************************************************
 
library ieee;
use ieee.std_logic_1164.all;
library UNISIM;
use UNISIM.VCOMPONENTS.all;
 
entity DDR2_Ram_Core_s3_dqs_iob is
port(
clk : in std_logic;
ddr_dqs_reset : in std_logic;
ddr_dqs_enable : in std_logic;
ddr_dqs : inout std_logic;
ddr_dqs_n : inout std_logic;
dqs : out std_logic);
end DDR2_Ram_Core_s3_dqs_iob;
 
architecture arc of DDR2_Ram_Core_s3_dqs_iob is
 
 
signal dqs_q : std_logic;
signal ddr_dqs_enable1 : std_logic;
signal vcc : std_logic;
signal gnd : std_logic;
signal ddr_dqs_enable_b : std_logic;
signal data1 : std_logic;
signal clk180 : std_logic;
 
attribute IOB : string;
attribute syn_useioff : boolean;
attribute IOB of U1 : label is "FORCE";
attribute syn_useioff of U1 : label is true;
 
begin
 
--******************************************************************************
-- Output DDR generation. This includes instantiation of the output DDR flip flop.
-- Additionally, to keep synthesis tools from register sharing, manually
-- instantiate the output tri-state flip-flop.
--******************************************************************************
vcc <= '1';
gnd <= '0';
clk180 <= not clk;
ddr_dqs_enable_b <= not ddr_dqs_enable;
data1 <= '0' when ddr_dqs_reset = '1' else
'1';
 
U1 : FD
port map (
D => ddr_dqs_enable_b,
Q => ddr_dqs_enable1,
C => clk
);
 
 
U2 : FDDRRSE
port map (
Q => dqs_q,
C0 => clk,
C1 => clk180,
CE => vcc,
D0 => data1,
D1 => gnd,
R => gnd,
S => gnd
);
 
 
 
--***********************************************************************
-- IO buffer for dqs signal. Allows for distribution of dqs
-- to the data (DQ) loads.
--***********************************************************************
 
 
U3 : OBUFTDS port map (
I => dqs_q,
T => ddr_dqs_enable1,
O => ddr_dqs,
OB => ddr_dqs_n
);
 
U4 : IBUFDS port map(
I => ddr_dqs,
IB => ddr_dqs_n,
O => dqs
);
 
 
 
end arc;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_data_read_controller_0.vhd
0,0 → 1,274
--*****************************************************************************
-- 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 2005, 2006, 2007, 2008 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_data_read_controller_0.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Description : This module has instantiations fifo_0_wr_en, fifo_1_wr_en,
-- dqs_delay and wr_gray_cntr.
--*****************************************************************************
library ieee;
library UNISIM;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use UNISIM.VCOMPONENTS.all;
use work.DDR2_Ram_Core_parameters_0.all;
 
entity DDR2_Ram_Core_data_read_controller_0 is
port(
clk : in std_logic;
reset : in std_logic;
rst_dqs_div_in : in std_logic;
delay_sel : in std_logic_vector(4 downto 0);
dqs_int_delay_in : in std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
fifo_0_wr_en_val : out std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
fifo_1_wr_en_val : out std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
fifo_0_wr_addr_val : out std_logic_vector((4*DATA_STROBE_WIDTH)-1 downto 0);
fifo_1_wr_addr_val : out std_logic_vector((4*DATA_STROBE_WIDTH)-1 downto 0);
dqs_delayed_col0_val : out std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
dqs_delayed_col1_val : out std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
-- debug signals
vio_out_dqs : in std_logic_vector(4 downto 0);
vio_out_dqs_en : in std_logic;
vio_out_rst_dqs_div : in std_logic_vector(4 downto 0);
vio_out_rst_dqs_div_en: in std_logic
);
 
end DDR2_Ram_Core_data_read_controller_0;
 
architecture arc of DDR2_Ram_Core_data_read_controller_0 is
 
component DDR2_Ram_Core_dqs_delay
port (
clk_in : in std_logic;
sel_in : in std_logic_vector(4 downto 0);
clk_out : out std_logic
);
end component;
 
-- wr_gray_cntr is a gray counter with an ASYNC reset for fifo wr_addr
component DDR2_Ram_Core_wr_gray_cntr
port (
clk : in std_logic;
reset : in std_logic;
cnt_en : in std_logic;
wgc_gcnt : out std_logic_vector(3 downto 0)
);
end component;
 
-- fifo_wr_en module generates fifo write enable signal
-- enable is derived from rst_dqs_div signal
component DDR2_Ram_Core_fifo_0_wr_en_0
port (
clk : in std_logic;
reset : in std_logic;
din : in std_logic;
rst_dqs_delay_n : out std_logic;
dout : out std_logic
);
end component;
component DDR2_Ram_Core_fifo_1_wr_en_0
port (
clk : in std_logic;
rst_dqs_delay_n : in std_logic;
reset : in std_logic;
din : in std_logic;
dout : out std_logic
);
end component;
 
 
signal dqs_delayed_col0 : std_logic_vector((data_strobe_width-1) downto 0);
signal dqs_delayed_col1 : std_logic_vector((data_strobe_width-1) downto 0);
signal fifo_0_wr_addr : std_logic_vector((4*DATA_STROBE_WIDTH)-1 downto 0);
signal fifo_1_wr_addr : std_logic_vector((4*DATA_STROBE_WIDTH)-1 downto 0);
 
-- FIFO WRITE ENABLE SIGNALS
signal fifo_0_wr_en : std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
signal fifo_1_wr_en : std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
 
signal rst_dqs_div : std_logic;
signal reset_r : std_logic;
signal rst_dqs_delay_0_n : std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
signal dqs_delayed_col0_n : std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
signal dqs_delayed_col1_n : std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
signal delay_sel_rst_dqs_div : std_logic_vector(4 downto 0);
signal delay_sel_dqs : std_logic_vector(4 downto 0);
 
attribute syn_preserve : boolean;
attribute buffer_type : string;
attribute buffer_type of dqs_delayed_col0: signal is "none";
attribute buffer_type of dqs_delayed_col1: signal is "none";
 
begin
 
process(clk)
begin
if(clk'event and clk = '1') then
reset_r <= reset;
end if;
end process;
 
 
fifo_0_wr_addr_val <= fifo_0_wr_addr;
fifo_1_wr_addr_val <= fifo_1_wr_addr;
fifo_0_wr_en_val <= fifo_0_wr_en;
fifo_1_wr_en_val <= fifo_1_wr_en;
dqs_delayed_col0_val <= dqs_delayed_col0 ;
dqs_delayed_col1_val <= dqs_delayed_col1 ;
 
gen_asgn : for asgn_i in 0 to DATA_STROBE_WIDTH-1 generate
dqs_delayed_col0_n(asgn_i) <= not dqs_delayed_col0(asgn_i);
dqs_delayed_col1_n(asgn_i) <= not dqs_delayed_col1(asgn_i);
end generate;
 
 
debug_rst_dqs_div_ena : if (DEBUG_EN = 1) generate
delay_sel_rst_dqs_div <= vio_out_rst_dqs_div(4 downto 0) when (vio_out_rst_dqs_div_en = '1')
else delay_sel;
end generate;
 
debug_rst_dqs_div_dis : if (DEBUG_EN = 0) generate
delay_sel_rst_dqs_div <= delay_sel;
end generate;
 
 
-- delayed rst_dqs_div logic
 
rst_dqs_div_delayed : DDR2_Ram_Core_dqs_delay
port map (
clk_in => rst_dqs_div_in,
sel_in => delay_sel_rst_dqs_div,
clk_out => rst_dqs_div
);
 
 
debug_ena : if (DEBUG_EN = 1) generate
delay_sel_dqs <= vio_out_dqs(4 downto 0) when (vio_out_dqs_en = '1')
else delay_sel;
end generate;
 
debug_dis : if (DEBUG_EN = 0) generate
delay_sel_dqs <= delay_sel;
end generate;
 
 
--******************************************************************************
-- DQS Internal Delay Circuit implemented in LUTs
--******************************************************************************
gen_delay: for dly_i in 0 to DATA_STROBE_WIDTH-1 generate
attribute syn_preserve of dqs_delay_col0: label is true;
attribute syn_preserve of dqs_delay_col1: label is true;
begin
-- Internal Clock Delay circuit placed in the first
-- column (for falling edge data) adjacent to IOBs
dqs_delay_col0 : DDR2_Ram_Core_dqs_delay
port map (
clk_in => dqs_int_delay_in(dly_i),
sel_in => delay_sel_dqs,
clk_out => dqs_delayed_col0(dly_i)
);
-- Internal Clock Delay circuit placed in the second
--column (for rising edge data) adjacent to IOBs
dqs_delay_col1 : DDR2_Ram_Core_dqs_delay
port map (
clk_in => dqs_int_delay_in(dly_i),
sel_in => delay_sel_dqs,
clk_out => dqs_delayed_col1(dly_i)
);
end generate;
 
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
 
gen_wr_en: for wr_en_i in 0 to DATA_STROBE_WIDTH-1 generate
fifo_0_wr_en_inst: DDR2_Ram_Core_fifo_0_wr_en_0
port map (
clk => dqs_delayed_col1_n (wr_en_i),
reset => reset_r,
din => rst_dqs_div,
rst_dqs_delay_n => rst_dqs_delay_0_n(wr_en_i),
dout => fifo_0_wr_en(wr_en_i)
);
fifo_1_wr_en_inst: DDR2_Ram_Core_fifo_1_wr_en_0
port map (
clk => dqs_delayed_col0(wr_en_i),
rst_dqs_delay_n => rst_dqs_delay_0_n(wr_en_i),
reset => reset_r,
din => rst_dqs_div,
dout => fifo_1_wr_en(wr_en_i)
);
end generate;
 
-------------------------------------------------------------------------------
-- write pointer gray counter instances
-------------------------------------------------------------------------------
 
gen_wr_addr: for wr_addr_i in 0 to DATA_STROBE_WIDTH-1 generate
fifo_0_wr_addr_inst : DDR2_Ram_Core_wr_gray_cntr
port map (
clk => dqs_delayed_col1(wr_addr_i),
reset => reset_r,
cnt_en => fifo_0_wr_en(wr_addr_i),
wgc_gcnt => fifo_0_wr_addr((wr_addr_i*4-1)+4 downto wr_addr_i*4)
);
fifo_1_wr_addr_inst : DDR2_Ram_Core_wr_gray_cntr
port map (
clk => dqs_delayed_col0_n(wr_addr_i),
reset => reset_r,
cnt_en => fifo_1_wr_en(wr_addr_i),
wgc_gcnt => fifo_1_wr_addr((wr_addr_i*4-1)+4 downto wr_addr_i*4)
);
end generate;
 
end arc;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_ram8d_0.vhd
0,0 → 1,215
--*****************************************************************************
-- 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 2005, 2006, 2007 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_ram8d_0.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose : This module instantiates RAM16X1 premitives. There will be 8 or 4 RAM16X1
-- instances depending on the number of data bits per strobe.
--*****************************************************************************
 
library IEEE;
library UNISIM;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
use UNISIM.VCOMPONENTS.all;
use work.DDR2_Ram_Core_parameters_0.all;
 
entity DDR2_Ram_Core_ram8d_0 is
port (
dout : out std_logic_vector((DATABITSPERSTROBE -1) downto 0);
waddr : in std_logic_vector(3 downto 0);
din : in std_logic_vector((DATABITSPERSTROBE -1) downto 0);
raddr : in std_logic_vector(3 downto 0);
wclk0 : in std_logic;
wclk1 : in std_logic;
we : in std_logic
);
end DDR2_Ram_Core_ram8d_0;
 
architecture arc of DDR2_Ram_Core_ram8d_0 is
 
begin
 
fifo_bit0 : RAM16X1D
port map (
DPO => dout(0),
A0 => waddr(0),
A1 => waddr(1),
A2 => waddr(2),
A3 => waddr(3),
D => din(0),
DPRA0 => raddr(0),
DPRA1 => raddr(1),
DPRA2 => raddr(2),
DPRA3 => raddr(3),
WCLK => wclk1,
SPO => OPEN,
WE => we
);
 
fifo_bit1 : RAM16X1D
port map (
DPO => dout(1),
A0 => waddr(0),
A1 => waddr(1),
A2 => waddr(2),
A3 => waddr(3),
D => din(1),
DPRA0 => raddr(0),
DPRA1 => raddr(1),
DPRA2 => raddr(2),
DPRA3 => raddr(3),
WCLK => wclk0,
SPO => OPEN,
WE => we
);
 
fifo_bit2 : RAM16X1D
port map (
DPO => dout(2),
A0 => waddr(0),
A1 => waddr(1),
A2 => waddr(2),
A3 => waddr(3),
D => din(2),
DPRA0 => raddr(0),
DPRA1 => raddr(1),
DPRA2 => raddr(2),
DPRA3 => raddr(3),
WCLK => wclk1,
SPO => OPEN,
WE => we
);
 
fifo_bit3 : RAM16X1D
port map (
DPO => dout(3),
A0 => waddr(0),
A1 => waddr(1),
A2 => waddr(2),
A3 => waddr(3),
D => din(3),
DPRA0 => raddr(0),
DPRA1 => raddr(1),
DPRA2 => raddr(2),
DPRA3 => raddr(3),
WCLK => wclk0,
SPO => OPEN,
WE => we
);
 
fifo_bit4 : RAM16X1D
port map (
DPO => dout(4),
A0 => waddr(0),
A1 => waddr(1),
A2 => waddr(2),
A3 => waddr(3),
D => din(4),
DPRA0 => raddr(0),
DPRA1 => raddr(1),
DPRA2 => raddr(2),
DPRA3 => raddr(3),
WCLK => wclk1,
SPO => OPEN,
WE => we
);
 
fifo_bit5 : RAM16X1D
port map (
DPO => dout(5),
A0 => waddr(0),
A1 => waddr(1),
A2 => waddr(2),
A3 => waddr(3),
D => din(5),
DPRA0 => raddr(0),
DPRA1 => raddr(1),
DPRA2 => raddr(2),
DPRA3 => raddr(3),
WCLK => wclk0,
SPO => OPEN,
WE => we
);
 
fifo_bit6 : RAM16X1D
port map (
DPO => dout(6),
A0 => waddr(0),
A1 => waddr(1),
A2 => waddr(2),
A3 => waddr(3),
D => din(6),
DPRA0 => raddr(0),
DPRA1 => raddr(1),
DPRA2 => raddr(2),
DPRA3 => raddr(3),
WCLK => wclk1,
SPO => OPEN,
WE => we
);
 
fifo_bit7 : RAM16X1D
port map (
DPO => dout(7),
A0 => waddr(0),
A1 => waddr(1),
A2 => waddr(2),
A3 => waddr(3),
D => din(7),
DPRA0 => raddr(0),
DPRA1 => raddr(1),
DPRA2 => raddr(2),
DPRA3 => raddr(3),
WCLK => wclk0,
SPO => OPEN,
WE => we
);
 
end arc;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_tap_dly.vhd
0,0 → 1,386
--*****************************************************************************
-- 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 2005, 2006, 2007 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_tap_dly.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose :This module generates a 32 bit tap delay register used by the
-- cal_ctl module to find out the phase transitions.
--*****************************************************************************
 
library ieee;
library UNISIM;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use UNISIM.VCOMPONENTS.all;
 
 
entity DDR2_Ram_Core_tap_dly is
port (
clk : in std_logic;
reset : in std_logic;
tapin : in std_logic;
flop2 : out std_logic_vector(31 downto 0)
);
end DDR2_Ram_Core_tap_dly;
 
architecture arc_tap_dly of DDR2_Ram_Core_tap_dly is
 
signal tap : std_logic_vector(31 downto 0);
signal flop1 : std_logic_vector(31 downto 0);
signal high : std_logic;
signal low : std_logic;
signal flop2_xnor : std_logic_vector(30 downto 0);
signal reset_r : std_logic;
 
attribute syn_preserve : boolean;
 
attribute syn_preserve of tap : signal is true;
attribute syn_preserve of flop1 : signal is true;
 
 
begin
 
process(clk)
begin
if(clk'event and clk='1') then
reset_r <= reset;
end if;
end process;
 
high <= '1';
low <= '0';
 
l0 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tapin,
I2 => low,
I3 => high,
O => tap(0)
);
 
l1 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(0),
I2 => low,
I3 => high,
O => tap(1)
);
l2 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(1),
I2 => low,
I3 => high,
O => tap(2)
);
l3 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(2),
I2 => low,
I3 => high,
O => tap(3)
);
l4 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(3),
I2 => low,
I3 => high,
O => tap(4)
);
l5 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(4),
I2 => low,
I3 => high,
O => tap(5)
);
l6 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(5),
I2 => low,
I3 => high,
O => tap(6)
);
l7 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(6),
I2 => low,
I3 => high,
O => tap(7)
);
l8 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(7),
I2 => low,
I3 => high,
O => tap(8)
);
l9 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(8),
I2 => low,
I3 => high,
O => tap(9)
);
l10 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(9),
I2 => low,
I3 => high,
O => tap(10)
);
l11 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(10),
I2 => low,
I3 => high,
O => tap(11)
);
l12 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(11),
I2 => low,
I3 => high,
O => tap(12)
);
l13 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(12),
I2 => low,
I3 => high,
O => tap(13)
);
l14 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(13),
I2 => low,
I3 => high,
O => tap(14)
);
l15 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(14),
I2 => low,
I3 => high,
O => tap(15)
);
l16 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(15),
I2 => low,
I3 => high,
O => tap(16)
);
l17 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(16),
I2 => low,
I3 => high,
O => tap(17)
);
l18 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(17),
I2 => low,
I3 => high,
O => tap(18)
);
l19 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(18),
I2 => low,
I3 => high,
O => tap(19)
);
l20 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(19),
I2 => low,
I3 => high,
O => tap(20)
);
l21 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(20),
I2 => low,
I3 => high,
O => tap(21)
);
l22 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(21),
I2 => low,
I3 => high,
O => tap(22)
);
l23 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(22),
I2 => low,
I3 => high,
O => tap(23)
);
l24 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(23),
I2 => low,
I3 => high,
O => tap(24)
);
l25 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(24),
I2 => low,
I3 => high,
O => tap(25)
);
l26 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(25),
I2 => low,
I3 => high,
O => tap(26)
);
l27 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(26),
I2 => low,
I3 => high,
O => tap(27)
);
l28 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(27),
I2 => low,
I3 => high,
O => tap(28)
);
l29 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(28),
I2 => low,
I3 => high,
O => tap(29)
);
l30 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(29),
I2 => low,
I3 => high,
O => tap(30)
);
l31 : LUT4 generic map (INIT => x"e2e2")
port map (
I0 => high,
I1 => tap(30),
I2 => low,
I3 => high,
O => tap(31)
);
 
gen_tap1 : for tap1_i in 0 to 31 generate
r : FDR port map (
Q => flop1(tap1_i),
C => clk,
D => tap(tap1_i),
R => reset_r
);
end generate;
gen_asgn : for asgn_i in 0 to 30 generate
flop2_xnor(asgn_i) <= flop1(asgn_i) xnor flop1(asgn_i+1);
end generate;
 
gen_tap2 : for tap2_i in 0 to 30 generate
u : FDR port map (
Q => flop2(tap2_i),
C => clk,
D => flop2_xnor(tap2_i),
R => reset_r
);
end generate;
u31 : FDR
port map (
Q => flop2(31),
C => clk,
D => flop1(31),
R => reset_r
);
end arc_tap_dly;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_clk_dcm.vhd
0,0 → 1,127
--*****************************************************************************
-- 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 2005, 2006, 2007 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_clk_dcm.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
--
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose : This module generates the system clock for controller block
-- This also generates the recapture clock, clock for the
-- Refresh counter and also for the data path
--*****************************************************************************
 
library ieee;
library UNISIM;
use ieee.std_logic_1164.all;
use UNISIM.VCOMPONENTS.all;
entity DDR2_Ram_Core_clk_dcm is
port(
input_clk : in std_logic;
rst : in std_logic;
clk : out std_logic;
clk90 : out std_logic;
dcm_lock : out std_logic
);
end DDR2_Ram_Core_clk_dcm;
 
architecture arc of DDR2_Ram_Core_clk_dcm is
 
signal clk0dcm : std_logic;
signal clk90dcm : std_logic;
signal clk0_buf : std_logic;
signal clk90_buf : std_logic;
signal gnd : std_logic;
signal dcm1_lock : std_logic;
 
begin
 
gnd <= '0';
clk <= clk0_buf;
clk90 <= clk90_buf;
 
DCM_INST1 : DCM
generic map(
DLL_FREQUENCY_MODE => "LOW",
DUTY_CYCLE_CORRECTION => true
)
port map (
CLKIN => input_clk,
CLKFB => clk0_buf,
DSSEN => gnd,
PSINCDEC => gnd,
PSEN => gnd,
PSCLK => gnd,
RST => rst,
CLK0 => clk0dcm,
CLK90 => clk90dcm,
CLK180 => open,
CLK270 => open,
CLK2X => open,
CLK2X180 => open,
CLKDV => open,
CLKFX => open,
CLKFX180 => open,
LOCKED => dcm1_lock,
PSDONE => open,
STATUS => open
);
 
BUFG_CLK0 : BUFG
port map (
O => clk0_buf,
I => clk0dcm
);
 
BUFG_CLK90 : BUFG
port map (
O => clk90_buf,
I => clk90dcm
);
 
dcm_lock <= dcm1_lock;
 
end arc;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_s3_dm_iob.vhd
0,0 → 1,106
--*****************************************************************************
-- 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 2005, 2006, 2007 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_s3_dm_iob.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose : This module instantiates DDR IOB output flip-flops, and an
-- output buffer for the data mask bits.
--*****************************************************************************
 
library ieee;
library UNISIM;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use UNISIM.VCOMPONENTS.all;
 
entity DDR2_Ram_Core_s3_dm_iob is
port (
ddr_dm : out std_logic; --Data mask output
mask_falling : in std_logic; --Mask output on falling edge
mask_rising : in std_logic; --Mask output on rising edge
clk90 : in std_logic
);
end DDR2_Ram_Core_s3_dm_iob;
 
architecture arc of DDR2_Ram_Core_s3_dm_iob is
 
--***********************************************************************\
-- Internal signal declaration
--***********************************************************************/
 
signal mask_o : std_logic;
signal gnd : std_logic;
signal vcc : std_logic;
signal clk270 : std_logic;
begin
 
gnd <= '0';
vcc <= '1';
clk270 <= not clk90;
 
-- Data Mask Output during a write command
 
DDR_DM0_OUT : FDDRRSE
port map (
Q => mask_o,
C0 => clk270,
C1 => clk90,
CE => vcc,
D0 => mask_rising,
D1 => mask_falling,
R => gnd,
S => gnd
);
 
DM1_OBUF : OBUF
port map (
I => mask_o,
O => ddr_dm
);
end arc;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_wr_gray_cntr.vhd
0,0 → 1,139
--*****************************************************************************
-- 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 2005, 2006, 2007 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_wr_gray_cntr.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose :
--*****************************************************************************
-- fifo_wr_addr gray counter with synchronous reset
-- Gray counter is used for FIFO address counter
 
library ieee;
library UNISIM;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use UNISIM.VCOMPONENTS.all;
 
entity DDR2_Ram_Core_wr_gray_cntr is
port (
clk : in std_logic;
reset : in std_logic;
cnt_en : in std_logic;
wgc_gcnt : out std_logic_vector(3 downto 0)
);
end DDR2_Ram_Core_wr_gray_cntr;
 
architecture arc of DDR2_Ram_Core_wr_gray_cntr is
 
signal d_in : std_logic_vector(3 downto 0);
signal gc_int : std_logic_vector(3 downto 0);
 
begin
 
wgc_gcnt <= gc_int(3 downto 0);
 
process(gc_int)
begin
case gc_int is
when "0000" => d_in <= "0001"; --0 > 1
when "0001" => d_in <= "0011"; --1 > 3
when "0010" => d_in <= "0110"; --2 > 6
when "0011" => d_in <= "0010"; --3 > 2
when "0100" => d_in <= "1100"; --4 > c
when "0101" => d_in <= "0100"; --5 > 4
when "0110" => d_in <= "0111"; --6 > 7
when "0111" => d_in <= "0101"; --7 > 5
when "1000" => d_in <= "0000"; --8 > 0
when "1001" => d_in <= "1000"; --9 > 8
when "1010" => d_in <= "1011"; --a > b
when "1011" => d_in <= "1001"; --b > 9
when "1100" => d_in <= "1101"; --c > d
when "1101" => d_in <= "1111"; --d > f
when "1110" => d_in <= "1010"; --e > a
when "1111" => d_in <= "1110"; --f > e
when others => d_in <= "0001"; --0 > 1
end case;
end process;
 
bit0 : FDCE
port map (
Q => gc_int(0),
C => clk,
CE => cnt_en,
CLR => reset,
D => d_in(0)
);
 
bit1 : FDCE
port map (
Q => gc_int(1),
C => clk,
CE => cnt_en,
CLR => reset,
D => d_in(1)
);
bit2 : FDCE
port map (
Q => gc_int(2),
C => clk,
CE => cnt_en,
CLR => reset,
D => d_in(2)
);
 
bit3 : FDCE
port map (
Q => gc_int(3),
C => clk,
CE => cnt_en,
CLR => reset,
D => d_in(3)
);
 
end arc;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_cal_ctl.vhd
0,0 → 1,255
--*****************************************************************************
-- (c) Copyright 2005 - 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.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_cal_ctl.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose : This module generates the select lines for the LUT delay
-- circuit that generate the required delay for the DQS with
-- respect to the DQ. It calculates the dealy of a LUT dynalically
-- by finding the number of LUTs in a clock phase.
--*****************************************************************************
 
library ieee;
library UNISIM;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use UNISIM.VCOMPONENTS.all;
 
entity DDR2_Ram_Core_cal_ctl is
port (
clk : in std_logic;
reset : in std_logic;
flop2 : in std_logic_vector(31 downto 0);
tapfordqs : out std_logic_vector(4 downto 0);
-- debug signals
dbg_phase_cnt : out std_logic_vector(4 downto 0);
dbg_cnt : out std_logic_vector(5 downto 0);
dbg_trans_onedtct : out std_logic;
dbg_trans_twodtct : out std_logic;
dbg_enb_trans_two_dtct : out std_logic
);
end DDR2_Ram_Core_cal_ctl;
 
architecture arc_cal_ctl of DDR2_Ram_Core_cal_ctl is
 
signal cnt : std_logic_vector(5 downto 0);
signal cnt1 : std_logic_vector(5 downto 0);
signal trans_onedtct : std_logic;
signal trans_twodtct : std_logic;
signal phase_cnt : std_logic_vector(4 downto 0);
signal tap_dly_reg : std_logic_vector(31 downto 0);
signal enb_trans_two_dtct : std_logic;
signal tapfordqs_val : std_logic_vector(4 downto 0);
signal cnt_val : integer;
signal reset_r : std_logic;
 
constant tap1 : std_logic_vector(4 downto 0) := "01111";
constant tap2 : std_logic_vector(4 downto 0) := "10111";
constant tap3 : std_logic_vector(4 downto 0) := "11011";
constant tap4 : std_logic_vector(4 downto 0) := "11101";
constant tap5 : std_logic_vector(4 downto 0) := "11110";
constant tap6 : std_logic_vector(4 downto 0) := "11111";
constant default_tap : std_logic_vector(4 downto 0) := "11101";
 
attribute syn_keep : boolean;
attribute syn_keep of cnt : signal is true;
attribute syn_keep of cnt1 : signal is true;
attribute syn_keep of trans_onedtct : signal is true;
attribute syn_keep of trans_twodtct : signal is true;
attribute syn_keep of tap_dly_reg : signal is true;
attribute syn_keep of enb_trans_two_dtct : signal is true;
attribute syn_keep of phase_cnt : signal is true;
attribute syn_keep of tapfordqs_val : signal is true;
 
begin
 
dbg_phase_cnt <= phase_cnt;
dbg_cnt <= cnt1;
dbg_trans_onedtct <= trans_onedtct;
dbg_trans_twodtct <= trans_twodtct;
dbg_enb_trans_two_dtct <= enb_trans_two_dtct;
 
process(clk)
begin
if(clk'event and clk = '1') then
reset_r <= reset;
end if;
end process;
 
process(clk)
begin
if(clk'event and clk = '1') then
tapfordqs <= tapfordqs_val;
end if;
end process;
 
-----------For Successive Transition-------------------
 
process(clk)
begin
if (clk'event and clk = '1') then
if(reset_r = '1') then
enb_trans_two_dtct <= '0';
elsif(phase_cnt >= "00001") then
enb_trans_two_dtct <= '1';
else
enb_trans_two_dtct <= '0';
end if;
end if;
end process;
 
process (clk)
begin
if(clk'event and clk = '1') then
if(reset_r = '1') then
tap_dly_reg <= "00000000000000000000000000000000";
elsif(cnt(5) = '1') then
tap_dly_reg <= flop2;
else
tap_dly_reg <= tap_dly_reg;
end if;
end if;
end process;
 
--------Free Running Counter For Counting 32 States ----------------------
------- Two parallel counters are used to fix the timing ------------------
 
process (clk)
begin
if(clk'event and clk = '1') then
if(reset_r = '1' or cnt(5) = '1') then
cnt(5 downto 0) <= "000000";
else
cnt(5 downto 0) <= cnt(5 downto 0) + "000001";
end if;
end if;
end process;
 
 
process(clk)
begin
if(clk'event and clk = '1') then
if(reset_r = '1' or cnt1(5) = '1') then
cnt1(5 downto 0) <= "000000";
else
cnt1(5 downto 0) <= cnt1(5 downto 0) + "000001";
end if;
end if;
end process;
 
process(clk)
begin
if clk'event and clk = '1' then
if(reset_r = '1' or cnt(5) = '1') then
phase_cnt <= "00000";
elsif (trans_onedtct = '1' and trans_twodtct = '0') then
phase_cnt <= phase_cnt + "00001";
else
phase_cnt <= phase_cnt;
end if;
end if;
end process;
 
----------- Checking For The First Transition ------------------
 
process (clk)
begin
if clk'event and clk = '1' then
if (reset_r = '1' or cnt(5) = '1') then
trans_onedtct <= '0';
trans_twodtct <= '0';
elsif (cnt(4 downto 0) = "00000" and tap_dly_reg(0) = '1') then
trans_onedtct <= '1';
trans_twodtct <= '0';
elsif (tap_dly_reg(cnt_val) = '1' and trans_twodtct = '0') then
if(trans_onedtct = '1' and enb_trans_two_dtct = '1') then
trans_twodtct <= '1';
else
trans_onedtct <= '1';
end if;
end if;
end if;
end process;
 
cnt_val <= conv_integer(cnt(4 downto 0));
 
-- Tap values for Left/Right banks
process (clk)
begin
if clk'event and clk = '1' then
if(reset_r = '1') then
tapfordqs_val <= default_tap;
elsif(cnt1(4) = '1' and cnt1(3) = '1' and cnt1(2) = '1' and cnt1(1) = '1'
and cnt1(0) = '1') then
if ((trans_onedtct = '0') or (trans_twodtct = '0')
or (phase_cnt > "01100")) then
tapfordqs_val <= tap6;
elsif (phase_cnt > "01001") then
tapfordqs_val <= tap4;
elsif (phase_cnt > "00111") then
tapfordqs_val <= tap3;
elsif (phase_cnt > "00100") then
tapfordqs_val <= tap2;
else
tapfordqs_val <= tap1;
end if;
else
tapfordqs_val <= tapfordqs_val;
end if;
end if;
end process;
 
end arc_cal_ctl;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_s3_dq_iob.vhd
0,0 → 1,135
--*****************************************************************************
-- 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 2005, 2006, 2007, 2008 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_s3_dq_iob.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose : This module instantiate DDR IOB output flip-flops, an
-- output buffer with registered tri-state, and an input buffer
-- for a single data/dq bit. The DDR IOB output flip-flops
-- are used to forward data to memory during a write.
--*****************************************************************************
 
library ieee;
library UNISIM;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use UNISIM.VCOMPONENTS.all;
 
entity DDR2_Ram_Core_s3_dq_iob is
port (
ddr_dq_inout : inout std_logic; --Bi-directional SDRAM data bus
write_data_falling : in std_logic; --Transmit data, output on falling edge
write_data_rising : in std_logic; --Transmit data, output on rising edge
read_data_in : out std_logic; -- Received data
clk90 : in std_logic; --Clock 90
write_en_val : in std_logic
);
end DDR2_Ram_Core_s3_dq_iob;
 
architecture arc of DDR2_Ram_Core_s3_dq_iob is
 
--***********************************************************************\
-- Internal signal declaration
--***********************************************************************/
signal ddr_en : std_logic; -- Tri-state enable signal
signal ddr_dq_q : std_logic; -- Data output intermediate signal
signal gnd : std_logic;
signal clock_en : std_logic;
signal enable_b : std_logic;
signal clk270 : std_logic;
 
attribute iob : string;
attribute syn_useioff : boolean;
 
attribute iob of DQ_T : label is "FORCE";
attribute syn_useioff of DQ_T : label is true;
 
begin
clk270 <= not clk90;
gnd <= '0';
enable_b <= not write_en_val;
clock_en <= '1';
 
-- Transmission data path
 
DDR_OUT : FDDRRSE
port map (
Q => ddr_dq_q,
C0 => clk270,
C1 => clk90,
CE => clock_en,
D0 => write_data_rising,
D1 => write_data_falling,
R => gnd,
S => gnd
);
 
DQ_T : FD
port map (
D => enable_b,
C => clk270,
Q => ddr_en
);
 
DQ_OBUFT : OBUFT
port map (
I => ddr_dq_q,
T => ddr_en,
O => ddr_dq_inout
);
 
-- Receive data path
 
DQ_IBUF : IBUF
port map(
I => ddr_dq_inout,
O => read_data_in
);
 
end arc;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_data_write_0.vhd
0,0 → 1,196
--*****************************************************************************
-- 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 2005, 2006, 2007, 2008 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_data_write0.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose : Data write operation performed through the pipelines in this
-- module.
--*****************************************************************************
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
library UNISIM;
use UNISIM.VCOMPONENTS.all;
use work.DDR2_Ram_Core_parameters_0.all;
 
entity DDR2_Ram_Core_data_write_0 is
port(
user_input_data : in std_logic_vector((2*DATA_WIDTH-1) downto 0);
user_data_mask : in std_logic_vector((2*DATA_MASK_WIDTH-1) downto 0);
clk90 : in std_logic;
write_enable : in std_logic;
write_en_val : out std_logic;
data_mask_f : out std_logic_vector((DATA_MASK_WIDTH-1) downto 0);
data_mask_r : out std_logic_vector((DATA_MASK_WIDTH-1) downto 0);
write_data_falling : out std_logic_vector((DATA_WIDTH-1) downto 0);
write_data_rising : out std_logic_vector((DATA_WIDTH-1) downto 0)
);
end DDR2_Ram_Core_data_write_0;
 
architecture arc of DDR2_Ram_Core_data_write_0 is
 
 
signal write_en_P1 : std_logic; -- write enable Pipeline stage
signal write_data0 : std_logic_vector((2*DATA_WIDTH-1) downto 0);
signal write_data1 : std_logic_vector((2*DATA_WIDTH-1) downto 0);
signal write_data2 : std_logic_vector((2*DATA_WIDTH-1) downto 0);
signal write_data3 : std_logic_vector((2*DATA_WIDTH-1) downto 0);
signal write_data4 : std_logic_vector((2*DATA_WIDTH-1) downto 0);
signal write_data_m0 : std_logic_vector ((2*DATA_MASK_WIDTH-1) downto 0);
signal write_data_m1 : std_logic_vector ((2*DATA_MASK_WIDTH-1) downto 0);
signal write_data_m2 : std_logic_vector ((2*DATA_MASK_WIDTH-1) downto 0);
signal write_data_m3 : std_logic_vector ((2*DATA_MASK_WIDTH-1) downto 0);
signal write_data_m4 : std_logic_vector ((2*DATA_MASK_WIDTH-1) downto 0);
 
signal write_data90 : std_logic_vector((DATA_WIDTH-1) downto 0);
signal write_data90_1 : std_logic_vector((DATA_WIDTH-1) downto 0);
signal write_data90_2 : std_logic_vector((DATA_WIDTH-1) downto 0);
signal write_data_m90 : std_logic_vector ((DATA_MASK_WIDTH-1) downto 0);
signal write_data_m90_1 : std_logic_vector ((DATA_MASK_WIDTH-1) downto 0);
signal write_data_m90_2 : std_logic_vector ((DATA_MASK_WIDTH-1) downto 0);
 
signal write_data270 : std_logic_vector((DATA_WIDTH-1) downto 0);
signal write_data270_1 : std_logic_vector((DATA_WIDTH-1) downto 0);
signal write_data270_2 : std_logic_vector((DATA_WIDTH-1) downto 0);
 
signal write_data_m270 : std_logic_vector ((DATA_MASK_WIDTH-1) downto 0);
signal write_data_m270_1 : std_logic_vector ((DATA_MASK_WIDTH-1) downto 0);
signal write_data_m270_2 : std_logic_vector ((DATA_MASK_WIDTH-1) downto 0);
 
 
attribute syn_preserve : boolean;
attribute syn_preserve of write_data0 : signal is true;
attribute syn_preserve of write_data1 : signal is true;
attribute syn_preserve of write_data2 : signal is true;
attribute syn_preserve of write_data3 : signal is true;
attribute syn_preserve of write_data4 : signal is true;
 
attribute syn_preserve of write_data_m0 : signal is true;
attribute syn_preserve of write_data_m1 : signal is true;
attribute syn_preserve of write_data_m2 : signal is true;
attribute syn_preserve of write_data_m3 : signal is true;
attribute syn_preserve of write_data_m4 : signal is true;
 
attribute syn_preserve of write_data90 : signal is true;
attribute syn_preserve of write_data90_1 : signal is true;
attribute syn_preserve of write_data90_2 : signal is true;
 
attribute syn_preserve of write_data270 : signal is true;
attribute syn_preserve of write_data270_1 : signal is true;
attribute syn_preserve of write_data270_2 : signal is true;
 
begin
 
write_data0 <= user_input_data;
write_data_m0 <= user_data_mask;
 
process(clk90)
begin
if clk90'event and clk90 = '1' then
write_data1 <= write_data0;
write_data_m1 <= write_data_m0;
write_data2 <= write_data1;
write_data_m2 <= write_data_m1;
write_data3 <= write_data2;
write_data_m3 <= write_data_m2;
write_data4 <= write_data3;
write_data_m4 <= write_data_m3;
end if;
end process;
 
process(clk90)
begin
if clk90'event and clk90 = '1' then
write_data90 <= write_data4((DATA_WIDTH-1) downto 0);
write_data_m90 <= write_data_m4((DATA_MASK_WIDTH-1) downto 0);
write_data90_1 <= write_data90;
write_data_m90_1 <= write_data_m90;
write_data90_2 <= write_data90_1;
write_data_m90_2 <= write_data_m90_1;
 
end if;
end process;
 
 
process(clk90)
begin
if clk90'event and clk90 = '0' then
write_data270 <= write_data4((DATA_WIDTH*2-1) downto DATA_WIDTH);
write_data_m270 <= write_data_m4((DATA_MASK_WIDTH*2-1) downto DATA_MASK_WIDTH);
write_data270_1 <= write_data270;
write_data270_2 <= write_data270_1;
write_data_m270_1 <= write_data_m270;
write_data_m270_2 <= write_data_m270_1;
 
end if;
end process;
 
write_data_rising <= write_data270_2;
write_data_falling <= write_data90_2;
data_mask_r <= write_data_m270_2;
data_mask_f <= write_data_m90_2;
 
-- write enable for data path
process(clk90)
begin
if clk90'event and clk90 = '1' then
write_en_P1 <= write_enable;
end if;
end process;
 
-- write enable for data path
process(clk90)
begin
if clk90'event and clk90 = '0' then
write_en_val <= write_en_P1;
end if;
end process;
 
end arc;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_controller_0.vhd
0,0 → 1,1380
--*****************************************************************************
-- 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 2005, 2006, 2007, 2008 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_controller_0.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose : THis is main controller block. This includes the following
-- features:
-- - The controller state machine that controls the
-- initialization process upon power up, as well as the
-- read, write, and refresh commands.
-- - Accepts and decodes the user commands.
-- - Generates the address and Bank address and control signals
-- to the memory
-- - Generates control signals for other modules.
--*****************************************************************************
 
library ieee;
library UNISIM;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use UNISIM.VCOMPONENTS.all;
use work.DDR2_Ram_Core_parameters_0.all;
 
entity DDR2_Ram_Core_controller_0 is
generic
(
COL_WIDTH : integer := COLUMN_ADDRESS;
ROW_WIDTH : integer := ROW_ADDRESS
);
port(
clk : in std_logic;
rst0 : in std_logic;
rst180 : in std_logic;
address : in std_logic_vector(((ROW_ADDRESS + COLUMN_ADDRESS)-1)
downto 0);
bank_addr : in std_logic_vector((BANK_ADDRESS-1) downto 0);
command_register : in std_logic_vector(2 downto 0);
burst_done : in std_logic;
ddr_rasb_cntrl : out std_logic;
ddr_casb_cntrl : out std_logic;
ddr_web_cntrl : out std_logic;
ddr_ba_cntrl : out std_logic_vector((BANK_ADDRESS-1) downto 0);
ddr_address_cntrl : out std_logic_vector((ROW_ADDRESS-1) downto 0);
ddr_cke_cntrl : out std_logic;
ddr_csb_cntrl : out std_logic;
ddr_odt_cntrl : out std_logic;
dqs_enable : out std_logic;
dqs_reset : out std_logic;
write_enable : out std_logic;
rst_calib : out std_logic;
rst_dqs_div_int : out std_logic;
cmd_ack : out std_logic;
init : out std_logic;
ar_done : out std_logic;
wait_200us : in std_logic;
auto_ref_req : out std_logic;
read_fifo_rden : out std_logic -- Read Enable signal for read fifo(to data_read)
);
end DDR2_Ram_Core_controller_0;
 
 
architecture arc of DDR2_Ram_Core_controller_0 is
 
type s_m is (IDLE, PRECHARGE, AUTO_REFRESH, ACTIVE,
FIRST_WRITE, WRITE_WAIT, BURST_WRITE,
PRECHARGE_AFTER_WRITE, PRECHARGE_AFTER_WRITE_2, READ_WAIT,
BURST_READ, ACTIVE_WAIT);
 
type s_m1 is (INIT_IDLE, INIT_PRECHARGE,
INIT_AUTO_REFRESH, INIT_LOAD_MODE_REG);
signal next_state, current_state : s_m;
signal init_next_state, init_current_state : s_m1;
 
signal ack_reg : std_logic;
signal ack_o : std_logic;
signal auto_ref : std_logic;
signal auto_ref1 : std_logic;
signal autoref_value : std_logic;
signal auto_ref_detect1 : std_logic;
signal autoref_count : std_logic_vector((MAX_REF_WIDTH-1) downto 0);
signal ar_done_p : std_logic;
signal auto_ref_issued : std_logic;
signal auto_ref_issued_p : std_logic;
signal ba_address_reg1 : std_logic_vector((BANK_ADDRESS-1) downto 0);
signal ba_address_reg2 : std_logic_vector((BANK_ADDRESS-1) downto 0);
signal burst_length : std_logic_vector(2 downto 0);
signal burst_cnt_max : std_logic_vector(2 downto 0);
signal cas_count : std_logic_vector(2 downto 0);
signal ras_count : std_logic_vector(4 downto 0);
signal column_address_reg : std_logic_vector((ROW_ADDRESS-1) downto 0);
signal ddr_rasb1 : std_logic;
signal ddr_casb1 : std_logic;
signal ddr_web1 : std_logic;
signal ddr_ba1 : std_logic_vector((BANK_ADDRESS-1) downto 0);
signal ddr_address1 : std_logic_vector((ROW_ADDRESS-1) downto 0);
signal dqs_enable_out : std_logic;
signal dqs_reset_out : std_logic;
signal dll_rst_count : std_logic_vector(7 downto 0);
signal init_count : std_logic_vector(3 downto 0);
signal init_done : std_logic;
signal init_done_r1 : std_logic;
signal init_done_dis : std_logic;
signal init_done_value : std_logic;
signal init_memory : std_logic;
signal init_mem : std_logic;
signal init_cmd_in : std_logic;
signal init_pre_count : std_logic_vector(6 downto 0);
signal ref_freq_cnt : std_logic_vector((MAX_REF_WIDTH-1) downto 0);
signal read_cmd_in : std_logic;
signal read_cmd1 : std_logic;
signal read_cmd2 : std_logic;
signal read_cmd3 : std_logic;
signal rcd_count : std_logic_vector(2 downto 0);
signal rp_cnt_value : std_logic_vector(2 downto 0);
signal rfc_count_reg : std_logic;
signal ar_done_reg : std_logic;
signal rdburst_end_1 : std_logic;
signal rdburst_end_2 : std_logic;
signal rdburst_end : std_logic;
signal rp_count : std_logic_vector(2 downto 0);
signal rfc_count : std_logic_vector(7 downto 0);
signal row_address_reg : std_logic_vector((ROW_ADDRESS-1) downto 0);
signal column_address1 : std_logic_vector((ROW_ADDRESS -1) downto 0);
signal rst_dqs_div_r : std_logic;
signal rst_dqs_div_r1 : std_logic;
signal wrburst_end_cnt : std_logic_vector(2 downto 0);
signal wrburst_end : std_logic;
signal wrburst_end_1 : std_logic;
signal wrburst_end_2 : std_logic;
signal wrburst_end_3 : std_logic;
signal wr_count : std_logic_vector(2 downto 0);
signal write_enable_out : std_logic;
signal write_cmd_in : std_logic;
signal write_cmd2 : std_logic;
signal write_cmd3 : std_logic;
signal write_cmd1 : std_logic;
signal go_to_active_value : std_logic;
signal go_to_active : std_logic;
signal dqs_div_cascount : std_logic_vector(2 downto 0);
signal dqs_div_rdburstcount : std_logic_vector(2 downto 0);
signal dqs_enable1 : std_logic;
signal dqs_enable2 : std_logic;
signal dqs_enable3 : std_logic;
signal dqs_reset1_clk0 : std_logic;
signal dqs_reset2_clk0 : std_logic;
signal dqs_reset3_clk0 : std_logic;
signal dqs_enable_int : std_logic;
signal dqs_reset_int : std_logic;
signal rst180_r : std_logic;
signal rst0_r : std_logic;
signal emr : std_logic_vector(ROW_ADDRESS - 1 downto 0);
signal lmr : std_logic_vector(ROW_ADDRESS - 1 downto 0);
signal lmr_dll_rst : std_logic_vector(ROW_ADDRESS - 1 downto 0);
signal lmr_dll_set : std_logic_vector(ROW_ADDRESS - 1 downto 0);
signal ddr_odt1 : std_logic;
signal ddr_odt2 : std_logic;
signal rst_dqs_div_int1 : std_logic;
signal accept_cmd_in : std_logic;
signal dqs_enable_i : std_logic;
signal auto_ref_wait : std_logic;
signal auto_ref_wait1 : std_logic;
signal auto_ref_wait2 : std_logic;
signal address_reg : std_logic_vector(((ROW_ADDRESS +
COLUMN_ADDRESS)-1) downto 0);
signal ddr_rasb2 : std_logic;
signal ddr_casb2 : std_logic;
signal ddr_web2 : std_logic;
signal count6 : std_logic_vector(7 downto 0);
signal clk180 : std_logic;
signal odt_deassert : std_logic;
 
constant addr_const1 : std_logic_vector(14 downto 0) := "000010000000000";
constant addr_const2 : std_logic_vector(14 downto 0) := "000001110000000"; --380
constant addr_const3 : std_logic_vector(14 downto 0) := "000110001111111"; --C7F
constant ba_const1 : std_logic_vector(2 downto 0) := "010";
constant ba_const2 : std_logic_vector(2 downto 0) := "011";
constant ba_const3 : std_logic_vector(2 downto 0) := "001";
 
attribute iob : string;
attribute syn_useioff : boolean;
attribute syn_preserve : boolean;
attribute syn_keep : boolean;
 
attribute iob of rst_iob_out : label is "FORCE";
attribute syn_useioff of rst_iob_out : label is true;
attribute syn_preserve of lmr_dll_rst : signal is true;
attribute syn_preserve of lmr_dll_set : signal is true;
attribute syn_preserve of ba_address_reg1 : signal is true;
attribute syn_preserve of ba_address_reg2 : signal is true;
attribute syn_preserve of column_address_reg : signal is true;
attribute syn_preserve of row_address_reg : signal is true;
 
begin
 
clk180 <= not clk;
emr <= EXT_LOAD_MODE_REGISTER;
lmr <= LOAD_MODE_REGISTER;
lmr_dll_rst <= lmr(ROW_ADDRESS - 1 downto 9) & '1' & lmr(7 downto 0);
lmr_dll_set <= lmr(ROW_ADDRESS - 1 downto 9) & '0' & lmr(7 downto 0);
 
 
-- Input : COMMAND REGISTER FORMAT
-- 000 - NOP
-- 010 - Initialize memory
-- 100 - Write Request
-- 110 - Read request
 
 
-- Input : Address format
-- row address = address((ROW_ADDRESS + COLUMN_ADDRESS) -1 downto COLUMN_ADDRESS)
-- column address = address(COLUMN_ADDRESS-1 downto 0)
 
ddr_csb_cntrl <= '0';
ddr_cke_cntrl <= not wait_200us;
init <= init_done;
ddr_rasb_cntrl <= ddr_rasb2;
ddr_casb_cntrl <= ddr_casb2;
ddr_web_cntrl <= ddr_web2;
rst_dqs_div_int <= rst_dqs_div_int1;
ddr_address_cntrl <= ddr_address1;
ddr_ba_cntrl <= ddr_ba1;
 
-- turn off auto-precharge when issuing read/write commands (A10 = 0)
-- mapping the column address for linear addressing.
gen_ddr_addr_col_0: if (COL_WIDTH = ROW_WIDTH-1) generate
column_address1 <= (address_reg(COL_WIDTH-1 downto 10) & '0' &
address_reg(9 downto 0));
end generate;
 
gen_ddr_addr_col_1: if ((COL_WIDTH > 10) and
not(COL_WIDTH = ROW_WIDTH-1)) generate
column_address1(ROW_WIDTH-1 downto COL_WIDTH+1) <= (others => '0');
column_address1(COL_WIDTH downto 0) <=
(address_reg(COL_WIDTH-1 downto 10) & '0' & address_reg(9 downto 0));
end generate;
 
gen_ddr_addr_col_2: if (not((COL_WIDTH > 10) or
(COL_WIDTH = ROW_WIDTH-1))) generate
column_address1(ROW_WIDTH-1 downto COL_WIDTH+1) <= (others => '0');
column_address1(COL_WIDTH downto 0) <=
('0' & address_reg(COL_WIDTH-1 downto 0));
end generate;
 
 
process(clk)
begin
if clk'event and clk = '0' then
rst180_r <= rst180;
end if;
end process;
 
process(clk)
begin
if clk'event and clk = '1' then
rst0_r <= rst0;
end if;
end process;
 
--******************************************************************************
-- Register user address
--******************************************************************************
 
process(clk)
begin
if clk'event and clk = '0' then
row_address_reg <= address_reg(((ROW_ADDRESS + COLUMN_ADDRESS)-1) downto
COLUMN_ADDRESS);
column_address_reg <= column_address1;
ba_address_reg1 <= bank_addr;
ba_address_reg2 <= ba_address_reg1;
address_reg <= address;
end if;
end process;
 
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
burst_length <= "000";
else
burst_length <= lmr(2 downto 0);
end if;
end if;
end process;
 
process(clk)
begin
if (clk'event and clk = '0') then
if rst180_r = '1' then
accept_cmd_in <= '0';
elsif (current_state = IDLE and (rp_count = "000" and (rfc_count_reg and
not(auto_ref_wait) and
not(auto_ref_issued)) = '1')) then
accept_cmd_in <= '1';
else
accept_cmd_in <= '0';
end if;
end if;
end process;
--******************************************************************************
-- Commands from user.
--******************************************************************************
init_cmd_in <= '1' when (command_register = "010") else '0';
write_cmd_in <= '1' when (command_register = "100" and
accept_cmd_in = '1') else '0';
read_cmd_in <= '1' when (command_register = "110" and
accept_cmd_in = '1') else '0';
 
--******************************************************************************
-- write_cmd1 is asserted when user issued write command and the controller s/m
-- is in idle state and AUTO_REF is not asserted.
--******************************************************************************
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
write_cmd1 <= '0';
write_cmd2 <= '0';
write_cmd3 <= '0';
else
if (accept_cmd_in = '1') then
write_cmd1 <= write_cmd_in;
end if;
write_cmd2 <= write_cmd1;
write_cmd3 <= write_cmd2;
end if;
end if;
end process;
 
--******************************************************************************
-- read_cmd1 is asserted when user issued read command and the controller s/m
-- is in idle state and AUTO_REF is not asserted.
--******************************************************************************
 
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
read_cmd1 <= '0';
read_cmd2 <= '0';
read_cmd3 <= '0';
else
if (accept_cmd_in = '1') then
read_cmd1 <= read_cmd_in;
end if;
read_cmd2 <= read_cmd1;
read_cmd3 <= read_cmd2;
end if;
end if;
end process;
 
--******************************************************************************
-- ras_count- Active to Precharge time
-- Controller is giving tras violation when user issues a single read command for
-- BL=4 and tRAS is more then 42ns.It uses a fixed clk count of 7 clocks which is
-- 7*6(@166) = 42ns. Addded ras_count counter which will take care of tras timeout.
-- RAS_COUNT_VALUE parameter is used to load the counter and it depends on the
-- selected memory and frequency
--******************************************************************************
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
ras_count <= "00000";
elsif(current_state = ACTIVE) then
ras_count <= RAS_COUNT_VALUE - '1';
elsif(ras_count /= "00000") then
ras_count <= ras_count - '1';
end if;
end if;
end process;
--******************************************************************************
-- rfc_count
-- An executable command can be issued only after Trfc period after a AUTOREFRESH
-- command is issued. rfc_count_value is set in the parameter file depending on
-- the memory device speed grade and the selected frequency.For example for 5B
-- speed grade, at 133Mhz, rfc_counter_value = 8'b00001001.
-- ( Trfc/clk_period= 75/7.5= 10)
--******************************************************************************
 
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
rfc_count <= "00000000";
elsif(current_state = AUTO_REFRESH) then
rfc_count <= RFC_COUNT_VALUE;
elsif(rfc_count /= "00000000") then
rfc_count <= rfc_count - '1';
end if;
end if;
end process;
 
--******************************************************************************
-- rp_count
-- An executable command can be issued only after Trp period after a PRECHARGE
-- command is issued.
--******************************************************************************
 
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
rp_count <= "000";
elsif(current_state = PRECHARGE) then
rp_count <= RP_COUNT_VALUE;
elsif(rp_count /= "000") then
rp_count <= rp_count - '1';
end if;
end if;
end process;
 
 
--******************************************************************************
-- rcd_count
-- ACTIVE to READ/WRITE delay - Minimum interval between ACTIVE and READ/WRITE command.
--******************************************************************************
 
process(clk)
begin
if (clk'event and clk = '0') then
if (rst180_r = '1') then
rcd_count <= "000";
elsif (current_state = ACTIVE) then
rcd_count <= "001";
elsif (rcd_count /= "000") then
rcd_count <= rcd_count - '1';
end if;
end if;
end process;
 
--******************************************************************************
-- WR Counter
-- a PRECHARGE command can be applied only after 2 cycles after a WRITE command
-- has finished executing
--******************************************************************************
process (clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
wr_count <= "000";
else
if (dqs_enable_int = '1') then
wr_count <= TWR_COUNT_VALUE;
elsif (wr_count /= "000") then
wr_count <= wr_count - "001";
end if;
end if;
end if;
end process;
 
--******************************************************************************
-- autoref_count - This counter is used to issue AUTO REFRESH command to
-- the memory for every 7.8125us.
-- (Auto Refresh Request is raised for every 7.7 us to allow for termination
-- of any ongoing bus transfer).For example at 166MHz frequency
-- autoref_count = refresh_time_period/clock_period = 7.7us/6.02ns = 1279
--******************************************************************************
ref_freq_cnt <= MAX_REF_CNT;
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
autoref_value <= '0';
elsif (autoref_count = ref_freq_cnt) then
autoref_value <= '1';
else
autoref_value <= '0';
end if;
end if;
end process;
 
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
autoref_count <= (others => '0');
elsif (autoref_value = '1') then
autoref_count <= (others => '0');
else
autoref_count <= autoref_count + '1';
end if;
end if;
end process;
 
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
auto_ref_detect1 <= '0';
auto_ref1 <= '0';
else
auto_ref_detect1 <= autoref_value and init_done;
auto_ref1 <= auto_ref_detect1;
end if;
end if;
end process;
 
ar_done_p <= '1' when ar_done_reg = '1' else '0';
 
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
auto_ref_wait <= '0';
ar_done <= '0';
auto_ref_issued <= '0';
else
if (auto_ref1 = '1' and auto_ref_wait = '0') then
auto_ref_wait <= '1';
elsif (auto_ref_issued = '1') then
auto_ref_wait <= '0';
else
auto_ref_wait <= auto_ref_wait;
end if;
ar_done <= ar_done_p;
auto_ref_issued <= auto_ref_issued_p;
end if;
end if;
end process;
 
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
auto_ref_wait1 <= '0';
auto_ref_wait2 <= '0';
auto_ref <= '0';
else
if (auto_ref_issued_p = '1') then
auto_ref_wait1 <= '0';
auto_ref_wait2 <= '0';
auto_ref <= '0';
else
auto_ref_wait1 <= auto_ref_wait;
auto_ref_wait2 <= auto_ref_wait1;
auto_ref <= auto_ref_wait2;
end if;
end if;
end if;
end process;
 
auto_ref_req <= auto_ref_wait;
auto_ref_issued_p <= '1' when (current_state = AUTO_REFRESH) else '0';
 
--******************************************************************************
-- Common counter for the Initialization sequence
--******************************************************************************
process(clk)
begin
if (clk'event and clk = '0') then
if (rst180_r = '1') then
count6 <= "00000000";
elsif(init_current_state = INIT_AUTO_REFRESH or init_current_state
= INIT_PRECHARGE or init_current_state = INIT_LOAD_MODE_REG) then
count6 <= RFC_COUNT_VALUE;
elsif(count6 /= "00000000") then
count6 <= count6 - '1';
else
count6 <= "00000000";
end if;
end if;
end process;
 
--******************************************************************************
-- While doing consecutive READs or WRITEs, the burst_cnt_max value determines
-- when the next READ or WRITE command should be issued. burst_cnt_max shows the
-- number of clock cycles for each burst.
-- e.g burst_cnt_max = 2 for a burst length of 4
-- = 4 for a burst length of 8
--******************************************************************************
 
burst_cnt_max <= "010" when burst_length = "010" else
"100" when burst_length = "011" else
"000";
 
process(clk)
begin
if (clk'event and clk = '0') then
if (rst180_r = '1') then
cas_count <= "000";
elsif(current_state = BURST_READ) then
cas_count <= burst_cnt_max - '1';
elsif(cas_count /= "000") then
cas_count <= cas_count - '1';
end if;
end if;
end process;
 
 
process(clk)
begin
if (clk'event and clk = '0') then
if (rst180_r = '1') then
wrburst_end_cnt <= "000";
elsif ((current_state = FIRST_WRITE) or (current_state = BURST_WRITE)) then
wrburst_end_cnt <= burst_cnt_max;
elsif (wrburst_end_cnt /= "000") then
wrburst_end_cnt <= wrburst_end_cnt - '1';
end if;
end if;
end process;
 
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
rdburst_end_1 <= '0';
else
if(burst_done = '1') then
rdburst_end_1 <= '1';
else
rdburst_end_1 <= '0';
end if;
rdburst_end_2 <= rdburst_end_1;
end if;
end if;
end process;
 
rdburst_end <= rdburst_end_1 or rdburst_end_2;
 
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
wrburst_end_1 <= '0';
else
if (burst_done = '1') then
wrburst_end_1 <= '1';
else
wrburst_end_1 <= '0';
end if;
wrburst_end_2 <= wrburst_end_1;
wrburst_end_3 <= wrburst_end_2;
end if;
end if;
end process;
 
wrburst_end <= wrburst_end_1 or wrburst_end_2 or wrburst_end_3;
 
--******************************************************************************
-- dqs_enable and dqs_reset signals are used to generate DQS signal during write
-- data.
--******************************************************************************
dqs_enable_out <= '1' when ((current_state = FIRST_WRITE) or
(current_state = BURST_WRITE) or
(WRburst_end_cnt /= "000")) else '0';
dqs_reset_out <= '1' when current_state = FIRST_WRITE else '0';
dqs_enable <= dqs_enable_i;
dqs_enable_i <= dqs_enable2;
dqs_reset <= dqs_reset2_clk0;
 
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
dqs_enable_int <= '0';
dqs_reset_int <= '0';
else
dqs_enable_int <= dqs_enable_out;
dqs_reset_int <= dqs_reset_out;
end if;
end if;
end process;
 
process(clk)
begin
if clk'event and clk = '1' then
if rst0_r = '1' then
dqs_enable1 <= '0';
dqs_enable2 <= '0';
dqs_enable3 <= '0';
dqs_reset1_clk0 <= '0';
dqs_reset2_clk0 <= '0';
dqs_reset3_clk0 <= '0';
else
dqs_enable1 <= dqs_enable_int;
dqs_enable2 <= dqs_enable1;
dqs_enable3 <= dqs_enable2;
dqs_reset1_clk0 <= dqs_reset_int;
dqs_reset2_clk0 <= dqs_reset1_clk0;
dqs_reset3_clk0 <= dqs_reset2_clk0;
end if;
end if;
end process;
 
--******************************************************************************
--Write Enable signal to the datapath
--******************************************************************************
 
write_enable_out <= '1' when (wrburst_end_cnt /= "000")else '0';
cmd_ack <= ack_reg;
ack_o <= '1' when ((write_cmd_in = '1') or (write_cmd1 = '1') or
(read_cmd_in = '1') or (read_cmd1 = '1')) else '0';
 
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
write_enable <= '0';
else
write_enable <= write_enable_out;
end if;
end if;
end process;
 
 
ACK_REG_INST1 : FD
port map (
Q => ack_reg,
D => ack_o,
C => clk180
);
 
--******************************************************************************
-- init_done will be asserted when initialization sequence is complete
--******************************************************************************
 
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
init_memory <= '0';
init_done <= '0';
init_done_r1 <= '0';
else
init_memory <= init_mem;
init_done_r1 <= init_done;
if ((init_done_value = '1')and (init_count = "1011")) then
init_done <= '1';
else
init_done <= '0';
end if;
end if;
end if;
end process;
 
init_done_dis <= '1' when ( init_done = '1' and init_done_r1 = '0') else
'0';
process(clk)
begin
if(clk'event and clk = '0') then
if rst180_r = '0' then
--synthesis translate_off
assert (init_done_dis = '0') report "INITIALIZATION_DONE" severity note;
--synthesis translate_on
end if;
end if;
end process;
 
process (clk)
begin
if clk'event and clk = '0' then
if init_cmd_in = '1' or rst180_r = '1' then
init_pre_count <= "1010000";
else
init_pre_count <= init_pre_count - "0000001";
end if;
end if;
end process;
 
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
init_mem <= '0';
elsif (init_cmd_in = '1') then
init_mem <= '1';
elsif ((init_count = "1011") and (count6 = "00000000")) then
init_mem <= '0';
else
init_mem <= init_mem;
end if;
end if;
end process;
 
-- Counter for Memory Initialization sequence
 
 
process(clk)
begin
if(clk'event and clk = '0') then
if rst180_r = '1' then
init_count <= "0000";
elsif(((init_current_state = INIT_PRECHARGE) or
(init_current_state = INIT_LOAD_MODE_REG) or
(init_current_state = INIT_AUTO_REFRESH)) and init_memory = '1') then
init_count <= init_count + '1';
else
init_count <= init_count;
end if;
end if;
end process;
 
init_done_value <= '1' when ((init_count = "1011") and
(dll_rst_count = "00000001")) else '0';
 
-- Counter to count 200 clock cycles When DLL reset is issued during initialization.
 
process(clk)
begin
if(clk'event and clk = '0') then
if rst180_r = '1' then
dll_rst_count <= "00000000";
elsif(init_count = "0100") then
dll_rst_count <= "11001000";
elsif(dll_rst_count /= "00000001") then
dll_rst_count <= dll_rst_count - '1';
else
dll_rst_count <= dll_rst_count;
end if;
end if;
end process;
 
 
go_to_active_value <= '1' when ((write_cmd_in = '1') and (accept_cmd_in = '1'))
or ((read_cmd_in = '1') and (accept_cmd_in = '1'))
else '0';
 
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
go_to_active <= '0';
else
go_to_active <= go_to_active_value;
end if;
end if;
end process;
 
--******************************************************************************
-- Register counter values
--******************************************************************************
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
ar_done_reg <= '0';
rfc_count_reg <= '0';
else
if(rfc_count = "00000010") then
ar_done_reg <= '1';
else
ar_done_reg <= '0';
end if;
if(ar_done_reg = '1') then
rfc_count_reg <= '1';
elsif (init_done = '1' and init_mem = '0' and rfc_count = "00000000")
then
rfc_count_reg <= '1';
elsif (auto_ref_issued = '1') then
rfc_count_reg <= '0';
else
rfc_count_reg <= rfc_count_reg;
end if;
end if;
end if;
end process;
 
--******************************************************************************
-- Initialization state machine
--******************************************************************************
 
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
init_current_state <= INIT_IDLE;
else
init_current_state <= init_next_state;
end if;
end if;
end process;
 
process (rst180_r, init_count, init_current_state, init_memory, count6,
init_pre_count)
begin
if rst180_r = '1' then
init_next_state <= INIT_IDLE;
else
case init_current_state is
when INIT_IDLE =>
if init_memory = '1' then
case init_count is
when "0000" =>
if(init_pre_count = "0000001") then
init_next_state <= INIT_PRECHARGE;
else
init_next_state <= INIT_IDLE;
end if;
when "0001" =>
if (count6 = "00000000") then
init_next_state <= INIT_LOAD_MODE_REG;
else
init_next_state <= INIT_IDLE;
end if;
when "0010" =>
-- for reseting DLL in Base Mode register
if (count6 = "00000000") then
init_next_state <= INIT_LOAD_MODE_REG;
else
init_next_state <= INIT_IDLE;
end if;
when "0011" =>
if (count6 = "00000000") then
init_next_state <= INIT_LOAD_MODE_REG; -- For EMR
else
init_next_state <= INIT_IDLE;
end if;
when "0100" =>
if (count6 = "00000000") then
init_next_state <= INIT_LOAD_MODE_REG; -- For EMR
else
init_next_state <= INIT_IDLE;
end if;
when "0101" =>
if (count6 = "00000000") then
init_next_state <= INIT_PRECHARGE;
else
init_next_state <= INIT_IDLE;
end if;
when "0110" =>
if (count6 = "00000000") then
init_next_state <= INIT_AUTO_REFRESH;
else
init_next_state <= INIT_IDLE;
end if;
when "0111" =>
if (count6 = "00000000") then
init_next_state <= INIT_AUTO_REFRESH;
else
init_next_state <= INIT_IDLE;
end if;
when "1000" =>
-- to deactivate the rst DLL bit in the LMR
if (count6 = "00000000") then
init_next_state <= INIT_LOAD_MODE_REG;
else
init_next_state <= INIT_IDLE;
end if;
when "1001" =>
-- to set OCD to default in EMR
if (count6 = "00000000") then
init_next_state <= INIT_LOAD_MODE_REG;
else
init_next_state <= INIT_IDLE;
end if;
when "1010" =>
if (count6 = "00000000") then
init_next_state <= INIT_LOAD_MODE_REG; -- OCD exit in EMR
else
init_next_state <= INIT_IDLE;
end if;
when "1011" =>
if (count6 = "00000000") then
init_next_state <= INIT_IDLE;
else
init_next_state <= init_current_state;
end if;
when others =>
init_next_state <= INIT_IDLE;
end case;
else
init_next_state <= INIT_IDLE;
end if;
when INIT_PRECHARGE =>
init_next_state <= INIT_IDLE;
when INIT_LOAD_MODE_REG =>
init_next_state <= INIT_IDLE;
when INIT_AUTO_REFRESH =>
init_next_state <= INIT_IDLE;
when others =>
init_next_state <= INIT_IDLE;
end case;
end if;
end process;
 
--******************************************************************************
-- MAIN state machine
--******************************************************************************
 
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
current_state <= IDLE;
else
current_state <= next_state;
end if;
end if;
end process;
 
process (rst180_r, cas_count, wr_count,
go_to_active, write_cmd1, read_cmd3, current_state,
wrburst_end, wrburst_end_cnt,
rdburst_end, init_memory,rcd_count, ras_count,
auto_ref, rfc_count_reg, rp_count)
begin
if rst180_r = '1' then
next_state <= IDLE;
else
case current_state is
when IDLE =>
if (init_memory = '0') then
if(auto_ref = '1' and rfc_count_reg = '1' and rp_count = "000") then
next_state <= AUTO_REFRESH; -- normal Refresh in the IDLE state
elsif go_to_active = '1' then
next_state <= ACTIVE;
else
next_state <= IDLE;
end if;
else
next_state <= IDLE;
end if;
when PRECHARGE =>
next_state <= IDLE;
when AUTO_REFRESH =>
next_state <= IDLE;
when ACTIVE =>
next_state <= ACTIVE_WAIT;
when ACTIVE_WAIT =>
if (rcd_count = "000" and write_cmd1 = '1') then
next_state <= FIRST_WRITE;
elsif (rcd_count = "000" and read_cmd3 = '1') then
next_state <= BURST_READ;
else
next_state <= ACTIVE_WAIT;
end if;
when FIRST_WRITE =>
next_state <= WRITE_WAIT;
when WRITE_WAIT =>
case wrburst_end is
when '1' =>
next_state <= PRECHARGE_AFTER_WRITE;
when '0' =>
if wrburst_end_cnt = "010" then
next_state <= BURST_WRITE;
else
next_state <= WRITE_WAIT;
end if;
when others =>
next_state <= WRITE_WAIT;
end case;
when BURST_WRITE =>
next_state <= WRITE_WAIT;
when PRECHARGE_AFTER_WRITE =>
next_state <= PRECHARGE_AFTER_WRITE_2;
when PRECHARGE_AFTER_WRITE_2 =>
if(wr_count = "00" and ras_count = "00000") then
next_state <= PRECHARGE;
else
next_state <= PRECHARGE_AFTER_WRITE_2;
end if;
when READ_WAIT =>
case rdburst_end is
when '1' =>
next_state <= PRECHARGE_AFTER_WRITE;
when '0' =>
if cas_count = "001" then
next_state <= BURST_READ;
else
next_state <= READ_WAIT;
end if;
when others =>
next_state <= READ_WAIT;
end case;
 
when BURST_READ =>
next_state <= READ_WAIT;
 
when others =>
next_state <= IDLE;
end case;
end if;
end process;
 
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
ddr_address1 <= (others => '0');
elsif (init_mem = '1') then
case (init_count) is
when "0000" | "0101" =>
ddr_address1 <= addr_const1((ROW_ADDRESS - 1) downto 0);
when "0001" =>
ddr_address1 <= (others => '0');
when "0010" =>
ddr_address1 <= (others => '0');
when "0011" =>
ddr_address1 <= emr;
when "0100" =>
ddr_address1 <= lmr_dll_rst;
when "1000" =>
ddr_address1 <= lmr_dll_set;
when "1001" =>
ddr_address1 <= emr or addr_const2((ROW_ADDRESS - 1) downto 0);
when "1010" =>
ddr_address1 <= emr and addr_const3((ROW_ADDRESS - 1) downto 0);
when others =>
ddr_address1 <= (others => '0');
end case;
elsif (current_state = PRECHARGE) then
ddr_address1 <= addr_const1((ROW_ADDRESS - 1) downto 0);
elsif (current_state = ACTIVE) then
ddr_address1 <= row_address_reg;
elsif (current_state = BURST_WRITE or current_state = FIRST_WRITE or
current_state = BURST_READ) then
ddr_address1 <= column_address_reg((ROW_ADDRESS - 1) downto 0);
else
ddr_address1 <= (others => '0');
end if;
end if;
end process;
 
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
ddr_ba1 <= (others => '0');
elsif (init_mem = '1') then
case (init_count) is
when "0001" =>
ddr_ba1 <= ba_const1((BANK_ADDRESS -1) downto 0);
when "0010" =>
ddr_ba1 <= ba_const2((BANK_ADDRESS -1) downto 0);
when "0011" | "1001" | "1010" =>
ddr_ba1 <= ba_const3((BANK_ADDRESS -1) downto 0);
when others =>
ddr_ba1 <= (others => '0');
end case;
elsif (current_state = ACTIVE or current_state = FIRST_WRITE or
current_state = BURST_WRITE or current_state = BURST_READ) then
ddr_ba1 <= ba_address_reg2;
else
ddr_ba1 <= (others => '0');
end if;
end if;
end process;
 
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
odt_deassert <= '0';
elsif(wrburst_end_3 = '1') then
odt_deassert <= '1';
elsif(write_cmd3 = '0') then
odt_deassert <= '0';
else
odt_deassert <= odt_deassert;
end if;
end if;
end process;
 
ddr_odt1 <= '1' when (write_cmd3 = '1' and (emr(6) = '1' or emr(2) = '1') and
odt_deassert = '0') else '0';
 
--******************************************************************************
-- Register CONTROL SIGNALS outputs
--******************************************************************************
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
ddr_odt2 <= '0';
ddr_rasb2 <= '1';
ddr_casb2 <= '1';
ddr_web2 <= '1';
else
ddr_odt2 <= ddr_odt1;
ddr_rasb2 <= ddr_rasb1;
ddr_casb2 <= ddr_casb1;
ddr_web2 <= ddr_web1;
end if;
end if;
end process;
 
process(clk)
begin
if clk'event and clk = '0' then
if rst180_r = '1' then
ddr_odt_cntrl <= '0';
else
ddr_odt_cntrl <= ddr_odt2;
end if;
end if;
end process;
 
--******************************************************************************
-- control signals to the Memory
--******************************************************************************
 
ddr_rasb1 <= '0' when (current_state = ACTIVE or current_state = PRECHARGE or
current_state = AUTO_REFRESH or
init_current_state = INIT_PRECHARGE or
init_current_state = INIT_AUTO_REFRESH or
init_current_state = INIT_LOAD_MODE_REG) else '1';
 
ddr_casb1 <= '0' when (current_state = BURST_READ or
current_state = BURST_WRITE or
current_state = FIRST_WRITE or
current_state = AUTO_REFRESH or
init_current_state = INIT_AUTO_REFRESH or
init_current_state = INIT_LOAD_MODE_REG) else '1';
 
ddr_web1 <= '0' when (current_state = BURST_WRITE or
current_state = FIRST_WRITE or
current_state = PRECHARGE or
init_current_state = INIT_PRECHARGE or
init_current_state = INIT_LOAD_MODE_REG) else '1';
 
-------------------------------------------------------------------------------
 
process(clk)
begin
if(clk'event and clk = '0') then
if rst180_r = '1' then
dqs_div_cascount <= "000";
else
if(ddr_rasb2 = '1' and ddr_casb2 = '0' and ddr_web2 = '1') then
dqs_div_cascount <= burst_cnt_max;
else
if dqs_div_cascount /= "000" then
dqs_div_cascount <= dqs_div_cascount - "001";
else
dqs_div_cascount <= dqs_div_cascount;
end if;
end if;
end if;
end if;
end process;
 
process(clk)
begin
if(clk'event and clk = '0') then
if rst180_r = '1' then
dqs_div_rdburstcount <= "000";
else
if (dqs_div_cascount = "001" and burst_length = "010") then
dqs_div_rdburstcount <= "010";
elsif (dqs_div_cascount = "011" and burst_length = "011") then
dqs_div_rdburstcount <= "100";
else
if dqs_div_rdburstcount /= "000" then
dqs_div_rdburstcount <= dqs_div_rdburstcount - "001";
else
dqs_div_rdburstcount <= dqs_div_rdburstcount;
end if;
end if;
end if;
end if;
end process;
 
process(clk)
begin
if(clk'event and clk = '0') then
if rst180_r = '1' then
rst_dqs_div_r <= '0';
else
if (dqs_div_cascount = "001" and burst_length = "010")then
rst_dqs_div_r <= '1';
elsif (dqs_div_cascount = "011" and burst_length = "011")then
rst_dqs_div_r <= '1';
else
if (dqs_div_rdburstcount = "001" and dqs_div_cascount = "000") then
rst_dqs_div_r <= '0';
else
rst_dqs_div_r <= rst_dqs_div_r;
end if;
end if;
end if;
end if;
end process;
 
process(clk) -- For Reg dimm
begin
if(clk'event and clk = '0') then
rst_dqs_div_r1 <= rst_dqs_div_r;
end if;
end process;
 
process (clk)
begin
if (clk'event and clk = '0') then
if (dqs_div_cascount /= "000" or dqs_div_rdburstcount /= "000") then
rst_calib <= '1';
else
rst_calib <= '0';
end if;
end if;
end process;
 
rst_iob_out : FD
port map (
Q => rst_dqs_div_int1,
D => rst_dqs_div_r,
C => clk
);
 
--Read fifo read enable logic, this signal is same as rst_dqs_div_int signal for RDIMM
--and one clock ahead of rst_dqs_div_int for component or UDIMM OR SODIMM.
process(clk)
begin
if clk'event and clk = '0' then
read_fifo_rden <= rst_dqs_div_r1;
end if;
end process;
end arc;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_infrastructure_top.vhd
0,0 → 1,293
--*****************************************************************************
-- 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 2005, 2006, 2007, 2008 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_infrastructure_top.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose : This module has instantiations clk_dcm,cal_top and generate
-- reset signals to the design
--*****************************************************************************
 
library ieee;
library UNISIM;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use UNISIM.VCOMPONENTS.all;
use work.DDR2_Ram_Core_parameters_0.all;
 
entity DDR2_Ram_Core_infrastructure_top is
port(
reset_in_n : in std_logic;
sys_clk : in std_logic;
sys_clkb : in std_logic;
sys_clk_in : in std_logic;
delay_sel_val1_val : out std_logic_vector(4 downto 0);
sys_rst_val : out std_logic;
sys_rst90_val : out std_logic;
clk_int_val : out std_logic;
clk90_int_val : out std_logic;
sys_rst180_val : out std_logic;
wait_200us : out std_logic;
-- debug signals
dbg_phase_cnt : out std_logic_vector(4 downto 0);
dbg_cnt : out std_logic_vector(5 downto 0);
dbg_trans_onedtct : out std_logic;
dbg_trans_twodtct : out std_logic;
dbg_enb_trans_two_dtct : out std_logic
);
 
end DDR2_Ram_Core_infrastructure_top;
 
architecture arc of DDR2_Ram_Core_infrastructure_top is
 
component DDR2_Ram_Core_clk_dcm
port(
input_clk : in std_logic;
rst : in std_logic;
clk : out std_logic;
clk90 : out std_logic;
dcm_lock : out std_logic
);
end component;
 
component DDR2_Ram_Core_cal_top
port (
clk : in std_logic;
clk0dcmlock : in std_logic;
reset : in std_logic;
tapfordqs : out std_logic_vector(4 downto 0);
dbg_phase_cnt : out std_logic_vector(4 downto 0);
dbg_cnt : out std_logic_vector(5 downto 0);
dbg_trans_onedtct : out std_logic;
dbg_trans_twodtct : out std_logic;
dbg_enb_trans_two_dtct : out std_logic
);
end component;
 
signal user_rst : std_logic;
signal user_cal_rst : std_logic;
signal clk_int : std_logic;
signal clk90_int : std_logic;
signal dcm_lock : std_logic;
signal sys_rst_o : std_logic;
signal sys_rst_1 : std_logic := '1';
signal sys_rst : std_logic;
signal sys_rst90_o : std_logic;
signal sys_rst90_1 : std_logic := '1';
signal sys_rst90 : std_logic;
signal sys_rst180_o : std_logic;
signal sys_rst180_1 : std_logic := '1';
signal sys_rst180 : std_logic;
signal delay_sel_val1 : std_logic_vector(4 downto 0);
signal clk_int_val1 : std_logic;
signal clk_int_val2 : std_logic;
signal clk90_int_val1 : std_logic;
signal clk90_int_val2 : std_logic;
signal wait_200us_i : std_logic;
signal wait_200us_int : std_logic;
signal wait_clk90 : std_logic;
signal wait_clk270 : std_logic;
signal counter200 : std_logic_vector(15 downto 0);
signal sys_clk_ibuf : std_logic;
 
begin
 
DIFF_ENDED_CLKS_INST : if(CLK_TYPE = "DIFFERENTIAL") generate
begin
SYS_CLK_INST : IBUFGDS_LVDS_25
port map(
I => sys_clk,
IB => sys_clkb,
O => sys_clk_ibuf
);
end generate;
 
SINGLE_ENDED_CLKS_INST : if(CLK_TYPE = "SINGLE_ENDED") generate
begin
SYS_CLK_INST : IBUFG
port map(
I => sys_clk_in,
O => sys_clk_ibuf
);
end generate;
 
clk_int_val <= clk_int;
clk90_int_val <= clk90_int;
sys_rst_val <= sys_rst;
sys_rst90_val <= sys_rst90;
sys_rst180_val <= sys_rst180;
delay_sel_val1_val <= delay_sel_val1;
 
 
-- To remove delta delays in the clock signals observed during simulation
-- ,Following signals are used
 
clk_int_val1 <= clk_int;
clk90_int_val1 <= clk90_int;
clk_int_val2 <= clk_int_val1;
clk90_int_val2 <= clk90_int_val1;
user_rst <= not reset_in_n when RESET_ACTIVE_LOW = '1' else reset_in_n;
user_cal_rst <= reset_in_n when RESET_ACTIVE_LOW = '1' else not reset_in_n;
 
process(clk_int_val2)
begin
if clk_int_val2'event and clk_int_val2 = '1' then
if user_rst = '1' or dcm_lock = '0' then
wait_200us_i <= '1';
counter200 <= (others => '0');
else
if( counter200 < 33400) then
wait_200us_i <= '1';
counter200 <= counter200 + 1;
else
counter200 <= counter200;
wait_200us_i <= '0';
end if;
end if;
end if;
end process;
 
process(clk_int_val2)
begin
if clk_int_val2'event and clk_int_val2 = '1' then
wait_200us <= wait_200us_i;
end if;
end process;
 
process(clk_int_val2)
begin
if clk_int_val2'event and clk_int_val2 = '1' then
wait_200us_int <= wait_200us_i;
end if;
end process;
 
process(clk90_int_val2)
begin
if clk90_int_val2'event and clk90_int_val2 = '0' then
if user_rst = '1' or dcm_lock = '0' then
wait_clk270 <= '1';
else
wait_clk270 <= wait_200us_int;
end if;
end if;
end process;
 
process(clk90_int_val2)
begin
if clk90_int_val2'event and clk90_int_val2 = '1' then
wait_clk90 <= wait_clk270;
end if;
end process;
 
process(clk_int_val2)
begin
if clk_int_val2'event and clk_int_val2 = '1' then
if user_rst = '1' or dcm_lock = '0' or wait_200us_int = '1' then
sys_rst_o <= '1';
sys_rst_1 <= '1';
sys_rst <= '1';
else
sys_rst_o <= '0';
sys_rst_1 <= sys_rst_o;
sys_rst <= sys_rst_1;
end if;
end if;
end process;
 
process(clk90_int_val2)
begin
if clk90_int_val2'event and clk90_int_val2 = '1' then
if user_rst = '1' or dcm_lock = '0' or wait_clk90 = '1' then
sys_rst90_o <= '1';
sys_rst90_1 <= '1';
sys_rst90 <= '1';
else
sys_rst90_o <= '0';
sys_rst90_1 <= sys_rst90_o;
sys_rst90 <= sys_rst90_1;
end if;
end if;
end process;
 
process(clk_int_val2)
begin
if clk_int_val2'event and clk_int_val2 = '0' then
if user_rst = '1' or dcm_lock = '0' or wait_clk270 = '1' then
sys_rst180_o <= '1';
sys_rst180_1 <= '1';
sys_rst180 <= '1';
else
sys_rst180_o <= '0';
sys_rst180_1 <= sys_rst180_o;
sys_rst180 <= sys_rst180_1;
end if;
end if;
end process;
 
clk_dcm0 : DDR2_Ram_Core_clk_dcm
port map (
input_clk => sys_clk_ibuf,
rst => user_rst,
clk => clk_int,
clk90 => clk90_int,
dcm_lock => dcm_lock
);
 
cal_top0 : DDR2_Ram_Core_cal_top
port map (
clk => clk_int_val2,
clk0dcmlock => dcm_lock,
reset => user_cal_rst,
tapfordqs => delay_sel_val1,
dbg_phase_cnt => dbg_phase_cnt,
dbg_cnt => dbg_cnt,
dbg_trans_onedtct => dbg_trans_onedtct,
dbg_trans_twodtct => dbg_trans_twodtct,
dbg_enb_trans_two_dtct => dbg_enb_trans_two_dtct
);
 
end arc;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_data_path_0.vhd
0,0 → 1,210
--*****************************************************************************
-- 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 2005, 2006, 2007, 2008 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_data_path_0.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose : This module has the write and read data paths for the
-- DDR2 memory interface. The write data along with write enable
-- signals are forwarded to the DDR IOB FFs. The read data is
-- captured in CLB FFs and finally input to FIFOs.
--*****************************************************************************
 
library ieee;
library UNISIM;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use UNISIM.VCOMPONENTS.all;
use work.DDR2_Ram_Core_parameters_0.all;
 
entity DDR2_Ram_Core_data_path_0 is
port(
user_input_data : in std_logic_vector(((2*DATA_WIDTH)-1) downto 0);
user_data_mask : in std_logic_vector((2*DATA_MASK_WIDTH-1) downto 0);
clk : in std_logic;
clk90 : in std_logic;
reset : in std_logic;
reset90 : in std_logic;
write_enable : in std_logic;
rst_dqs_div_in : in std_logic;
delay_sel : in std_logic_vector(4 downto 0);
dqs_int_delay_in : in std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
dq : in std_logic_vector((DATA_WIDTH-1) downto 0);
u_data_val : out std_logic;
user_output_data : out std_logic_vector(((2*DATA_WIDTH)-1) downto 0);
write_en_val : out std_logic;
data_mask_f : out std_logic_vector((DATA_MASK_WIDTH-1) downto 0);
data_mask_r : out std_logic_vector((DATA_MASK_WIDTH-1) downto 0);
write_data_falling : out std_logic_vector((DATA_WIDTH-1) downto 0);
write_data_rising : out std_logic_vector((DATA_WIDTH-1) downto 0);
read_fifo_rden : in std_logic; -- Added new signal
-- debug signals
vio_out_dqs : in std_logic_vector(4 downto 0);
vio_out_dqs_en : in std_logic;
vio_out_rst_dqs_div : in std_logic_vector(4 downto 0);
vio_out_rst_dqs_div_en : in std_logic
);
end DDR2_Ram_Core_data_path_0;
 
architecture arc of DDR2_Ram_Core_data_path_0 is
 
component DDR2_Ram_Core_data_read_0
port(
clk90 : in std_logic;
reset90 : in std_logic;
ddr_dq_in : in std_logic_vector((DATA_WIDTH-1) downto 0);
fifo_0_wr_en : in std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
fifo_1_wr_en : in std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
fifo_0_wr_addr : in std_logic_vector((4*DATA_STROBE_WIDTH)-1 downto 0);
fifo_1_wr_addr : in std_logic_vector((4*DATA_STROBE_WIDTH)-1 downto 0);
dqs_delayed_col0 : in std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
dqs_delayed_col1 : in std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
read_fifo_rden : in std_logic;
user_output_data : out std_logic_vector(((2*DATA_WIDTH)-1) downto 0);
u_data_val : out std_logic
 
);
end component;
 
component DDR2_Ram_Core_data_read_controller_0
port(
clk : in std_logic;
reset : in std_logic;
rst_dqs_div_in : in std_logic;
delay_sel : in std_logic_vector(4 downto 0);
dqs_int_delay_in : in std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
fifo_0_wr_en_val : out std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
fifo_1_wr_en_val : out std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
fifo_0_wr_addr_val : out std_logic_vector((4*DATA_STROBE_WIDTH)-1 downto 0);
fifo_1_wr_addr_val : out std_logic_vector((4*DATA_STROBE_WIDTH)-1 downto 0);
dqs_delayed_col0_val : out std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
dqs_delayed_col1_val : out std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
vio_out_dqs : in std_logic_vector(4 downto 0);
vio_out_dqs_en : in std_logic;
vio_out_rst_dqs_div : in std_logic_vector(4 downto 0);
vio_out_rst_dqs_div_en : in std_logic
);
end component;
 
component DDR2_Ram_Core_data_write_0
port(
user_input_data : in std_logic_vector(((2*DATA_WIDTH)-1) downto 0);
user_data_mask : in std_logic_vector((2*DATA_MASK_WIDTH-1) downto 0);
clk90 : in std_logic;
write_enable : in std_logic;
write_en_val : out std_logic;
data_mask_f : out std_logic_vector((DATA_MASK_WIDTH-1) downto 0);
data_mask_r : out std_logic_vector((DATA_MASK_WIDTH-1) downto 0);
write_data_falling : out std_logic_vector((DATA_WIDTH-1) downto 0);
write_data_rising : out std_logic_vector((DATA_WIDTH-1) downto 0)
);
end component;
 
 
signal fifo0_rd_addr : std_logic_vector(3 downto 0);
signal fifo1_rd_addr : std_logic_vector(3 downto 0);
signal read_valid_data_1 : std_logic;
signal fifo_0_wr_addr : std_logic_vector((4*DATA_STROBE_WIDTH)-1 downto 0);
signal fifo_1_wr_addr : std_logic_vector((4*DATA_STROBE_WIDTH)-1 downto 0);
signal fifo_0_wr_en : std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
signal fifo_1_wr_en : std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
signal dqs_delayed_col0 : std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
signal dqs_delayed_col1 : std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
 
begin
 
data_read0 : DDR2_Ram_Core_data_read_0
port map (
clk90 => clk90,
reset90 => reset90,
ddr_dq_in => dq,
fifo_0_wr_en => fifo_0_wr_en,
fifo_1_wr_en => fifo_1_wr_en,
fifo_0_wr_addr => fifo_0_wr_addr,
fifo_1_wr_addr => fifo_1_wr_addr,
dqs_delayed_col0 => dqs_delayed_col0,
dqs_delayed_col1 => dqs_delayed_col1,
read_fifo_rden => read_fifo_rden,
user_output_data => user_output_data,
u_data_val => u_data_val
);
 
data_read_controller0 : DDR2_Ram_Core_data_read_controller_0
port map (
clk => clk,
reset => reset,
rst_dqs_div_in => rst_dqs_div_in,
delay_sel => delay_sel,
dqs_int_delay_in => dqs_int_delay_in,
fifo_0_wr_en_val => fifo_0_wr_en,
fifo_1_wr_en_val => fifo_1_wr_en,
fifo_0_wr_addr_val => fifo_0_wr_addr,
fifo_1_wr_addr_val => fifo_1_wr_addr,
dqs_delayed_col0_val => dqs_delayed_col0,
dqs_delayed_col1_val => dqs_delayed_col1,
vio_out_dqs => vio_out_dqs,
vio_out_dqs_en => vio_out_dqs_en,
vio_out_rst_dqs_div => vio_out_rst_dqs_div,
vio_out_rst_dqs_div_en => vio_out_rst_dqs_div_en
);
 
data_write0 : DDR2_Ram_Core_data_write_0
port map (
user_input_data => user_input_data,
user_data_mask => user_data_mask,
clk90 => clk90,
write_enable => write_enable,
write_en_val => write_en_val,
write_data_falling => write_data_falling,
write_data_rising => write_data_rising,
data_mask_f => data_mask_f,
data_mask_r => data_mask_r
);
 
 
 
end arc;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_iobs_0.vhd
0,0 → 1,225
--*****************************************************************************
-- 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 2005, 2006, 2007 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_iobs_0.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose : This module has the instantiations infrastructure_iobs,
-- data_path_iobs and controller_iobs modules.
--*****************************************************************************
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use work.DDR2_Ram_Core_parameters_0.all;
 
 
library UNISIM;
use UNISIM.VCOMPONENTS.all;
 
 
entity DDR2_Ram_Core_iobs_0 is
port(
clk : in std_logic;
clk90 : in std_logic;
ddr_rasb_cntrl : in std_logic;
ddr_casb_cntrl : in std_logic;
ddr_web_cntrl : in std_logic;
ddr_cke_cntrl : in std_logic;
ddr_csb_cntrl : in std_logic;
ddr_address_cntrl : in std_logic_vector((ROW_ADDRESS -1) downto 0);
ddr_ba_cntrl : in std_logic_vector((BANK_ADDRESS -1) downto 0);
ddr_odt_cntrl : in std_logic;
rst_dqs_div_int : in std_logic;
dqs_reset : in std_logic;
dqs_enable : in std_logic;
ddr_dqs : inout std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
ddr_dqs_n : inout std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
ddr_dq : inout std_logic_vector((DATA_WIDTH-1) downto 0);
write_data_falling : in std_logic_vector((DATA_WIDTH-1) downto 0);
write_data_rising : in std_logic_vector((DATA_WIDTH-1) downto 0);
write_en_val : in std_logic;
data_mask_f : in std_logic_vector((DATA_MASK_WIDTH-1) downto 0);
data_mask_r : in std_logic_vector((DATA_MASK_WIDTH-1) downto 0);
ddr_odt : out std_logic;
ddr2_ck : out std_logic_vector((CLK_WIDTH-1) downto 0);
ddr2_ck_n : out std_logic_vector((CLK_WIDTH-1) downto 0);
ddr_rasb : out std_logic;
ddr_casb : out std_logic;
ddr_web : out std_logic;
ddr_ba : out std_logic_vector((BANK_ADDRESS -1) downto 0);
ddr_address : out std_logic_vector((ROW_ADDRESS -1) downto 0);
ddr_cke : out std_logic;
ddr_csb : out std_logic;
rst_dqs_div : out std_logic;
rst_dqs_div_in : in std_logic;
rst_dqs_div_out : out std_logic;
dqs_int_delay_in : out std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
ddr_dm : out std_logic_vector((DATA_MASK_WIDTH-1) downto 0);
dq : out std_logic_vector((DATA_WIDTH-1) downto 0)
);
end DDR2_Ram_Core_iobs_0;
 
 
architecture arc of DDR2_Ram_Core_iobs_0 is
 
ATTRIBUTE X_CORE_INFO : STRING;
ATTRIBUTE CORE_GENERATION_INFO : STRING;
 
ATTRIBUTE X_CORE_INFO of arc : ARCHITECTURE IS "mig_v3_61_ddr2_sp3, Coregen 12.4";
ATTRIBUTE CORE_GENERATION_INFO of arc : ARCHITECTURE IS "ddr2_sp3,mig_v3_61,{component_name=ddr2_sp3, data_width=16, memory_width=8, clk_width=1, bank_address=2, row_address=13, column_address=10, no_of_cs=1, cke_width=1, registered=0, data_mask=1, mask_enable=1, load_mode_register=0010100110010, ext_load_mode_register=0000000000000, language=VHDL, synthesis_tool=ISE, interface_type=DDR2_SDRAM, no_of_controllers=1}";
 
component DDR2_Ram_Core_infrastructure_iobs_0
port(
ddr2_ck : out std_logic_vector((CLK_WIDTH-1) downto 0);
ddr2_ck_n : out std_logic_vector((CLK_WIDTH-1) downto 0);
clk0 : in std_logic
);
end component;
 
component DDR2_Ram_Core_controller_iobs_0
port(
clk0 : in std_logic;
ddr_rasb_cntrl : in std_logic;
ddr_casb_cntrl : in std_logic;
ddr_web_cntrl : in std_logic;
ddr_cke_cntrl : in std_logic;
ddr_csb_cntrl : in std_logic;
ddr_address_cntrl : in std_logic_vector((ROW_ADDRESS -1) downto 0);
ddr_ba_cntrl : in std_logic_vector((BANK_ADDRESS -1) downto 0);
ddr_odt_cntrl : in std_logic;
rst_dqs_div_int : in std_logic;
ddr_rasb : out std_logic;
ddr_casb : out std_logic;
ddr_web : out std_logic;
ddr_ba : out std_logic_vector((BANK_ADDRESS -1) downto 0);
ddr_address : out std_logic_vector((ROW_ADDRESS -1) downto 0);
ddr_cke : out std_logic;
ddr_csb : out std_logic;
ddr_ODT : out std_logic;
rst_dqs_div : out std_logic;
rst_dqs_div_in : in std_logic;
rst_dqs_div_out : out std_logic
);
end component;
 
component DDR2_Ram_Core_data_path_iobs_0
port(
clk : in std_logic;
clk90 : in std_logic;
dqs_reset : in std_logic;
dqs_enable : in std_logic;
ddr_dq : inout std_logic_vector((DATA_WIDTH-1) downto 0);
ddr_dqs : inout std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
ddr_dqs_n : inout std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
write_data_falling : in std_logic_vector((DATA_WIDTH-1) downto 0);
write_data_rising : in std_logic_vector((DATA_WIDTH-1) downto 0);
write_en_val : in std_logic;
data_mask_f : in std_logic_vector((DATA_MASK_WIDTH-1) downto 0);
data_mask_r : in std_logic_vector((DATA_MASK_WIDTH-1) downto 0);
dqs_int_delay_in : out std_logic_vector((DATA_STROBE_WIDTH-1) downto 0);
ddr_dm : out std_logic_vector((DATA_MASK_WIDTH-1) downto 0);
ddr_dq_val : out std_logic_vector((DATA_WIDTH-1) downto 0)
);
end component;
 
begin
 
infrastructure_iobs0 : DDR2_Ram_Core_infrastructure_iobs_0
port map (
clk0 => clk,
ddr2_ck => ddr2_ck,
ddr2_ck_n => ddr2_ck_n
);
 
controller_iobs0 : DDR2_Ram_Core_controller_iobs_0
port map (
clk0 => clk,
ddr_rasb_cntrl => ddr_rasb_cntrl,
ddr_casb_cntrl => ddr_casb_cntrl,
ddr_web_cntrl => ddr_web_cntrl,
ddr_cke_cntrl => ddr_cke_cntrl,
ddr_csb_cntrl => ddr_csb_cntrl,
ddr_odt_cntrl => ddr_odt_cntrl,
ddr_address_cntrl => ddr_address_cntrl((ROW_ADDRESS -1) downto 0),
ddr_ba_cntrl => ddr_ba_cntrl((BANK_ADDRESS -1) downto 0),
rst_dqs_div_int => rst_dqs_div_int,
ddr_rasb => ddr_rasb,
ddr_casb => ddr_casb,
ddr_web => ddr_web,
ddr_ba => ddr_ba((BANK_ADDRESS -1) downto 0),
ddr_address => ddr_address((ROW_ADDRESS -1) downto 0),
ddr_cke => ddr_cke,
ddr_csb => ddr_csb,
ddr_odt => ddr_odt,
rst_dqs_div => rst_dqs_div,
rst_dqs_div_in => rst_dqs_div_in,
rst_dqs_div_out => rst_dqs_div_out
);
 
datapath_iobs0 : DDR2_Ram_Core_data_path_iobs_0
port map (
clk => clk,
clk90 => clk90,
dqs_reset => dqs_reset,
dqs_enable => dqs_enable,
ddr_dqs => ddr_dqs,
ddr_dqs_n => ddr_dqs_n,
ddr_dq => ddr_dq,
write_data_falling => write_data_falling,
write_data_rising => write_data_rising,
write_en_val => write_en_val,
data_mask_f => data_mask_f,
data_mask_r => data_mask_r,
dqs_int_delay_in => dqs_int_delay_in,
ddr_dm => ddr_dm,
ddr_dq_val => dq
);
 
end arc;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_infrastructure_iobs_0.vhd
0,0 → 1,125
--*****************************************************************************
-- 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 2005, 2006, 2007 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_infrastructure_iobs_0.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose : This module has the FDDRRSE instantiations to the clocks.
--*****************************************************************************
 
library ieee;
library UNISIM;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use UNISIM.VCOMPONENTS.all;
use work.DDR2_Ram_Core_parameters_0.all;
 
entity DDR2_Ram_Core_infrastructure_iobs_0 is
port(
ddr2_ck : out std_logic_vector((CLK_WIDTH-1) downto 0);
ddr2_ck_n : out std_logic_vector((CLK_WIDTH-1) downto 0);
clk0 : in std_logic
);
end DDR2_Ram_Core_infrastructure_iobs_0;
 
architecture arc of DDR2_Ram_Core_infrastructure_iobs_0 is
 
signal ddr2_clk_q : std_logic;
signal vcc : std_logic;
signal gnd : std_logic;
signal clk180 : std_logic;
 
---- **************************************************
---- iob attributes for instantiated FDDRRSE components
---- **************************************************
begin
 
gnd <= '0';
vcc <= '1';
clk180 <= not clk0;
--- ***********************************
---- This includes instantiation of the output DDR flip flop
---- for ddr clk's and dimm clk's
---- ***********************************************************
 
U_clk_i : FDDRRSE
port map (
Q => ddr2_clk_q,
C0 => clk0,
C1 => clk180,
CE => vcc,
D0 => vcc,
D1 => gnd,
R => gnd,
S => gnd
);
 
 
 
---- ******************************************
---- Ouput BUffers for ddr clk's and dimm clk's
---- ******************************************
 
r_inst : OBUFDS
port map (
I => ddr2_clk_q,
O => ddr2_ck(0),
OB => ddr2_ck_n(0)
);
 
 
 
end arc;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_fifo_0_wr_en_0.vhd
0,0 → 1,92
--*****************************************************************************
-- 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 2005, 2006, 2007 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_fifo_0_wr_en_0.v
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose : This module generate the write enable signal to the fifos,
-- which are driven by negedge of data strobe
--*****************************************************************************
 
library ieee;
library UNISIM;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use UNISIM.VCOMPONENTS.all;
 
entity DDR2_Ram_Core_fifo_0_wr_en_0 is
port (
clk : in std_logic;
reset : in std_logic;
din : in std_logic;
rst_dqs_delay_n : out std_logic;
dout : out std_logic
);
 
end DDR2_Ram_Core_fifo_0_wr_en_0;
 
architecture arc of DDR2_Ram_Core_fifo_0_wr_en_0 is
 
signal din_delay : std_ulogic;
signal tie_high : std_ulogic;
begin
 
rst_dqs_delay_n <= not din_delay;
dout <= din or din_delay;
tie_high <= '1';
 
delay_ff : FDCE
port map (
Q => din_delay,
C => clk,
CE => tie_high,
CLR => reset,
D => din
);
 
end arc;
/ipcore_dir/DDR2_Ram_Core/user_design/rtl/DDR2_Ram_Core_fifo_1_wr_en_0.vhd
0,0 → 1,94
--*****************************************************************************
-- 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 2005, 2006, 2007 Xilinx, Inc.
-- All rights reserved.
--
-- This disclaimer and copyright notice must be retained as part
-- of this file at all times.
--*****************************************************************************
-- ____ ____
-- / /\/ /
-- /___/ \ / Vendor : Xilinx
-- \ \ \/ Version : 3.6.1
-- \ \ Application : MIG
-- / / Filename : DDR2_Ram_Core_fifo_0_wr_en_0.vhd
-- /___/ /\ Date Last Modified : $Date: 2010/11/26 18:25:42 $
-- \ \ / \ Date Created : Mon May 2 2005
-- \___\/\___\
-- Device : Spartan-3/3A/3A-DSP
-- Design Name : DDR2 SDRAM
-- Purpose : This module generate the write enable signal to the fifos,
-- which are driven by posedge of data strobe
--*****************************************************************************
 
library ieee;
library UNISIM;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use UNISIM.VCOMPONENTS.all;
 
entity DDR2_Ram_Core_fifo_1_wr_en_0 is
port (
clk : in std_logic;
rst_dqs_delay_n : in std_logic;
reset : in std_logic;
din : in std_logic;
dout : out std_logic
);
end DDR2_Ram_Core_fifo_1_wr_en_0;
 
architecture arc of DDR2_Ram_Core_fifo_1_wr_en_0 is
 
signal din_delay : std_ulogic;
signal tie_high : std_ulogic;
signal dout0 : std_ulogic;
signal rst_dqs_delay : std_logic;
 
begin
 
rst_dqs_delay <= not rst_dqs_delay_n;
dout0 <= din and rst_dqs_delay_n;
dout <= rst_dqs_delay or din_delay;
tie_high <= '1';
 
delay_ff_1 : FDCE
port map (
Q => din_delay,
C => clk,
CE => tie_high,
CLR => reset,
D => dout0
);
 
end arc;
ipcore_dir/DDR2_Ram_Core/user_design/rtl Property changes : Added: bugtraq:number ## -0,0 +1 ## +true \ No newline at end of property Index: ipcore_dir/DDR2_Ram_Core/user_design/par/UB_DDR2_64bit_UCF.ucf =================================================================== --- ipcore_dir/DDR2_Ram_Core/user_design/par/UB_DDR2_64bit_UCF.ucf (nonexistent) +++ ipcore_dir/DDR2_Ram_Core/user_design/par/UB_DDR2_64bit_UCF.ucf (revision 2) @@ -0,0 +1,644 @@ +######################################### +# File : UB_DDR2_64bit_UCF.ucf +# Autor : UB +# +# Constraint-File fuer das externe DDR2-SDRAM +# auf dem Spartan-3A Board (MT47H32M16xx-3) +# +# Size = 64MByte +# +######################################### + +######################################### +# Port-Zuweisungen +######################################### +# +# ---------------------------------------------------- +# -- DDR2 SDRAM-Port-Pins +# ---------------------------------------------------- +# cntrl0_ddr2_a : out std_logic_vector(12 downto 0) := (others => '0'); +# cntrl0_ddr2_ba : out std_logic_vector(1 downto 0) := (others => '0'); +# cntrl0_ddr2_ck : out std_logic_vector(0 downto 0) := (others => '0'); +# cntrl0_ddr2_ck_n : out std_logic_vector(0 downto 0) := (others => '0'); +# cntrl0_ddr2_cke : out std_logic := '0'; +# cntrl0_ddr2_cs_n : out std_logic := '0'; +# cntrl0_ddr2_ras_n : out std_logic := '0'; +# cntrl0_ddr2_cas_n : out std_logic := '0'; +# cntrl0_ddr2_we_n : out std_logic := '0'; +# cntrl0_ddr2_odt : out std_logic := '0'; +# cntrl0_ddr2_dm : out std_logic_vector(1 downto 0) := (others => '0'); +# cntrl0_ddr2_dqs_n : inout std_logic_vector(1 downto 0) := (others => '0'); +# cntrl0_ddr2_dqs : inout std_logic_vector(1 downto 0) := (others => '0'); +# cntrl0_ddr2_dq : inout std_logic_vector(15 downto 0) := (others => '0'); +# cntrl0_rst_dqs_div_in : in std_logic; +# cntrl0_rst_dqs_div_out : out std_logic +# ---------------------------------------------------- +# +######################################### + +##################################################################################################################### +## Clock constraints +##################################################################################################################### +NET "INST_DDR2_RAM_CORE/infrastructure_top0/sys_clk_ibuf" TNM_NET = "SYS_CLK"; +TIMESPEC "TS_SYS_CLK" = PERIOD "SYS_CLK" 7.5187 ns HIGH 50 %; + +####################################################################################################################### +## Calibration Circuit Constraints +####################################################################################################################### +## Placement constraints for LUTS in tap delay ckt +####################################################################################################################### + + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l0" RLOC=X0Y6; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l0" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l1" RLOC=X0Y6; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l1" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l2" RLOC=X0Y7; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l2" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l3" RLOC=X0Y7; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l3" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l4" RLOC=X1Y6; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l4" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l5" RLOC=X1Y6; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l5" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l6" RLOC=X1Y7; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l6" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l7" RLOC=X1Y7; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l7" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l8" RLOC=X0Y4; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l8" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l9" RLOC=X0Y4; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l9" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l10" RLOC=X0Y5; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l10" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l11" RLOC=X0Y5; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l11" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l12" RLOC=X1Y4; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l12" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l13" RLOC=X1Y4; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l13" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l14" RLOC=X1Y5; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l14" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l15" RLOC=X1Y5; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l15" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l16" RLOC=X0Y2; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l16" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l17" RLOC=X0Y2; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l17" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l18" RLOC=X0Y3; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l18" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l19" RLOC=X0Y3; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l19" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l20" RLOC=X1Y2; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l20" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l21" RLOC=X1Y2; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l21" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l22" RLOC=X1Y3; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l22" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l23" RLOC=X1Y3; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l23" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l24" RLOC=X0Y0; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l24" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l25" RLOC=X0Y0; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l25" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l26" RLOC=X0Y1; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l26" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l27" RLOC=X0Y1; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l27" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l28" RLOC=X1Y0; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l28" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l29" RLOC=X1Y0; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l29" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l30" RLOC=X1Y1; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l30" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l31" RLOC=X1Y1; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l31" U_SET = delay_calibration_chain; + +####################################################################################################################### +# Placement constraints for first stage flops in tap delay ckt # +####################################################################################################################### + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[0].r" RLOC=X0Y6; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[0].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[1].r" RLOC=X0Y6; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[1].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[2].r" RLOC=X0Y7; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[2].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[3].r" RLOC=X0Y7; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[3].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[4].r" RLOC=X1Y6; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[4].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[5].r" RLOC=X1Y6; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[5].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[6].r" RLOC=X1Y7; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[6].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[7].r" RLOC=X1Y7; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[7].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[8].r" RLOC=X0Y4; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[8].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[9].r" RLOC=X0Y4; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[9].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[10].r" RLOC=X0Y5; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[10].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[11].r" RLOC=X0Y5; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[11].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[12].r" RLOC=X1Y4; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[12].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[13].r" RLOC=X1Y4; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[13].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[14].r" RLOC=X1Y5; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[14].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[15].r" RLOC=X1Y5; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[15].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[16].r" RLOC=X0Y2; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[16].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[17].r" RLOC=X0Y2; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[17].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[18].r" RLOC=X0Y3; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[18].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[19].r" RLOC=X0Y3; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[19].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[20].r" RLOC=X1Y2; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[20].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[21].r" RLOC=X1Y2; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[21].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[22].r" RLOC=X1Y3; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[22].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[23].r" RLOC=X1Y3; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[23].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[24].r" RLOC=X0Y0; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[24].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[25].r" RLOC=X0Y0; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[25].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[26].r" RLOC=X0Y1; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[26].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[27].r" RLOC=X0Y1; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[27].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[28].r" RLOC=X1Y0; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[28].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[29].r" RLOC=X1Y0; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[29].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[30].r" RLOC=X1Y1; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[30].r" U_SET = delay_calibration_chain; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[31].r" RLOC=X1Y1; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/gen_tap1[31].r" U_SET = delay_calibration_chain; + +####################################################################################################################### +## BEL constraints for LUTS in tap delay ckt +####################################################################################################################### + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l0" BEL= G; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l1" BEL= F; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l2" BEL= G; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l3" BEL= F; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l4" BEL= G; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l5" BEL= F; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l6" BEL= G; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l7" BEL= F; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l8" BEL= G; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l9" BEL= F; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l10" BEL= G; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l11" BEL= F; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l12" BEL= G; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l13" BEL= F; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l14" BEL= G; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l15" BEL= F; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l16" BEL= G; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l17" BEL= F; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l18" BEL= G; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l19" BEL= F; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l20" BEL= G; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l21" BEL= F; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l22" BEL= G; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l23" BEL= F; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l24" BEL= G; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l25" BEL= F; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l26" BEL= G; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l27" BEL= F; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l28" BEL= G; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l29" BEL= F; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l30" BEL= G; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l31" BEL= F; + +############################################################################################################## +## Area Group Constraint For tap_dly and cal_ctl module. +############################################################################################################## +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/l0" RLOC_ORIGIN=X28Y16; + +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/cal_ctl0/*" AREA_GROUP = cal_ctl; +INST "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/*" AREA_GROUP = cal_ctl; +AREA_GROUP "cal_ctl" RANGE = SLICE_X26Y8:SLICE_X37Y21; +AREA_GROUP "cal_ctl" GROUP = CLOSED; +################################################################################################################ +#**************************************************************************************************************# +# CONTROLLER 0 # +#**************************************************************************************************************# +################################################################################################################ +# I/O STANDARDS +################################################################################################################ +#NET "sys_clk_in" IOSTANDARD = LVCMOS33; +NET "cntrl0_ddr2_a[*]" IOSTANDARD = SSTL18_I; +NET "cntrl0_ddr2_ba[*]" IOSTANDARD = SSTL18_I; +NET "cntrl0_ddr2_ck[*]" IOSTANDARD = DIFF_SSTL18_I; +NET "cntrl0_ddr2_ck_n[*]" IOSTANDARD = DIFF_SSTL18_I; +NET "cntrl0_ddr2_cke" IOSTANDARD = SSTL18_I; +NET "cntrl0_ddr2_cs_n" IOSTANDARD = SSTL18_I; +NET "cntrl0_ddr2_ras_n" IOSTANDARD = SSTL18_I; +NET "cntrl0_ddr2_cas_n" IOSTANDARD = SSTL18_I; +NET "cntrl0_ddr2_we_n" IOSTANDARD = SSTL18_I; +NET "cntrl0_ddr2_odt" IOSTANDARD = SSTL18_I; +NET "cntrl0_ddr2_dm[*]" IOSTANDARD = SSTL18_I; +NET "cntrl0_rst_dqs_div_in" IOSTANDARD = SSTL18_I; +NET "cntrl0_rst_dqs_div_out" IOSTANDARD = SSTL18_I; +NET "cntrl0_ddr2_dq[*]" IOSTANDARD = SSTL18_I; +NET "cntrl0_ddr2_dqs[*]" IOSTANDARD = DIFF_SSTL18_I; +NET "cntrl0_ddr2_dqs_n[*]" IOSTANDARD = DIFF_SSTL18_I; + +#################################################################################################################### +# Banks 2 +# Pin Location Constraints for System clock signals +#################################################################################################################### +#NET "sys_clk_in" LOC = "V12"; # on board clock +#NET "sys_clk_in" LOC = "U12"; #external clock + +#################################################################################################################### +# Banks 3 +# Pin Location Constraints for Clock,Masks, Address, and Controls + #################################################################################################################### +NET "cntrl0_ddr2_ck[0]" LOC = "M1" ; +NET "cntrl0_ddr2_ck_n[0]" LOC = "M2" ; +NET "cntrl0_ddr2_dm[0]" LOC = "J3" ; +NET "cntrl0_ddr2_dm[1]" LOC = "E3" ; +NET "cntrl0_ddr2_a[0]" LOC = "R2" ; +NET "cntrl0_ddr2_a[1]" LOC = "T4" ; +NET "cntrl0_ddr2_a[2]" LOC = "R1" ; +NET "cntrl0_ddr2_a[3]" LOC = "U3" ; +NET "cntrl0_ddr2_a[4]" LOC = "U2" ; +NET "cntrl0_ddr2_a[5]" LOC = "U4" ; +NET "cntrl0_ddr2_a[6]" LOC = "U1" ; +NET "cntrl0_ddr2_a[7]" LOC = "Y1" ; +NET "cntrl0_ddr2_a[8]" LOC = "W1" ; +NET "cntrl0_ddr2_a[9]" LOC = "W2" ; +NET "cntrl0_ddr2_a[10]" LOC = "T3" ; +NET "cntrl0_ddr2_a[11]" LOC = "V1" ; +NET "cntrl0_ddr2_a[12]" LOC = "Y2" ; +NET "cntrl0_ddr2_ba[0]" LOC = "P3" ; +NET "cntrl0_ddr2_ba[1]" LOC = "R3" ; +NET "cntrl0_ddr2_cke" LOC = "N3" ; +NET "cntrl0_ddr2_cs_n" LOC = "M5" ; +NET "cntrl0_ddr2_ras_n" LOC = "M3" ; +NET "cntrl0_ddr2_cas_n" LOC = "M4" ; +NET "cntrl0_ddr2_we_n" LOC = "N4" ; +NET "cntrl0_ddr2_odt" LOC = "P1" ; + +#NET "reset_in_n" LOC = "T15" | IOSTANDARD = LVTTL | PULLDOWN ; +#NET "cntrl0_led_error_output1" LOC = "R20" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = QUIETIO | PULLDOWN ; +#NET "cntrl0_data_valid_out" LOC = "T19" | IOSTANDARD = LVTTL; +#NET "cntrl0_init_done" LOC = "V16" | IOSTANDARD = LVTTL; + + +############################################################################################################## +## MAXDELAY constraints +############################################################################################################## + +############################################################################################################## +## Constraint to have the tap delay inverter connection wire length to be the same and minimum to get +## accurate calibration of tap delays. The following constraints are independent of frequency. +############################################################################################################## +NET "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/tap[7]" MAXDELAY = 400ps; +NET "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/tap[15]" MAXDELAY = 400ps; +NET "INST_DDR2_RAM_CORE/infrastructure_top0/cal_top0/tap_dly0/tap[23]" MAXDELAY = 400ps; + +############################################################################################################## +## MAXDELAY constraint on inter LUT delay elements. This constraint is required to minimize the +## wire delays between the LUTs. +############################################################################################################## +NET "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay*dqs_delay_col*/delay*" MAXDELAY = 190 ps; +NET "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/rst_dqs_div_delayed/delay*" MAXDELAY = 200 ps; + +############################################################################################################## +## Constraint from the dqs PAD to input of LUT delay element. +############################################################################################################## +NET "INST_DDR2_RAM_CORE/top_00/dqs_int_delay_in*" MAXDELAY = 580 ps; + +############################################################################################################## +## Constraint from rst_dqs_div_in PAD to input of LUT delay element. +############################################################################################################## +NET "INST_DDR2_RAM_CORE/top_00/dqs_div_rst" MAXDELAY = 460 ps; + +############################################################################################################## +## Following are the MAXDELAY constraints on delayed rst_dqs_div net and fifo write enable signals. +## These constraints are required since these paths are not covered by timing analysis. The requirement is total +## delay on delayed rst_dqs_div and fifo_wr_en nets should not exceed the clock period. +############################################################################################################## +NET "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/rst_dqs_div" MAXDELAY = 3007 ps; +NET "INST_DDR2_RAM_CORE/top_00/data_path0/fifo*_wr_en*" MAXDELAY = 3007 ps; + +############################################################################################################## +## The MAXDELAY value on fifo write address should be less than clock period. This constraint is +## required since this path is not covered by timing analysis. +############################################################################################################## +NET "INST_DDR2_RAM_CORE/top_00/data_path0/fifo*_wr_addr*" MAXDELAY = 6390 ps; + + + + + +############################################################################################################## +## constraints for bit cntrl0_ddr2_dq, 1, location in tile: 0 +############################################################################################################## +NET "cntrl0_ddr2_dq[1]" LOC = K5; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[0].strobe/fifo_bit1" LOC = SLICE_X0Y58; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[0].strobe_n/fifo_bit1" LOC = SLICE_X0Y59; +############################################################################################################## +## constraints for bit cntrl0_ddr2_dq, 0, location in tile: 0 +############################################################################################################## +NET "cntrl0_ddr2_dq[0]" LOC = H1; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[0].strobe/fifo_bit0" LOC = SLICE_X2Y62; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[0].strobe_n/fifo_bit0" LOC = SLICE_X2Y63; +############################################################################################################## +## constraints for bit cntrl0_ddr2_dq, 3, location in tile: 0 +############################################################################################################## +NET "cntrl0_ddr2_dq[3]" LOC = L3; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[0].strobe/fifo_bit3" LOC = SLICE_X2Y52; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[0].strobe_n/fifo_bit3" LOC = SLICE_X2Y53; +############################################################################################################## +## constraints for bit cntrl0_ddr2_dq, 2, location in tile: 0 +############################################################################################################## +NET "cntrl0_ddr2_dq[2]" LOC = K1; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[0].strobe/fifo_bit2" LOC = SLICE_X0Y50; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[0].strobe_n/fifo_bit2" LOC = SLICE_X0Y51; +############################################################################################################## +## constraints for bit cntrl0_ddr2_dqs, 0, location in tile: 0 +############################################################################################################## +NET "cntrl0_ddr2_dqs[0]" LOC = K3; +############################################################################################################## +## constraints for bit cntrl0_ddr2_dqs_n, 0, location in tile: 0 +############################################################################################################## +############################################################# +NET "cntrl0_ddr2_dqs_n[0]" LOC = K2; + +############################################################################################################## +## LUT location constraints for dqs_delayed_col0 +############################################################################################################## +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/one" LOC = SLICE_X2Y55; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/one" BEL = F; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/two" LOC = SLICE_X2Y55; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/two" BEL = G; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/three" LOC = SLICE_X2Y54; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/three" BEL = G; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/four" LOC = SLICE_X2Y54; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/four" BEL = F; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/five" LOC = SLICE_X3Y55; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/five" BEL = G; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/six" LOC = SLICE_X3Y54; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/six" BEL = G; + +############################################################################################################## +## LUT location constraints for dqs_delayed_col1 +############################################################################################################## +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/one" LOC = SLICE_X0Y55; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/one" BEL = F; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/two" LOC = SLICE_X0Y55; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/two" BEL = G; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/three" LOC = SLICE_X0Y54; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/three" BEL = G; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/four" LOC = SLICE_X0Y54; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/four" BEL = F; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/five" LOC = SLICE_X1Y55; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/five" BEL = G; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/six" LOC = SLICE_X1Y54; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/six" BEL = G; + +############################################################################################################## +## Slice location constraints for Fifo write address and write enable +############################################################################################################## +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_wr_addr[0].fifo_0_wr_addr_inst/bit0" LOC = SLICE_X1Y50; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_wr_addr[0].fifo_0_wr_addr_inst/bit1" LOC = SLICE_X1Y50; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_wr_addr[0].fifo_0_wr_addr_inst/bit2" LOC = SLICE_X1Y49; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_wr_addr[0].fifo_0_wr_addr_inst/bit3" LOC = SLICE_X1Y49; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_wr_addr[0].fifo_1_wr_addr_inst/bit0" LOC = SLICE_X3Y49; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_wr_addr[0].fifo_1_wr_addr_inst/bit1" LOC = SLICE_X3Y49; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_wr_addr[0].fifo_1_wr_addr_inst/bit2" LOC = SLICE_X3Y50; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_wr_addr[0].fifo_1_wr_addr_inst/bit3" LOC = SLICE_X3Y50; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_wr_en[0].fifo_0_wr_en_inst/delay_ff" LOC = SLICE_X1Y53; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_wr_en[0].fifo_1_wr_en_inst/delay_ff_1" LOC = SLICE_X3Y53; +############################################################################################################## +## constraints for bit cntrl0_ddr2_dq, 5, location in tile: 0 +############################################################################################################## +NET "cntrl0_ddr2_dq[5]" LOC = L1; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[0].strobe/fifo_bit5" LOC = SLICE_X2Y50; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[0].strobe_n/fifo_bit5" LOC = SLICE_X2Y51; +############################################################################################################## +## constraints for bit cntrl0_ddr2_dq, 4, location in tile: 0 +############################################################################################################## +NET "cntrl0_ddr2_dq[4]" LOC = L5; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[0].strobe/fifo_bit4" LOC = SLICE_X0Y52; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[0].strobe_n/fifo_bit4" LOC = SLICE_X0Y53; +############################################################################################################## +## constraints for bit cntrl0_ddr2_dq, 7, location in tile: 0 +############################################################################################################## +NET "cntrl0_ddr2_dq[7]" LOC = H2; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[0].strobe/fifo_bit7" LOC = SLICE_X0Y62; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[0].strobe_n/fifo_bit7" LOC = SLICE_X0Y63; +############################################################################################################## +## constraints for bit cntrl0_ddr2_dq, 6, location in tile: 0 +############################################################################################################## +NET "cntrl0_ddr2_dq[6]" LOC = K4; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[0].strobe/fifo_bit6" LOC = SLICE_X2Y58; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[0].strobe_n/fifo_bit6" LOC = SLICE_X2Y59; + + +############################################################################################################## +## constraints for bit cntrl0_ddr2_dq, 9, location in tile: 0 +############################################################################################################## +NET "cntrl0_ddr2_dq[9]" LOC = G4; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[1].strobe/fifo_bit1" LOC = SLICE_X2Y78; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[1].strobe_n/fifo_bit1" LOC = SLICE_X2Y79; +############################################################################################################## +## constraints for bit cntrl0_ddr2_dq, 8, location in tile: 0 +############################################################################################################## +NET "cntrl0_ddr2_dq[8]" LOC = F2; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[1].strobe/fifo_bit0" LOC = SLICE_X0Y70; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[1].strobe_n/fifo_bit0" LOC = SLICE_X0Y71; +############################################################################################################## +## constraints for bit cntrl0_ddr2_dq, 11, location in tile: 0 +############################################################################################################## +NET "cntrl0_ddr2_dq[11]" LOC = H6; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[1].strobe/fifo_bit3" LOC = SLICE_X2Y76; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[1].strobe_n/fifo_bit3" LOC = SLICE_X2Y77; +############################################################################################################## +## constraints for bit cntrl0_ddr2_dq, 10, location in tile: 0 +############################################################################################################## +NET "cntrl0_ddr2_dq[10]" LOC = G1; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[1].strobe/fifo_bit2" LOC = SLICE_X2Y68; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[1].strobe_n/fifo_bit2" LOC = SLICE_X2Y69; +############################################################################################################## +## constraints for bit cntrl0_ddr2_dqs, 1, location in tile: 0 +############################################################################################################## +NET "cntrl0_ddr2_dqs[1]" LOC = K6; +############################################################################################################## +## constraints for bit cntrl0_ddr2_dqs_n, 1, location in tile: 0 +############################################################################################################## +############################################################# +NET "cntrl0_ddr2_dqs_n[1]" LOC = J5; + +############################################################################################################## +## LUT location constraints for dqs_delayed_col0 +############################################################################################################## +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/one" LOC = SLICE_X2Y75; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/one" BEL = F; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/two" LOC = SLICE_X2Y75; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/two" BEL = G; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/three" LOC = SLICE_X2Y74; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/three" BEL = G; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/four" LOC = SLICE_X2Y74; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/four" BEL = F; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/five" LOC = SLICE_X3Y75; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/five" BEL = G; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/six" LOC = SLICE_X3Y74; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/six" BEL = G; + +############################################################################################################## +## LUT location constraints for dqs_delayed_col1 +############################################################################################################## +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/one" LOC = SLICE_X0Y75; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/one" BEL = F; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/two" LOC = SLICE_X0Y75; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/two" BEL = G; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/three" LOC = SLICE_X0Y74; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/three" BEL = G; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/four" LOC = SLICE_X0Y74; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/four" BEL = F; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/five" LOC = SLICE_X1Y75; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/five" BEL = G; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/six" LOC = SLICE_X1Y74; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/six" BEL = G; + +############################################################################################################## +## Slice location constraints for Fifo write address and write enable +############################################################################################################## +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_wr_addr[1].fifo_0_wr_addr_inst/bit0" LOC = SLICE_X1Y69; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_wr_addr[1].fifo_0_wr_addr_inst/bit1" LOC = SLICE_X1Y69; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_wr_addr[1].fifo_0_wr_addr_inst/bit2" LOC = SLICE_X1Y70; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_wr_addr[1].fifo_0_wr_addr_inst/bit3" LOC = SLICE_X1Y70; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_wr_addr[1].fifo_1_wr_addr_inst/bit0" LOC = SLICE_X3Y69; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_wr_addr[1].fifo_1_wr_addr_inst/bit1" LOC = SLICE_X3Y69; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_wr_addr[1].fifo_1_wr_addr_inst/bit2" LOC = SLICE_X3Y70; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_wr_addr[1].fifo_1_wr_addr_inst/bit3" LOC = SLICE_X3Y70; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_wr_en[1].fifo_0_wr_en_inst/delay_ff" LOC = SLICE_X1Y72; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/gen_wr_en[1].fifo_1_wr_en_inst/delay_ff_1" LOC = SLICE_X3Y72; +############################################################################################################## +## constraints for bit cntrl0_ddr2_dq, 13, location in tile: 0 +############################################################################################################## +NET "cntrl0_ddr2_dq[13]" LOC = F1; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[1].strobe/fifo_bit5" LOC = SLICE_X2Y70; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[1].strobe_n/fifo_bit5" LOC = SLICE_X2Y71; +############################################################################################################## +## constraints for bit cntrl0_ddr2_dq, 12, location in tile: 0 +############################################################################################################## +NET "cntrl0_ddr2_dq[12]" LOC = H5; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[1].strobe/fifo_bit4" LOC = SLICE_X0Y76; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[1].strobe_n/fifo_bit4" LOC = SLICE_X0Y77; +############################################################################################################## +## constraints for bit cntrl0_ddr2_dq, 15, location in tile: 0 +############################################################################################################## +NET "cntrl0_ddr2_dq[15]" LOC = F3; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[1].strobe/fifo_bit7" LOC = SLICE_X0Y78; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[1].strobe_n/fifo_bit7" LOC = SLICE_X0Y79; +############################################################################################################## +## constraints for bit cntrl0_ddr2_dq, 14, location in tile: 0 +############################################################################################################## +NET "cntrl0_ddr2_dq[14]" LOC = G3; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[1].strobe/fifo_bit6" LOC = SLICE_X0Y68; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read0/gen_strobe[1].strobe_n/fifo_bit6" LOC = SLICE_X0Y69; + +############################################################################################################## +## constraints for bit cntrl0_rst_dqs_div_in, 1, location in tile: 1 +############################################################################################################## +NET "cntrl0_rst_dqs_div_in" LOC = H4; + +############################################################################################################## +## Slice location constraints for delayed rst_dqs_div signal +############################################################################################################## +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/rst_dqs_div_delayed/one" LOC = SLICE_X0Y67; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/rst_dqs_div_delayed/one" BEL = F; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/rst_dqs_div_delayed/two" LOC = SLICE_X0Y66; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/rst_dqs_div_delayed/two" BEL = F; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/rst_dqs_div_delayed/three" LOC = SLICE_X0Y67; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/rst_dqs_div_delayed/three" BEL = G; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/rst_dqs_div_delayed/four" LOC = SLICE_X1Y66; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/rst_dqs_div_delayed/four" BEL = F; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/rst_dqs_div_delayed/five" LOC = SLICE_X1Y66; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/rst_dqs_div_delayed/five" BEL = G; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/rst_dqs_div_delayed/six" LOC = SLICE_X1Y67; +INST "INST_DDR2_RAM_CORE/top_00/data_path0/data_read_controller0/rst_dqs_div_delayed/six" BEL = G; + +############################################################################################################## +## constraints for bit cntrl0_rst_dqs_div_out, 1, location in tile: 0 +############################################################################################################## +NET "cntrl0_rst_dqs_div_out" LOC = H3; +################################################################################# +INST "INST_DDR2_RAM_CORE/top_00/controller0/rst_dqs_div_r" LOC = SLICE_X4Y66; Index: ipcore_dir/DDR2_Ram_Core/user_design/par =================================================================== --- ipcore_dir/DDR2_Ram_Core/user_design/par (nonexistent) +++ ipcore_dir/DDR2_Ram_Core/user_design/par (revision 2)
ipcore_dir/DDR2_Ram_Core/user_design/par Property changes : Added: bugtraq:number ## -0,0 +1 ## +true \ No newline at end of property Index: ipcore_dir/DDR2_Ram_Core/user_design =================================================================== --- ipcore_dir/DDR2_Ram_Core/user_design (nonexistent) +++ ipcore_dir/DDR2_Ram_Core/user_design (revision 2)
ipcore_dir/DDR2_Ram_Core/user_design Property changes : Added: bugtraq:number ## -0,0 +1 ## +true \ No newline at end of property Index: ipcore_dir/DDR2_Ram_Core =================================================================== --- ipcore_dir/DDR2_Ram_Core (nonexistent) +++ ipcore_dir/DDR2_Ram_Core (revision 2)
ipcore_dir/DDR2_Ram_Core Property changes : Added: bugtraq:number ## -0,0 +1 ## +true \ No newline at end of property Index: ipcore_dir =================================================================== --- ipcore_dir (nonexistent) +++ ipcore_dir (revision 2)
ipcore_dir Property changes : Added: bugtraq:number ## -0,0 +1 ## +true \ No newline at end of property Index: Prj_12_DDR2.xise =================================================================== --- Prj_12_DDR2.xise (nonexistent) +++ Prj_12_DDR2.xise (revision 2) @@ -0,0 +1,480 @@ + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Index: impact.xsl =================================================================== --- impact.xsl (nonexistent) +++ impact.xsl (revision 2) @@ -0,0 +1,55 @@ + + + + + + + Current iMPACT Usage Statistics. +

+ Copyright (c) 1995-2010 Xilinx, Inc. All rights reserved. +
+

+

+ This page displays the current iMPACT device usage statistics that will be sent to Xilinx using WebTalk. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + Index: DDR2_Read_VHDL.vhd =================================================================== --- DDR2_Read_VHDL.vhd (nonexistent) +++ DDR2_Read_VHDL.vhd (revision 2) @@ -0,0 +1,226 @@ +--------------------------------------------------------------------- +-- File : DDR2_Read_VHDL.vhd +-- Projekt : Prj_12_DDR2 +-- Zweck : DDR2-Read-Funktion +-- Datum : 19.08.2011 +-- Version : 2.0 +-- Plattform : XILINX Spartan-3A +-- FPGA : XC3S700A-FGG484 +-- Sprache : VHDL +-- ISE : ISE-Design-Suite V:13.1 +-- Autor : UB +-- Mail : Becker_U(at)gmx.de +--------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + + -------------------------------------------- + -- Beschreibung : + -- + -- Die State-Machine liest + -- einen 64Bit Wert aus dem RAM + -- von 4 aufeinander folgenden 16bit-Zellen + -- + -- die Adresse wird + -- von der übergeordneten CONTROL-Unit + -- gehandelt + -- + -- solange die Read-Funktion läuft, + -- ist READ_BUSY=1 + -------------------------------------------- + +entity DDR2_Read_VHDL is + + -------------------------------------------- + -- Port Deklerationen + -------------------------------------------- + port ( + reset_in : in std_logic; + clk_in : in std_logic; + clk90_in : in std_logic; + r_command_register : out std_logic_vector(2 downto 0); + r_cmd_ack : in std_logic; + r_burst_done : out std_logic; + r_data_valid : in std_logic; + read_en : in std_logic; + read_busy : out std_logic; + output_data : in std_logic_vector(31 downto 0); + read_data : out std_logic_vector(63 downto 0) + ); + +end DDR2_Read_VHDL; + +architecture Verhalten of DDR2_Read_VHDL is + + -------------------------------------------- + -- Interne Signale + -------------------------------------------- + + signal v_data_lsb : std_logic_vector(31 downto 0):=(others => '0'); + signal v_data_msb : std_logic_vector(31 downto 0):=(others => '0'); + + constant CLK_ANZ : integer := 1; -- warte 2 Clockzyklen (1 bis 0 = 2) + signal v_counter : natural range 0 to CLK_ANZ := CLK_ANZ; + + type STATE_RA_TYPE is ( + RA_1_NOP, + RA_2_WAIT_4_ACK1, + RA_3_WAIT_CLK, + RA_4_SET_BURST, + RA_5_SET_NOP, + RA_6_WAIT_4_ACK0 + ); + signal STATE_RA : STATE_RA_TYPE := RA_1_NOP; + + type STATE_RB_TYPE is ( + RB_1_NOP, + RB_2_WAIT_4_VALID1, + RB_3_DATA_MSB, + RB_4_WAIT_4_ACK0 + ); + signal STATE_RB : STATE_RB_TYPE := RB_1_NOP; + +begin + + ----------------------------------------- + -- State-Machine RA : (Clock-0 Lo-Flanke) + -- 1. wartet auf das READ_EN=1 von der DDR2_Control + -- 2. sendet das READ-Kommando an das RAM + -- 3. wartet auf das ACK=1 vom RAM + -- 4. wartet 2 Clockzyklen + -- (solange dauert das lesen von 64Bit) + -- 5. legt das BURST_DONE-Signal für 2 Clockzyklen an + -- 6. wartet auf das ACK=0 vom RAM + -- 7. Sprung zu Punkt 1 + ----------------------------------------- + P_Read_RA : process(clk_in,reset_in) + begin + if reset_in = '1' then + r_burst_done <= '0'; + r_command_register <= "000"; + STATE_RA <= RA_1_NOP; + elsif falling_edge(clk_in) then + -- Default Stellungen + r_burst_done <= '0'; + r_command_register <= "000"; + -- State-Machine + case STATE_RA is + when RA_1_NOP => + -- warten auf read enable signal + v_counter <= CLK_ANZ; + if read_en = '1' then + -- read enable wurde erkannt + STATE_RA <= RA_2_WAIT_4_ACK1; + end if; + when RA_2_WAIT_4_ACK1 => + -- READ-CMD anlegen + -- warten auf ACK=1 signal + r_command_register <= "110"; + if r_cmd_ack = '1' then + -- ack-signal wurde erkannt + STATE_RA <= RA_3_WAIT_CLK; + end if; + when RA_3_WAIT_CLK => + -- warte ein paar Clockzyklen + r_command_register <= "110"; + if v_counter = 0 then + STATE_RA <= RA_4_SET_BURST; + else + v_counter <= v_counter - 1; + end if; + when RA_4_SET_BURST => + r_command_register <= "110"; + r_burst_done <= '1'; + STATE_RA <= RA_5_SET_NOP; + when RA_5_SET_NOP => + -- NOP-CMD anlegen + -- bei Burst_Done=Hi + r_burst_done <= '1'; + STATE_RA <= RA_6_WAIT_4_ACK0; + when RA_6_WAIT_4_ACK0 => + -- burst_done auf Lo + -- warten auf ACK=0 signal + if r_cmd_ack = '0' then + -- ack-signal wurde erkannt + STATE_RA <= RA_1_NOP; + end if; + when others => + NULL; + end case; + end if; + end process P_Read_RA; + + ----------------------------------------- + -- State-Machine RB : (Clock-90 Hi-Flanke) + -- 1. wartet bis State-Machine-RA das + -- READ-Kommando gesendet hat + -- 2. warte auf das DATA_VALID=1 vom RAM + -- 3. liest die LSB-Daten (32Bit) vom RAM + -- 4. wartet einen Clockzyklus + -- 5. liest die MSB-Daten (32Bit) vom RAM + -- 6. wartet auf das ACK=0 vom RAM + -- 7. Sprung zu Punkt 1 + ----------------------------------------- + P_Read_RB : process(clk90_in,reset_in) + begin + if reset_in = '1' then + -- reset button ist gedrueckt + v_data_lsb <= (others => '0'); + v_data_msb <= (others => '0'); + STATE_RB <= RB_1_NOP; + elsif rising_edge(clk90_in) then + case STATE_RB is + when RB_1_NOP => + -- warten bis Read enable + if STATE_RA = RA_2_WAIT_4_ACK1 then + -- ack-signal wurde erkannt + STATE_RB <= RB_2_WAIT_4_VALID1; + end if; + when RB_2_WAIT_4_VALID1 => + -- warte bis Daten Valid sind + if r_data_valid = '1' then + -- LSB Daten sind ok + v_data_lsb <= output_data; + STATE_RB <= RB_3_DATA_MSB; + else + v_data_lsb <= v_data_lsb; + end if; + when RB_3_DATA_MSB => + -- MSB Daten lesen + if r_data_valid = '1' then + -- MSB Daten sind ok + v_data_msb <= output_data; + else + v_data_msb <= v_data_msb; + end if; + STATE_RB <= RB_4_WAIT_4_ACK0; + when RB_4_WAIT_4_ACK0 => + -- warten auf ACK=0 vom RAM + if r_cmd_ack = '0' then + -- ack-signal wurde erkannt + STATE_RB <= RB_1_NOP; + end if; + when others => + NULL; + end case; + end if; + end process P_Read_RB; + + + ----------------------------------------- + -- Read-Busy erzeugen : + -- solange der Read-Prozess im Gange + -- ist READ_BUSY = 1 + ----------------------------------------- + read_busy <= '0' when STATE_RA=RA_1_NOP else '1'; + + ----------------------------------------- + -- Read-Data uebergeben : + -- 64Bit zusammengesetzt aus MSB & LSB + ----------------------------------------- + read_data <= v_data_msb & v_data_lsb; + +end Verhalten; + Index: webtalk_impact.xml =================================================================== --- webtalk_impact.xml (nonexistent) +++ webtalk_impact.xml (revision 2) @@ -0,0 +1,43 @@ + + + + +
+ + +
+
+ + + + +
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+
Index: DDR2_liesmich.txt =================================================================== --- DDR2_liesmich.txt (nonexistent) +++ DDR2_liesmich.txt (revision 2) @@ -0,0 +1,245 @@ +============================================== +File : DDR2_liesmich.txt +Projekt : Prj_12_DDR2 +Zweck : DDR2-SDRAM auf dem Spartan-3A Board +DDR2-RAM : MT47H32M16 (64 MByte) +Datum: 19.08.2011 +Version : 7.0 +Plattform : XILINX Spartan-3A +FPGA : XC3S700A-FGG484 +Sprache : VHDL +ISE : ISE-Design-Suite V:13.1 +IP-Core : MIG V:3.6.1 +Autor : UB +Mail : Becker_U(at)gmx.de +============================================== + + + +Module : +================== + + ############### ######################### ################ + # # # # # # + # DDR2-RAM : #---------# TOP_Modul_VHDL #----# Buttons_VHDL # + # 512 MBit # # # # # + # # # # ################ + ############### # # + # # ################ + # # # # + # #----# Clock_VHDL # + # # # # + # # ################ + # # + ############### # # ##################### ################### + # # # # # # # # + # Eingabe : # # # # DDR2_Control_VHDL #----# DDR2_READ_VHDL # + # 4 Buttons #---------# # # # # # + # 4 Schalter # # #----# # ################### + # # # # # # + ############### # # # # ################### + # # # # # # + ################### # # # #----# DDR2_Write_VHDL # + # # # # # # # # + # Ausgabe : #-----# # # # ################### + # 8 LEDs (Data) # # # ##################### + # 1 LED (Status) # # # + ################### # # ####################### + # #----# # + ############### # # # DDR2_RAM_CORE.vhd # + # Clock : #---------# # # MIG 3.6.1 # + # 133 MHz # # # # (27 Dateien) # + # # # # # + UCF-File # + ############### ######################### ####################### + + + +Zweck : +======== + +> Dieses Projekt ist ein Beispiel wie ein DDR2-SDRAM auf einem Xilinx FPGA Board + eingebunden wird + + + +Hinweise zur DDR2-RAM-Einbindung : +=================================== + +> das ganze Projekt basiert auf der Einbindung der vom MIG + generierten Files für ein DDR2-SDRAM (MIG 3.6.1) + +> Hinweis zu den Einstellungen vom MIG : + - Typ = DDR2-SDRAM + - Frq = 133MHz + - Write Pipe Stages = 4 + - Memory Part = MT47H32M16XX-3 (für das Spartan-3A Board) + - Data Width = 16 + - Data-Mask = Ja + - SystemClock = Single-Ended + - Signale auf : Bank3 (komplett) , Bank2 (V12) + - Bank2 = System-Clock / Bank3 = Adrees-Control+Data+System-Control + - sonst alles auf "Default" + +> Hinweise zum DDR2_RAM_CORE : + + - es wurden nur die VHDL-Files + vom Ordner "User_Design/RTL" benutzt. + - alle anderen vom MIG generierten Files + sind für das Projekt nicht notwendig + +> Hinweis zum UCF-File für das DDR2-RAM : + + - ohne die Richtigen Settings im UCF-File, + kommt es zu Timing problemen beim lesen oder + schreiben + - das vom MIG generierte UCF muss auf die + Pinbelegung vom Spartan-3A Board angepasst + werden + - aus dem Grund habe ich das UCF-File + aus dem Xilinx-Example für Spartan-3A Boards + benutzt und für das Projekt angepasst + das DDR2-Example bekommt man durch einen Link + vom MIG -> "Xilinx Reference Boards" unter + "http://www.xilinx.com/products/boards/s3astarter/reference_designs.htm" + der Name ist "DDR2 MIG Reference Design" + + +Beschreibung der Funktion : +============================ + +> der Schalter-0 (SW0) dient als Reset-Schalter (High = Reset) + +> das "TOP_Modul" routet alle Signale zwischen den Modulen + +> die "Buttons_VHDL" dient nur zum entprellen der Tasten und zum erzeugen + eines "On-Click-Events" damit die Read/Write-Funktionen nur + einmal gestartet werden + +> das "DDR2_Control" enthaellt eine State-Machine mit folgenden Funktionen : + + 1. Initialisieren vom DDR2-RAM + 2. Beschreiben des DDR2-RAM mit 16 Datenwerten (mit je 64Bit breite) + 3. Auslesen des ersten Datenwertes + 4. Warten auf Tasteneingaben + + 5a. Bei Taste 1 (North) -> erhoehen des Adresszeigers (ROW) um 1 + 5b. Bei Taste 2 (South) -> veringern des Adresszeigers (ROW) um 1 + 5c. Bei Taste 3 (West) -> schreiben eines einzelnen (fixen) Datenwertes in die aktuelle Adresse + 5d. Bei Taste 4 (East) -> lesen eines einzelnen Datenwertes aus der aktuellen Adresse + +> das "DDR2_Control" uebernimmt auch die Aufbereitung fuer die Anzeige : + + - SW1 bis SW3 dient zum auswählen eines der 8 Bytewerten des 64Bit breiten Datenwortes + + SW3=0 + SW2=0 + SW1=0 -> Anzeige von Datenbits (D7...D0) + SW3=0 + SW2=0 + SW1=1 -> Anzeige von Datenbits (D15...D8) + SW3=0 + SW2=1 + SW1=0 -> Anzeige von Datenbits (D23...D16) + SW3=0 + SW2=1 + SW1=1 -> Anzeige von Datenbits (D31...D24) + SW3=1 + SW2=0 + SW1=0 -> Anzeige von Datenbits (D39...D32) + SW3=1 + SW2=0 + SW1=1 -> Anzeige von Datenbits (D47...D40) + SW3=1 + SW2=1 + SW1=0 -> Anzeige von Datenbits (D55...D48) + SW3=1 + SW2=1 + SW1=1 -> Anzeige von Datenbits (D63...D56) + + das ausgewählte Byte wird an den 8 LEDs angezeigt + +> das "DDR2_Read" enthaellt eine State-Machine um ein Datenwort (64Bit) + aus dem RAM zu lesen + +> das "DDR2_Write" enthaellt eine State-Machine um ein Datenwort (64Bit) + ins RAM zu schreiben + + +Ram Inhalt nach dem Initialisieren : +===================================== + +> nach der Init-Funktion stehen 16 Datenwerte (je 64Bit) im RAM + +ADR 0 = 0123456789ABCDEF +ADR 1 = 123456789ABCDEF0 +ADR 2 = 23456789ABCDEF01 +ADR 3 = 3456789ABCDEF012 +ADR 4 = 456789ABCDEF0123 +ADR 5 = 56789ABCDEF01234 +ADR 6 bis ADR 15 = 639CC6398C7318E7 + + +Ablauf : +========= + + +> nach dem Init und Schreiben von 16 Werten wird die Adr 0 ausgelesen + und an den LEDs ausgegeben + +> Mit dem Button North und South kann der ADR-Counter verändert werden + +> Button EAST liest das RAM an der aktuellen Adresse aus + +> Button WEST schreibt den 64Bit-Wert "31CE629DC43B8877" in die aktuelle Adresse + + + +Infos zum RAM : +================ + +> das DDR2-RAM auf dem Spartan-3A Board hat eine groesse von 512MBit (64MByte) + +> das RAM ist in 4 Bloecke (BANKs) unterteilt, + jeder Block ist in 8192 Reihen (ROWs) und 1024 Zeilen (COLs) aufgeteilt + eine einzelne Zelle ist 16bit breit + + das Ergibt 4x8192x1024x16bit = 512MBit + +> fuer die BANK_Adresse werden 2Bit benoetigt + fuer die ROW_Adresse werden 13Bit benoetigt + fuer die COL_Adresse werden 10Bit benoetigt + +> der Adresszeiger fuer eine einzelne Zelle setzt sich so zusammen : + + ADR = ROW & COL & BANK + + damit ist der Adresszeiger 13+10+2 = 25bit breit + + +Einschraenkungen in dem Projekt : +================================== + +> VORSICHT !! der BURST-MODE ist fest auf "4" eingestellt, + damit werden bei jedem Write Zyklus + 4 Zellen (also 4x16Bit=64Bit) beschrieben !! + +> damit keine Daten überschrieben werden, muss + der COL-Pointer immer in 4er Schritten erhöht/verringert werden + (0,4,8,12 usw) + + +Geschwindigkeit : +================== + +> bei einer Speedmessung (per VHDL-Code) wurde + die Anzahl der notwendigen Clockzyklen ermittelt + +> Read (von einem 64Bit Wert) = 22 Clockzyklen + (bei 133MHz -> 165 ns => 46 MByte/sec) + +> Write (von einem 64Bit Wert) = 25 Clockzyklen + (bei 133MHz -> 188 ns => 40 MByte/sec) + + +Hinweise : +=========== + +> das Projekt ist von "privat" und nicht fuer + kommerzielle Zwecke gedacht + +> das Projekt ist nicht frei von Fehlern + und ich kann daher keine Garantie + fuer eventuell auftretende Schaeden geben + +> das Projekt ist frei kopier- und verwendbar + +> bei gefundenen Fehlern bitte eine EMail an mich + + + +08.08.11 / UB + Index: DDR2_readme.txt =================================================================== --- DDR2_readme.txt (nonexistent) +++ DDR2_readme.txt (revision 2) @@ -0,0 +1,250 @@ +============================================== +Project : Prj_12_DDR2 +Purpose : DDR2-SDRAM at a Spartan-3A Board +DDR2-RAM : MT47H32M16 (64 MByte) +Date : 19.08.2011 +Version : 7.0 +Plattform : XILINX Spartan-3A +FPGA : XC3S700A-FGG484 +Language : VHDL +ISE : ISE-Design-Suite V:13.1 +IP-Core : MIG V:3.6.1 +Author : UB +Mail : Becker_U(at)gmx.de +============================================== + + +first word : +================ + +> sorry for my bad english :-) + + + +Moduls : +================== + + ############### ######################### ################ + # # # # # # + # DDR2-RAM : #---------# TOP_Modul_VHDL #----# Buttons_VHDL # + # 512 MBit # # # # # + # # # # ################ + ############### # # + # # ################ + # # # # + # #----# Clock_VHDL # + # # # # + # # ################ + # # + ############### # # ##################### ################### + # # # # # # # # + # Input : # # # # DDR2_Control_VHDL #----# DDR2_READ_VHDL # + # 4 buttons #---------# # # # # # + # 4 switches # # #----# # ################### + # # # # # # + ############### # # # # ################### + # # # # # # + ################### # # # #----# DDR2_Write_VHDL # + # # # # # # # # + # Output : #-----# # # # ################### + # 8 LEDs (Data) # # # ##################### + # 1 LED (Status) # # # + ################### # # ####################### + # #----# # + ############### # # # DDR2_RAM_CORE.vhd # + # Clock : #---------# # # MIG 3.6.1 # + # 133 MHz # # # # (27 files) # + # # # # # + UCF-File # + ############### ######################### ####################### + + + +purpose : +======== + +> this project is a simple example how to implement the DDR2-SDRAM on a Xilinx FPGA Board + (with the generated Code from the Xilinx MIG) + + + +hint for using the DDR2-RAM : +=================================== + +> the complete DDR2_RAM_Core Files in this project are + genaratet with the Xilinx MIG 3.6.1 tool + + +> MIG settings : + - Typ = DDR2-SDRAM + - Frq = 133MHz + - Write Pipe Stages = 4 + - Memory Part = MT47H32M16XX-3 (for the Spartan-3A Board) + - Data Width = 16 + - Data-Mask = Ja + - SystemClock = Single-Ended + - Signals at : Bank3 (complete) , Bank2 (V12) + - Bank2 = System-Clock / Bank3 = Adrees-Control+Data+System-Control + - all others : "Default" + +> Hint : DDR2_RAM_CORE : + + - only the VHDL-Files from path + "USer_Design/RTL" are used + - the oter files generated from MIG + are not necessary + +> HINT : DDR2 UCF-File : + + - the settings in the UCF-File are very important + for the correct timing and function of the RAM + - i have downloaded the original UCF-File + from Xilinx for the Spartan-3A Board + from these adress : + "http://www.xilinx.com/products/boards/s3astarter/reference_designs.htm" + - a few changes are required (e.g. for the path) + + +Function of the Project : +============================ + +> Switch-0 (SW0) is the Reset-Switch (High = Reset) + +> the "TOP_Modul" only routes the signals between the other Moduls + +> the "Buttons_VHDL" debounce the switches und buttons + and generate a "rising_edge" signal for the 4 Buttons + +> the "DDR2_Control" has a state machine with these steps : + + 1. Init the RAM + 2. Automatic Write Sequenz (writes 16 Datawords each 64Bit) + 3. Automatic Read Sequenz (reads the first Dataword with 64Bit from adress 0) + 4. Wait for a button signal + + 5a. Button-1 (north) -> increment ROW-Counter + 5b. Button-2 (south) -> decrement ROW-COunter + 5c. Button-3 (west) -> writes a single Datawort (64Bit) to the actual adress + 5d. Button-4 (east) -> reads a single Dataword (64Bit) from the actual adress + +> the "DDR2_Control" also selects one Byte (from the 64Bit Dataword) + + - SW1 to SW3 are the MUX-Select-Pins : + + SW3=0 + SW2=0 + SW1=0 -> shows the Databits (D7...D0) + SW3=0 + SW2=0 + SW1=1 -> shows the Databits (D15...D8) + SW3=0 + SW2=1 + SW1=0 -> shows the Databits (D23...D16) + SW3=0 + SW2=1 + SW1=1 -> shows the Databits (D31...D24) + SW3=1 + SW2=0 + SW1=0 -> shows the Databits (D39...D32) + SW3=1 + SW2=0 + SW1=1 -> shows the Databits (D47...D40) + SW3=1 + SW2=1 + SW1=0 -> shows the Databits (D55...D48) + SW3=1 + SW2=1 + SW1=1 -> shows the Databits (D63...D56) + + the selected Databits are shown on the 8 LEDs at the FPGA-Board + +> the "DDR2_Read" has a state machine to read one Dataword (64Bit) + from given adress + +> the "DDR2_Write" has a state machine to write one Dataword (64Bit) + to the given adress + + + +Ram Data content after the automatic write sequenz : +====================================================== + +> after the automtic write sequenz the content of the first 16 Datawords are : + +ADR 0 = 0123456789ABCDEF +ADR 1 = 123456789ABCDEF0 +ADR 2 = 23456789ABCDEF01 +ADR 3 = 3456789ABCDEF012 +ADR 4 = 456789ABCDEF0123 +ADR 5 = 56789ABCDEF01234 +ADR 6 to ADR 15 = 639CC6398C7318E7 + + + +Process after power on : +========================== + +> after the RAM-INIT and writing of 16 Datawords + the first RAM-Adress is reading and shown on the LEDs + +> the buttons "north" and "south" changes the actuall adress pointer + +> to read one adress use button "east" + +> to write the Dataword "31CE629DC43B8877" use button "west" + + + +RAM-Info : +================ + +> the size of the DDR2-RAM is 512MBit (64MByte) + +> it is splitted in 4 Blocks (Banks) + each Block has 8192 ROWs and 1024 COLs + + a single Datacell is 16bit wide + + 4x8192*1024*16bit = 512MBit + +> the Bank-Adress needs 2Bit + the ROW-Adress needs 13Bit + the COL-Adress needs 10Bit + +> the Adresspointer looks like : + + ADR = ROW & COL & BANK + + the complete ADR-Pointer needs 25Bit + + + +Restrictions in this project : +================================== + +> the "Burst-Mode" is fixed set to "4" + whis this setting the Dataword is 64Bit wide + +> each read process reads 64Bit and each write process + writes 64Bits + +> to avoid data fail the COL-Adress must increment + and decrement by the value of "4" + like (0,4,8,12...) + + + +Speed : +================== + +> a single read process (of 64Bit) needs 22 Clockcycles + (at 133MHz -> 165 ns => 46 MByte/sec) + +> a single write process (of 64Bit) needs 25 Clockcycles + (at 133MHz -> 188 ns => 40 MByte/sec) + + +last Hints : +============= + +> this project is "from private" + and not allowed for commercial use + +> this project is not free of bugs + and i can not give a guarantee + for any kind of error or damages + +> everyone is permitted to copy and modify + this files + +> please give me a notice if you found + some bugs + + + + +19.08.11 / UB + Index: Prj12_Impact_xdb/tmp =================================================================== --- Prj12_Impact_xdb/tmp (nonexistent) +++ Prj12_Impact_xdb/tmp (revision 2)
Prj12_Impact_xdb/tmp Property changes : Added: bugtraq:number ## -0,0 +1 ## +true \ No newline at end of property Index: Prj12_Impact_xdb =================================================================== --- Prj12_Impact_xdb (nonexistent) +++ Prj12_Impact_xdb (revision 2)
Prj12_Impact_xdb Property changes : Added: bugtraq:number ## -0,0 +1 ## +true \ No newline at end of property Index: Clock_VHDL.vhd =================================================================== --- Clock_VHDL.vhd (nonexistent) +++ Clock_VHDL.vhd (revision 2) @@ -0,0 +1,62 @@ +--------------------------------------------------------------------- +-- File : DDR2_Control_VHDL.vhd +-- Projekt : Prj_12_DDR2 +-- Zweck : DDR2-Verwaltung (Init,Read,Write) +-- Datum : 19.08.2011 +-- Version : 2.0 +-- Plattform : XILINX Spartan-3A +-- FPGA : XC3S700A-FGG484 +-- Sprache : VHDL +-- ISE : ISE-Design-Suite V:13.1 +-- Autor : UB +-- Mail : Becker_U(at)gmx.de +--------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; + +entity Clock_VHDL is + -------------------------------------------- + -- Port Deklerationen + -------------------------------------------- + port ( + clk_in_133MHz : in std_logic; + clk_out_1Hz : out std_logic + ); + +end Clock_VHDL; + +architecture Verhalten of Clock_VHDL is + + -------------------------------------------- + -- Interne Signale + -------------------------------------------- + constant STATUS_LED_VORTEILER : integer := 66500000; -- 1Hz bei 133MHz Quarzclock + signal v_cnt1 : natural range 0 to STATUS_LED_VORTEILER := 0; + signal clk1Hz : std_logic := '0'; + + +begin + + ------------------------------------------------------- + -- erzeugen eines 1Hz Signales aus dem Eingangstakt + ------------------------------------------------------- + Timer2 : process (clk_in_133MHz) begin + if rising_edge(clk_in_133MHz) then + v_cnt1 <= v_cnt1 + 1; + if(v_cnt1 >= STATUS_LED_VORTEILER) then + -- wenn zeit abgelaufen, signal toggeln + v_cnt1 <= 0; + clk1Hz <= not clk1Hz; + end if; + end if; + end process Timer2; + + ------------------------------------------------------- + -- Uebergabe aller Signale + ------------------------------------------------------- + clk_out_1Hz<=clk1Hz; + + + +end Verhalten; + Index: DDR2_Control_VHDL.vhd =================================================================== --- DDR2_Control_VHDL.vhd (nonexistent) +++ DDR2_Control_VHDL.vhd (revision 2) @@ -0,0 +1,502 @@ +--------------------------------------------------------------------- +-- File : DDR2_Control_VHDL.vhd +-- Projekt : Prj_12_DDR2 +-- Zweck : DDR2-Verwaltung (Init,Read,Write) +-- Datum : 19.08.2011 +-- Version : 2.0 +-- Plattform : XILINX Spartan-3A +-- FPGA : XC3S700A-FGG484 +-- Sprache : VHDL +-- ISE : ISE-Design-Suite V:13.1 +-- Autor : UB +-- Mail : Becker_U(at)gmx.de +--------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + + -------------------------------------------- + -- Beschreibung : + -- + -- das DDR2-RAM hat 512 MBit (64MByte) Speicherplatz + -- organisiert in 16Bit Woertern + -- + -- es werden immer Datenworte von 64Bit ausgelesen + -- oder geschrieben (weil der Burst-Mode auf 4 steht) + -- aus dem Grund ist der Daten-Vektor für Read/Write + -- 64Bit breit + -- + -- das RAM ist ein 4 Blöcke unterteilt (zu je 16Mbyte) + -- Bank "00" bis Bank "11" : 2Bit + -- + -- jeder Block ist in 8192 Reihen zu je 1024 Spalten organisiert + -- ROW "0000000000000" bis "1111111111111" : 13Bit + -- COL "0000000000" bis "1111111111" : 10Bit + -- + -- die übergebene Adresse an die FIFO Komponente + -- mit 25 Bit setzt sich dann so zusammen + -- + -- input_adress = ROW & COL & BANK + -- (25Bit) 13Bit 10Bit 2Bit + -- pro Adresse stehen 16bit Daten + -- + -- in diesem Demo-Programm wird nur Bank=0 + -- COL=0 und ROW= 0 bis 15 benutzt + --------------------------------------------- + -- + -- das CONTROL steuert die READ und WRITE funktion + -- je nachdem welcher Button gedrückt wurde + -- + -------------------------------------------- + -- Vorsicht !! zur Adressierung : + -- Der Burst-Mode steht FIX auf "4" + -- damit werden IMMER 4 (16bit) Zellen gelesen + -- und beschrieben (also imer 64Bit) + -- + -- wenn also das 64bit Wort "123456789ABCDEF0" in Adr 0 + -- geschrieben wird, sieht der Speicher danach so aus : + -- Row 0 Col 0 = "1234" + -- Row 0 Col 1 = "5678" + -- Row 0 Col 2 = "9ABC" + -- Row 0 Col 3 = "DEF0" + -- + -- Der Col-Counter muss also immer um 4 Adressen + -- incrementiert / decrementiert werden + -- + -- in der Demo hier wird nur der ROW-Counter verändert + -- + -------------------------------------------- + + + +entity DDR2_Control_VHDL is + + -------------------------------------------- + -- Port Deklerationen + -------------------------------------------- + port ( + reset_in : in std_logic; + clk_in : in std_logic; + clk90_in : in std_logic; + init_done : in std_logic; + command_register : out std_logic_vector(2 downto 0); + input_adress : out std_logic_vector(24 downto 0); + input_data : out std_logic_vector(31 downto 0); + output_data : in std_logic_vector(31 downto 0); + cmd_ack : in std_logic; + data_valid : in std_logic; + burst_done : out std_logic; + auto_ref_req : in std_logic; + debounce_in : in std_logic_vector(7 downto 0); + risingedge_in : in std_logic_vector(3 downto 0); + data_out : out std_logic_vector(7 downto 0) + ); + +end DDR2_Control_VHDL; + +architecture Verhalten of DDR2_Control_VHDL is + + -------------------------------------------- + -- Einbinden einer Componente + -- zum schreiben eines 64Bit Wertes + -------------------------------------------- + COMPONENT DDR2_Write_VHDL + PORT ( + reset_in : in std_logic; + clk_in : in std_logic; + clk90_in : in std_logic; + w_command_register : out std_logic_vector(2 downto 0); + w_cmd_ack : in std_logic; + w_burst_done : out std_logic; + write_en : in std_logic; + write_busy : out std_logic; + input_data : out std_logic_vector(31 downto 0); + write_data : in std_logic_vector(63 downto 0) + ); + END COMPONENT DDR2_Write_VHDL; + + -------------------------------------------- + -- Einbinden einer Componente + -- zum lesen eines 64Bit Wertes + -------------------------------------------- + COMPONENT DDR2_Read_VHDL + PORT ( + reset_in : in std_logic; + clk_in : in std_logic; + clk90_in : in std_logic; + r_command_register : out std_logic_vector(2 downto 0); + r_cmd_ack : in std_logic; + r_burst_done : out std_logic; + r_data_valid : in std_logic; + read_en : in std_logic; + read_busy : out std_logic; + output_data : in std_logic_vector(31 downto 0); + read_data : out std_logic_vector(63 downto 0) + ); + END COMPONENT DDR2_Read_VHDL; + + -------------------------------------------- + -- Interne Signale + -------------------------------------------- + + constant INIT_PAUSE : integer := 133000; -- pause 1ms (Wichtig !!) + signal v_counter : natural range 0 to INIT_PAUSE := INIT_PAUSE; + + -------------------------------------------- + -- 16 Konstante Werte erzeugen, die beim INIT + -- (Auto-Write) ins RAM geschrieben werden + -- ein Wert ist 64Bit = 8 Byte breit + -------------------------------------------- + constant MAX_ADR : integer := 15; -- 0 bis 15 = 16 Werte + type RAM_DATA_TYP is array (0 to MAX_ADR) of std_logic_vector(63 downto 0); + constant RAM_DATA : RAM_DATA_TYP := + ( + x"0123456789ABCDEF", x"123456789ABCDEF0", x"23456789ABCDEF01", x"3456789ABCDEF012", + x"456789ABCDEF0123", x"56789ABCDEF01234", others => (x"639CC6398C7318E7") + ); + signal v_array_pos : natural range 0 to MAX_ADR+1 := 0; + + -------------------------------------------- + -- Definition der ROW,COL,BANK adressen + -------------------------------------------- + signal v_ROW : std_logic_vector(12 downto 0):= (others => '0'); -- 13Bit + signal v_COL : std_logic_vector(9 downto 0):= (others => '0'); -- 10Bit + signal v_BANK : std_logic_vector(1 downto 0):= (others => '0'); -- 2Bit + + -- zwischenspeicher fuer daten + signal v_write_data : std_logic_vector(63 downto 0):= (others => '0'); + signal v_read_data : std_logic_vector(63 downto 0):= (others => '0'); + + -------------------------------------------- + -- Ein Konstanter Wert, der mit WRITE-Button + -- ins RAM geschrieben wird + -------------------------------------------- + constant CONST_DATA : std_logic_vector(63 downto 0):= x"31CE629DC43B8877"; + + -------------------------------------------- + -- State-Machine-Typen + -------------------------------------------- + type STATE_M_TYPE is ( + M1_START_UP, + M2_WAIT_4_DONE, + M3_AUTO_WRITE_START, + M4_AUTO_WRITE_INIT, + M5_AUTO_WRITING, + M6_AUTO_READ_INIT, + M7_AUTO_READING, + M8_NOP, + M9_WRITE_INIT, + M10_WRITING, + M11_READ_INIT, + M12_READING + ); + signal STATE_M : STATE_M_TYPE := M1_START_UP; + + -------------------------------------------- + -- sonstige Signale + -------------------------------------------- + signal v_write_en : std_logic:='0'; -- '1'=chip-select + signal v_read_en : std_logic:='0'; -- '1'=chip-select + signal v_write_busy : std_logic; -- '1'=belegt, '0'=frei + signal v_read_busy : std_logic; -- '1'=belegt, '0'=frei + signal v_main_command_register : std_logic_vector(2 downto 0):= (others => '0'); + signal v_write_command_register : std_logic_vector(2 downto 0):= (others => '0'); + signal v_read_command_register : std_logic_vector(2 downto 0):= (others => '0'); + signal v_write_burst_done : std_logic; + signal v_read_burst_done : std_logic; + +begin + + -------------------------------------------------- + -- Instantz einer Componente erzeugen und verbinden + -- zum schreiben eines 64Bit Wertes + -------------------------------------------------- + INST_DDR2_Write_VHDL : DDR2_Write_VHDL + PORT MAP ( + reset_in => reset_in, + clk_in => clk_in, + clk90_in => clk90_in, + w_command_register => v_write_command_register, + w_cmd_ack => cmd_ack, + w_burst_done => v_write_burst_done, + write_en => v_write_en, + write_busy => v_write_busy, + input_data => input_data, + write_data => v_write_data + ); + + -------------------------------------------------- + -- Instantz einer Componente erzeugen und verbinden + -- zum lesen eines 64Bit Wertes + -------------------------------------------------- + INST_DDR2_Read_VHDL : DDR2_Read_VHDL + PORT MAP ( + reset_in => reset_in, + clk_in => clk_in, + clk90_in => clk90_in, + r_command_register => v_read_command_register, + r_cmd_ack => cmd_ack, + r_burst_done => v_read_burst_done, + r_data_valid => data_valid, + read_en => v_read_en, + read_busy => v_read_busy, + output_data => output_data, + read_data => v_read_data + ); + + ----------------------------------------- + -- State-Machine : + -- 1. wartet nach Reset 1ms + -- 2. sendet das INIT-Kommando an das RAM + -- 3. Wartet auf das INIT_DONE vom RAM + -- 4. Schreiben von 16 Datenwerten ins RAM + -- 5. Auslesen von Adr0 + -- 6. Warte auf Tastendrück + -- + -- 7a. North/South = ändern der Adresse (ROW) + -- 7b. East = auslesen eines Wertes + -- 7c. West = schreiben eines Wertes + -- 8. Sprung zu Punkt 6 + ----------------------------------------- + P_State_Main : process(clk_in,reset_in) + begin + if reset_in = '1' then + -- reset button ist gedrueckt + STATE_M <= M1_START_UP; + v_write_en <= '0'; + v_read_en <= '0'; + v_main_command_register <= "000"; -- NOP + v_counter <= INIT_PAUSE; + v_ROW <= (others => '0'); + v_COL <= (others => '0'); + v_BANK <= (others => '0'); + v_array_pos <= 0; + elsif falling_edge(clk_in) then + case STATE_M is + ----------------------------------------------------- + -- INITIALISIERUNG vom RAM : WICHTIG !! : + -- nach dem Reset wird 1ms gewartet und danach + -- wird das INIT-Kommando an das RAM gesendet + -- und auf das Init-Done-Signal vom RAM gewartet + ----------------------------------------------------- + when M1_START_UP => + -- warte 1ms nach Reset bis RAM bereit + -- WICHTIG !! das steht so im Datasheet + if v_counter = 0 then + -- nach 1ms INIT-Kommando (für einen Clock) anlegen + STATE_M <= M2_WAIT_4_DONE; + v_main_command_register <= "010"; -- INIT-CMD + else + v_main_command_register <= "000"; -- NOP + v_counter <= v_counter - 1; + end if; + when M2_WAIT_4_DONE => + -- warte auf Init-Done-Signal vom RAM + v_main_command_register <= "000"; -- NOP + if (init_done = '1') then + -- das RAM ist jetzt bereit + STATE_M <= M3_AUTO_WRITE_START; + end if; + ----------------------------------------------------- + -- automatisches schreiben von ein paar Werten : + -- es werden 16 feste Datenwerte in die Adressen 0-15 + -- ins RAM geschrieben + ----------------------------------------------------- + when M3_AUTO_WRITE_START => + -- automatisches schreiben von daten ins RAM + if v_array_pos > MAX_ADR then + -- wenn alle adressen geschrieben sind + STATE_M <= M6_AUTO_READ_INIT; + v_ROW <= (others => '0'); + else + if v_write_busy = '0' and auto_ref_req = '0' then + -- wenn RAM nicht beschäftigt ist, starte das schreiben + STATE_M <= M4_AUTO_WRITE_INIT; + end if; + end if; + when M4_AUTO_WRITE_INIT => + -- warten bis zum schreiben bereit + if v_write_busy = '0' and v_write_en='0' then + -- daten zum schreiben freigeben + v_write_en <= '1'; + elsif v_write_busy = '1' and v_write_en='1' then + -- daten werden geschrieben + v_write_en <= '0'; + STATE_M <= M5_AUTO_WRITING; + end if; + when M5_AUTO_WRITING => + -- warte bis schreiben fertig + if v_write_busy = '0' then + -- naechste adresse beschreiben + v_array_pos <= v_array_pos +1; + v_ROW <= v_ROW +1; + STATE_M <= M3_AUTO_WRITE_START; + end if; + ----------------------------------------------------- + -- automatisches lesen von einem Wert : + -- es wird der Inhalt von Adr 0 vom RAM ausgelesen + ----------------------------------------------------- + when M6_AUTO_READ_INIT => + -- automatisches lesen vom RAM (ein wert) + -- warten bis zum lesen bereit + if v_read_busy = '0' and v_read_en='0' and auto_ref_req = '0' then + -- daten zum lesen freigeben + v_read_en <= '1'; + elsif v_read_busy = '1' and v_read_en='1' then + -- daten werden gelesen + v_read_en <= '0'; + STATE_M <= M7_AUTO_READING; + end if; + when M7_AUTO_READING => + -- warte bis lesen fertig + if v_read_busy = '0' then + STATE_M <= M8_NOP; + end if; + ----------------------------------------------------- + -- Dauerloop : warten auf User-Eingabe : + -- hier wird gewartet, bis einer der 4 Buttons + -- gedrückt wurde + ----------------------------------------------------- + when M8_NOP => + -- warte auf Taste fuer READ oder WRITE + v_write_en <= '0'; + v_read_en <= '0'; + if risingedge_in(3) = '1' and v_write_busy = '0' and auto_ref_req = '0' then + -- button = west + -- write starten (nur wenn nicht busy und kein refresh-zyklus) + STATE_M <= M9_WRITE_INIT; + elsif risingedge_in(0) = '1' and v_read_busy = '0' and auto_ref_req = '0' then + -- button = east + -- read starten (nur wenn nicht busy und kein refresh-zyklus) + STATE_M <= M11_READ_INIT; + end if; + -- warte auf Taste fuer Adr-Up oder Adr-Down + if risingedge_in(1)='1' and v_ROW < 255 then + -- button = north + v_ROW <= v_ROW + 1; + elsif risingedge_in(2)='1' and v_ROW > 0 then + -- button = south + v_ROW <= v_ROW - 1; + end if; + ----------------------------------------------------- + -- WRITE : schreiben eines Wertes ins RAM : + -- ein fester Datenwert wird in die aktuelle Adresse + -- ins RAM geschrieben + ----------------------------------------------------- + when M9_WRITE_INIT => + -- warten bis zum schreiben bereit + if v_write_busy = '0' and v_write_en='0' then + -- daten zum schreiben freigeben + v_write_en <= '1'; + elsif v_write_busy = '1' and v_write_en='1' then + -- daten werden geschrieben + v_write_en <= '0'; + STATE_M <= M10_WRITING; + end if; + when M10_WRITING => + -- warte bis schreiben fertig + if v_write_busy = '0' then + STATE_M <= M8_NOP; + end if; + ----------------------------------------------------- + -- READ : lesen eines Wertes vom RAM : + -- die aktuelle Adresse vom RAM wird ausgelesen + ----------------------------------------------------- + when M11_READ_INIT => + -- warten bis zum lesen bereit + if v_read_busy = '0' and v_read_en='0' then + -- daten zum lesen freigeben + v_read_en <= '1'; + elsif v_read_busy = '1' and v_read_en='1' then + -- daten werden gelesen + v_read_en <= '0'; + STATE_M <= M12_READING; + end if; + when M12_READING => + -- warte bis lesen fertig + if v_read_busy = '0' then + STATE_M <= M8_NOP; + end if; + when others => + NULL; + end case; + end if; + end process P_State_Main; + + ----------------------------------------- + -- Weiterleitung von Signalen + -- in Abhängigkeit von Read oder Write : + ----------------------------------------- + P_SIGNAL : process(clk_in) + begin + if falling_edge(clk_in) then + if STATE_M=M4_AUTO_WRITE_INIT or STATE_M=M5_AUTO_WRITING then + ----------------------------------------------------- + -- automatisches schreiben von ein paar Werten + ----------------------------------------------------- + v_write_data <= RAM_DATA(v_array_pos); + input_adress <= v_ROW & v_COL & v_BANK; + command_register <= v_write_command_register; + burst_done <= v_write_burst_done; + elsif STATE_M=M6_AUTO_READ_INIT or STATE_M=M7_AUTO_READING then + ----------------------------------------------------- + -- automatisches lesen von einem Wert + ----------------------------------------------------- + v_write_data <= (others => '0'); + input_adress <= v_ROW & v_COL & v_BANK; + command_register <= v_read_command_register; + burst_done <= v_read_burst_done; + elsif STATE_M=M9_WRITE_INIT or STATE_M=M10_WRITING then + ----------------------------------------------------- + -- WRITE : schreiben eines Wertes ins RAM + ----------------------------------------------------- + v_write_data <= CONST_DATA; + input_adress <= v_ROW & v_COL & v_BANK; + command_register <= v_write_command_register; + burst_done <= v_write_burst_done; + elsif STATE_M=M11_READ_INIT or STATE_M=M12_READING then + ----------------------------------------------------- + -- READ : lesen eines Wertes vom RAM + ----------------------------------------------------- + v_write_data <= (others => '0'); + input_adress <= v_ROW & v_COL & v_BANK; + command_register <= v_read_command_register; + burst_done <= v_read_burst_done; + else + ----------------------------------------------------- + -- Dauerloop oder INIT + ----------------------------------------------------- + v_write_data <= (others => '0'); + input_adress <= (others => '0'); + command_register <= v_main_command_register; + burst_done <= '0'; + end if; + end if; + end process P_SIGNAL; + + ----------------------------------------- + -- Ausgabe der gelesenen Daten + -- je nach Schalterstellung + ----------------------------------------- + P_DataOut : process(clk_in,reset_in) + begin + if reset_in = '1' then + -- reset button ist gedrueckt + data_out <= (others => '0'); + elsif falling_edge(clk_in) then + if debounce_in(7 downto 5)="000" then data_out <= v_read_data(7 downto 0); + elsif debounce_in(7 downto 5)="001" then data_out <= v_read_data(15 downto 8); + elsif debounce_in(7 downto 5)="010" then data_out <= v_read_data(23 downto 16); + elsif debounce_in(7 downto 5)="011" then data_out <= v_read_data(31 downto 24); + elsif debounce_in(7 downto 5)="100" then data_out <= v_read_data(39 downto 32); + elsif debounce_in(7 downto 5)="101" then data_out <= v_read_data(47 downto 40); + elsif debounce_in(7 downto 5)="110" then data_out <= v_read_data(55 downto 48); + elsif debounce_in(7 downto 5)="111" then data_out <= v_read_data(63 downto 56); + end if; + ------------------------------------------- + end if; + end process P_DataOut; + +end Verhalten; + Index: Top_Modul_VHDL_bitgen.xwbt =================================================================== --- Top_Modul_VHDL_bitgen.xwbt (nonexistent) +++ Top_Modul_VHDL_bitgen.xwbt (revision 2) @@ -0,0 +1,8 @@ +INTSTYLE=ise +INFILE=F:\Data_Temp_Ordner\Xilinx\Projekte\Test_Prj_VHDL\Prj_12_DDR2\Prj_12_DDR2\Top_Modul_VHDL.ncd +OUTFILE=F:\Data_Temp_Ordner\Xilinx\Projekte\Test_Prj_VHDL\Prj_12_DDR2\Prj_12_DDR2\Top_Modul_VHDL.bit +FAMILY=Spartan3A and Spartan3AN +PART=xc3s700a-4fg484 +WORKINGDIR=F:\Data_Temp_Ordner\Xilinx\Projekte\Test_Prj_VHDL\Prj_12_DDR2\Prj_12_DDR2 +LICENSE=WebPack +USER_INFO=205456775_0_0_536 Index: UB_Clock_UCF.ucf =================================================================== --- UB_Clock_UCF.ucf (nonexistent) +++ UB_Clock_UCF.ucf (revision 2) @@ -0,0 +1,31 @@ +######################################### +# File : UB_Clock_UCF.ucf +# Autor : UB +# +# Constraint-File fuer die externen Clock-Quellen +# auf dem Spartan-3A Board +# +# CLK_50MHZ_IN = 50 MHz +# CLK_AUX_IN = 133,33 MHz +# CLK_SMA_IN = nicht belegt +# +# +# unbenutzte Netze per '#' deaktivieren +# +######################################### + +#NET "CLK_50MHZ_IN" LOC = "E12"| IOSTANDARD = LVCMOS33 ; +NET "CLK_AUX_IN" LOC = "V12"| IOSTANDARD = LVCMOS33 ; +#NET "CLK_SMA_IN" LOC = "U12"| IOSTANDARD = LVCMOS33 ; + + +######################################### +# Port-Zuweisungen +######################################### +# +# +# CLK_50MHZ_IN : in std_logic; +# CLK_AUX_IN : in std_logic; +# CLK_SMA_IN : in std_logic; +# +######################################### \ No newline at end of file Index: Buttons_VHDL.vhd =================================================================== --- Buttons_VHDL.vhd (nonexistent) +++ Buttons_VHDL.vhd (revision 2) @@ -0,0 +1,138 @@ +--------------------------------------------------------------------- +-- File : Buttons_VHDL.vhd +-- Projekt : Prj_12_DDR2 +-- Zweck : Buttons und Schalter entprellen +-- Datum : 19.08.2011 +-- Version : 2.0 +-- Plattform : XILINX Spartan-3A +-- FPGA : XC3S700A-FGG484 +-- Sprache : VHDL +-- ISE : ISE-Design-Suite V:13.1 +-- Autor : UB +-- Mail : Becker_U(at)gmx.de +--------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + + -------------------------------------------- + -- Beschreibung : + -- + -- hier werden die Buttons und Schalter + -- mit dem Clock syncronisiert + -- + -- weil die Taster prellen + -- werden sie mit einer Verzögerung eingelesen + -- sonst kommt es zu anzeigefehlern + -- + -- damit die Read/Write Funktionen + -- bei gedruecktem Button nicht + -- staendig aufgerufen werden, + -- wird aus allen 4 Buttons + -- ein OnClick-Eregnis gemacht + -------------------------------------------- + +entity Buttons_VHDL is + + -------------------------------------------- + -- Port Deklerationen + -------------------------------------------- + port ( + clk_in : in std_logic; + button_in : in std_logic_vector(3 downto 0); + switch_in : in std_logic_vector(3 downto 0); + debounce_out : out std_logic_vector(7 downto 0); + risingedge_out : out std_logic_vector(3 downto 0) + ); + +end Buttons_VHDL; + +architecture Verhalten of Buttons_VHDL is + + -------------------------------------------- + -- Interne Signale + -------------------------------------------- + signal v_debounce : std_logic_vector(7 downto 0) := (others => '0'); + signal v_btn_old : std_logic_vector(3 downto 0):= (others => '0'); + signal v_btn_tic : std_logic_vector(3 downto 0):= (others => '0'); + + -- verzoegerung für die tasten, weil sie prellen + constant BUTTON_SLEEP : integer := 6650000; -- Zeit = 50ms bei 133MHz Quarz + signal v_counter : natural range 0 to BUTTON_SLEEP := BUTTON_SLEEP; + +begin + + ----------------------------------------- + -- Einclocken von Asyncronen Signalen + ----------------------------------------- + P_ASYNC : process(clk_in) + begin + if falling_edge(clk_in) then + if v_counter = 0 then + -- wenn Verzögerungszeit um, die zustände der + -- buttons und schalter übergeben + v_counter <= BUTTON_SLEEP; + v_debounce(3 downto 0) <= button_in(3 downto 0); + v_debounce(7 downto 4) <= switch_in(3 downto 0); + else + v_counter <= v_counter -1; + end if; + end if; + end process P_ASYNC; + + -- übergabe der Signale------------------ + debounce_out <= v_debounce; + + ----------------------------------------- + -- Aus den Tastern jeweils ein + -- einzelnes 1Clock langes Signal machen, + -- bis der Taser wieder verlassen ist + -- damit die Funktionen (+/-, read,write) + -- nur einmal ausgeführt werden + ----------------------------------------- + P_Buttons : process(clk_in) + begin + if falling_edge(clk_in) then + -- TIC merker zurücksetzen + v_btn_tic(3 downto 0) <= "0000"; + + -- button east------------------------------- + if v_debounce(0)='1' and v_btn_old(0)='0' then + v_btn_old(0) <= '1'; + v_btn_tic(0) <= '1'; + elsif v_debounce(0)='0' and v_btn_old(0)='1' then + v_btn_old(0) <= '0'; + end if; + + -- button north----------------------------- + if v_debounce(1)='1' and v_btn_old(1)='0' then + v_btn_old(1) <= '1'; + v_btn_tic(1) <= '1'; + elsif v_debounce(1)='0' and v_btn_old(1)='1' then + v_btn_old(1) <= '0'; + end if; + + -- button south----------------------------- + if v_debounce(2)='1' and v_btn_old(2)='0' then + v_btn_old(2) <= '1'; + v_btn_tic(2) <= '1'; + elsif v_debounce(2)='0' and v_btn_old(2)='1' then + v_btn_old(2) <= '0'; + end if; + + -- button west------------------------------ + if v_debounce(3)='1' and v_btn_old(3)='0' then + v_btn_old(3) <= '1'; + v_btn_tic(3) <= '1'; + elsif v_debounce(3)='0' and v_btn_old(3)='1' then + v_btn_old(3) <= '0'; + end if; + end if; + end process P_Buttons; + + -- übergabe der Signale------------------ + risingedge_out <= v_btn_tic; + +end Verhalten; + Index: impact_impact.xwbt =================================================================== --- impact_impact.xwbt (nonexistent) +++ impact_impact.xwbt (revision 2) @@ -0,0 +1,8 @@ +INTSTYLE=impact +INFILE=F:\Data_Temp_Ordner\Xilinx\Projekte\Test_Prj_VHDL\Prj_12_DDR2\Prj_12_DDR2\impact.xsl +OUTFILE=F:\Data_Temp_Ordner\Xilinx\Projekte\Test_Prj_VHDL\Prj_12_DDR2\Prj_12_DDR2\impact.xsl +FAMILY=Multiple +PART=Multiple +WORKINGDIR=F:\Data_Temp_Ordner\Xilinx\Projekte\Test_Prj_VHDL\Prj_12_DDR2\Prj_12_DDR2 +LICENSE=iMPACT +USER_INFO=iMPACT Index: Prj_12_DDR2.gise =================================================================== --- Prj_12_DDR2.gise (nonexistent) +++ Prj_12_DDR2.gise (revision 2) @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + 11.1 + + + + + + + + + + Index: Top_Modul_VHDL.vhd =================================================================== --- Top_Modul_VHDL.vhd (nonexistent) +++ Top_Modul_VHDL.vhd (revision 2) @@ -0,0 +1,280 @@ +--------------------------------------------------------------------- +-- File : Top_Modul_VHDL.vhd +-- Projekt : Prj_12_DDR2 +-- Zweck : DDR2-SDRAM am Spartan-3A Board +-- DDR2-RAM : MT47H32M16 (64 MByte) +-- Datum : 19.08.2011 +-- Version : 7.0 +-- Plattform : XILINX Spartan-3A +-- FPGA : XC3S700A-FGG484 +-- Sprache : VHDL +-- ISE : ISE-Design-Suite V:13.1 +-- IP-Core : MIG V:3.6.1 +-- Autor : UB +-- Mail : Becker_U(at)gmx.de +--------------------------------------------------------------------- +-- +-- Bitte auch die Hinweise in der "DDR2_liesmich.txt" beachten +-- +-- please have a look at the "DDR2_readme.txt" +-- and sorry for my bad english :-) +-- +--------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; + +entity Top_Modul_VHDL is + -------------------------------------------- + -- Port Deklerationen + -------------------------------------------- + port( + CLK_AUX_IN : in std_logic; + LED_OUT : out std_logic_vector(7 downto 0); + LED_YELLOW_OUT : out std_logic; + SW_IN : in std_logic_vector(3 downto 0); + BTN_IN : in std_logic_vector(3 downto 0); + ---------------------------------------------------- + -- DDR2 SDRAM-Port-Pins + ---------------------------------------------------- + cntrl0_ddr2_a : out std_logic_vector(12 downto 0) := (others => '0'); + cntrl0_ddr2_ba : out std_logic_vector(1 downto 0) := (others => '0'); + cntrl0_ddr2_ck : out std_logic_vector(0 downto 0) := (others => '0'); + cntrl0_ddr2_ck_n : out std_logic_vector(0 downto 0) := (others => '0'); + cntrl0_ddr2_cke : out std_logic := '0'; + cntrl0_ddr2_cs_n : out std_logic := '0'; + cntrl0_ddr2_ras_n : out std_logic := '0'; + cntrl0_ddr2_cas_n : out std_logic := '0'; + cntrl0_ddr2_we_n : out std_logic := '0'; + cntrl0_ddr2_odt : out std_logic := '0'; + cntrl0_ddr2_dm : out std_logic_vector(1 downto 0) := (others => '0'); + cntrl0_ddr2_dqs_n : inout std_logic_vector(1 downto 0) := (others => '0'); + cntrl0_ddr2_dqs : inout std_logic_vector(1 downto 0) := (others => '0'); + cntrl0_ddr2_dq : inout std_logic_vector(15 downto 0) := (others => '0'); + cntrl0_rst_dqs_div_in : in std_logic; + cntrl0_rst_dqs_div_out : out std_logic + ---------------------------------------------------- + ); + +end Top_Modul_VHDL; + +architecture Verhalten of Top_Modul_VHDL is + + -------------------------------------------- + -- Interne Signale + -------------------------------------------- + signal v_reset_n : std_logic; + signal v_reset_p : std_logic; + signal v_debounce : std_logic_vector(7 downto 0) := (others => '0'); + signal v_risingedge : std_logic_vector(3 downto 0) := (others => '0'); + + -- DDR2 SDRAM-Leitungen ----------------------------------------- + signal clk_tb : std_logic; + signal clk90_tb : std_logic; + signal burst_done : std_logic; + signal user_command_register : std_logic_vector(2 downto 0) := (others => '0'); + signal user_data_mask : std_logic_vector(3 downto 0):= (others => '0'); + signal user_input_data : std_logic_vector(31 downto 0); + signal user_input_address : std_logic_vector(24 downto 0); + signal v_init_done : std_logic; + signal ar_done : std_logic; + signal auto_ref_req : std_logic; + signal user_cmd_ack : std_logic; + signal user_data_valid : std_logic; + signal user_output_data : std_logic_vector(31 downto 0); + --------------------------------------------------------------------- + + -------------------------------------------- + -- Einbinden einer Componente + -- Clock_VHDL : für die Clockerzeugung + -------------------------------------------- + COMPONENT Clock_VHDL is + PORT ( + clk_in_133MHz : in std_logic; + clk_out_1Hz : out std_logic + ); + END COMPONENT Clock_VHDL; + + -------------------------------------------- + -- Einbinden einer Componente + -- Buttons_VHDL : für die Buttons und Schalter + -------------------------------------------- + COMPONENT Buttons_VHDL is + PORT ( + clk_in : in std_logic; + button_in : in std_logic_vector(3 downto 0); + switch_in : in std_logic_vector(3 downto 0); + debounce_out : out std_logic_vector(7 downto 0); + risingedge_out : out std_logic_vector(3 downto 0) + ); + END COMPONENT Buttons_VHDL; + + -------------------------------------------- + -- Einbinden einer Componente + -- VHDL um das DDR2 zu steuern + -------------------------------------------- + COMPONENT DDR2_Control_VHDL is + PORT ( + reset_in : in std_logic; + clk_in : in std_logic; + clk90_in : in std_logic; + init_done : in std_logic; + command_register : out std_logic_vector(2 downto 0); + input_adress : out std_logic_vector(24 downto 0); + input_data : out std_logic_vector(31 downto 0); + output_data : in std_logic_vector(31 downto 0); + cmd_ack : in std_logic; + data_valid : in std_logic; + burst_done : out std_logic; + auto_ref_req : in std_logic; + debounce_in : in std_logic_vector(7 downto 0); + risingedge_in : in std_logic_vector(3 downto 0); + data_out : out std_logic_vector(7 downto 0) + ); + END COMPONENT DDR2_Control_VHDL; + + -------------------------------------------- + -- Einbinden einer Componente + -- DDR2_RAM_Modul (vom MIG generiert) + -------------------------------------------- + COMPONENT DDR2_Ram_Core is + PORT ( + cntrl0_ddr2_dq : inout std_logic_vector(15 downto 0); + cntrl0_ddr2_a : out std_logic_vector(12 downto 0); + cntrl0_ddr2_ba : out std_logic_vector(1 downto 0); + cntrl0_ddr2_cke : out std_logic; + cntrl0_ddr2_cs_n : out std_logic; + cntrl0_ddr2_ras_n : out std_logic; + cntrl0_ddr2_cas_n : out std_logic; + cntrl0_ddr2_we_n : out std_logic; + cntrl0_ddr2_odt : out std_logic; + cntrl0_ddr2_dm : out std_logic_vector(1 downto 0); + cntrl0_rst_dqs_div_in : in std_logic; + cntrl0_rst_dqs_div_out : out std_logic; + sys_clk_in : in std_logic; + reset_in_n : in std_logic; + cntrl0_burst_done : in std_logic; + cntrl0_init_done : out std_logic; + cntrl0_ar_done : out std_logic; + cntrl0_user_data_valid : out std_logic; + cntrl0_auto_ref_req : out std_logic; + cntrl0_user_cmd_ack : out std_logic; + cntrl0_user_command_register : in std_logic_vector(2 downto 0); + cntrl0_clk_tb : out std_logic; + cntrl0_clk90_tb : out std_logic; + cntrl0_sys_rst_tb : out std_logic; + cntrl0_sys_rst90_tb : out std_logic; + cntrl0_sys_rst180_tb : out std_logic; + cntrl0_user_output_data : out std_logic_vector(31 downto 0); + cntrl0_user_input_data : in std_logic_vector(31 downto 0); + cntrl0_user_data_mask : in std_logic_vector(3 downto 0); + cntrl0_user_input_address : in std_logic_vector(24 downto 0); + cntrl0_ddr2_dqs : inout std_logic_vector(1 downto 0); + cntrl0_ddr2_dqs_n : inout std_logic_vector(1 downto 0); + cntrl0_ddr2_ck : out std_logic_vector(0 downto 0); + cntrl0_ddr2_ck_n : out std_logic_vector(0 downto 0) + ); + END COMPONENT DDR2_Ram_Core; + + +begin + + -------------------------------------------------- + -- Instantz einer Componente erzeugen und verbinden + -- Clock_VHDL : für die Clockerzeugung + -------------------------------------------------- + INST_Clock_VHDL : Clock_VHDL + PORT MAP ( + clk_in_133MHz => clk_tb, + clk_out_1Hz => LED_YELLOW_OUT + ); + + -------------------------------------------------- + -- Instantz einer Componente erzeugen und verbinden + -- VHDL um die Buttons/Schalter zu bearbeiten + -------------------------------------------------- + INST_Buttons_VHDL : Buttons_VHDL + PORT MAP ( + clk_in => clk_tb, + button_in => BTN_IN, + switch_in => SW_IN, + debounce_out => v_debounce, + risingedge_out => v_risingedge + ); + + -------------------------------------------------- + -- Instantz einer Componente erzeugen und verbinden + -- VHDL um das DDR2 zu steuern + -------------------------------------------------- + INST_DDR2_Control_VHDL : DDR2_Control_VHDL + PORT MAP ( + reset_in => v_reset_p, + clk_in => clk_tb, + clk90_in => clk90_tb, + init_done => v_init_done, + command_register => user_command_register, + input_adress => user_input_address, + input_data => user_input_data, + output_data => user_output_data, + cmd_ack => user_cmd_ack, + data_valid => user_data_valid, + burst_done => burst_done, + auto_ref_req => auto_ref_req, + debounce_in => v_debounce, + risingedge_in => v_risingedge, + data_out => LED_OUT + ); + + -------------------------------------------------- + -- Instantz einer Componente erzeugen und verbinden + -- DDR2_RAM_Modul (vom MIG generiert) + -------------------------------------------------- + INST_DDR2_RAM_CORE : DDR2_Ram_Core + PORT MAP ( + sys_clk_in => CLK_AUX_IN, + reset_in_n => v_reset_n, + cntrl0_burst_done => burst_done, + cntrl0_user_command_register => user_command_register, + cntrl0_user_data_mask => user_data_mask, + cntrl0_user_input_data => user_input_data, + cntrl0_user_input_address => user_input_address, + cntrl0_init_done => v_init_done, + cntrl0_ar_done => ar_done, + cntrl0_auto_ref_req => auto_ref_req, + cntrl0_user_cmd_ack => user_cmd_ack, + cntrl0_clk_tb => clk_tb, + cntrl0_clk90_tb => clk90_tb, + cntrl0_sys_rst_tb => open, + cntrl0_sys_rst90_tb => open, + cntrl0_sys_rst180_tb => open, + cntrl0_user_data_valid => user_data_valid, + cntrl0_user_output_data => user_output_data, + cntrl0_ddr2_ras_n => cntrl0_ddr2_ras_n, + cntrl0_ddr2_cas_n => cntrl0_ddr2_cas_n, + cntrl0_ddr2_we_n => cntrl0_ddr2_we_n, + cntrl0_ddr2_cs_n => cntrl0_ddr2_cs_n, + cntrl0_ddr2_cke => cntrl0_ddr2_cke, + cntrl0_ddr2_dm => cntrl0_ddr2_dm, + cntrl0_ddr2_ba => cntrl0_ddr2_ba, + cntrl0_ddr2_a => cntrl0_ddr2_a, + cntrl0_ddr2_ck => cntrl0_ddr2_ck, + cntrl0_ddr2_ck_n => cntrl0_ddr2_ck_n, + cntrl0_ddr2_dqs => cntrl0_ddr2_dqs, + cntrl0_ddr2_dqs_n => cntrl0_ddr2_dqs_n, + cntrl0_ddr2_dq => cntrl0_ddr2_dq, + cntrl0_ddr2_odt => cntrl0_ddr2_odt, + cntrl0_rst_dqs_div_in => cntrl0_rst_dqs_div_in, + cntrl0_rst_dqs_div_out => cntrl0_rst_dqs_div_out + ); + + + ----------------------------------------- + -- Reset-Signal aus einem Schalter generieren + ----------------------------------------- + v_reset_p <= SW_IN(0); + v_reset_n <= not v_reset_p; + + + +end Verhalten; + Index: Top_Modul_VHDL_guide.ncd =================================================================== --- Top_Modul_VHDL_guide.ncd (nonexistent) +++ Top_Modul_VHDL_guide.ncd (revision 2) @@ -0,0 +1,3 @@ +XILINX-XDB 0.1 STUB 0.1 ASCII +XILINX-XDM V1.6 +###4324:XlxV32DM 3fb9 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###2340:XlxV32DM 3fe3 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###1552:XlxV32DM 3fdf 5f8eNqtWl1v20YQ/EVteXsfJJFAQBjXqIE2BWyjeTwoolIY9UqFTBf9+ZVNOU7TcinO3KuWM3s3Nzze2Hf14eY2v7/fb/7Iv/108fMPf+XNbnBvXbPKf66PPzrXv7mafuYwuPVkvV2JM4pjAzEatM8N2sn6Sqrp2gv9xnjEGr5UxvCPxVl9np4xGzirgZvXR+ZmIFYDOWMGMtPAWw38GTPwMw2C1SCcMYMw0yBaDeIZM4i2R8Xw6OsKbIxHLHZvsPv5N8Db7MFgD/NjDzZ7NNjj/NhH3bdm+Xs33T4Z7dP85JI9udpgr+cnV9vsjcHezI+9sdlbg72dH/u4aTcT5VxNl6ZXK7vKqFk4MWreqAWjFo1aMmq1UWuMWjstmTE9MSQTQzKxOA3JxJBM4vQU/HQpTJcMwjRdqqdLzXSp9SezX1xcS36/3w2H/f34xOvP19t1P/52c/vu9sd8/S5f3vySLy975z9T8O+udqFiGVzwFMXpteeUEG4QctrZuEF4bjk8vRyeXw5fRInAKRFoJQKvRDgpUYTFc3pGTs9I6xl5PeOoROSUSJwSiVYi8UqkIs46sUgRFl+EJfgeZvn1cUjOtxD+iA0O7H2367d/V1WF7Xgd9ynu6E9xx3+Ku28/xUVYAqencHoKrafwegrznn/L4v0ilqyPo6vrJahD/vR4eBhyv99tl8l3yJu96nrX58P297uHYXt461bL1vC/FHnh8I+n6v3j7ql3tfJbFPlyIE0QQa7Azrk6rVm1TLb/IXC+WcbQr4d1vn/49KRbC0Idg3UEVgisJ7CBwEYCmwhsTWAbAtuuYEsS1hDCksL0JSwphCWFsKQQlhTCkkJYUghLCmFJYnk9YUnv8CF7HBpwaMShCYfWOLTBoUc/1Rj0eGRAkfCXPrsKhxJdBYd6HBpwaMShCYfWOLTBoS3sQ3xZBfeh4D4UYsC4DwX3oeA+FNyHgvtQcB8K7kN8bTzuQ+/g8QYYGWFkgpE1jGxgZLvs73pfIXf74TkLbzk8tskoHqaVCNNKhGklwrQSYVqJMK1EmFYiTCsRppUI00qEacXDtBJhWokwrUSYViJMKxGmlQjTSoRpJcK0EmFaiTCteJhWIkwrEaYVD9OKh2nFw7TiYVrxMK14mFY8TCscphUO04qHacXDtOJhWvEwrXiYVjxMKx6mFQ/TiodpxcO0wmFa8TCteJhWPEwrHqYVD9OKh2nFw7TiYVrxMK14mFY4TCsephUP0wqHaYXDtMJhWuEwrXCYVjhMKxmmv8I7OYPg4+Fu2I4/fqh8XAh4+fd9vwg33rr4+Hot9ZzrDxb+6QKKoylcCBxHGTWEHMaX+7XcMDy5KJ5flOcrtuQ0AjmNwE9jvB/Lc5x1V2yGI3+OpL2+XNUtQiNlaALpkki6JPIuiQV2oFhmB0qkGolXIxVQI5XZCGtSjZpXoy6gRl3mva3LvLf1y0VLaG068uTQ8SeHrsDJoStzcujIk0NX5uTQkSeHjj85dAVODh15cuj4k0P375NDePMPYn2uyw==###1180:XlxV32DM 3fe5 484eNqtm11rU0EURX+RNLPPzNx7sRTUWgz4AabYx0toUyhqUkIq/nyT1rS1PmX2ymPg7HNYc9jZk9xMP8/Ox9PTrxrfrZab9erH+O3D6cej6ePbF+ubzeLhzdn5m/P348Xb8Wz2aTw7u8rj7fzy+6icX099mYgrS6bkiVf/arrMyZZIJo3yQCPFcJDMzfL2bjNezTfz48nJgST+qd23n7dKpG3/ZBT7AyRngAQMIGcAAQOEM0AAA2RngAwMUJwBCjBAdQaowACdM0AHDNA7A/TAAIMzwHBiG3EyjBiwITlGLMCI5RixCAKOEQswYjlGLMCI5RixACOWY8QCjFiOEQswYjlGLMCI5RixACOWY8QCjFiGEQMuEI4RB2DE4Rhx7I042g8gjAMI//yz0T777YvRvvjtq9G++u07o33nt++N9nvvU3v7wWj/5Hx9o8Q4aS9tZz6miVHr9JVRG0ZtNmqLUVuN2s6o7Y3aoX0ljeOVsZIyVlLOzMZKylhJGSspYyVlrKSMlZSxksYRhbGSYXwm5PbS0l5a20u79tK+vXRojszjz7vfk+1r9028fI3tpwsgkvxRdt/sV0BknF1Mcg8JHX3J15jU/gctH1UiUCUKVeJQJRyVCFSiUIlDJRxVEKiCQhUcqsBRZQJVplBlDlXGURUCVaFQFQ5VwVFVAlWlUFUOVcVRdQSqjkLVcag6HFVPoOopVD2HqsdRDQSqgUI1cKiGF6jsy8c2gRZf4x5Ux+hsOS0oJWyjRFxqRF1qxF1qhF9qRFxqRF1qxF1qxG8VcakRdakRd6kRfqnZPSPhixBxX1TcFxf3hcd9EXFfVNwXF/eFx30RcV9U3BcX94XHfRFxX1TcFxf3hcd9EXFfVNwXF/eFx30RcV9U3BcX94XHfQFxX1DcFxb38bQRRNwPKu4HF/cDj/tBxP24j9bJ3+8A9jug/Q5sv4O2gQyE6XwCnFcBzqtA51Ww8yr0eVUAU4UwVQxTpTF1AKYOwtRhmDoaUw9g6iFMPYappzENAKYBwjRgmF5EygP/TvtMcLXe6cXCq0/ND77+FRivy4H/pf1foun52V/j5epuuVmsjycncd1cum/uKoStUJsBpHYA6fHhaVch2wolujaFcdJceej+P1U+e3ws2RK7Mf4AkiwZYQ==###1700:XlxV32DM 3fd4 68ceNqtmt1u20YQhZ+oKGd2dkmhAYGiblABtQvYRny5oPWTBqUkg5Ic5+1LUaIvEpHacxQDvpHmmzM7MzskV5zePTzGm5t7jX9s1rtmU8dPf938/ev0/eOn5stucfzwNc42+/Vu0cTV/i1r/z5IafLb9EoX4grIx9f4vG+2uzjfrBeW0WgfAbiCcy7kJ/hQc1f7iEvvlryXl2r2X8TXMtusVtV6HpvF5y/btrQftLTieh/HcBSu8PeuWheTa130zZqVVv08X+JsyNltNZ9v98/xNd7/8xS3/1bNoivw7FvLOU9gwnJSUmGSmHKY4zDjMM9hgcNyDis4bEK0Sb3fHdoyMJzQoLCgkksUkmP1HMkZyXmSCySXk1xBckxrv20aqrUPnNCgsKCSSxSSY/UcyRnJeZILJJeTXEFyo63d3oK8VM2Jm61e4udd0s3ECCckpyTX9suM4463kTayn4bwi1e1MVBYUFmQStERjNO7TzFDKlOTHVSTHVSTHVSTHVT/0EF6He6QqtZsA9ZsA9ZsA9ZsA9ZnGlBH8P1619JV01Tf4stme7pqicCQMpBjIGshnV+E+hORbjPpArEXGBAUUBRwKGAo4FEglFgZBLRX0N6B9gbae9AezU8O2heg/aTUZbJ9/xDpUeI4dFAlgZWEVFJYSUklBys5UslgJSOVPKzkSaUAKwVSKYeV8l5pgXFjZ0fnAUpHUR3ldByq4zgdQ3WM0/Gojud0AqoTOJ0c1SH7ukB1Ck5ngupMcJ3jyRQwQk5HUighMKEw4WDCYMLDRICJvAQLKCigKOBQwFDAo0BAATitBQq0G3bwZ8/b1f4tzqtdFTf73ftPrRqXwTmcaR9zGUooSinKUZRRlKeogFbLHX4aV5wRNyGg/sSIEFRGUK8QdIygu0LQGEG7QtAzgv4KwcAIhisEc0Yw7wUdzuJDrKOEorgIHUUZRXmKCsPvPY1Qx6KNXN7OojZyJ3MeEJhQmHAwga/Dw0SAiRy9HBlxObLuckRAykCOgYyBqEQEBsrRbWrUqDNq1Bk16owadUaNOqNGXUcFdF7Bu7bdGhlKZDhCqCiOOBwxHMFzDE94D094D094j68DnvA+h4kCJiboJoGXEeCLeoBLHuCSB7jkAS55wHM1drVoNqv4Gr927/l2ZPtB9yJ4OyA8Q43+ujzEqRAhqow90w5Tp7fDmTAdI5jwiDnEGlM6y5m8WM7nJTDlC1T5Ql8+GWTvMs2Gvzvhl01UBl+QvxNRGfnycoh+xLkfc/5+JDOygP7RakQ/jOChT9FgFPeL7b4+vNFz2eZwTH/RRhJsNMHGJdhYgo1PsAkJNnk5nObeJsFNKRfdJGRHE9wkJNAluEnIsSW48ZfTFy6bJBShuGwyKTUfMnl4/P3xz3gbPz60/x/nolWq5S/TtT4DxqJFqnWW7jg7hLFErOPDUwYQ/UBJDl7Sg+9yOEOsJT3yfpLDhE9fq6avVaG1KrbW09G7G753/57or0SpG0OTN4YiG+O4ztSotS9patQuOWqHlKczDsPPumfNu333DCA+OS+uL39qXiw5L4ZU07pqItY6/EreGevDMWJqTgztcJ+cE4/0Smc8cnp31ryPHRFxlpz5g3mAnLfP7JC5JtepM0cK69EhEJILG5BmD9DoCmjUeXLUORJ1DkXdP1eiwKH8/wMUmYQb###1844:XlxV32DM 3fe9 71ceNqdmm9v2zYQhz/RMPGOpEQsKDAsyxZgf4AmWF8Siq12wRo7s512/faTWssJkkh8TgHy7rnfHX88UhTlyz+urvP5+VvJP203h932Y/7r1/Pfvr+6/vH65/x7vrjq/y/Wdb5vV/9kle6HS0uAlxoGNNJS8rvLjdwYYGeiRdYGOr8P2JPmmyfOGiDWAMWuJ+x6srieTK4nk+vJ6Hqyup6svZ7GXk+lgNXdfe7+rfo/rTh77AIVQ8jnD3n15ax6syDILQmSJUG6JMi/UbUFfXw4DE4siHKLomRRlC6K8m/ETUXdPOz2h7zebrrpznxk8t3Df72wn94RXrJuGl5t7+7azTrvug+3+0O3G7x0BnhchDyBWBLIMYFbECPTdj6P6bcdzs6s8BfscQIGV/2CIOeWhYVFYeL1ZlHYOEdLkmqzwM65pTsT5GQy1bo9tHn7dQcCkCOQEEgJ5AkUCBQJVM9sViOUK8A4wAhgFDAeMAEwETD19HZ3Yr51XTX0E4edBRYLrBbYW+BggaMF7vtw8oB8u7nvyXa96/b7MyeYVEx6TAZMRkzysTeYTJSUCpMOk3iOBM+R9HMUCdnvRBRUCnoKBgpGCtYUbCiYICgVBR0F6cwInRnx8h6Bp0NIf5yorBEzp53JkHz1rrJnEutw1Dwc7Y9GxiTenMTbkwRzkmBPEs1Joj1JbU5S25M05iSNPUkyJ0nmJP0DyJikjzAnceYkzp7EvLeI2JOYV7zYV7yYV7wMK75FIdvdcOKbvop8BZ65EniFLl4jTMZ4yxDEMgQxlSPHWw03OW2f8ts/3w0vHLFEjHet1Tzo5s6BJ2S0qSTmymKP90klMSmLne6OSo65omOOSklRaqzKl6S0KKWjWyUpX5TytKpQlAq0qliUirSquihV06qaolRDq0pFqXSqqpsFc1UCSp2ZXVUkyhpSKqMIFEfqS0AoAbEE1CWgKQGpsPk8vf1pKDnzrHyBusoCJwPsk3QGeHil4UMUWWG0VxaqPDyoEkYdlnVc1hlkhcsOh0HYaw73muOigkUNlSoWVS7qsajnogGLBi4asWjkojUWrblog0UbLpqw6PDi6AnqJDCstO72f7e7rnhv/5x1JthZ4PJW8QQ2sBZdNbDewAYDGw1sbWAbA9s37kybtbtd+yXfb/dD66wYN76HmXBhVThYhbNV4U5VmHBlRQssWmxFi63oEQ+saIVFq60KPb1Zoyo8rMLbrPOnoj3Ac8UwxzCYVBnm5/bdR2yzPXx9VtwYYCc6Ta+2D5vhhynzT4lHapyfiODdYW70Izg8om4QNmYnoo6JOtJDJ1qYqJgqVSaqpko9E/WmSgMTDaZKIxONpkprJlqfKgVrxKE14iySgiQf2wlIKpJUS5UeSXpLlQFJBkuVEUlGS5U1kjQ1UYMkG0uVCUmmU5VShPtHJYBIcdlViGJagihFlEdUQFREVE1MRdOjBPIECgSKBEKjawiUpj89fcp37e0mv/bL4MYeczzDamUM7VssWUOOb/lDpe3y2NnPYruuXeduM3eDcUTGW4y5feMZmi8s8C9zFy4jfNyOKOnnDp2fd7eHLg8/0zub/zD4BHScdJgUTComPSYDJhtMzn8qekpSScHGC7ZTsJ0SMVljsqEm4QEpNkmx8YpNUtxzintOsZ2Ku1Nxd+Khe2ynx5PpeXZsp8d97LHxHtuJ+yPgPg7Y+IDtDNjOUNOhY8noqGSkIC4Sb0jzN8ePYP9OwDjHEg9vBhDEikJBpaCnYKBgQ8EE/aaDFuq3YEVqo0QK1hRsoDu0RKXuKO1GxalpkyltMqU2Ku1GHbrxf859VQc=###1500:XlxV32DM 3fcd 5c4eNq1mm9v20YMxr/RIpJH6YQNBoY46IKlHhAPHfbq4Co2FtSxDUfusm8/neskDVasR/HxOxsgf8eHf+6ks69n89/TdHrL6XK76ffbdfrwy/Tm4nP6e3/fL9Pdol+kwPWP1yV2VGrIpYZSaqilhnWpYVNq2LIWGZaGqFWpYWm+tTSNWhxjUyi6NN01FQJLF46Fdi2viuweDk9VVclP1YSksnpYXSivQmYX8zI0LCNWlzT/w7wQm7NGak+BjkhBMyFjB1CcWJMWc9LYGlprThrbu5PJnADmiXURe/1Z7C7BLkXNUtQeV21u5exiXiba5Zvnf/AYWrkyhib2/Sy7WOUIWaspZK6miDnNEsxxBXtcYcLCVpe0Uus69gGQxu4S7R0T7TMjrX2ZdkRj2vXbtQT7aR6Op7l1mgObJyCIdQJCzlkwu4yRY2/oYN/Rs4s5a405a/ZJC629bdrjQ6BVjTk0tT/OqH0IdNQQqJqHQM3lVHs5azK3ZnaxaqnN6vOD9nfjWm64/b7NiVnxotyWLMbMXbnxcIRyLDDfLbpPictNQ/g64tuf36fL326vLu43q/3isd8fuv6wX6Z+u6su3nfbh91in7rtYdMv9zwE1T3s0ro/xtf9M7yDAmGEhDESJkhYQMJ0Ej5iYOtDn8sJpBGUJlBamCghael69iFVsjQwB9gbZJ4mWbkA5CeQm8BugrgJw4uRrxTkBbAXIF6AOwfqBdReQOMFRC+gdbXiaU9VL+G0uzgiedrucySVj0AABPkR7EeIHxH8CJ14a0puArsJ4iYEN8GfydpNaNyE6Ca0b18F/5dwu3w8rPP2ImR0oTE+NMKHR/jICJ8wwkftqSa7C9tdxO4S7C4j5Nd2l8buEu0ureGVbH49e3dzla5m06tpurz5dZ6y4w/zP+f52/FLuCuFdYv164euX7+O9aan0wZPhORx5i1xvHyhDA0w/wyC5AVwAvOPwaFD8F7ri8MxTO1X1e2QPAbiAjZ5ubTKbtzur8Xj8k2B4VA+BzQXBw7NJVI5A/Q8VFY9AzWt1LXnPhyeUvq82N9v7pZf7oap0goK5LSKYKSkVQNGhrSq8Uh0lDrUWxs48nTTjw+2Lr8LLUb6tqdvM1PlOtr+C0X3Up0LT3AkacQzn7sJHy6fIVx+Dpfh6FSdA0r41qrB3d+Az6SG0EBGAwVclQY/8M1x4PFM9FQ255vK5hxTeYQSeIQiuEEjeoQieoSioIEBDVTwkMf8+I7tmxasuUX3TYvum1bE8aI+oxDE5f5lpyL56KBoYI/3KQQEhF06GlcIDSKV0RVCPGXBA3m5kvc01guEIBSEIEYIYogghggShCCBCBKIoIAQFCCCAkSQIgTpIKgeT3lz2gTHA0C+6M9/lWjciOf9HkViGEncCSJ/gggmi2Cy2C+LYXV/JqlblvhlyUuOUaTglhX8sgKsWuGlnb2y1C9Ln3Nc/n+Sb5OO/zr7F3o97yU=###1228:XlxV32DM 3fca 4b4eNq1mstuE0EQRT8JV3X3PERkCREWWQBSgsSyNfEjIIxtxhMef8/Y8dgRCYv4HmflTZ3Ura5b09PTVx9uPuXLy2vP12/e57cfr9+9+rqct82ma+8n3X07y91qPXo1aRbHH5Nu0f9YdpYtzF9fSQSXCUEmRJmQYhQJq3bU/8WEYNRluRiNY6ES8rqZfMtGgZwCqf1yYXJxjCqOUcUZQKoVLlwujlPFGUBJ1RRkTYEqb5RTiUN51VSSnEqiVjodrD2TQHmkAkwFuAqQaxBVQIpBA+yfhZGgWGwIzDBmb0+HzZa3uWub5SZ3v1Z52k265CRtn2kqzgDNN5+lvcn6S7OZ5f3OYsJwhtmB4pzFBaZoBhXNWJXGqnRIpbOtcdhGMCoDpPKwpWDSilBa8VCtCODyiMEYg3EGExhMVB5tR0yznO4et7cgzGJ5Oq1r1nm6+JPb2d32cVExJANRxqGcQwUOFTlU4lAFhyo5VMWh6jHlG65DnfONg1lxvnHON875xjnfOOcb53zjnG+c8w3XVoHzTTBMX8BIESMljFRgpBIjVRiplg7cHpH6XTUEovZ52UYYicvJMVLASBEjJYxUYKQSI1UYqabMgrWTY2ZxzCzOqcPM4phZHDOLY2ZxzCyOmcUxs2BNEDCzBKPERQqUKFBBgUoKVFGgWjkg7UHzVTv9sdmeRCEcgzgOcQLE6d8HIsDRTnyPGGMwzmACg4mxJjA/m8W2DTGWg6wAsuTTmCOr7ycM5RwqcKgYZxRq+KIwh4GWjCJ+v//dA4t+qisf4f/HPEOidoZErU80nAF6Bvl+Bvl+jnUKY76kYVvSxFN3tzqUXdbuqshqOdveFJHGx2PQ4HZJ8XPA4VYAluhy1e2+dc5hoMUpRdTv1x3uAzGLvAdxtfsHCNRuIO6voc1YnkmD7DngzsZwls6V8eHGUXj57ZL5YrX23UZuNA5TIdzUeBPjXYwPYnwU45MYX4jxpRhfifH1WGpfsX1cbF9X/7/Yvi62r4vt62L7uti+Lravi+3rYvuKyx/E9g2mpR+08KiFJy280MJLLbzSwvu+e/nxxHx91+R204X65FCLL3+t258YP6Rv29NeVxmGQE46qHsKGd4E9IScUBUIVQFUFQlViVCVQFUFoaokVJWgqopQVROq6oMqeeKcdDfyCQMrshPDy4nh5aQqYng5MbwcHF6+G15/AZTrVQw=###1048:XlxV32DM 3fd0 400eNqtm01v01AURP8R9Zv7viyqSIiy6AKQCjuErBBShIiSyE0l+Pc4LbSsmdNVurinb+w5V67qXr/78HG6urrRdPPq7fT6/c2bi+/723l9d5rvN6f7eTudDsfhYrPePX44rY/T192v4eJ2dzimS5VVHl9e25DpuN78mFKWzaorANKIVA1M1YlUI5FqfEqVbBYQKgYCkoArs0CwKxOr3H0Gdpy88hkFiFS4SBWI1IBIjYvUgUgjEOl5Q1QPpenn/jBfLoY3BJQ4UsJIwkiBkTJGKhipYqSGkTpGWrxjZMGKKUwWcWfCZBEmizBZhMkiTBZhsgiTRZgsWJ3OT6HMkYICZQpUKFClQI0CdQq0NHJLgKZh2h9Ow/KV8i0CTDwx4UThxMCJGScWnFhxYsOJHSeOz0RGQrzgwiUUf0ZcQuESCpdQuITCJRQuoXAJhUuI1zEG+ohBAzMNLDSw0sBGAzsN/KfZxsPit+1+Wr5Jn4bPL2bnt44nUOJICSMJIwVGyhipYKSKkRpG6hhpPJMIWbBiCpNF3JkwWYTJIkwWYbIIk0WYLMJkESYLVqfAZIlEhQsKlClQoUCVAjUK1CkQ1G2dn5rugUbq4akJIiWMJIwUGCljpIKRKkZqGKljpPFMImTBiilMFnFnwmQRJoswWYTJIkwWYbIIk0WYLFidYqCOFBQoU6BCgSoFahSoU6BzI+PL/4N2gzWdYuNMD964+dPljYc3nr3x4o1Xb7x5490bH63OerddXmfldVbm4b3OyuusvM7K66y8zsrrrLzOevctvM5Gss6ereliTVdrulnT3Zoe8/D/0/P2bnua5jD+hrl8uPTeL3skPL6VLSfNGWS+Rf0H8fcVcfcwaWUj5OcRlif8PNnPk7E8xc9T/TwVy9P8PN3P07E848pdTb6B8jeKsI0iII+/UYRtFPkbRf5GEbZR5G8U+RtF2EaRv1HkbxRhG0X+RpH9sIPZE/5qCmw1RbIvbdiEbN+cp1XgHqXYYaodplJhmh3m4b8ZfgPLISwi###1636:XlxV32DM 3fd2 64ceNqtmWtv2zYUhv9RQ/LwIqGBgC7pgqLLNqTrsG+ELMuAES3KZLlb/v108TVWWvG8/BKoQJ+HL0mJl+NPv375w9/ePij/8OHe3/z28PFq/bRq8k3bbIt225S+rZ/FVZFX40ObP/tl9TI8XCeZf86LRy9p9f4TIkozKviGLUlKZ+PVo18Wf4urn77+fOdvfvkstOSz7+66v/df/6Kc7UiFVgC8T6BFsOT25t73jByevvxOLljRPYjugRIOmQ6ono3W26e2bJQQ1yKjBQvbv6+GQUsR8paecftmEybetLzEkplY7hIrXmLJT6yYiRU2xoqfmJiJCRtj4ifWzMQaG2PNT2yYiQ02xmZInLPRd5K1ukne6nb8aB2P7vrKiat4cY9frOPRzLjEi0vQ6BI7rubF1dDoanZcw4troNE17LiWF9dCo2vZcR0vroNG17HjJry4CTS6CTtuyoubQqObDnFTLtltMRTOesGiWNuZl4KHMVtTPIx4mOZhhjX+ikURi9Isitcvy6Ici0pYVKpmVzi6O62v6uKRbCixX0aYYMA8b142vr+JrxfblSpDqGbTkgwEZCLCoo2Mlyyqnr+In1L+qW6FEHL+RWOKDrganeJNx4r5m8AFKkkEsqkgFYx0M8KA6vk3qBPoMB8LAA44QZzQ42wkXDJ8Mnx4Ti+5OQ8kI2cd3tpxIlM2KuevvttN2QyLlA0l9mdOJqjmL4v/5uvWd7vKdjN/gTsyfj3/ezql9u/LAoADlrcTejewKgjttiflAtbEE2jfoAxlUxHYv4HZNzc5l93/9aI/Sjy1TV1VZSOuPtx89g8f78bS+3TZfoK6H04jPt+2dVOu/Piv4uVaZLBC4gqFKwhXaFxhcIXFFQ5XJNn071pzFdW27d8thzu6F/1PL7A0/9VNnwZ2yAgOFcFBERw6gsNEcNgIDhfBkURwpNn0/v+2o8g3I0+OCUo2qaZ/d59B7j4oKTGD7A0lYlAZGKETSG1Qw7hGwUlU6Bt4YfArM33m+Y6j/2vHswCflQCrAJYAVgOsAVibTR/Bf8j2G2L4aesM3r2p/PYV0r7C2yekfcLb10j7Gm/fIO0bvH2LtG/x9h3Svtu371iKb3k1fcObQ0pmp8etFoAlAisEJgTWCGwQ2CJw+Pu5rKqhDgTcyS8UElcoXEG4QuMKgyvC7yjnit3G7XAH7zZ8aVIR0qhoaShCGoqWRkdIo6OlMRHSmGhpbIQ0NloaFyHN4UxQIqb+aLACBRIbEF6R69IhIzhUBAdFcOgIDhPBYSM4XEbLQMc/G79cf+vLBGONqcR4iQqUtpjgUHiKIurrT8ELyJSorwHFiTRUgQKPK+undfuqqhb6tr1SjP0RqAPtCfU90QzFc1O+HhBcM3QI10TqlGYULt/QBH8Db3j8ykRIZIZEOoYnxnTZvkYdeB1sDmXZ/liwAODg6nZzWWCHDAo2EKPIf27QGRhBM1bEC0NfWg9NUSzRyTgzDJNRBBpWxWllAcIlhisMJwzXGG4w3AYf3o74rnpAGL+75UApFJhCRUlBYAqKkkKDKXSUFAZMYaKksGAKGyWFA1M45q8TR0u/3RcALGXwaeEUV/zx2/3KsHz/P6WfAnA=###1732:XlxV32DM 3fc2 6aceNqtm1tv20YQhX9RY+7shSQaCCgcuzBgu4BdoI8LmqQSI65oUFTcn19KJulLFGPOzObJAfidPXNmd3kReXF9+3f88uWG4s0fV/H0r5uzk6F7jFl2Uneboe8eHto+O7mqu91miP26js9//df1n83KNr9fyHlS8lbJOyXvlXxQ8vnKliD/OOE/qgdbyVljWyH8PG+MToD2AmDpT7289Ncs7HyBpaW/ETiUXqMCd7t+O8R208R6M6CT7h1ulDw5r+IPMWRjDM7pdcZ+uJBEhowrkgjF23+yFBEdZsodV2f7rW+/xr6tmri+X3exb9qNIw19cntzacIZv5QPRD6dnvFXzaTTPcWqafp2u437/2ewkfcCkxetEaM1YuZkizQ6+3DXSqmMv4p+pTDHq7Vi1FaWgMtEQikSJnVZlKosSrcqSbsYKNGqtFojNtGqtOnCddqaXKJwvdaITxSuTxdu0NYUEoWba43kicLN04VbaGsqEoVbao2UicItX8Il7v59bRxV/GONzfgHx8eq/j6eCvheAnBsDljJn60QIF8A8gVcKWV8ecpweaBPZOBwyALydpavAaQfADcOkHaYdME/1hI/FEtTS3HEEneXuHa0Zh86N4kt7vnbhh9vMg1wMDwfPRC9J3g1eWC6ezvLs7P3c71c4qbd7h6Gz9mKbWshCEc8jpRoKQYuxawMjhCOWBxxOOJxJOBIjiMFjsDNJ7j5hDef8OYT3nzCm0948wlvPuHNJ7z5hDffws23ePMt3nyLN9/izbd48+0qoBk7OGOHZ+zwjB2escMzdiuPBubhwDwemMcD83hgfuXQ6gNcfcCrD3j1Aa8+4NXncPU5Xn2OVz/6QkspVihRjhEziaqu28ch1v828X7D/rH0DRW7Phv/sX+qPAYb76wKn2/ENCbIsX9EO4br6FwY/lS3AnbE9/09dsDUGo+eG2SdhDKOe8P56gHaeOcSTWY+3V5enJ5dxnO5BiXQsAk0XAINP2v8KdcIiwb7QUDVx6bbtHsNW+DMvLdUYtQAy/IIzH8F4hgd115jPWisB5X1MFon7hP1ajd0I7xmn6dmwNgAErFph7Ye+G/WvAdjtWkOU2qtFDDWowr32+2ubWwu4+Ijf+udyafqfuBvva8pI8OIP2VfY0tXag2NTac9fXinZv8IrhGC8/lXNrCRDmymgYn9btxPfD8ITZPUNC1plVJebNpKTVtl0lZh2klNO2XSTmHaS017ZdJeYTpITQdl0kFhOpeazpVJ5wrThdR0oUy6UJgupaZLZdLlwbSXsDETckbIkZCzQs4JOS/kgpDLhVwh5Er+LccbbrrVulPABrpC3dM/qoddCxs+UPBzpyMw8Ib9MZysCrfGWRUOP/U6ouKsMP5pbO4kfX5t/aHdfB2+7S98nYAbh+O+qF5X25er+1IAzfXhAxrJgAY+vf3MksAsScySwuzMWvYzpIUdT2k4YwQMse/RX5hNNxx2wEJK8t81OWBhP7EDSsCzegH7AfVnVihBcEXLTESHsvBQy50gOpSDh3LSqjw8lJdWFeChgrSqHB5qucNhP8N8BmOGAgYFYEsWBRwKeBQIKMB/bWUC6u3A37cXhH/9OTHThZSTUPzLrnrX9+240W+Hamjj+e1VPD9v+L9tHcd/u9gY/oeIH2hMi1Jvh/jfu/1Sw9rDR5FqLz6BlyJP46XM2Z9XfqCx/wj2f/JTXFI=###1680:XlxV32DM 3fe4 678eNqtm1tv4zYQhX9REc2QuqGFgaJbB3nYBkgK9JGQJaUw1pFSWU7bf19Ktuw06wTkmXlZ7Mt3ZubwNqScu98ef3dfvjywe/j5q/vl/uHXm7F/cUlyU/fdOPS7XTv4/x+Goe1Gtx+rsXXrx69uvW7oh7uuzMmtrf3xTi5za41Ixr1U9TdHKiqsomJMLVFhSyLc+8qlZbkG2UxBxD3+kchsZZUhZpXBMTJjjfeEEqEfJxGSzZNZpbSpXGMeYXEurFCPKeQaNrWFXGOZsuJ0ikI4WVR2tpOKUVGxsiVoZabaefXIlvFRw8j2x1mE8nn1KAmRQlk2kw3ySYRk3cGioiTDCg57GfeUyh1mQ/IZbBKbSDWszcUSKvvcpJRraFj51M3tzb2tNFRUuharqcIqKkZFJTUNrHJ/GA2Z0M6laQZX+X/a/Z5+SlYmQziCQUJBXmElEsih8QzIWZBLQS4DuRzkCpArV8YCnEswDFtIzrc/GIfGY6w8EDMYZjEsxbAMw3IMKzCsDN7o/4c9H/5JkiSbNuxWxpNMYNr5n4QCJFSgVXhn/5HCdM8QOsFSJ9g7IZoNJJwNJB0KX0H4682HCvNYSPMQV+I3q0SqEN61fyxBUkO9hr+ZyWaGkc4MM42IKAUrTcELkGxIvYJbyyVuZUakUiPSaSxEG00m3Ggy6bGTr4RLK19Fvcte1SiOp4bIyVLoZOmdjJmQm2q+5cUitOKnOMQl0QSZIpI4umCnikoYJZidzssKZyn4pfcK7Lf0KIPrar+JmyozQYZjESQzjiKGuRYTS0xPwNFxmGPW59/tJi7EBJChSGKyODItDn9n2e3csB9d3R+6cVpaDQieHufCl9d7fhjBpAlNmk5Jo24xGpjPbmGBzQoELZqxFWacooFT4RhlaOBMWHGOBs7PFacI7xKQI5BD8zQgZ0EuBbkM5HKTQ1y9H8Nbo/ckmQ2Edv3oe40Em7IL7U/pVsZHXNmuC0x331oiYcMPsL/2rtm+Th3NcoaFZ/89u3zcEkuwXMLgJpDABJKbcDnS4QpYUAHLK+DzGBSghD8BYJRwlMMX/3v0uPYiHjo+EIh46DgpDM3m4PeA8wK2Mn5pGURpkDCN8zIK3wmvyPhZJMIp+BcVV/E3N3YK/mHep0re1kxHRykhVkpo+pJAEUJtV212bdxKPzHLxIoPF/Ht8cy4bTeaGKuHdt+O5OrdtySe4yNnYrk5y3iqP4zBry1/9m7sXVWP29c2eNjeQu612h3a4GHbdlvfFj03vrTgyo7M8opQIdQyuwSwQfIlKF+S5HvpUwQwVCxDxbKk2AVOkXwNlK+R+LvANniBXmB/bAIQIRAjUHhb+Qaquma+HZYwGv4B58he/ZOS4LboE43ph5qFisz8SUlBarkxqEmxgtes4PX0Ry/BTeDnMkSFkhIT21ZLaRk6pdQ4VVPKglvLz5UMaQmlChP8KOTWelK3SuVZLZ8yYxsloWV26iRWWFspCc07Z6MlprZ9npZz+NfJWarpu9ZksYTrh/lELVAQRy0HX+y/R6eh46j987l9jrPHA+eGIwdBirvqeLIf/o1z9MgsXXFUoi9De7kptSi5hBYKMJo7wblf7i9gaIZDs9S2y10GzN3AuV+uJWBoC4e+fP4FQ6dw6FQaev752n+3kIeX###1584:XlxV32DM 3ff0 618eNqtmk9vnEgQxT/SUF0NzCgrS6tNDjlkV3Ii5dhigNlF68AEcPz1w9gDjIkVdb0qn3zw73VV/6l6dPvj35+/hPfv7124//NT+Ouf+w+7sTuHJNmVXTv23cND3Se7pm3GcO7rUHaP7fhHdhfORfl/IM7efQQEQoKC8IgOBRkFPQqmKJjxEQO7Ppl+uNTQxJUKJ3aRfF8M132Y3PEBgObNi7NOwTKQKCGJkiJYUgTrkGCdYlVm1gPBMhIsL8HKB/TIgH4ZkKTsVGvlDDKOAxgGGM8sZsphZI9QxLkYa7vxuZzuUZK4QNFwSuP3ZFkBdfQGEh+ChSVkQKCe/cJ6IFiHBOvkJ3ZmJSd2YZBxXPzmXhjx5t6SxDWKzi0p+vxXx8d+GEPdVkFwpm6p2RodFTBBATt3iqXqYpqobxWJCfkYgoJ9JULTxk/9yoSirV4mz0vgU3PqQl/Vbfw5P5VAFbyB5nOeImw/AoFO1VMOOSQ7J6/xC8vIgCy3gb+wDgjWI8F6xeykyICpIsMMGTBTZJgjA+ZLhiRlJW1zYQhgkNgYYDzApACTAUwe39MWRmTCbymBCV+w2accUJIEHmfLehw98AlG57MqX5q+/je+Sd9S0qujt2AiHZ6qcM48q/B51jVBpBy/Y7qnUFRVXw/DRUDkWjYoaVhSsJMXQdMlHFWMyjjqcTTF0QxHcxzd4+jhLr7Iv0anvo+ShIYbJN1hiypGdXCqOMkw6WEyhckMJnOY3MPkId56ndev1L2cEV9Gnddvzb2cmU08jHp5pA6I1C3PHIkQnaqOGCE5IvjSO9/YbAag+KfVhZpNdg6C8W+GW/K6n1206RrGJPSujv9z2k9A/KXOFRBfBr3iHMj5+Hu8YVrr4qE5xtv9mbha1dC0P+KvQ9+ABYv+Bn154GABX30fQtX8mJbyiFDzNSSXGlpw5/0WfslZEz2poidB15jwppuW63GMZp56eWO7YeYDB6NOHikBkRIeqbwnLqgDIl3vfBMhKuiJCwKMEt8TF0TSE2+h+J64UNKeuAXjy+OWlD6PPfXraxML9slKlS/H9gSj8xHUKng4fNFZfo06PPPVd+aYQkhgkmDSCbbma/Jlh5InHR8+f5WUmGasn99FBfXiilweLY8AtDZ82ZB1WxwfasHCrNCl2UqayoYk/7v5rIqxmHbq+N/118sba7K7PLJO3rN6/pSdzqDP1RLXlmOmlKrTIn1aZJbW8u94ZkpePUFOP0FzGXRmSpk6LdanxWarxctqWSmlvtQpTVVuGHef+u5buFQ8X5nKkT/Z6k0FrrZVdMYpO+MAHRkHyMYBsroevggemzExU7KLyZkpsXdKpefurBchCxFnIcIWIt5CJLUQySxE8rvf+uookZAYaJCBhjPQYAMNb6CRGmhkBho5aIpI7/HJzOOTmccnvccnM49PZh6fzDw+6T0+mXl8MvP4pPf4ZObxyczjk5nHJ1uPT8Yen8w9Pll7fDL2+GTt8cnY45O1xyczj09mHp/MPD6ZeXyy8Phk4fHJwuOThccnC49PFh6fLDw+WXh82nj8nyVqlg0=###1036:XlxV32DM 3fb8 3f4eNq1mc1q20AURt8o1nfnT6LFUBInGJIWnEIXpQwOctps4iCr71876aZQCvWcuzNZHKSjD1tnsv54/7leXW2sbj7c1ctPm9Vi3r/UrluM23lbX7bzj98fp9127BaPT4971Wms23Gc6lQV9W7dyDCAEQBGBBgJYGSAUaKdxahdff3L/uf8vlvG0AwRQxFCMYQSEEpEKGkJPGgRECMggYBEAoKIzQSkEJCegAzLGFshdTp9ryQAI4ojiGMQJ0CcCHES89jFYIzBBAYTGQykODOYwmB6BjMAP5THN6IOoYi4paqOwUBXYwwmMJjIYBLyvA2hBIQSEQrjJSOUglB6hDKc+4IkopiEFJOQYhJSTEKKSUgxCSkmEcUkophEFJOIYhJRTCKKSUQxiSgmEcUkppgEFZOgYhJUTIKKSVAxCSomMcUkppjEFJOYYhJTTGKKSUwxiSkmMcUkpJiEFJOYYhJTTGKKSUwxiSkmMcUkpJiEFJOQYhJSTEKKSUgxCSkm/VlM5/yfajrM9TBOr6DTi421MoRARECMgAQCEglIIiCZgBQC0hOQ429r8+qJrRmxekOuhFi9Eas3YvVGrN6I1RuxeiNWb8TqiZkEYvVBwN0EgBEBRgIYGWAUgNEDjONSu0bGMXyaEWq+k1PytDOI6zCAEQBGBBgJYGSAUQBGDzCG9qkD8zBg6gZM3Yh7AaZuwNQNmLoBUzdg6gZM3YCpA482AFMPar+V2I5I7YjcjijtiL4dMaTy34jvu+d6mKf9w+5r9+3i7dPbMcvD09xd3N+uL1d39dqNfJNEk7+s6KuVmwe5eZCDB3PzYG4ezMFDcPMQ3DwEBw/RzUN08xAdPCQ3D8nNQ3LwkN08ZDcP2cFDcfNQ3DyUk4cBYdbnv71B+LFvUuDZHjbkaEOONuRiwxxtmKMNc7ERHG0ERxvBxUZ0tBEdbUQXG8nRRnK0kVxsZEcb2dFGdrFRHG0URxul+b1LbucVcjuvkMN5hdzOK/Tv84pfIxKE2w==###1080:XlxV32DM 3fc1 420eNq9mtFu00AURP8o8ex610Q8oTZUkQhIKRIPVbVyYodaBLs4bgt/jx23VEUBVLozL5UbJXO9x93Rid3F+/OP4fR0ZcLqzTKcfFjNp11zHZJkWuRdHq7z7ur+sC3zIpl+Luuw79pmXV7gcjIeTbfVtgnrqsPk09xlrxcxM83k/N3iZL4Mb2nJZw6xk+NzsDQOlsbBEjikNA4pjUNK4OBoHByNgyNw8DQOnsbBEzhkNA4ZjUM2cJhFyQz1r9TkkQQv+8zZ+NkMGiDSAJEGKDQMkYYh0jAUGpZIwxJpWAqNlEgjJdJIKTQckYYj0nAUGp5IwxNpeAqNjEgjI9IYfCN9furwMxwy2qIfMEtapHmMlP5Nmy8BUU7JREmxURZmYy4sjZLioizMxVyYj3JKfjwla2f/EbYvu1kSWlc887Nh09T95trtynbcdEW5y39cJJeT4tt+/KV/y67/xHAIn3LzRwSGvAx2viXnp+R859as/G11WxLTm5vW5az0pi554fvqu9uwwrurtiSee3fXsP4iQS4eaIoH5OIBuXhALh6QiwfU4gG1eMAsHjCLB9ziQcziAdl4oDEekI0HZOMB2XhANh5QjQdU4wHTeMA0HnCNB0zjAdl4oDEekI0HZOMB2XhANh5QjQdU4wHTeMA0HnCNB8eMx2cvDb9rQ14U7SBUhztQycMroar33XTZNl9D0R/7V6pJ8LlsFOBnsmFGx9DolmWgW5bVLcvCG/Ks4b8DFEMkKzGKITZ+30HWd9D1HZR9B2HfQdd3EPYddH0HYd9B0XdQ9B0UfQdm30Hmd9D5HZR+B6HfQed3EPoddH4Hod9B4XdQ+B0UfgeF30Hmd9D5HZR+B6HfQed3EPoddH4Hod9B4XdQ+B0Ufoe/+F2MIWX99Ctz/+phwHircLv1ljmkur9BGaXl/jnl4UnFljmsuekiPHJ5OgHHrkxA7GuDo9Ri48LvuBKfsCeAvgjE2o1Q7EZIdiOUuxH03QjNboRkN4K+G8HfjX8cgdS/ZEK778LheVl161ykoPHylcX9U3NSrulzfwJ2dmpi###1104:XlxV32DM 3ffb 438eNq1mVFLG0EURv9RM3Pvnd0dKoGiPgi1hdj3YXHXGirGbrba/vtGGyW0UGrvmScV4fDdPTP7ZTJnHy4+lZOTlZTVu/Ny/HF1upg3dyWExdDPfbnr5+v9r9PYD+VycztPm5ubcQqLaTuX4eu2DOv7Mow3/Y9xWDz91JTenlXgWiVuSkpzr9b3YwXq5tuUhKZubkceul1/T0ZD5+tprJB1ftjYQEHv+ssvJVp+Be9hWs9jWJxvd+N9/vVXefyHtKFICSlwrMXF6n1sTsF4EYwX9/FetXP+Dfnm+NR6jhpSBGHPVsCAkQz44sV4JixGyLmlghglA2oFMVpHjJFzWwUxiQyYKohJB2K497eA72/h60XBeMrXi1ZxYuDQxjtJYLzEO6mzTxpw6IZ30oLxWt5JW8VJBw7d8U4yGC/zTvKBkwagWonNq85RfwM924CCtVSwl70RWB4ooaNm7WAJmQqWYQn8TpAAzSqBlSCRChZZCRJ5CULNKrAEpYIpLEF5CUbNarCERAVLsITES6CKWeBiFqqYBS5m4YtZqGIWuJiFKmaBi1n4YlaqmBUuZqWKWeFi1sNi7gBkfrqJsCsM9SwCCxe5cC8yhCZSR+m8v9AIHIs8Suf9dQYXD71lyn9cZnBDCzi08E4UjKe8E63ixMChjXeSwHiJd5JqVIlwb2vBq0S5cIpXidbQYdzEhutIXLiE66iyOxpu4gbX0XLhWlxHW0NHx03c4ToyFy7jOg7Pgv/RSL/dfhyFpZmfEiFMZDDCYJTBGINJS8J3RCiCUBShGEJhnm6DUFqE0iGUvDRxU0ogIBGYZ3cqRyhMFkEoilAMoSRCtBAQJSBGQJBn0hCQloB0BCRb8EDsKO5etV5E60d0fkR2IyT4EdGPED9C/QjzI5If4V+d4l+d4l+d4l+d6l+dGpd65UKU2LgJrZvQuQnZS5DgJkQ3QdwEdRPMTUhugntNintNintNintNqntNavR9KMn7r0LUDYkMJSIUQSiKUAyhpCUgOhIQISBKQIyAIA+2ISAtAekIyO6zT/RCSgAYwNvt8YsPAIIkEQKiBOTxfP8T3KFxAA==###1536:XlxV32DM 3ff4 5e8eNq9Wl1v20YQ/EcR5z5IESkMpHUNGIWrxFGeiuJAkadUkCJGJJ0g/748WlZSFCGl3T09mSZ25oZ3O5zj2fd/vl+629tH5R7fPLjfFo+/z7r6s0uSWVV0hftcdP8cL782m84ns+GHC3fyxCkHa/D6nkmiBDi0AIcR4JCYj1SAIxPgmAtw5Lqkcvi9ewtdMeBfip2en4k/tK7yu+Kbr1xZ75JfkhsyFFQo6KMijJqeB11v1rVL+tlyRVU1YcyKCOzvl1sHJt4ShYMqHEzhL3jNxBvigyvqg6vjwIqJT4nCNVW4Zs64Ps04D09tVUN9cMNsVcMUbqnCLVO4Za64ZXospT54yvRYyvRYRhWeMWc8Y3osO7WquRTv9yHFKLALUxPU1AQzNcFMTVBTE8zUBDM1wUxNUFMTzNQEMzVBTU0wUxPM1AQzNUFNTTBTE8zUBDU1wUxNMFMTzNQENTXBTE0wUxPU1AQzNcFMTTBTE7TUxCk1sR6DHXpilYxX4IwSTJeo6RI9XWKmS+zkM0/Pipqs0JMVZrJiWmk6WZFNVswnK/IbZUcrWldtvrim7VR5Xt3x5aiqifLNvns+HOmvJnv8//WkYXDhMN+3U6sR2Ga/boq2a57K7qnxPc0Ab/0uHG4N50UMNFhoxUJrFrrfGRRktEs4YHDAigPWHLDR2QXg4LWy2G1WcA3IyPEw39SrNpmV9b5r6t3ON+75xuJ2Ga5cvXpaG305vg/FIRl927rGf+wtYgyfBUI0kKFRNxJTAxEWGS1ahMWIsFgRllSEJRNhmYuw5Dfa01hWxdGLTIKpxPo5QVm0K3cY/WvUGHrrQ3qPv4DH4Qeq8uZZOXHor74HG3s5+KPfD4v/V/L3q/A+DteU1fuRpzEpgwA/KlkziZhSICUFbClKSooKUjidAqFOAVeIEhLCnhEtJERzhRghIYYrxAoJsVwhqZCQlCskExKScYXMhYTMuUJyISF5EAIawap4Cb5VQdk1fOfgSICAhPA21fnl8DBw2DWN/kfKGHbrycNuPajYhiG53yxpwudZg5QGy2iwOQ2Wk2AqoXgwHAOEGd3s+894yrbkhaB+6nqGdPrrJZxVh6PqI/7hzfs/XMC8CjaoPgUntrq/OMpqu1lP5m4fErf4sJwtAnOaXWOU2d1dcrWRYIsYIz3ALX79cGfnEcg/Fe3W1baMRh0WIC49BPoVV+lXXK1fcbV+Rcx+Rbx+Rdx+HaGHtZfSD6SHFxMc/ruqpxW1eRzeYUriccOs5bjfufvQeokkY2jmpSklKZeCCsPBU//7wRpxymHlo9DCeFFav7cpkRBTtioiEQ+zG5Ec5CbDz50FUcpna1WinEtJjSdzWXnOYf3j8NLfqZD3F2L5CzH9hZj+gry/EMFfEPYXIvgLkfyFSP6CuL9ULH+pmP5SMf2l5P2lIvhLCftLRfCXiuQvFclfStxfOpa/dEx/6Zj+0vL+0hH8pYX9pSP4S0fyl47kLy3uLxPLXyamv8xZ/voXdvFwVA==###2348:XlxV32DM 3fee 914eNq1mmtP4zgUhv9RG99y2a5GShO3ZGmTbJLCoNHKainsopkFBjr7+/fYaUsIBaT2nC+n9mv79SV5fEpFlteNSdOKmyqem6So9HDz8Gg8b3j3sHr2huvlZvm43Pxj2urfN/dm/fMbk38NngWUrGzu7p83w/RPk40XE8VGGaJlAZaNXKN6NphrXK+fbP2nUview8nEI/Jl8hbX9+Ze+cc6qrdPKa1MsWiGhTVTSyJjd76E5kx5iOan8qUI+FLIfCkCvhQRX4qIL/UeX0ev9BO8Ihpfd7p03iec8LtseZiOLVrXmJYN4gr3YEl0S/fkSWyZvEG1PYEqTkQVJ6SKE1LF0ani+FRxXKo4PlWchipOQxXHpkoQUSUIqRKEVAl0qgQ+VQKXKoFPlaChStBQJbCpkkRUSUKqJCFVEp0qiU+VxKVK4lMlaaiSNFRJbKoUEVWKkCpFSJVCp0rhU6VwqVL4VCkaqhQNVei/VvhEVPmEVPmEVPnoVPn4VPm4VPn4VPk0VPk0VPnYVAVEVAWEVAWEVAXoVAX4VAW4VAX4VAU0VAU0VAXYVIVEVIWEVIWEVIXoVIX4VIW4VIX4VIU0VIU0VIXYVEVEVEWEVEWEVEXoVEX4VEW4VEX4VEU0VEU0VEXvUHXsA3r+5m0dn18sF0ev7x27Ya44piHfIu8TmLqnTmTMjn2dPjbOVUhi646CzJrhvrMC950VcKoC01AO7d2c1uoa17WexRcanAdpNplk+bGp6qB9e2U9w/2yXP24YWpF5z3Mj02Eh92h8hP1ATpHRwSFKzv2n6M+cM2P/ar1kecp/xz1ie8JFwLDTWIMO4kxiiTGqJIYo0pijCaJMbokxuiSGMNNYgw7iTGSJMZokxgjTGKMNIkx9CTGSJIYI0lijCCJMaIkxj5OYp8nibv726fl8+bp1/Xm19PN1n1hrn98N3ft3SJ9BBO7SywjJiWGUS5DFBu3NTQrJm6PswL8uXP7KcWpDm5LGC5MspNdcqlO93A7wvFhYnWcz5PjU6xPGT3M+Uf56Ol54y6D9d1/0H3DgP9iPEz1LL4ycfqHGY+Lr5HTshxSXOiKBexpX+LbMVCEGcazODmHMctWWzQwKHDlMk7bMY09EfCsdWPmej7WlRnPiuTcjLM8zfLpsIGlzR/Wv36Yi7N0Nsxg7WeZruIqObsyZ6lF57ix9Vlc6k7d266iuSo1hysCOsdNU8G3hEabUlc1KDpvTFkVpamhIZ8yz3XbTudGbqXuEtnt6JOZ7aG96mGd1k7Li1S3xm2fSk90pfNEm4tMXy5HM53aH2F/9768lFmnzDtl0SnLTll1yv6X6305+K3rGny52ZWN535LfamzXp336qJXl7266tX9Xj3o1K/0bFZcWpmJnuB6+aNZEac6tZ/JuU6h1zwuTTJPZ1muTVE2WZHXSyfOi3Qxg5O25Sab67qJ5+XKVS/sEy9yGLx8lKOcsWjlonlcXn83zErcdzG0UXAX5crFTifhOvmBi5GNAVu52OkUCBeVa1DdhkBAdDOEbljYHRYKJ4lWkk5yHmHXIwycFLQSX9pKpzlyvlHXN3K+kehKzjfq+kZuT1F0C9Ew7g3qWZbomZlsBdYXeF8QfUHuBbDmnl0ZxJc5uSecJLqSctF3MXAxdNEeNmeei64nTAjRHgDn28Owgm9DCEF4EKRc2rCdAARlBbUTglGum8uiOgfDItdsVKhRMZDemo8KQLQAxyLRNyObkk08y6b5HC6NqK1bjuXIXpgucn/U3pPw2SSzc7b9tB6LRtpQ+qMytm+xgM/UVtL2xS/jqv9KMzUq03p7BU7zdHcvseiwbu8S67RvK+G61na5tx1xUcdT/cr6IkkOWnd0Z90fY6eeTyt4qFZPC7hLk0rHcLsu8kUNIJeQmdqp4YxNBRsFq+u9YE9v2damqcnStmuZzneswvk7JctNXNdw9AZA3i7DivorXOBwM7T3aWtsb9FXh3KhE7d69tJsp6uv8qQ7pLvZ3RDVaW5XZOx1vj3jV3o1gZ3AksaLOku/rnblPJ5reDfKc5Nqt4F8Ojd1sagSfWtVqHauKRDsy9GcVYvQVtyfnrCIGt4hMKl1DnKd5UmqE8hL5dPD5iF5+PeReQPY8cQeV08aeIdEdkjkbx2nb/tNDzlODzlO+45sAH9Dv5b4YNqT2NudsN1O/I4o/MFlPdW5ja8apNo3TN5rmNqXYd+gBgm/SG1aeaPBvrxX6pvFqd3iuo7+IGF9x60Gjr2e/EDP7dzd5fv8nX11Gl7vKziwiuDgKoIDqwj2q+j2DA94hgc9owOe0cFTjd6eavTyyP8HeLYjTw==###5024:XlxV32DM 3fff 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###3584:XlxV32DM 3fff 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###3448:XlxV32DM 3fff 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###4016:XlxV32DM 3fff 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###3924:XlxV32DM 3fff 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###3564:XlxV32DM 3fff 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###3916:XlxV32DM 3fff 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###3668:XlxV32DM 3fff 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###3760:XlxV32DM 3fff e98eNrFm0nO3DoOgC/zDqDJGsrIvk/xAxqBbDqLLB/+u7ckixpctuKyEXSApCqmRVGy9JmkWEivX1SL9fu3DeKFXvTfH1ryF+bKrz/SJSrD+kMr8SIex7uSEL1IuWsRKAllFJIoxIKiTYfD/kU5W+OXkL98UWFz86V1khoV1STewGm6QZhOw+KLhvjlK/3z/W0YFy/8ki/9Cv/+gwWKd0u3/hNtiWYQv/6kJA0kfgqbPn9Rybb/63LdJCNjA0niOA1b15+YO5nvxYIw+KLTF4P5kizC8S/6d+sFc83W0jWT669ofrr121Cr4hc23rqs/41doVecx3RNvbDEqDZX6884sdmuouZXmtV8IT2Eotixd8UcFLsjxfqSYsaTxWRULNb/RMWuqA/bH187Qb52YuJsIl1mORSVir/b6ouyOBubGiqaqemZ8fKMNi2/MBe+mLo9maRXvOsNoJdXvUvVGy7ppYG9TYFBRa/Aso07gOYFwbhhFVm0dlMQ14x7WzOmGrbgtGZwGRbKC368VcCj9QePdqFHj3YbaNSH+bs+CfpsVcImSn4z4rZdniY9EyCpTfIsJCDkRRjHAEJbCJCEaZLXrCN/+8r/RkzwxW8a0oZJXPmRZ2wjDBMgjA8mznLc+PFxfP+mgW6a02bY+JTvAOugdWiWp6cde41bOUm4bGZXSbaZiyKJu2HrMRNx2xx0M3PrMd8BQ9563PYmKXYlIn5F4iSB7ZtnVKZbMvU2g0dm5ulMzMyT3pgZ58ZuPWQW5faboty9sa2XTTcyhahEZGAmUp8CM28SOgEmLHGtV2DnHJhLtmgHTFp3peiAGe8Nl+HqxASu5glc5QSu6j5cabBHcAWyiAOyNKLW95PpycI0mcCV3oer5hO4kgdw9TO48ilc+3FjPaGkvkFJM6GkvEjJyjpNgHWaj6xjFBe2xHsKq3SFJQWSaiApriQt+yht+/StbHvww8rO2aQBpHJgUmalAODo3s3qqJPsytTRvKfOtt2KCqCXBGWm0GvbOxl+coRfMF3zQmvbZqDQGrzJLOvIK0WbtYHVNDjQK6te3yYP9IJZSdbeIUyqNuH92yFRUp9TkqLLlFTrDQ8zXAYmz1ZcBObMGxVPgKknwFweeKMIzYC5XAOmHoEpJsBkFWzkY2DKCTDRbWAyRGbAZDe8UYbthJ38BjvdhJ3sIjspg50oYfe6xkUKwup+2ncPU4tKXbmjrizoTNPZ73+EgR4aPDpEWv9AD9dsG31IaZphow8pNfSIepLREKDH6kNmtpRBAa81YFSPGHWqa14orIHC7t2H1AJoLkeay6antLbDC4FzBk5mREx5nwCn4zVUXdD6ttl898xOP2EnvsHOPwAzO+xXgamvA9NMgEmfANNOgImfAJPNgElvAVOdA1OFBx6mngATV73iY2DyGTDJdQ/TTyhJblAyTCiJrlKSA280MCM0Si4ghKA0juGdkqpSUu8oqRAwi4+UXAAWtjKLt/4LJRVutu0oGZphO0p66JEN/h6qsb2pPbI2KKCkBUraHSVN17xQ0gLnwgElFVBSj5TUTU9p7XeUNJWSGjhoGyVllQqQmkpJRSaUJJcpad49TLr+KSR310PyvHIuAtOdA1M8ynf6c2CKJ/lOJGfAxNeAaUdgmgkw3QNg2nNgKvvAw9QzYKJLHqYJwxQQdM5OcSOHSfA5O4X9ODo3lYB2H53XONMU2sShVL5CwlBD4BrtOorOHex1dxCdRzOKdORYxkxpmXo9ic4NkMqOpHJNBRDPgzJco3NIpTo/AJMh0TUvvJVtBoDwkJ5Iso7WirZZG/mOqrvqq17dJg/0gu+fZN17Ry1twnfROZ9F5/RJdP4ndm5Qv+psfnBWpCfsfJLOtGbCzifpTD+LzlG442wqOWGnf3BWpCbs1LedTepn0Tnyd9iJJtG5uJHZRJPoXFzNbBLYoaqed7TonMD2V4AMdBCdK1nPf9SOuhz8OD9E59RDdG7BC8x3QP+FHtw123YnPKYZtjvhgfjaj9G5g+jc6tojaoMqvLYGjqvM7oRHd803ClvwHNFBdK4knPCokea+6Smt7anfCUdA1hz5nRKkuvqdfBadsz+x8/N0JncfAPP6+Y+1E2A+SWdaNwHm8gSYs+gcuSkwB0rqCSXV/RymMhNKmgeUnIXkyN7JYaJJdC5u5DDRJDoXV3OYBKJzBd4jatE5AWdGgQOEDqJzpSslzY6SAgGz+EhJiM6tq8zirX84B8fNth0lQzNsR0lwF/0QnVMP0bm1tUfWBgWUdEBJt6Ok7ZoXSoLjiw6ic6WBkmagpDVNT2m9i85FzVJyyFJa1yjpqxQ8dmsrJcUsOl/+Qg4TfUBJdp2SfkLJJzlMGyaUxE8oOQvJkbnlVtoJMMUDYLoJMB+UIPlZSI709RzmLA6/k8OcxeFXc5ik1t04yOjhRkkIwFU9HEYHlLSVkm5PSai+8XqkZC2+CZVZuvUPlFyabSMlBW2GjZQUBHqUIyUhpra+9ijboICSASgZdpT0XfNCyQBZSHxASQuUdCMlXdNTWqPTkx4GHAwHJz0cMhfWN0pOaokov1FL9IFbiT8A5nI9h4nOgckf5TDxOTC5ewLMWVkRUnfKipSfAFM+AGaYAJM9AOasrAjJW6fk5Jyd/E4dJj1nJ79chwmnynEiC0loYycUs6haAEMO2OkrO8OenVAl4/3IzppcxJVkvvUP7FTNth07RTNsx06o9/F2ZGc9wEG1R9sGBXlTDOlMvDv/QV3zkg3FQD96wE4P7AwjO0PTU1qTU3YukNfFR+zEIEWNnbMcpvgLHib5AJj8OjDJBJiP6jDpBJiP6jCniUtx65QcTYBJH5QV4Qkwlwd1mNPE5Qd1mGxCyTt1mMuEkpezlVDtE2evMGNplKwlO7Xshh2ckqN6RoT3lIRsZRizlaHWEtFaiUha/0BJ12zbUbIzbEdJyFaGMVvpK55I7bEbFFCSAiXpjpKka14oSYFzy8EpOYKzJzxmK3HTU1qzU0py4CA9oiQBKWm1RGhCSfl3PUz1ATDtdWAuE2A+qsPkE2A+SVwGPgPmcqtwnU6AiR+ckrMJMNH9HGaQM2Deq8MUE3beqcOUE3ZezmHWWp1abyMbO6FcJz69IhQH7KSVnWxfhwmxcpAjO+v5M68kk61/qMOkzbZdhRFuhu0qjCBrGvhYh1lrmpbaI2+DAnaCf+r4jp1988JODvSTB+ykwE42spM2PaW1OD3pqVX//OikR4F0aeyM8/Ra4poQB+xUb+ysJzxvVIzrX88QQC+fXehlsu/JfUcJq8lmop9upt+MQi1cNLisCjUu9SLcLfCllwwLERJTQY8LUXXXoaPyeMVgRb9s4KQBq261fBudDgFfNk6wr0/clyeOFe9+DJuzcN2Znob/qx5YSwJWLmhKn7BIXPn03XFg+sR9U5dfuKS/5NfV6IP8isXlQbGWOBa5VGp7UktdSPHTlE/baXa0B6s+qHiw8B5khzmcJU1N/s1T+gxnL0J98INeK6rmo2BnEZdesfrgxxlW12lBR9Oi99NSp4OvbzMkuhn6bQAbqdt4Y+IwyddFf92k62khGoL765Xbm9XpepzyOG/rdkNcxUkGbcqPOuOC9+k6nJ5rC2tXu3xdteuFtTr/Rtza1gkITLYWNDlURhGD4XRd99fTKLTMo0D99boFtyUJ1/Pv2/NweG4jO6vSe+Irbp0sYJ1VRZB/X5kGfr4Hxf95D9q8B/XJHvwfLOQGUg==###3348:XlxV32DM 3fff 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###3952:XlxV32DM 3fff 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###3620:XlxV32DM 3fff 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###4036:XlxV32DM 3fff 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###4080:XlxV32DM 3fff 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###3572:XlxV32DM 3fff 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###3252:XlxV32DM 3fff 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###3916:XlxV32DM 3fff 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###4024:XlxV32DM 3fff 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###3592:XlxV32DM 3fff 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###3912:XlxV32DM 3fff f30eNrFWlmO5CgQvcwcwBibJa2+SkmAQeqf6Y/5bNXdhzUISEMupeoeaTqzIkjA+L0Xiy3c8cNs8kaFOz7/06e8Lbf19w8jxI0wbo8PwlcVPap4ZPVs3mOW8ptN3eiijw+qRLRrbFfBzoN9xXYR1hdlfcLp4p00LUPZdsSdhC8flJvj81Pr09zITdy2m/r9D+GLHy3O4x+yc79jLY+ffpyfwn8qnj9F+tRL/iTxk7AzOn6F6yhfwkUe2mxhCur/X37nmZnf+79kF8ttO2Vczh8Dd/rIe9i0n3lRaYV45ccvf03h81MbEQxbO5/N89HzhPmEgfmsn4dtab40z69w7M3Ww8zqfmYHM5s6s4OZ3XMzb/ruDPQCZ6AuzmBfxmfwn1G23Fl9C8uEW6vSt4/4bwMZnaGkSbSf2B6g5LcSoGQKKAuUwoAMZV19HZThV7qHcvF4ADRQttiOoHwie4KyvoCyLlBWHZTtGMor6aHsHWIN91cfPaqLS69HATiYtuMB1u0M63yKdVjEHJewP2ewd1+BvZnB3n4F9ucM9mIKezgOC8dRTGY5rslwAhlMTwYA3dmQgSzYjshQxosCxjAgk+Gsvo4M8KuzJ4Mr61hMBm1XbEdkwOMTGc4LMpyFDKYhA1lImNd7b/aeDSwI+5ohv6ebdi30wBIVWSLviYPvlJLHfWSgep0QiOiWQC6Kxn5NoN0gAq3jYAGLxS3GGTtundikEJjCyYUp2DUbCCF5B5TvDRnKMY5JIZaOHadZ73gH7NgXCtd6LpOg0F1gSw2yiCzc8boaSpClcCJsxM8SsL9GRyFFcgBZvINiB7DF7gStEuEaRyS4LmRr9oAI4/eQcR5uvL8vAf/ZobEjbM7DK862YwcwKUMeHEAlW+JatPstfQTYVR7BtoE/fq618ex+x+GfuIptLkYs3rWKTLqwNXFbb/KOdNpdcO2SKuGT3iVViR5+iQt+VHQub6OzgpLeLVBBudYcyJyPQVmohhB5agfnZ3pAljsYNpHAoGkDhuRASC3wSQ6M1B07EFIlWj4jlVaksmZzGKkYLGYIFoPA8qndGTweQDdzr8KcP5GTzAS4qu0sYyHHFFh3AmzcfTJQBJhpBvffqqcymJkWN8KbzmqQhZgRsB8D2p1kAuhzqxdkXspB9HlMYF6FN1xXA3PnluIhDcr3VWEHoNyWXCTZAeR25dgOGE9XnJeOEI8DIsTdueFtIYC7s+iqRwAS3HRfwA5666zDdpBbZyyyX8pt3BfOVrgIa/u7e5G7CzukiTpGBWmTbrTox1y5wL+XFDVO4Xe11gxkmRBAX6Xw50U6XMV7Y4Dx7RmMf2rL9RjaTNeSwKixVuPEocMzRj+GNs0YCus3Mq0ZdgCAhSHYXgHMG3sVaZ6JcOacOw3Iya/Yq7NBsDCgw0vTPBHaNo6KVW2w4xKscQ8IrLskMcjTiyAfArDPrPlFlO8QOZToSXGZVh5UgMSWRgpl7sUCcL8qLQGXdn8Nl83Ebpzhbq4CVJ1j7c3AHGkvSi02ksqicFCpDtxLRVjEN52hv61hawii6QjAXhMJgFtyAEZ3YYs9YzQOiBjd5VJ9DUR3mTOctEVUINaiLrhiUbcLjDz/W1p/G7HqkZYQGQCn/DlfZBm+jPhaliFmZR7cEPpyq2SXclLpkdobUObLiYZ8UPSlExwyi7/PrHjPhsza3meW3GedFXIRpS6yGvegs4IYxQuj/BW1jNKywHLHzNmlwvZKHLkVO83ECQMycWj1dcTRxcNb4uzSFI9sKsjK3OiAhCbdbLBDlNi1wHYIErvE9rRhfteKibbI2nBZOF6oMMJ4EFx0YvwVPE5uOio+34R51MgcJEbkAXHVOiNurRCUeypB6lj6UrcmHe6QuDWjIi8T18yIK75AXDspR0htcCn7ckt0lL6d15xWC3C6q8R3BdSxOMOTpRZI9lqHc8GwA4mAwXYkAiXcSlM4ZUEEXPW1IqDKKmrpoyeQXa1YBWpcVysWAWkMtlcRUAu2VxFQBNnjhtVyLwJqKSLQ92Njzqw9os47FeBi1IZ9UQyeYz497pqyDxjvdy9mTYEaq2Oo/Brlu25sPLd9QHBW2wJLQ/Dn+125aBl11Bj5ckfNryDGWTDTlfL2Ncrn8G2GVM9NCBrqG3+Oiezxghu2Ww49Mb9TXLfVXl10AK2FWRsH8Nr/zcHDElHSmNxg0wy5u1YwhTZx3CyiN6rsqMA0tlw0jquSjwpMZP83x560Q79gz+VkDGROl1IT8VS2wpDdliGo87crN+Q7McsrRNczok+fs3RxnT6I65qMSb5TXSMTe43k5gHJ01kNg3h9DiL0q1FcqVkUr70cYV8N48pMwjitz0yNfO3ZTR+73SB2uxK7VffYH4dCg4P3rk5sr8F7JQI7avDWK7bX4K1KLq5UiYWmBG9lq68N3rrk9nHvOINXJeBr0iTqSmF7jdGQVGjSxGi9IHvalwNex7cL8tGlGK3aFwgcYzFRpxeUXf0xjigrjzefloqvhOtnWvnnLFE/K6/0LGqr483HqrLp7jMxYSIT77f3mZoQkZG32/vXwXXa6WeiC6xbacQzhZnojMB2YKIzO7YDEZ012F4b/UzWlVOjn6nS6GcM7wo3+vVZ2vBNquzMgu31AYDZsL0+ADAc22uERc8x1tETANa+hyYFHRfJZHuYH+vn8+OWg+rlNxb6sMkVG7OMwYMrzzL7Wh/rOjfuWaYxy6Qw42x55cugj/V8LiuFHifLKyeDsvj5BXisPIe5cn25z5B334mAICrLS0I/pOjejZA8h7GwH8RQWZ5MJDswVIoF24GhYs/zyPwqWxoQGSrFWn0NQ2WJ4BK/YLTF9XVZh2HuypIHJ3stc7nDduBu4hvYgbuCLcge9iuFuUuNZX7bKF1VTYylsGhAyIvjAJQWE0oCI62HEFmB6bZE2d2gxyflBaXRG6iR24XQr71M0de3a2xH8AZ1HmAJddzW5xSSAur2p196+EllfkmWk1IT0pXe9W+NKCu6C6buYvYo0E+43k8oYcKLZ4u7nE64xo5rdyYKJtzrmUDI3tWXzmSNrbGW+6aIi0v/WbiO+khT1+vwFluyIVm+qByoIZ+M1xYWPn7ERcOYNEDCgLMbENhEy3PMbFwsCAbVeG4U66mWjQOkhJZ2c3aAllAoXZOjFtdraanHu51K1zgm8ZOW12eiuy2uE++Sj7aaQqEmD1eNRIXqvXGAqlC9NQ6QFQrPU5Oj5gSrbDxx62EnTXa+5e2lqjteY/wWThu/cEPpik9IkvwKVvBQvEzy8Kw8eqI8hvwl5Ym/GSmPI9+hPHqmPOsbyqNmyrO9rjyxHhwqD/0G5dHrn1KeUPxmYfGLXiiPB0Q7oFOeaLxWnlDZXiqPcgPlUW6gPMq1ylPK+ni3s/LU4poShdy98mjw6aHyaDJQnrYlgJSn7Qkg5WmbAv7vBXuy8ugr5dGgPKooj1475dnwCTXK02y5VZ5zpjzL31IeNst59HcozzlRHmveUB4zUR5rX1eeCK+R8tjzO5SH/ynl8dcGwsIvlYd1A3rl4UPl8XNfK090XClPdFwpT3Qg5Sltw3i3s/LorSqPQe5eeU7wnWPlYSPlYSPlYSPlYZ3yNHNl5TmvlOcE5TGgPLxTHoZPqFEejpdplcfNqi39t5RHz5SHf4fyuJnyiDeUx86UR72hPHKmPPI7lMf8MeWRVVjMpfLobkCvPGasPHKkPHKkPHKkPLJTHgHyYUF5ZFUei9y98jjwubHy6JHy6JHy6JHy6E55FPZk5XFXyuNAeSwoj+mUpzm6RnnwHWyVZyWznIf+JeWJLe6h8tBvUB5KZsqzva48qQk3Up43+jyRAEPl+Y4+jyF/THksCIshV8rjAdEO6JQnGgfKY3vl+R+WaGfn###4028:XlxV32DM 3fff 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###3716:XlxV32DM 3fff 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###3892:XlxV32DM 3fff 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###3664:XlxV32DM 3fff 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###3868:XlxV32DM 3fff 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###3628:XlxV32DM 3fff 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###3452:XlxV32DM 3fff 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###4004:XlxV32DM 3fff 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###3984:XlxV32DM 3fff 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###4044:XlxV32DM 3fff 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###3648:XlxV32DM 3fff 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###3536:XlxV32DM 3fff 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###3612:XlxV32DM 3fff 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###5936:XlxV32DM 3fff 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###6084:XlxV32DM 3fff 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###6216:XlxV32DM 3fff 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###6300:XlxV32DM 3fff 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###5328:XlxV32DM 3fff 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###4392:XlxV32DM 3fff 1110eNqVW0u25CgO3RIfYyBrHb0AMPawZz3qU3tvhyWBdQOiTsck8z4JJIQkxMfpytd5XSbtwdy/bM1+3b+StvLBPpn4xkI/kw1vumBrqT+bnP/gmjSW9oKlvWBpL/1Je+xf9BE66ifjkf4FS/tkzPHBIV3ljYW+JZvedMFCb9Be8N9//3sPrf0xf87//tuGZP5svvz1Hxvi9cf99a/73/OP8/6/3vvgS84f032kW/tpfQS3fbS9pT291WoMYbe9cUn+fEYL7X29PGlL/EjH/oK/3Ie+G3897QO1tyZkPXrTZv0hxv4Q12TcR7679vrBW6D292BOZd2krSvykX/VPnH701zpg6sl/YReDc4u9Y/8q/Y7t8fxDO9m7wN7dvnsrdGc8emv2e1Nv8T7Yb6kfyfRA/Mt7YWO/iTtsf/uT0yvPbr0+EZ072GGR7TrbFIhm1SI1guyyQXR7iCbOMgmDrKJg2xyQTbB/itkE9TPQjbB8SfwV8Erf25AR38UjP4mdMEYf+hPlI1OlY0qZqP4ZKPsy8HR6jhai/SWdz/Dezr3B9vdzbBLV3iwJ/6Tvc2wtwre2ftCI/lZsiHog9gb8v6jhTDrv3nCiftHXDs/RSdimf2Q9vjONh8veM/OAWuBg2wl/Kv2kdu3xNkm62xTYPalf+RftQ/iLTCeHj2GvRvsOcZH0YDzI/T7f/vM/tK/NxSNzpA/xOxUe6HH4PyHvx1WRTf2v0O2Ev3Q33r2MDpaBfdsYnS2kv4k2gWjPr22YIzjkf4Foz2kvWC0p7TH/kUfoaN+fT4lG8L40V8PqH0i0CPQ0R8LZKsA9LDwX/QnnH/0p/+XH/2NsuGlsmHGbOiebHgXbXft4nktqFzLeF7bntlol6zN/undsLTL+jrD2J/k7jvXn7P+Vrhw+xU2rJ9Y+56XJ5t5S/LuteOxTmL5G0TzAWuVtEf+VfvI7XO77DP7Sdc2BSpr6R/5V+0Dt8fx9rWavR3tPdZajpZF/5eh2gDnZ0QXRzPQR3bh6AZ791qH+8f567WSZFvwt15rQTRbyGYWslmFbFYhW4g+vfYyUHtBNnOQzRxkMwfZTPrrtRf0XyGboX4WshmOH/31gNoqAj0CHf2xwE4vAD2s/Bf84ck2p3llm4t+J6Qc2+6U4z4FWLXkkjlVZUKfan4vcLFWKH9rnvGLiv6brhYYwX3zbWp8txcs8loi3HhKBKM+rZfjVRVUieXJlAoW+mY0XfBYQGvQC2gN+nCibvpwom66XNfjTzD+2x4B7BPAPps6nGB8l1/bM3+Xnh+xT8xnpYKAMPLbdB5v+j/xoz1W9D7ehX+dC3nIv/I/sS+2R/5Ve5lfpH/NR+CU/ZTq3/P5pT/wf9nb/p4/jBcKaXuHtJcCon0d7rhPMBdxjQyu48wcj+xKmEQ5Jar+FlVBVGMrIB5HVoRJlFei4lzUqBh1QnEQQA4CzCkDbkpU+i1qTzXpgzstSnCPZfMWFW5RTUTtHjPv9mRe87Fha0+pXyst9sEVKu3rNcN33dlouq76RCDgkxf/YvKz2MR48uJA9N1SKXs8Ret7cSTt5eDJZtIHMeqLOJgzUfF5pBlGfb70u7jUTqQ/4r41Sekp5VfjOdJBB2lgj3Esy+0X/fuUyy/6btL5S74zh/8lv7df9J9NrjO6eKdNpfykf3LcD/rJmLx1V4GRf4e7hfD2EJOCexHAmERFJer4HYMlJa83iMnOsKgmmESlW1T6hxLI3IFo7217L4Faiqeu4pJaYm4Rjk44if80xI94JD9QOYHKSdOdeeLk5UiEUZ9RVaZNn4iSyYajaBM21n8kY8Kor8gXLEtUu+I50xft88XPJYbQ/5EfxrOan7boD/lX/Yv9yWXy2ztP89s7E5j2gKk8YKoPJaq8vHNrDR0zPCuE9aUZGkipQR2WmUaHC4jH9sY5dfhmKGNIbSy4X7wBvQC9Gber2pvxazumanPB/WKL++tXH4zH4ZDb9eGQ22fjQX65irg4Y6K8UetpLOOXw1dp/8XP2yuXUp7xj8M2cjzkX8kX+37Wxae7QPOH9o6NDpvc5s4ZP/oH8qN+yL+SL/OH40F7kzdXFTj29woSIOfcMbvN8DgHTONW4TxuUUcvrVCULU/g3Bk98DmHTU0C5SnyWzjolDyxoe8mb0OUltMM+0alWD4It0z0I5EhhL4fqc76R32QLvrZkGk9ZWxCocBuZPgzUemAOPOd2XFl/w7Eu1SY6oP4Sx5gmY2LSxmUN1acbGfjkdnfuLT6mp9emh3XzJ7jDoxKt/uPj/wSHnU6vXHph/S+ojEd57Nv+lk/0f8Mqeo7RpKP/jRKU9I/RnPSJplKwS99gjko0Mo548f5Q/4v/wN9bZNzwLLP+LF/5KdoUy8K9oCBvT+n1mksirdfuPedULZ5n+F+w5jy+RMbwti/nKLeo/EzHCNFRzMlzXC4CAe2ttyR2Xv69DYvTeV75j8MyUP8ubygNE7yEMsp7D/JzxxNKB/5V+03ac93GLd9d51rc5v1j/yr9o7b43yNIoiiCcc7jog42nmjdG/M1IuBzNG2ah/S4WbzOU5RD6dPpfUyL/rhfA/7k/xV/6I/4nHEp+nS3zinIYz69DtA0E/G09dSGJ9gaY90kSd0lN/nox+Rav1Fn1HUav3QXwWjv/Q7OfCfDdpv0B79deW/6E8Yn+gPlO3Ui4U9Lt9P7VXe19CxieBIF4zjxjDR2or8hdfOVg9Zy+jOjdeG8V4jt1l/iPsLBV5LEaM87P/g7Fw4O0s22Qyv3axf4rUF2yN/42OjnHW2KDC70h75V+0Dt0d5470LeSOOd3g/RyeMZ7w+TNP5EPrO0YTzOVavw830GwfyuczsPezDx1LgTyO6MJvobIP0AtmmQLQ3yDYNonmHbLNDNtkh2yC9QLZB+RmyDerfINugfuhPBbJFAHrAbJQgGyWdjSLQI9AD6OMW8bDiRyz9Uza61CHytn4xMHKpe3tXtLRlQyyVe77SPsOevf/MWZ/0gTU8WCMBPaWv2sDq12R6Nu7cDO9LstoyJwNrE+PuTQbWNqO97V679drIeLwfgbXVaG8Wfcb7HFj7DKztjEdtAbWBYEPZuuTjmPGLN1WubVEezhfqu+q/j4/nP11HmtkL5aO9x/Vr87P5kkuEBNlc9FvR0d/Ev5F/1T5BNKL90B8d1NbCf3DtHqH2lPFKbXpxbf/Fz0cogWtn5Ef5yI/zh/MlRzL3zjBP+aE/5H+yzWVU7bNjttmebLP7Iq0rr03yVrfEFqY4yOvHQ50TXDw7snO7UjFv7YJcxoO8/vaUax/k/+of+BHLbDhuj1hms7B8eX9kYSdUwJtEPvKv2gduL/bwsHYkqHTRfsK/au/N3N7jJJ1rExjviHaKZtR/HGhy9oP57rWCZF+YrxGNOtsaGV8/ECX91vbnbAj+MrIl1E6QjZFeIJsXyHYNVoMGq8EOqwmOb4fVCOkFVjOUn2E1RP0brKaoH/prgdU4AD0AHf0xwU7OA90v/Ld/S8H+iBj9gbLV5zFE5Gx14jWijc8hsPdFnNlyqhvb7Jp+4Y0vLQ2/DDkrPabc+NB1N/Q4EvGYfL/RY0w+JI2ONjr+DJR85Gm4xigPsRziBZaHeDgXy+f2zUf12DPzMQditJe/d0i0MeCn7XdOp6XL1RnG8X7hSuMt/GHKFwZ9Eb+uHf3M3qO09NvMHq0Hm9/0bZG+tBaM/tDGy7A802cs5Xg3qF+TSHs5tN2aflkk/F/zAfwUDPq5zvX79qUlfaPs4BrTwQ2yYBKlnusci0dIo0D2KoS3NMfj6J0wiVLPdY76W9QJoq7k3Qy3/qUPYRIVlKh9Lqr1V33atzD2BI9thh/3vpd6a3Gk36Ky8V7vp7UowWN//RYV3/vHzWGStM/bh3gnyXA+j4jy4Z/9Q9noUY4JZpthefRS+XuVcTPj+W0BT2/2eYZRHmK30aMmkYf4uSZ5VmxTZvqM/dU+5R8rLr0IXtEzXzmv+nf8YnhFb/y11qr/mvj7kgX95K/JVv1HfsGN7bv3JLf/onv5WnFBt/z9BHlTUo6bf4ejh/ALGDNJ52PBJCq/r3gDPsOw17MVsbfj8hVtC1Z9dniYOY5x2yj43Rxnuju/XU4+ixVD2veVcJcHWLKz58/gKsuP/BnkuHLjD6N4q3TvFE+9upjjvZUKcffaMXa11brilvSlw1an+vRDe7vPxjs+g5Sn9fxhU3RWf8bopvYdlxbyIZHWb1wqbHU2vvHRNY0P7b+y58ZvJZBfrsgtOzba2wT5jHHOj/0jv1wq4nzIeI5EgdvCFmf8psnG3OUZ/5d84O8b/TsWZvaWK91g5vzYP/If6eQnAOIf2h/kQ6dg5/yS+G12B/D/D2KDqaM=###4308:XlxV32DM 3fff 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###4352:XlxV32DM 3fff 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###4104:XlxV32DM 3fff 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###4436:XlxV32DM 3fff 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###4464:XlxV32DM 3fff 1158eNqFW0m25agO3BKYxvByHX8Bboc1q1Ge2vvHloImrn1fDvKeSIQQ6hDCaexqN1P+bNbF63dNNl+/3np//S7Gpus3JR96jHFHGON7ctP1C/5M/99//8QY9h/zY6e//9iQzM+e//xrw3z+TH/+V36Pn+lwf5130S32dPstpTnXs/yJxh33Krt11y9jrLYaK1KrNHG2vt8tpD1lmilMcj8+JyPSm3uaCUHmM/3r/EuEL+sHXZ/3tyd/49Wd4Qnb1W/CV9ZjzPJ+YNXPqfrZjci3ZuFfxL03tCk/xrwfzJ/zZPv9TWaav43vZoqP+yf6t/lzmoLs39l+/51987fxzYh9ef9Mz+OYH1XeN/lB/zbfpzN9w5PyY30Wg6Qesz4xDsz6wjgw6wvjwKwvjANjvHjz2o8Ds74wHj/2N47z/st+Au1vkP9Mo/zAHO/d/tJTPGI80DjyQdPfuH/Eex0H3v0qeHv0l5jCJPvd3L1/oud8dqQRczxjHPjN/2Gft/wE/Z2z5DeXJk/+Fh7zI9FLtj/6bO9mz+l+u9O9d8uUhB3EqYdLku2kNC23ulS8GKZTtiOHDWPm98b/VP7RyvxoRnUkNWdwsr0tje45A2eZX8xz9POdhivvB+YCZnmqORVXecgdE7njSuG8UjgflC4OSheO0o2jdDMlCtcXfbRwGccdhQsw67vuj8Z32v9O+w+JwjmN4bzQ+ELjJtmlHwfGeKZ0lCkdHTQOzP47q7/GpOGj417txfSMV/W3Qj8er8nGJ33wem/0jFk/PA7/An9rxuIS+nvbP9NbM6abqt+X+AI98/+Nnu31Ro/4eIt/+D/bg+nf8gv8/yO/Ef1rfiL/j3Q8Iz7e/AX0kq7Pkq5nZOvkKFtbX7J1qQrdsma/jNyCHQ/HEZsU3FBc2yn32mu7H7UbKZsAYz52j/mp8pfs6dN4lfGcDcyZn9ZrxcFYnIH+3MW6OxX/lX53m0afRDfRQx6D7Ez0PM76ZnxosXkEc/T7T3S61P3Teky/u2nqvZftxesxfdCoOi3kGe0VdymGHKKF6Hn/TH97azTFWx28deXawk1/nXNLOyhEtGmWuihrXcS4C5xHHJObeyyi2EEUS6L46apyllaiiiizlkxTMvfuGHutWaZZL9SM1WqRLuSRLvCxv4DHqRd12TnGi6jWLXM9/s7tFrUdt0tj5YZ0wQaw1l28ZrdAZ0epEm/3CU7D9tyf8Kp332k1s3QoRoz0kjR5uV2SW9b51V3NuUitPa7P9G/zwZ/nZ6PpopxOckiNuB5+VLwwngiHJPyxHjDLU9MdJfuJiqfGf9QX0jEw66umY8VNfkqPkA/6M6I/pmf9Mb14kx+8KbA3mdubYgkjTabRyBUkaFhYZ+YnXA8jsuam0pzwPpWGcStlRutgPsvDGNqdSdslWeZe28Asbz08ydqRbt7AvB7483zeD3Abp5t8Qqmipb4lb9dx1g/Tw/plv6H3buyf5zO9eEsY0tjxPfkfqLKoKksvVV0kVURSFbCIEgdR1u+iGLVCXselGbf7+iiKJVHsIMo8iDJ/T+5WRZnbXazVgjH14Tjvr8kd5imn1jwmM5O+YQ5Hr7UR8/vA6i47hdNO7g5cjHwr1oexEffROPxsFOoNVittdV/mx/IzPeOotc6y63zCLXxHw0OeFh7P+uwaUUMtvlM6Yf1hvSONGFWHPcd0WuezfYhevCkP3sThet7OFNzSCmnDXThxUb02TmZ0Bpw0r5iiaKM2wkYXl42UtZGywA/KYv6QF8YCPrSSKdLPT+vh7HGqTKYHvwmvEETP42/62ihYgH+jf7MP9MfyML04wzJkqcRNwem6ZdaE6bQabg3Icemd4mIfllqHpcL3pQItFSllRbIqsCy1DUvZ77k3ouZvfaaO1T5Ey/mae5GL0m78WGjaOLif4sOKedBF+MDqbvsp9zDG1V3TmLvBH7luy9Y+YZb3TX6+p/N+gLvSIfXhuNVHlVHeGs7UNfHUFQSekzyCIdfzesjdxZbzEz3vn+nr2UV9DOBDcyvuvUz/YV+iF286hsLafDjm7U2pXdOCckMw1x4l4dqjU23xfCSTYKwfrUXJh7pCM1lzJmvuZE3uAWeyZiZvyuj5q7zALkuXAV0VPMEeq3j/x/6Ifk7yhOPlZafQ6X3dyn2d+f1Gz/LyfNbHb/oGXrTQZn3bFU++4+EJeubP9OJt55AGp+8Z19LzBD93nGQq4HupeWgA5fOXc8R8PAyGJ4ylgGWpocGT1+/JHU38muwVC6tpSO4fNXq8m6xTC8fFiJoRfjnJizjjw2iTUb+IYIx7sXfWP2G4k6dwxvpILlFb5IzhLtF8PLlkenLJT+shnFvyt+t4wGsYKeb1kE54/UmTcq2NFLcW/LO87QnAxif6pF2f0/KTwXhYQX9Mz+MopFPCFxB21hbo/KSPeZd5RumYnvkxfXvCmaYnfbXvg8Zx0DN/phdvH3qEc/q1R5hUG0ius3oXYyRDfG3EGN4Fb8BRfGaZj9JjDxIdjFtXY3wwMp/v4dMTfxz1btcHHMImW1zr8hOGtWcqb6EfXo/laeWwWkujpT2J6INjjbZRX4jGFk0sj+h5pnL8pAfos+XCR3kxzvphecWb/JCGt++tlqhvj2jxn+rYjLu370cMVQKLKEMDKufvoqT6DKo5QrXAuL02jDEH3F4f+hgbGlA5fD+csopSuz76QZCwmodwzb/WiluSZIIWPr6/YLxoeOL7C8ZwP3x+U7sKxg61C8Z5fabncbToD02+jNt76PiezzgRDsq/tezt/CQvwo0/L0r0vQAw5q+1cTBi1hfCtdOf0x7f8sTP6zrTbrdHetY/0dcYodo6vNiD6cXbxh7j8uvhsCh3HKUlKdknjB6UPzWZEK7a41JH+aOFv+lhw7i1PabwNB+7r++rjOEdlHwDlULAtdQhb+AGxUYf+wHzetUbyXonlS4n3QT5aw2mx/6Zvnofery0H5QmO42v1BOG/phevCkPaTB+z8heP+w4gj66mprIBtx9J/iIu0tha3fOQ4cru1/OKRUFnxRbZcW464Y84q470okydMDS+f1wmFWUuX3eFBurrQtXb35/7z21VkKbqXCzjxhdzlMPD8IIj4WSP/hX9zBTfsJdsvX9RTnp+qt8zVDkOY77/ZkwKuuS+9ITRm206LecLB+vx7hetOlwKGE+fqyX8LHeqA+ki4VqtSaPHsKKeT2kg+XzcPJUew6NIE/6hXy8f6YXb9qHGDHfb+/lkjuP3z1N/glXUfvPUC/n/Mn5r6xg/9z/1n/rZBOXkrksn91SBuOtsbxvZ/GFqezl+k12z9evSeXv8nu4otlr3Au2pYy9fq8++N1aSfs9j/kx/uBH661XK+b+990/rbfrervZ47fxWeXh9TBePCV/G/dpu0ak5ZOuPkyoquQUE4oqg1tcFc3IRwXB3J+WFPPOT/hycVHdMd2qIgxRklHVvowvSbbyNh5MvxXbb2XiimS9M1zJl5jsVE+rCl/0sj3huE/6JYTYgbG1/laKV7u+4TPtg/BYv8TA7UfWlmUfcLaCF+XH8+31pcNxK2N7wpifVFksz5pGzOu56leCmV8zZm+MqTdG9r8ZI+hmvAbVmTf7hM9ZPGFKIgxjCLe+YGyGx7c0bgYYyrrKyF5ZwPD8nLav/LA/pufxcqGWz6rMdgfvHCb9Km90Nqz/G70Yw3Xp2k4vl8yi6vtEnJspknwxJVhY+cGuXB0tt11NS742ixNP+3TLvW+SDBljX1kzwhs2SfYNPR+aIaBH4Gp3cuKVghL8ql3TaFdPQcTrpbQtT/S8f5aH5zO9KPvqU/iqbO7Hx2K3WJJzkHgv58Kw9ba1U88DUSXTMy75z6hLzk8Y/CcVnTG2xuOQB6YAlq3GwUVfqu69Rq8upanuVO9nbK1s3SVYfcRQDbCI0n+IU2Z8j5ZNRQGOqmVhlQYD2mcDImGX03AwYFZWb9iaMRZWjZW9+fojfS1skENe1md+UQsTppet5mGr5rmQwNRVz87qG7SV4huxXxqY6asv0VY++BO/RFsBvWxlGRwgf3eARVlVh1AsrNZeK4nfnlJhldxSCvjplsoiGYpbHip1SF6+K0v7HYFhnw7dRX7CzI9xdShyEMYntKTytIpmlI/HEVaeKgbwgxXOQVXXDTVY1dXJ5duyebmhlotFOCUjLSZvUglJpR32nJ9wq2jy8oRbhSP4gz8CoGRrqcxikAx3W7zi5foq9myHy2GCpqsRZzvf9gjJGeE/ux63gDWDfMA1417/Q/XsMq5iliekGHuM+T4dfrwZHMPhGOhwDHz4mmO4KQEvOR+Cz1UqUfmfF8CtgvS2lx+48R/HDxpfjYRcO9y1YqlRLwu3E8eoP4gdtnInlvGQegz7x+ub8v5mhngk/2jFR7JP/lP1W27EcujrMbUecy9f4X8Xc/vpXb8+4v//gk/+rw==###4676:XlxV32DM 3fff 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###4440:XlxV32DM 3fff 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###4520:XlxV32DM 3fff 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###4428:XlxV32DM 3fff 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###4464:XlxV32DM 3fff 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###4500:XlxV32DM 3fff 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###4648:XlxV32DM 3fff 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###4384:XlxV32DM 3fff 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###4328:XlxV32DM 3fff 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###4656:XlxV32DM 3fff 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###4428:XlxV32DM 3fff 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###4528:XlxV32DM 3fff 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###4524:XlxV32DM 3fff 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###4608:XlxV32DM 3fff 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###4664:XlxV32DM 3fff 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###4684:XlxV32DM 3fff 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###4568:XlxV32DM 3fff 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###4572:XlxV32DM 3fff 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###4752:XlxV32DM 3fff 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###4852:XlxV32DM 3fff 12dceNqFW0mS7DYOvRJHEfx9jj4Ax6V3vfrhuzclAEoKCVU5wi6/4IQZIKic8zDNm/VPhZnnmDfO1hxzfrAHk3bM48XA2McZ83g23ezjjK3F87rJdT+f8b///nMUU/6YP+XvPzaC+RPA/ud/Nqb5x/3nv+vv+GOz/+udj740mO5cnXqd52rGvfd84k6nR5NxPJp24gHlosb0E8w1Vuy+nveT6xc9F3fNFq/h8z8nTllfX/k8yId2fodprvNnLxouYNy5X/U9avvL/SRm6TdAacv9WHsAqC1J761dIO0Lfnk8AlqLlCeff48LffB6pk+ez+v5fKlvHmf6JWZrk+O8H48zlvSwNTOW/PB6xlIevF6O3/JkbxHnM708Lum/5QVPjN5UH94UpDfVy5uSL6OiNoF82ZkZz92mhUraHpe1xAw7jmsbDS+dOvQOHcvzmLtqSt6tI5lyaPiNHsZ8nrP52m8tvM7zFMuYv2Fb18Y9jZfYjEafJet0UIaG5X6SHtbeoNgn539iLWpbyovHK+G39emFHz4/vdDH65k+aQ+8vgp7YXnyeBGxnzFbqxzn/Xi8Cn6ZHtYHY8kPr09v8qD1crx+2ePz/CJym6R/iNw2HrmtPbzRv3qjyVf0ngHKQ3sDU8EnkwrfZ/yJLSITE765EbGniNhziNjFmM8/ROw7RGzrInZ2ETuLiL2MP7H5aS35K/Z1q83/yAemdp6U7xe9JO/UG6j83t4oKicejzjehDxvfl/W3/r6Rd+3PCkaca70xI8l/io669d5cr2cL+Uj+ZHrv+bL84Q8XZ6e9DM0fUl+5HyONjVj7SLtQZ4v56M39uWNibwx9ii8cSxntD74UvKVWVaomPUyIsIDEPu4/u9k3syyj+ezfDsLAjMNhpLZtflv6+V5Envav/uRsUy36MR8PlgqEMX5dpKxmXDtI7Dc723/ARaeGOnj8xhLeUwaZyz54XEvxiU/jCU98z4fMSp7PJSdhbL7pWz/UPbcD+/MTFyWdKZBypcf4ojYl3G5n8SBmB0VhR2kMlkZpxJReF09T2C539v+0zyVyZiFKce7UHaXygahbHgqMwhlB6lsI5RNGJU5lzI9K3NOoczg/p5+e28N9mJ5kp8ZsFPDcfaGfuKthl0eKFLjnYaTGX7HF6nWbKQuDxKk+kXqsjpe2o27uJwwkITsmob56A5PUhjf+8FOil2kWEe0uCwD3rpU/13/LnIAwhXWS4pXuGRcl3lpOJpwZQHIGN6jiXXHE+L1l69qEncTrrzH4XnUA6+cSzU7nlRMveFo6qFhSU/KmOdccFc6WZcKd/4N1WUNW4NpuERfNDxNudJWqh6v9hCpLHLp2icjv8O4quEGB15aphsa/qJXYsgXvcUiPRIfxA8knb6joj7bmWHOSC9wMwnlmjD4yPVv9sI4Asr/8ClrWOpb2sMB0eE6LI+kvMHUgGneW43fsihBuXjUK+RAHZKO7oXnBgqekt+3+SP2so9b37K2n5wv7ZH5c9waMYBlU0c3XgLNyOegYIj6dbSfnC/pkfM72Vf2cOD5R8eyjuim9cnjfgcA+g1gRHyjz0Gn5Pb0H0Pyz+BIjyjf5rPfzz+ovHsbtwYNQMabASHs8mP+fD3qvh7gQD0C0j9rjzt/ATDa+tgvOnpD+3FXAfyxH7bPmGvdzy9khxzfaoey08PylvYv50v7kfqQ/iLlFXNEPzM4T8rjyx/F/JgTtfC6RXt5ykv6h5wv/U/Kk887AOOzlKf0Dzkf05nbMmsqMps5d96lS4VQMCn36wZhLWL7gnk+YzzK70eZoCfxCKFiS2DgZWXF+Us6dnmNgvnoKEiJgpT4ICVspDj7QgovbbTUrzh8OSb0rOFlZ5auAHikwH4ZKN4PbfzUE/FRT0TZzvD5qieSLy6Fq+sUyF7NRNwof0vsyb+PzM2+Jx71Mrct3z/x0gTGB0/1h8X4F0zH6pLwWB6j4U7xrdt2sZ0s5vtVVtXdH8vkCvOJ5XlyP443FhpWkJAv+08pwJ6vuvEe4wvmO7DPfNfAzX08Wpf38Wmc3/N95nw9A9YhBuWeqZ7p0V7zJL+pJ9RPs1ObL/eX8yWW/CaLfp8pf0t+B+X7moLX5z/3k/MPimuQU8c4j/HrmIniCsabtDStzZfykvPBIz123Ug1fbhUqc7DekrO53omVrQfOV/qQ84PFI97zKSPY1AdMfd8edfXlK+4njL+SOhnlfId8te5WVxxvLK/ivlSXnJ+onzG+U3SK/Uh5ydA+fN9QfIj6f2az/t71jfWA9WkRz0YfD92/zybuz/5b6J48eZ/n3rnGY9Y/t00+5N+lgbnT/SvBBv29WNdA/f1fmVcHMf1OT/rvbEseOd/LLvc+RtQA2KUb5lpaPTI+C7nS/+R87nesdwJE/r4iq9iPtcLzP+XPKheqtSsl/OlPcv50h6lPHum8bV+p5flKe1Hzsd0emyZfQa9p+FXSXVFiNPp7GnxqVB7BR+dBa7xuEpaC6NqONvkUKCja7jTeYyR0vSoQZJO6qoYCvbk8U50NVHO99clNg03esGKUFT8eYEpRcP9fpFBjKTCRqodWSe1L75Rbx4fEW2mp9ZwaDh6qGR3WcMu437eYNkkMZ/HGEnNG6ndCUqjO2upwpE9Y6t2FXBHQ8tCyiQOZOkmhqDhYfDmEXKMGuZOhKOCUGKmx60K/sNJ2TmxOiefOx9Wzaajz7VVS2iYY05aJqzhw2AsHDGAhrtByqPFKlzimxPYOTmfzyNzIgvctDhZ1e2MmEUS1ffNog4mBKw2X8YNc/45WZ3/tv4u8sV5vB9jed4neyCW+93ZkTBKom06bS8d1wEJ+2MUNbhPFVsyKqY+Vc+paZj7DC0m0DBAqpQHtzjad0qHbn28skC67Bx6oo96UtVwomfvElLX8KBMliJyJjFnjGF1zPRYs3MyduszuvUldNiTE8ydFnWwoiG2gl/GA3P+OTlp89/Wz1V7aOexDTB+O4+x3I/HGaMk9oZ/a/ql975VmYhduY6UR4hDxZSlc9XxpwqMn6cHt/fzW9WbDtwPWysvO157Yh9zYqyS+D4J9pPspv3Wde03C1TBRfJ1oE5npFihjweibDsZXuar6+d591DO+3QK7/Mf57FkGMv9eJwxSmLv9LSsa/8TCwJmqo5Rc0VBr2KK/5wJJb6jqMEWAVKyN4Ia6Nrn+JlpJWcqW33T8Cde7yeFXfvl58wTDO7EvrQyhdkzB49zpPdE2ZYp1Plv64fBOkmexzpgLM+7+8yE5X6fewlilETcq4nyczUBnNOAb1SY/SUuyeOHIFSxveFVRXgNd4OdYGvT0DCAK3iDwsdF5GSv8Lu0nmNxcnzsuFF8zBMz0TC5abiQ3drerIa5t3rfPQROgJzBujtreN0lUSdJx/fbhWmfp0a33xD68VbLAr0yYSxYnE+85UHRMOfMZMvQsEsHxSK8lUt88K2vE+UCD4jzm5PzAhGYE3nVyYuT7EuweN8exl4U3Rgs3efvnfE21SP3D6qG7UTM728Ssw5Tdo/3MsapszXbpOFXegXORP83P08s5/M4Y5Tk434TfvbjShGikN+mjFFZYpeQYvbbN8x+K3EEFzEwoN9KzH4cDAZn5KRsNnHMl5D0Kafn1e73BknOfVQNc/vfwXi0/3k9j2f60kLO5+cHxnI+78cYWambUkKV1TIsVmDdj6me5z5d6thlWDWhVTEU7MtUHTvfSLq5qZj65s3jxUXiafEjFkfvQRIPg7h0+hiYPiqJkKl/M82Of5uPomoPUc2fRXWQqAY1ZCaFdYkriabT06DEkVhf1beK+0TS+TtViZmVA/LP2PyKi4ZZlIxRVP0hqqZXL9zLWtkec7dlK8Ku/Rcm0VTq8kvMVmLp64VvPPOPOONrZjHYrXzDYd2rNZyun2t8MIpiPETR9aTPolil0ditJJhwaJitxNZoNcxW0mY0OkbW3zCzFs2TVcbMKmNkdT5YLb9oHfAt43YIM52GM7G2PC7qGEl/w8nOhL02essSmFlzv+AGo2uYRcH4EoU3D1HUX7QOAwsgMvgI6FMS32HUD9CwJS2X9IZn/gkza908WWXMrDJGVu2DVdC1zh3PavCBKmTsqDaDXzBJXKlmA/qCROJAlYz1nJ+feFA9HiLOlzjQS81B+Z5xNfhi89v4gCdGUbiHKLKudRZFJ1EUai4X+hhMYrjLWSzuJGbWE3L4hSuxnq2zGr5ZgyfrjG9WYWd1vwgHeKnw7588GfwsO0O4fLKn1jS8fL/vn9FLXDJWYZby/Btui1gNL08LO0ZWwoOV+FbN0S8MDJYoOTr8TgSwZJC4+4NaP/iFvMQW8EPPWPHbBYlv0kGwAoIV2FmJDwM8XroGtDSv2/B1q6AXmgx4tMQe8JVq2e7QcPT4Vdj99YXAjSIpv35+Yare+OseiT8lS00a5u98GaMojocokq5VFkVlUXRkPRp6gBd4xR9sWpKWJM7EWp46/nz9/WSFMbPCGFlJ+3Xj6xexFFZmapSSD3wWyz1g8jgi/dAJe+b0clRto5984PuKxHK/t/0N7S/PWz4fdyzn8zhjZBUerMaXl0Va2mjpYTr9kOGwGk5EegIYGub9sgGjjU8afzRz/H6dXXc03cDivRRJnRGl7OAYGr6/GKrJqJi+wAzx8BqugF8sVKvjm5WV2T6slK3XeIB8aCjXbyPM6S30dSuZUOsFL+GGHgcFXgEG9TPx4WqYjHVLd1iXZDR/axyamNj/vINczNNjpsRyv7f9V1ERNXpcbvSrOHwok5hdhvEbvYzleTzOGIVdHyae9GvkLQrArTuJdhhnNewBP71tFrFcf36iifP+D8yeyCc=###4704:XlxV32DM 3fff 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###4712:XlxV32DM 3fff 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###4248:XlxV32DM 3fff 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###3880:XlxV32DM 3fff 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###4132:XlxV32DM 3446 100ceNrtWsuOZLcN/Zl8gN6P25tBsvHCixjJD+hxtTTgRbJpzL/nHFZ1z2WruxDDbttwMgOoTpGSSFESRbL66euPfpZ5mMM+/2hjMUds59O/bMzrcE9kVndldqOYXTGH08ysmEExp2J2PXIOxdQjl2KOdGWexipmUUynmF2PdEkx9cigmKNpZlfMoZjpus5k1DrP6i9M76tmNsXMitmDYkbFnOvKdFMxz6SYaj+XMp8zSzHdddpg1DFZPimmkrmSUcyhmVkxu2JWq5hNM4tiKvOt4RSzaGZVTGXbtW4KKVLZSedlihKvOxCMiYrpFdPHN5OBlHbSUFNYNUW4HpwSlmJmv02Ww05qaoqppihWMbtidrtNdvcDinTdnOK1ffpSTG2f++2/kk6n+itjWHPdTDuVJOsVU13rYINRTD0yrbdq2Gx2UlKW0lPkqZhVMdvcJmvnRlIXvYSspuhdMZUZ7dm3yc7NsnYpywZt2VWV2dUxc66+ncy5tpG8UVOoY+Z8Vkx1zFzK22Sp7CR1DZULDS6ra6hcaHDqYQvLKeZQHqvqkUN5rKplrqiYek3q7QpVWcPb62562xTTR8Ucihmr8ulOM0/FDIpZrrc02aWZ11uanDobvqmlOL2Urty2U0bw43orgtUjp9oVq0eep5pWGR5PkGKqLQtGvV1WjYQfUEw9Uh3g4KJmqs126gKGqI1gNVO9l9rwIU31DKv9jPNqBLuUzOSu2nrt0VJqSiElM+nroF1sNtvFy2a7/tlvHjOHzWPmnHbSdtXz7h3z7h3zGXbS9roW23fS5glLdDtpe0lLqTtp83pFuQ+vHVs1V/dhm3qSalZ3zmrmUtMutYHNXs9i1i9RC0XJNIo5r8dtqbvRVXSW9RPQdSi+rhFhGC6oyPcqMrqgQvHVFTNflfVnVsxxveZWhf/Rq6DJKwcRvXotk73eqqh9gDNBMVWsZ4daSixXu9uimCmrvU5TMetSzKttY47K8FGNLCp488YrZr+eEjf0yKFeg359R2JVTilHpVDL6pFRDiI2FUbkoGzbbVbHVm1290uNbIqpT19UJ6EXpw6YYk4V2iWVj8RZ3/obkMpGGudOeuvh4mniTkobyY+dNDfSFrmDFDZSazupb6TT7qS3Hi4uW3bSWw+XTPE7KWyk3nZS30jL7qS3eiXr/U7aJNrUdtIm0Ta7k3aJs+ykzRLOrI1kzUZaYye93e3k9zX6fY1+X6Pf1+j3Nfp9jX5fo9/XGPY1hn2NIaSdlDdSnjvp7bVKMTTlma+XNUVVnbLr4iC+/vufNt5eU/w3z//w8MU2OjYJjXdzIkKwCBzn03foWp9+Qtuf/oI2wG+uJ/gmMw4xHiZgnybciBjbk+tuXPPK/c6b87VLhBI3LcobLfLtznxTYVmlwiPBgVyYSQv+ptZX/vvy5W/POdR2RKR1IY0Fyl+fnXmGdcScR+hHWogWU6/zyAZeGE1j09HASmgSm8rmRONJw7HMrD6g4bAQ0ET2i6RF0hKnSqQlzpc4X+bYzM6Z/TJphVPBTaNhv0JB1bBh50oa3sBsGoc1chvVgCPJ1jo2mQ3ms96yKWxI8ycbjLUBU1kkQGjITZjeVnbh9LZCDdvYhTJs41RNaBzb2VmkdU4wKGOQNjjV4CyD/QalzcSGUyFeQoOpHKLU7Lpjg36MTbI7A7c4j6ev3Aq5JQfsl3qq2A/4YDSFjXxdaBDWoUlsMhvZLVqDizYI3dDQ4oGGDeRG2jSSVtmlciu4VNNoXa7XNFq3y1eauLNLF+tygsEug2YfnHRw7ORuTc48OXZSg5PTn5zlpBonRZ6c7+RUi5MuTiU6L1rX0M7Gs6FhDU1n+dXSpla+0n6O++vIcLSzI9eRwaXaQGNzvTZwtyJ3JnJneAhtoozEsTx6fAYybiob9svcy8z5GDTYzB0snLRw0kIZlRvVQXNcqpO95K66U5rz2w5myagcYuYDXhd3Gh4aLz62FX4Hlx7uE7cNLLh8OCr4NnhPukuL24szbLB2w+CS4bnFMAZDfHX5zGJSXEbc7AxruNOLQPGPcBkWFAsn5RDI+sPjHno4NY9F+JYPj9PpsScBGgTXjgA7wQscAesLuEWBoYqTqeGWUrGEdsExwfl8Dwj3Yp6/91AxPP/krX36EUSsg58s7cBbpbyevkoX/14X+4jpHjH9e0z7KvnByPBo5EOF4qORD7VNj0b6RyPzo5EPl/JQ24cKZT4PzzZJnT8c6QhwLxHuPeJ0RHiFiFPzejI8EovbwUCEcj8X8fnjFZnf8EBc9lxWJJFjOOA78SIkulS8JWnQV8Ef8EXIH6ws3VeW/3gr+5kH9nImbzbJYhO4YL7xcx0FPqXASb5rh3W3Q/hd7HBTuNwVLsi4Cp6cCsdYWWh5T+HzD6BwFYXDUfGG1A5l8XC/q2y7K+s/S9mbPk30aUfDO9TwWDaEVQ0PeMf708M6OkKCDsMOvjjv6VnvetY/0234mU74hVlerNrvvmUgvhppHaOGYyBoGrMfA9HNxAv9rjXDn9e3DLHJeUxEXrPgE7HiiXDnREh6Ig5B3nEsxCcrmGMhbFl9HAvnE+HfB4443o01/3/0ePQ+ZtZHzPaI2R8xx8vWzrtTswZRgWUqZpkTvLtp/Tfxa2d+VQnQMl2wzADeVcn/Niq9vFWWmYS1SJ+sQ6xhHYsfu17emN//vTpv75WHliwhMDt914T5rqr7BareBLZXgUihkKjb9wWWX03gzVeDwHq/9VymR9puA3yRDYHlFngnHB4cocj07D11xl2d8j/jim7Guzl1bFQMsJbU1CIPdoS7R04NR5AQRiOxTvxJArbMHv1yRj/+Amfz+cGddHeDjv/79k/07bdNpPuOvAEFQaAtHttUEm5gqdirMpDxF2R9tjLhr+G8VAKyza/eqgrCUUh1/cFuw8NiwMN8/2FKb986y1MMCctVHvDa6gemcq+mauZX82PrVTjCd9tYWnpXuP8E4fJTsghvDje9xfWB8PAZwt2r8AJxrbcPhMfPEO5fhU+4vH5Nk5Tw9BnCw4vw7hHldP5F2bvC82cIj6/C6Sc6Tt37wstnCE+vwuG+7HDpA+H21xcejfwWdrgjhwoNbj/FpKcLiz9zhBr+a4/qWHz1iT8jJTyQPiF69oyFfDZYRcYEPkd4ml7wtfd5+BETy7YdTTOHn26gCRgxkW/6CeF+doyYE4HtaTwaBxknMtIASUeocRyhYUToE5FyX+uIJuARM4moNDQtokEwFA0S18gKfUQsjQbSImvr0SaHJk80C1+dRRdfMUsgCnwUA+KqGKc/Ym4YmzsmrfFE0wqaAUad/LrQudnAP6YGmti1xB8tUoDBUnTn1c7+2xaUN1twY0FN8OovLXu/TPz1y5e/P/+Al9I8/QA3b59+Yjne4MPLN8hyeFH5me+fjXoR9BdwUhsi7hjOK5FoJihQP0GJWgoq1FVQo8aCBvUWxJ0tRP32F8tEjisRFLgeQYmrElS4NkGNKxQ0ZJ1Ei+VdIhic9ibyLPUKiiz4Csos+wpqLJ8KkiKqoJOlVKIpBVVB/B1I1jaluCooscQqqLLgKKiz7ChosvgoaLEESXQ61vkEBVb7BCXW/AQVVv4EdZbXBE0W2QQtltqI8Fw0IzS4zxakHw52KzduYflLUGMRTNBgKUzQyYIYUDSGZTFBjsUxQZEFH0GZZR9BlcUfQZ0lIEGThSBBi+UgIhzX6ZygwBKJoMRCiaDCcomgxqKJoMHSiaCTBRQiZ1hGEeRYTBEUWFIRlFhYEVRYXhHUWGQRNKTUInBJKk+I+8eEXqCXtF5gksRaYJH0WmCTJFvglDRX4JJklzBYSXkFekl8BSbJLgUWyTEFdkkBBd4SQcJoJE8T6CRbExgkZxOYJHMTWCR/E9gkixM4JJcTeEpGR5ispDACvSQyAqOkMwKzJDUCq6Q2ArskOAKnpDkClyQ7hNlKyiPQS+IjMEr6IzBLEiSwyXshcMirIfCUt4NQ/iKsymTl9o4IDPKaCEzypggs8rII7BKQCpwSlhJWI5GiQCfxosAoIZzALIGcwCaxlcAhEZbAJUEPIfw6Qx+BQaIRgUliEoFVwgSBXYIFgae834TdyCv+BD/7H3CUqyI= \ No newline at end of file Index: Top_Modul_VHDL_summary.html =================================================================== --- Top_Modul_VHDL_summary.html (nonexistent) +++ Top_Modul_VHDL_summary.html (revision 2) @@ -0,0 +1,78 @@ +Xilinx Design Summary + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Top_Modul_VHDL Project Status
Project File:Prj_12_DDR2.xiseParser Errors:
Module Name:Top_Modul_VHDLImplementation State:New
Target Device:xc3s700a-4fg484
  • Errors:
 
Product Version:ISE 13.1
  • Warnings:
 
Design Goal:Balanced
  • Routing Results:
Design Strategy:Xilinx Default (unlocked)
  • Timing Constraints:
 
Environment: 
  • Final Timing Score:
  
+ + + + + + + + + + + + 
+ + + + + + + + + + +
Detailed Reports [-]
Report NameStatusGeneratedErrorsWarningsInfos
Synthesis Report     
Translation Report     
Map Report     
Place and Route Report     
Power Report     
Post-PAR Static Timing Report     
Bitgen Report     

+ + +
Secondary Reports [-]
Report NameStatusGenerated
+ + +
Date Generated: 08/20/2011 - 10:35:35
+ \ No newline at end of file Index: _xmsgs =================================================================== --- _xmsgs (nonexistent) +++ _xmsgs (revision 2)
_xmsgs Property changes : Added: bugtraq:number ## -0,0 +1 ## +true \ No newline at end of property Index: DDR2_Write_VHDL.vhd =================================================================== --- DDR2_Write_VHDL.vhd (nonexistent) +++ DDR2_Write_VHDL.vhd (revision 2) @@ -0,0 +1,211 @@ +--------------------------------------------------------------------- +-- File : DDR2_Write_VHDL.vhd +-- Projekt : Prj_12_DDR2 +-- Zweck : DDR2-Write-Funktion +-- Datum : 19.08.2011 +-- Version : 2.0 +-- Plattform : XILINX Spartan-3A +-- FPGA : XC3S700A-FGG484 +-- Sprache : VHDL +-- ISE : ISE-Design-Suite V:13.1 +-- Autor : UB +-- Mail : Becker_U(at)gmx.de +--------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + + -------------------------------------------- + -- Beschreibung : + -- + -- Die State-Machine schreibt + -- einen 64Bit Wert ins RAM + -- in 4 aufeinander folgenden 16bit-Zellen + -- + -- die Adresse wird + -- von der übergeordneten CONTROL-Unit + -- gehandelt + -- + -- solange die Write-Funktion läuft, + -- ist WRITE_BUSY=1 + -------------------------------------------- + +entity DDR2_Write_VHDL is + + -------------------------------------------- + -- Port Deklerationen + -------------------------------------------- + port ( + reset_in : in std_logic; + clk_in : in std_logic; + clk90_in : in std_logic; + w_command_register : out std_logic_vector(2 downto 0); + w_cmd_ack : in std_logic; + w_burst_done : out std_logic; + write_en : in std_logic; + write_busy : out std_logic; + input_data : out std_logic_vector(31 downto 0); + write_data : in std_logic_vector(63 downto 0) + ); + +end DDR2_Write_VHDL; + +architecture Verhalten of DDR2_Write_VHDL is + + -------------------------------------------- + -- Interne Signale + -------------------------------------------- + + constant CLK_ANZ : integer := 2; -- warte 3 Clockzyklen (2 bis 0 = 3) + signal v_counter : natural range 0 to CLK_ANZ := CLK_ANZ; + + type STATE_WA_TYPE is ( + WA_1_NOP, + WA_2_WRITE_CMD, + WA_3_WAIT_4_ACK1, + WA_4_WAIT_3_CLK, + WA_5_BURST_HI, + WA_6_BURST_OK, + WA_7_WAIT_4_ACK0 + ); + signal STATE_WA : STATE_WA_TYPE := WA_1_NOP; + + type STATE_WB_TYPE is ( + WB_1_NOP, + WB_2_DATA_LSB, + WB_3_T1, + WB_4_T2, + WB_5_DATA_MSB + ); + signal STATE_WB : STATE_WB_TYPE := WB_1_NOP; + +begin + + ----------------------------------------- + -- State-Machine WA : (Clock-0 Lo-Flanke) + -- 1. wartet auf das WRITE_EN=1 von der DDR2_Control + -- 2. sendet das WRITE-Kommando an das RAM + -- 3. wartet auf das ACK=1 vom RAM + -- 4. wartet 3 Clockzyklen + -- (solange dauert das schreiben von 64Bit) + -- 5. legt das BURST_DONE-Signal für 2 Clockzyklen an + -- 6. wartet auf das ACK=0 vom RAM + -- 7. Sprung zu Punkt 1 + ----------------------------------------- + P_Write_WA : process(clk_in,reset_in) + begin + if reset_in = '1' then + -- reset button ist gedrueckt + STATE_WA <= WA_1_NOP; + w_command_register <= "000"; -- NOP + w_burst_done <= '0'; + elsif falling_edge(clk_in) then + case STATE_WA is + when WA_1_NOP => + -- warte auf write enable signal + w_command_register <= "000"; -- NOP + v_counter <= CLK_ANZ; + w_burst_done <= '0'; + if write_en = '1' then + STATE_WA <= WA_2_WRITE_CMD; + end if; + when WA_2_WRITE_CMD => + -- CMD anlegen + w_command_register <= "100"; -- WRITE-CMD + STATE_WA <= WA_3_WAIT_4_ACK1; + when WA_3_WAIT_4_ACK1 => + -- warten auf ACK=1 vom RAM + if w_cmd_ack = '1' then + STATE_WA <= WA_4_WAIT_3_CLK; + end if; + when WA_4_WAIT_3_CLK => + -- warte 3 Clockzyklen + if v_counter = 0 then + -- burst_done auf HI + w_burst_done <= '1'; + STATE_WA <= WA_5_BURST_HI; + else + w_burst_done <= '0'; + v_counter <= v_counter - 1; + end if; + when WA_5_BURST_HI => + -- NOP anlegen + w_command_register <= "000"; -- NOP + STATE_WA <= WA_6_BURST_OK; + when WA_6_BURST_OK => + -- burst_done auf Lo + w_burst_done <= '0'; + STATE_WA <= WA_7_WAIT_4_ACK0; + when WA_7_WAIT_4_ACK0 => + -- warten auf ACK=0 vom RAM + if w_cmd_ack = '0' then + STATE_WA <= WA_1_NOP; + end if; + when others => + NULL; + end case; + end if; + end process P_Write_WA; + + ----------------------------------------- + -- State-Machine WB : (Clock-90 Hi-Flanke) + -- 1. wartet bis State-Machine-WA das + -- WRITE-Kommando gesendet hat + -- 2. legt die LSB-Daten (32Bit) für das RAM an + -- 3. wartet auf das ACK=1 vom RAM + -- 4. wartet nochmal 2 Clockzyklen (WICHTIG !!) + -- 5. legt die MSB-Daten (32Bit) für das RAM an + -- 6. wartet bis State-Machine-WA das + -- BURST_DONE-Signal angelegt hat + -- 7. Sprung zu Punkt 1 + ----------------------------------------- + P_Write_WB : process(clk90_in,reset_in) + begin + if reset_in = '1' then + -- reset button ist gedrueckt + STATE_WB <= WB_1_NOP; + input_data <= (others => '0'); + elsif rising_edge(clk90_in) then + case STATE_WB is + when WB_1_NOP => + -- warte bis write start + input_data <= (others => '0'); + if STATE_WA = WA_2_WRITE_CMD then + STATE_WB <= WB_2_DATA_LSB; + end if; + when WB_2_DATA_LSB => + -- Daten (LSB) anlegen + -- und warten auf ACK + input_data <= write_data(31 downto 0); + if w_cmd_ack = '1' then + STATE_WB <= WB_3_T1; + end if; + when WB_3_T1 => + input_data <= write_data(31 downto 0); + STATE_WB <= WB_4_T2; + when WB_4_T2 => + input_data <= write_data(31 downto 0); + STATE_WB <= WB_5_DATA_MSB; + when WB_5_DATA_MSB => + -- Daten (MSB) anlegen + -- und warten bis Write fertig + input_data <= write_data(63 downto 32); + if STATE_WA = WA_5_BURST_HI then + STATE_WB <= WB_1_NOP; + end if; + when others => + NULL; + end case; + end if; + end process P_Write_WB; + + ----------------------------------------- + -- Write-Busy erzeugen : + -- solange der Write-Prozess im Gange + -- ist WRITE_BUSY = 1 + ----------------------------------------- + write_busy <= '0' when STATE_WA=WA_1_NOP else '1'; + +end Verhalten; + Index: iseconfig/Top_Modul_VHDL.xreport =================================================================== --- iseconfig/Top_Modul_VHDL.xreport (nonexistent) +++ iseconfig/Top_Modul_VHDL.xreport (revision 2) @@ -0,0 +1,217 @@ + + +
+ 2011-08-20T10:35:35 + Top_Modul_VHDL + 2011-08-20T10:30:12 + F:/Data_Temp_Ordner/Xilinx/Projekte/Test_Prj_VHDL/Prj_12_DDR2/Prj_12_DDR2/iseconfig/Top_Modul_VHDL.xreport + F:/Data_Temp_Ordner/Xilinx/Projekte/Test_Prj_VHDL/Prj_12_DDR2/Prj_12_DDR2\ + 2011-08-19T13:02:28 + false +
+ + + + + + + + + + + + + + + + + + + + + + + +
Index: iseconfig/Prj_12_DDR2.projectmgr =================================================================== --- iseconfig/Prj_12_DDR2.projectmgr (nonexistent) +++ iseconfig/Prj_12_DDR2.projectmgr (revision 2) @@ -0,0 +1,92 @@ + + + + + + + + + 2 + /Top_Modul_VHDL - Verhalten F:|Data_Temp_Ordner|Xilinx|Projekte|Test_Prj_VHDL|Prj_12_DDR2|Prj_12_DDR2|Top_Modul_VHDL.vhd/INST_DDR2_RAM_CORE - DDR2_Ram_Core - arc_mem_interface_top + /Top_Modul_VHDL - Verhalten F:|Data_Temp_Ordner|Xilinx|Projekte|Test_Prj_VHDL|Prj_12_DDR2|Prj_12_DDR2|Top_Modul_VHDL.vhd/INST_DDR2_RAM_CORE - DDR2_Ram_Core - arc_mem_interface_top/infrastructure_top0 - DDR2_Ram_Core_infrastructure_top - arc + /Top_Modul_VHDL - Verhalten F:|Data_Temp_Ordner|Xilinx|Projekte|Test_Prj_VHDL|Prj_12_DDR2|Prj_12_DDR2|Top_Modul_VHDL.vhd/INST_DDR2_RAM_CORE - DDR2_Ram_Core - arc_mem_interface_top/top_00 - DDR2_Ram_Core_top_0 - arc + + + Prj_12_DDR2 + + 0 + 0 + 000000ff00000000000000010000000100000000000000000000000000000000020200000001000000010000006400000238000000020000000000000000000000000200000064ffffffff000000810000000300000002000002380000000100000003000000000000000100000003 + true + Prj_12_DDR2 + + + + 1 + Design Utilities + + + + + 0 + 0 + 000000ff000000000000000100000001000000000000000000000000000000000000000000000001bd000000010000000100000000000000000000000064ffffffff000000810000000000000001000001bd0000000100000000 + false + + + + + 1 + + + 0 + 0 + 000000ff00000000000000010000000000000000010000000000000000000000000000000000000392000000040101000100000000000000000000000064ffffffff000000810000000000000004000000e60000000100000000000000240000000100000000000000660000000100000000000002220000000100000000 + false + Buttons_VHDL.vhd + + + + 1 + work + + + 0 + 0 + 000000ff00000000000000010000000000000000010000000000000000000000000000000000000109000000010001000100000000000000000000000064ffffffff000000810000000000000001000001090000000100000000 + false + work + + + + 1 + Design Utilities + Implement Design + Synthesize - XST + User Constraints + + + + + 0 + 0 + 000000ff000000000000000100000001000000000000000000000000000000000000000000000001bd000000010000000100000000000000000000000064ffffffff000000810000000000000001000001bd0000000100000000 + false + + + 000000ff00000000000000020000015d0000011c01000000050100000002 + Implementation + + + 1 + + + Edit Constraints (Text) + + 0 + 0 + 000000ff000000000000000100000001000000000000000000000000000000000000000000000001bd000000010000000100000000000000000000000064ffffffff000000810000000000000001000001bd0000000100000000 + false + Edit Constraints (Text) + + Index: iseconfig =================================================================== --- iseconfig (nonexistent) +++ iseconfig (revision 2)
iseconfig Property changes : Added: bugtraq:number ## -0,0 +1 ## +true \ No newline at end of property Index: Prj12_Impact.ipf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: Prj12_Impact.ipf =================================================================== --- Prj12_Impact.ipf (nonexistent) +++ Prj12_Impact.ipf (revision 2)
Prj12_Impact.ipf Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: webtalk.log =================================================================== --- webtalk.log (nonexistent) +++ webtalk.log (revision 2) @@ -0,0 +1,9 @@ +Release 13.1 - WebTalk (O.40d) +Copyright (c) 1995-2010 Xilinx, Inc. All rights reserved. + +WebTalk Summary +---------------- +INFO:WebTalk:3 - WebTalk is disabled. + +INFO:WebTalk:9 - WebTalk Install setting is OFF. +INFO:WebTalk:6 - WebTalk User setting is ON. Index: UB_Y-Led_UCF.ucf =================================================================== --- UB_Y-Led_UCF.ucf (nonexistent) +++ UB_Y-Led_UCF.ucf (revision 2) @@ -0,0 +1,29 @@ +######################################### +# File : UB_Y-LED_UCF.ucf +# Autor : UB +# +# Constraint-File fuer die Gelbe LED +# (AWAKE) auf dem Spartan-3A Board +# +# +# LED leuchtet bei HI +# +# unbenutzte Netze per '#' deaktivieren +# +######################################### + +# um die LED zu nutzen, muss der Suspend-Mode +# ausgeschaltet werden + +CONFIG ENABLE_SUSPEND = NO ; +NET "LED_YELLOW_OUT" LOC = "AB15" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8 ; + + +######################################### +# Port-Zuweisungen +######################################### +# +# +# LED_YELLOW_OUT : out std_logic; +# +######################################### \ No newline at end of file Index: UB_Taster_BUS_UCF.ucf =================================================================== --- UB_Taster_BUS_UCF.ucf (nonexistent) +++ UB_Taster_BUS_UCF.ucf (revision 2) @@ -0,0 +1,28 @@ +######################################### +# File : UB_Taster_BUS_UCF.ucf +# Autor : UB +# +# Constraint-File fuer die 4 Buttons +# auf dem Spartan-3A Board +# +# als 4bit BUS +# +# Signal ist bei gedruecktem Taster = Hi +# +# unbenutzte Netze per '#' deaktivieren +# +######################################### + +NET "BTN_IN<0>" LOC = "T16" | IOSTANDARD = LVCMOS33 | PULLDOWN ; +NET "BTN_IN<1>" LOC = "T14" | IOSTANDARD = LVCMOS33 | PULLDOWN ; +NET "BTN_IN<2>" LOC = "T15" | IOSTANDARD = LVCMOS33 | PULLDOWN ; +NET "BTN_IN<3>" LOC = "U15" | IOSTANDARD = LVCMOS33 | PULLDOWN ; + +######################################### +# Port-Zuweisungen +######################################### +# +# +# BTN_IN : in std_logic_vector(3 downto 0); +# +######################################### \ No newline at end of file Index: UB_Led_BUS_UCF.ucf =================================================================== --- UB_Led_BUS_UCF.ucf (nonexistent) +++ UB_Led_BUS_UCF.ucf (revision 2) @@ -0,0 +1,33 @@ +######################################### +# File : UB_LED_BUS_UCF.ucf +# Autor : UB +# +# Constraint-File fuer die 8 LEDs +# auf dem Spartan-3A Board +# +# als 8bit BUS +# +# LED leuchtet bei HI +# +# unbenutzte Netze per '#' deaktivieren +# +######################################### + + +NET "LED_OUT<7>" LOC = "W21" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8 ; +NET "LED_OUT<6>" LOC = "Y22" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8 ; +NET "LED_OUT<5>" LOC = "V20" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8 ; +NET "LED_OUT<4>" LOC = "V19" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8 ; +NET "LED_OUT<3>" LOC = "U19" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8 ; +NET "LED_OUT<2>" LOC = "U20" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8 ; +NET "LED_OUT<1>" LOC = "T19" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8 ; +NET "LED_OUT<0>" LOC = "R20" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8 ; + +######################################### +# Port-Zuweisungen +######################################### +# +# +# LED_OUT : out std_logic_vector(7 downto 0); +# +######################################### \ No newline at end of file Index: UB_Schalter_BUS_UCF.ucf =================================================================== --- UB_Schalter_BUS_UCF.ucf (nonexistent) +++ UB_Schalter_BUS_UCF.ucf (revision 2) @@ -0,0 +1,29 @@ +######################################### +# File : UB_Schalter_UCF.ucf +# Autor : UB +# +# Constraint-File fuer die 4 Schalter +# auf dem Spartan-3A Board +# +# als 4bit BUS +# +# Signal ist Hi oder Lo je nach Position +# +# unbenutzte Netze per '#' deaktivieren +# +######################################### + +NET "SW_IN<0>" LOC = "V8" | IOSTANDARD = LVCMOS33 ; +NET "SW_IN<1>" LOC = "U10"| IOSTANDARD = LVCMOS33 ; +NET "SW_IN<2>" LOC = "U8" | IOSTANDARD = LVCMOS33 ; +NET "SW_IN<3>" LOC = "T9" | IOSTANDARD = LVCMOS33 ; + + +######################################### +# Port-Zuweisungen +######################################### +# +# +# SW_IN : in std_logic_vector(3 downto 0); +# +######################################### \ No newline at end of file

powered by: WebSVN 2.1.0

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