Sign In

Don't have a Xilinx account yet?

  • Choose to receive important news and product information
  • Gain access to special content
  • Personalize your web experience on Xilinx.com

Create Account

Username

Password

Forgot your password?
XClose Panel
Xilinx Home
Reply
Visitor
francois.pawlus@edelabs.com
Posts: 8
Registered: ‎02-16-2012
0

Number of IOB of DDR3 controler for ML605

Hello,

I'm trying to instanciate a DDR3 controler for  ML605 board, to developp an application. I need to access to the DDR3 memory.

 

I used IPcore to build a modele for the SODIMM memory on the ML 605 board, then I instanciate it . I was surprised with errors that occurs in the Map report.

I count pins requiered in the port declaration of my RAM components and that match with 702 as in the error repport.

 

Here is the VHDL code and at the end, an extract of errors.

 

I'm new with FPGA, I'm working on my first application, and I 'm sure I made a mistake somewhere.

 

I'm looking forward responses about my problems.

 

Thanks for your help

Francois

 

 

 

Xilinx Employee
austin
Posts: 3,879
Registered: ‎02-27-2008
0

Re: Number of IOB of DDR3 controler for ML605

[ Edited ]

f,

 

The message is "the design is too big to fit in this device."  Not much there not to understand:  you have used up too many IO pins (IOB's) for the part specified.

 

Perhaps some of those signals do not need IO pins?  Internal signals do not get assigned pins when they connect to other internal signals....

 

 

Austin Lesea
Principal Engineer
Xilinx San Jose
Super Contributor
pcurt
Posts: 189
Registered: ‎04-09-2008
0

Re: Number of IOB of DDR3 controler for ML605

Are you trying to synthesize this as your top level?

 

...
  port(
    sys_clk_p               : in    std_logic;
    sys_clk_n               : in    std_logic;
    clk_ref_p               : in    std_logic;
    clk_ref_n               : in    std_logic;
    ddr3_dq                   : inout std_logic_vector(DQ_WIDTH-1 downto 0);
    ddr3_dm                 : out   std_logic_vector(DM_WIDTH-1 downto 0);
    ddr3_addr                 : out   std_logic_vector(ROW_WIDTH-1 downto 0);
    ddr3_ba                   : out   std_logic_vector(BANK_WIDTH-1 downto 0);
    ddr3_ras_n                : out   std_logic;
    ddr3_cas_n                : out   std_logic;
    ddr3_we_n                 : out   std_logic;
    ddr3_reset_n              : out   std_logic;
    ddr3_cs_n                 : out   std_logic_vector((CS_WIDTH*nCS_PER_RANK)-1 downto 0);
    ddr3_odt                  : out   std_logic_vector((CS_WIDTH*nCS_PER_RANK)-1 downto 0);
    ddr3_cke                  : out   std_logic_vector(CKE_WIDTH-1 downto 0);
    ddr3_dqs_p                : inout std_logic_vector(DQS_WIDTH-1 downto 0);
    ddr3_dqs_n                : inout std_logic_vector(DQS_WIDTH-1 downto 0);
    ddr3_ck_p                 : out   std_logic_vector(CK_WIDTH-1 downto 0);
    ddr3_ck_n                 : out   std_logic_vector(CK_WIDTH-1 downto 0);
    sda                     : inout std_logic;
    scl                     : out   std_logic;
    phy_init_done             : out   std_logic;
    app_wdf_wren              : in    std_logic;
    app_wdf_data              : in    std_logic_vector((4*PAYLOAD_WIDTH)-1 downto 0);
    app_wdf_mask              : in    std_logic_vector((4*PAYLOAD_WIDTH)/8-1 downto 0);
    app_wdf_end               : in    std_logic;
    app_addr                  : in    std_logic_vector(ADDR_WIDTH-1 downto 0);
    app_cmd                   : in    std_logic_vector(2 downto 0);
    app_en                    : in    std_logic;
    app_rdy                   : out   std_logic;
    app_wdf_rdy               : out   std_logic;
    app_rd_data               : out   std_logic_vector((4*PAYLOAD_WIDTH)-1 downto 0);
    app_rd_data_end           : out   std_logic;
    app_rd_data_valid         : out   std_logic;
    ui_clk_sync_rst           : out   std_logic;
    ui_clk                    : out   std_logic;
    sys_rst               : in   std_logic
    );
end entity RAM;
...

 

All of those "app_" ports are the application interface, which connects to your customized FPGA logic.  That would explain why you are using over 700 I/O pins.

 

A DDR3 interface should be 10 or 11 pins per byte lane, maybe 20 or so address, and maybe a dozen control.  So if your SO-DIMM has 8 byte lanes, that's about 120 pins, total.  The ML605 reference design uses 4x 1.5V I/O banks to get the job done.  Many of those 160 pins are repurposed to LEDs and GPIO though, due to MIG constraints on local IBUF clocking logic.

Senior Engineer
EM Photonics, Inc.
Visitor
francois.pawlus@edelabs.com
Posts: 8
Registered: ‎02-16-2012
0

Re: Number of IOB of DDR3 controler for ML605

Thanks for your answers.

 

So I have to remove all ports that are not named ddr3_...... from the port declaration. Only ports in the physical interface have to be declared in the port declaration?

 

Do that imply some other modifications in instanciation templates?

 

Regards

 

Francois

Expert Contributor
eteam00
Posts: 7,505
Registered: ‎07-21-2009
0

Re: Number of IOB of DDR3 controler for ML605

You need to understand the distinction between module ports for internal connections and top-level ports which define input and output pins for the device package.  The MIG-generated design needs a wrapper, and this will prevent the problem you are seeing.

 

-- Bob Elkind

SIGNATURE:
README for newbies is here: http://forums.xilinx.com/t5/New-Users-Forum/README-first-Help-for-new-users/td-p/219369

Summary:
1. Read the manual or user guide. Have you read the manual? Can you find the manual?
2. Search the forums (and search the web) for similar topics.
3. Do not post the same question on multiple forums.
4. Do not post a new topic or question on someone else's thread, start a new thread!
5. Students: Copying code is not the same as learning to design.
6 "It does not work" is not a question which can be answered. Provide useful details (with webpage, datasheet links, please).
7. You are not charged extra fees for comments in your code.
8. I am not paid for forum posts. If I write a good post, then I have been good for nothing.