关于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..
这个错误该如何处理
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的时候,出现了错误提示:
自动生成的这几个PIN,可以不用理会。
将lpf中的约束拷过来时时要注意约束的层次结构跟你的工程相匹配,除了修正层次,其余的语未能不要修改。比如你提到的原工程的约束sclk*表示是的是任意以sclk开头的路径,但这里你没有指定层级,你错误地改成了*sclk是所有以sclk结尾的,两者含意完全不一样,所以在不熟悉语法的情况下不要修改语法,保修改层次。附件有语法文档。
我看这个管脚报的错误是由于器件物理结构决定的,所以锁定不了,这个除了换别的管脚没有办法解决。
DDR3可以不用差分时钟,管脚电平取决于晶振所在的BANK。单端晶振示例如下:
这种泛约束,GUI做不了,你可以先用GUI找到路径,然后手动去LPF里面改成泛约束。
@fllowWinter,你这个问题还是另开一个主题吧,这样方便别人回答你的问题,也方便遇到同样问题的人更容易找到解答。
不好意思, 我导入DEMO CODE中的DDR IP,发现因为FPGA的型号不一样,所以DDR IP无法查看和修改里面的配置。 DEMO CODE的型号为LEF5UM系列,而我们使用的FPGA型号为LEF5U系列。 我在Lattice IP Server中重新下载并安装了DDR3控制器的3.1版本,经测试操作发现,当FPGA型号选择为LEF5U-25时,DDR3的IP无法创建,只有当FPGA型号选择为LEF5UM系列时,DDR3的IP才能创建成功。 请问,如果我在LEF5UM里面,将DDR3的IP创建并配置好参数,然后导入到LEF5U-25中