LATTICE FPGA ECP5使用DDR3 IP遇到时序和管脚分配问题-Lattice-莱迪斯论坛-FPGA CPLD-ChipDebug

LATTICE FPGA ECP5使用DDR3 IP遇到时序和管脚分配问题

关于ECP5使用DDR3 IP,我建立了一个测试工程,但遇到几个问题想向大伙咨询一下:

1、我在Clarity Designer中添加了DDR3控制器,然后再clarity界面下的planner将DDR3管脚拖到了bank6和bank7中,Generate后,在DDR3的文件中自动生成了以下8个管脚,我想问下这8个PIN是干什么用的。

    OB UVCCIO_D3CTL_eclk_group0_0 (.I(1'b1)) /* synthesis IO_TYPE=UVCCIO LOC=E3 syn_noprune=1 */ ;
    OB UVCCIO_D3CTL_eclk_group0_1 (.I(1'b1)) /* synthesis IO_TYPE=UVCCIO LOC=F5 syn_noprune=1 */ ;
    OB UVCCIO_D3CTL_eclk_group0_2 (.I(1'b1)) /* synthesis IO_TYPE=UVCCIO LOC=K5 syn_noprune=1 */ ;
    OB UVCCIO_D3CTL_eclk_group0_3 (.I(1'b1)) /* synthesis IO_TYPE=UVCCIO LOC=J4 syn_noprune=1 */ ;
    OB UVCCIO_D3CTL_eclk_group0_4 (.I(1'b1)) /* synthesis IO_TYPE=UVCCIO LOC=K3 syn_noprune=1 */ ;
    OB UVCCIO_D3CTL_sclk_group1_0 (.I(1'b1)) /* synthesis IO_TYPE=UVCCIO LOC=M3 syn_noprune=1 */ ;
    OB UVCCIO_D3CTL_sclk_group1_1 (.I(1'b1)) /* synthesis IO_TYPE=UVCCIO LOC=R4 syn_noprune=1 */ ;
    OB UVCCIO_D3CTL_sclk_group1_2 (.I(1'b1)) /* synthesis IO_TYPE=UVCCIO LOC=N5 syn_noprune=1 */ ;

2、关于时序约束,我把 ddr_p_eval\D3CTL\impl\lse\D3CTL_eval.lpf中的内容,复制到我的测试工程的lpf文件中,结果提示错误:

    ERROR - sclk* matches no nets in the design.

我将约束中的sclk修改为sclk,错误可以消除,但是时序分析报告中,sclk的200M时序无法满足:

    FREQUENCY NET "*sclk" 200.000000 MHz PAR_ADJ 40.000000 (2170 errors)

            4096 items scored, 2170 timing errors detected.
Warning: 127.959MHz is the maximum frequency for this preference.

我想问下这个时序该如何处理?

3、管脚分配问题,由于我们使用的管脚分配和IP中自动分配的管脚不一致,所以我对DDR3管脚进行了重新分配,其他控制脚都能正常分配,唯独把 DQ10分配到P1时 (LOCATE COMP “ioDDR_DQ[10]” SITE “P1” 😉 ,综合时会报错:

    ERROR - Based on physical connectivity, comp "ddr_m0/D3CTL_inst/U1_D3CTL/U1_ddr3_sdram_phy/U1_ddr3_dqs_io/u[1].bidi_dqs/inst_dqsbuf" has to be placed at site "LDQS32". However, the site has been occupied by comp ddr_m0/D3CTL_inst/U1_D3CTL/U1_ddr3_sdram_phy/U1_ddr3_dqs_io/u[0].bidi_dqs/inst_dqsbuf. This could be caused by a LOCATE preference..

5D03B23AAC3F780(03-25-21-47-47).png

2F03080DF750563(03-25-21-47-47).png

这个错误该如何处理
PS:查了一下P1对应的是PL35A,而PL35B用于VREF,不知道这里是否有影响。
对比了参考电路,参考电路PL44B用做VREF,而PL44A也可以用于做DQ2

4、关于DDR3 100M差分输入时钟的问题,IO TYPE该选择哪种类型,我看设计参考中,要求“必须是差分可以是LVDS25D也可以是LVTTL15D电平”,但是IO TYPE里面只有LVTTL33 / LVTTL33D,而在IP里自动分配管脚时,给100M分配的IO TYPE是 SSTL15D_I,这个时钟的TYPE到底该如何选?


关于上面问题的第2点,对sclk的时序约束问题,我再加点补充描述:

1、再ddr_p_eval\D3CTL\impl\lse\D3CTL_eval.lpf中,对应的约束语句是:

FREQUENCY NET "sclk*" 200.0 MHz PAR_ADJ 40.0 ;
BLOCK PATH FROM CLKNET "*clkos*" TO CLKNET "sclk*" ;

用这语句综合,会提示

ERROR - sclk* matches no nets in the design.

2、我将这两行语句修改为

FREQUENCY NET "*sclk" 200.0 MHz PAR_ADJ 40.0 ;
BLOCK PATH FROM CLKNET "*clkos*" TO CLKNET "*sclk" ;

则时序无法满足200M。

3、继续将约束修改为:

FREQUENCY NET "ddr_m0/D3CTL_inst/sclk" 200.000000 MHz PAR_ADJ 40.000000 ;
BLOCK PATH FROM CLKNET "clkos" TO CLKNET "ddr_m0/D3CTL_inst/sclk" ;

时序仍然无法满足:

FREQUENCY NET "ddr_m0/D3CTL_inst/sclk" 200.000000 MHz PAR_ADJ 40.000000 (1749 errors)

            4096 items scored, 1749 timing errors detected.
Warning: 124.177MHz is the maximum frequency for this preference.

4、我的测试工程只是做了一个顶层文件,然后放入了DDR3的IP,没有写任何业务语句。
这里的约束不知是哪里写法不对。


我检查了我工程中的Clock net,只有下列几项:
clkos
ddr_m0/D3CTL_inst/U1_D3CTL/U1_ddr3_sdram_phy/U1_ddr3_dqs_io/u[0].bidi_dqs/dqsw
ddr_m0/D3CTL_inst/U1_D3CTL/U1_ddr3_sdram_phy/U1_ddr3_dqs_io/u[1].bidi_dqs/dqsw
ddr_m0/D3CTL_inst/U1_D3CTL/U1_ddr3_sdram_phy/dqsr90[0]
ddr_m0/D3CTL_inst/U1_D3CTL/U1_ddr3_sdram_phy/dqsr90[1]
ddr_m0/D3CTL_inst/U1_D3CTL/U1_ddr3_sdram_phy/dqsr270[0]
ddr_m0/D3CTL_inst/U1_D3CTL/U1_ddr3_sdram_phy/dqsr270[1]
ddr_m0/D3CTL_inst/U1_clocking/clk_in_c
ddr_m0/D3CTL_inst/U1_clocking/clkop
ddr_m0/D3CTL_inst/eclk
ddr_m0/D3CTL_inst/sclk

这里我需要约束的sclk应该就是ddr_m0/D3CTL_inst/sclk 吧?
我已经重新修改了lpf中的约束内容,将sclk修改为加了路径,修改为 ddr_m0/D3CTL_inst/sclk

然后我发现我用GUI添加BLOCK的时候,出现了错误提示:
CD2D5FF7AEDFA76(03-27-13-07-59).png

请登录后发表评论

      • chipdebug的头像-ChipDebugchipdebug徽章-创作大使-ChipDebug等级-LV3-ChipDebug超级版主0