61031145 ERROR - Cannot place PIO comp "MDP_IN_HS" on PIO site "F5/PB6C" (I/O bank 2).

用户的问题总是千奇百怪,十之八九就是用户使用导致的。且看如下截图

看起来是软件的问题,导致一些IO无法布过去,但是不然。用户代码并不多,所以隔离定位还是相对比较好定位的。通过分析简化后的代码贴出

module mipi_lvds_trans (
MDP_IN_HS,
MCP_IN_HS,
test_out,
MDP_O_1,
MDP_O_2
);



input wire MDP_IN_HS;
input wire MCP_IN_HS;

output wire MDP_O_1;
output wire MDP_O_2;
output wire[7:0] test_out;

 

wire mid_clk;
wire [7:0] dat_mid;
wire [1:0]ser_o;


assign test_out=dat_mid;
assign MDP_O_1=ser_o[0];
assign MDP_O_2=ser_o[1];

wire mid_clk;

/***********************************************

                    IDDRX4

***********************************************/

otof_trans INST_1 (
.alignwd(1'b0),
.clk(MCP_IN_HS),
.clk_s( ),
.init(1'b1),
.reset(1'b1 ),
.rx_ready(rx_ready),
.sclk(mid_clk),
.datain(MDP_IN_HS),
.q(dat_mid)
);

 

gear2 INST_2 (
.clk_s(mid_clk ),
.clkop(mid_clk ),
.clkos(mid_clk ),
.clkout(MCP1_O ),
.lock_chk(tx_r ),
.reset(1'b1 ),
.sclk(sclk_o ),
.tx_ready(tx_r ),
.dataout(dat_mid ),
.dout(ser_o)
);
/***********************************************

                    ODDRX4

***********************************************/

 

/***********************************************

                    以下是约束文件

***********************************************/

LOCATE COMP "MDP_O_2" SITE "D4" ;
LOCATE COMP "MDP_O_1" SITE "A6" ;
LOCATE COMP "MCP_IN_HS" SITE "E3" ;
IOBUF PORT "MDP_O_1" IO_TYPE=LVDS25 ;
IOBUF PORT "MDP_O_2" IO_TYPE=LVDS25 ;
LOCATE COMP "MDP_IN_HS" SITE "f5" ;
IOBUF PORT "MCP_IN_HS" IO_TYPE=LVDS25 ;
IOBUF PORT "MDP_IN_HS" IO_TYPE=LVDS25 ;


以上代码隔离的只剩两个IP了,再做一次隔离就知道问题出在哪个IP了。先隔离ODDRX4,PAR一遍,发现问题消失了,说明问题就出在ODDRX4。我们去看看UG是怎么说的,如下截图

对比以下客户是怎么用这个IP的

gear2 INST_2 (
.clk_s(mid_clk ),
.clkop(mid_clk ),
.clkos(mid_clk ),
.clkout(MCP1_O ),
.lock_chk(tx_r ),
.reset(1'b1 ),
.sclk(sclk_o ),
.tx_ready(tx_r ),
.dataout(dat_mid ),
.dout(ser_o))问题一看就明了了,用户没有用PLL去移相,.clkop(mid_clk ), .clkos(mid_clk ),这尼玛是相差90度相位的时钟(上图截图手册说了),用户既然给一样的时钟进去,你让我工具上天啊---也布线不过去啊啊。解决的办法有两个,一个外部加PLL解决,一个生成IP的时候,自动加入PLL。对后者截屏,如下

修改过后再去PAR,一切就正常了。

但是这样的方式是有局限性的,因为相位固定死了90度,假如数据还是踩偏移了怎么办呢,就要通过底层DELAY去做延时了,这样貌似就麻烦起来了。所以用户自己调用PLL是良策,这样就可以任意去调节相位了----------说说另外一个问题

 

62001005 ERROR - Design is unrouteable due to invalid placement or locked signals.

 

这个问题是怎么来的呢----是没有加管脚约束的时候PAR报出来的-------解决办法如上述。

 

 

posted on 2017-03-19 22:36  小诸葛叶  阅读(737)  评论(0编辑  收藏  举报