u@home:~$

ERROR:Bitgen - Unknown PLL_ADV site in pminfo.

生成了ncd文件和source了这两个文件后,就可以复现这个问题。

u@unamed:~$ source ~/Xilinx/10.1/ISE/settings64.sh
u@unamed:~$ source ~/Xilinx/10.1/EDK/settings64.sh

u@unamed:~/prjs/OpenSPARCT1/design/sys/edk/implementation$ bitgen -w -f bitgen.ut system
u@unamed:~/Xilinx/10.1$ grep "in pminfo" -R *
...
Binary file ISE/virtex5/lib/lin64/libBsRain_Bitgen.so matches
...

in pminfo定位到这个so里。

0x00007ff2755f9820  0x00007ff2756182d8  Yes (*)     /home/u/Xilinx/10.1/ISE/virtex5/lib/lin64/libBsRain_Bitgen.so


(gdb) info functions \w*plladv\w*
All functions matching regular expression "\w*plladv\w*":

Non-debugging symbols:
0x00007ff2755f90a8  BsRain_BfdTile::plladvpminfo(Bs_BfdCell*, char const*, char const*, char const*, char const*)@plt
0x00007ff275600b00  BsRain_BfdTile::plladvpminfo(Bs_BfdCell*, char const*, char const*, char const*, char const*)


(gdb) break *0x00007ff275600b00
Breakpoint 1 at 0x7ff275600b00
(gdb) c
Continuing.

Breakpoint 1, 0x00007ff275600b00 in BsRain_BfdTile::plladvpminfo(Bs_BfdCell*, char const*, char const*, char const*, char const*) ()
   from /home/u/Xilinx/10.1/ISE/virtex5/lib/lin64/libBsRain_Bitgen.so
(gdb)

(gdb) info reg
rax            0x0                 0
rbx            0x3cd9a450          1020896336
rcx            0x3d29ca70          1026148976
rdx            0x3d29ca50          1026148944
rsi            0x3cda6d60          1020947808
rdi            0x3cd9a450          1020896336
rbp            0x3d29ca50          0x3d29ca50
rsp            0x7ffe38da4f68      0x7ffe38da4f68
r8             0x3d29ca90          1026149008
r9             0x3d29cab0          1026149040
r10            0x7ff2755f2e54      140679327985236
r11            0x7ff275600b00      140679328041728
r12            0x3d29cab0          1026149040
r13            0x3d29ca90          1026149008
r14            0x3d29ca70          1026148976
r15            0x3cda6d60          1020947808
rip            0x7ff275600b00      0x7ff275600b00 <BsRain_BfdTile::plladvpminfo(Bs_BfdCell*, char const*, char const*, char const*, char const*)>
eflags         0x202               [ IF ]
cs             0x33                51
ss             0x2b                43
ds             0x0                 0
es             0x0                 0
fs             0x0                 0
gs             0x0                 0

(gdb) x/50c 0x3d29ca50
0x3d29ca50:	80 'P'	76 'L'	76 'L'	95 '_'	65 'A'	68 'D'	86 'V'	95 '_'
0x3d29ca58:	83 'S'	73 'I'	84 'T'	69 'E'	0 '\000'	127 '\177'	0 '\000'	0 '\000'
0x3d29ca60:	0 '\000'	0 '\000'	0 '\000'	0 '\000'	0 '\000'	0 '\000'	0 '\000'	0 '\000'
0x3d29ca68:	33 '!'	0 '\000'	0 '\000'	0 '\000'	0 '\000'	0 '\000'	0 '\000'	0 '\000'
0x3d29ca70:	73 'I'	78 'N'	83 'S'	84 'T'	48 '0'	0 '\000'	0 '\000'	0 '\000'
0x3d29ca78:	-32 '\340'	-5 '\373'	-96 '\240'	118 'v'	-14 '\362'	127 '\177'	0 '\000'	0 '\000'
0x3d29ca80:	0 '\000'	0 '\000'
(gdb) x/30c 0x3d29ca90
0x3d29ca90:	87 'W'	79 'O'	82 'R'	68 'D'	48 '0'	0 '\000'	0 '\000'	0 '\000'
0x3d29ca98:	-32 '\340'	-5 '\373'	-96 '\240'	118 'v'	-14 '\362'	127 '\177'	0 '\000'	0 '\000'
0x3d29caa0:	0 '\000'	0 '\000'	0 '\000'	0 '\000'	0 '\000'	0 '\000'	0 '\000'	0 '\000'
0x3d29caa8:	33 '!'	0 '\000'	0 '\000'	0 '\000'	0 '\000'	0 '\000'
(gdb) x/20c 0x3d29cab0
0x3d29cab0:	66 'B'	73 'I'	84 'T'	49 '1'	0 '\000'	127 '\177'	0 '\000'	0 '\000'
0x3d29cab8:	-32 '\340'	-5 '\373'	-96 '\240'	118 'v'	-14 '\362'	127 '\177'	0 '\000'	0 '\000'
0x3d29cac0:	0 '\000'	0 '\000'	0 '\000'	0 '\000'
(gdb) x/20c 0x3d29cab0
0x3d29cab0:	66 'B'	73 'I'	84 'T'	49 '1'	0 '\000'	127 '\177'	0 '\000'	0 '\000'
0x3d29cab8:	-32 '\340'	-5 '\373'	-96 '\240'	118 'v'	-14 '\362'	127 '\177'	0 '\000'	0 '\000'
0x3d29cac0:	0 '\000'	0 '\000'	0 '\000'	0 '\000'



=> 0x00007ff275600d46 <_ZN14BsRain_BfdTile12plladvpminfoEP10Bs_BfdCellPKcS3_S3_S3_+582>:	4a 8d b4 36 b0 08 00 00	lea    0x8b0(%rsi,%r14,1),%rsi

(gdb) info reg
rax            0x0                 0
rbx            0x0                 0
rcx            0x7                 7
rdx            0x0                 0
rsi            0x3cd9ad00          1020898560
rdi            0x58797c4c          1484356684
rbp            0x58797c4c          0x58797c4c
rsp            0x7ffe38d9f5b0      0x7ffe38d9f5b0
r8             0x6                 6
r9             0x11                17
r10            0x7ff2756194bc      140679328142524
r11            0x3cd9b8ac          1020901548
r12            0x3                 3
r13            0x6                 6
r14            0x3cd9a450          1020896336
r15            0x4                 4
rip            0x7ff275600d4e      0x7ff275600d4e <BsRain_BfdTile::plladvpminfo(Bs_BfdCell*, char const*, char const*, char const*, char const*)+590>
eflags         0x206               [ PF IF ]
cs             0x33                51
ss             0x2b                43
ds             0x0                 0
es             0x0                 0
fs             0x0                 0
gs             0x0                 0
(gdb) x/20c 0x3cd9ad00
0x3cd9ad00:	80 'P'	76 'L'	76 'L'	95 '_'	65 'A'	68 'D'	86 'V'	95 '_'
0x3cd9ad08:	88 'X'	48 '0'	89 'Y'	48 '0'	0 '\000'	0 '\000'	0 '\000'	0 '\000'
0x3cd9ad10:	0 '\000'	0 '\000'	0 '\000'	0 '\000'
(gdb) 

跟进去比较函数Compare,最终调用strcmp。 rdi也就是第二个参数,字符串是空。但是4个字节后就是字符串了,是ADV_X0Y0。

(gdb) si
0x00007ff2755f87e8 in UT_STR::Compare(char const*, char const*)@plt () from /home/u/Xilinx/10.1/ISE/virtex5/lib/lin64/libBsRain_Bitgen.so
=> 0x00007ff2755f87e8 <_ZN6UT_STR7CompareEPKcS1_@plt+0>:	ff 25 f2 7d 12 00	jmpq   *0x127df2(%rip)        # 0x7ff2757205e0 <_ZN6UT_STR7CompareEPKcS1_@got.plt>
(gdb) ni
0x00007ff27c50ed80 in UT_STR::Compare(char const*, char const*) () from /home/u/Xilinx/10.1/ISE/lib/lin64/libPortability.so
=> 0x00007ff27c50ed80 <_ZN6UT_STR7CompareEPKcS1_+0>:	e9 53 09 f8 ff	jmpq   0x7ff27c48f6d8 <strcmp@plt>
(gdb) ni
0x00007ff27c48f6d8 in strcmp@plt () from /home/u/Xilinx/10.1/ISE/lib/lin64/libPortability.so
=> 0x00007ff27c48f6d8 <strcmp@plt+0>:	ff 25 62 6c 1b 00	jmpq   *0x1b6c62(%rip)        # 0x7ff27c646340 <strcmp@got.plt>
(gdb) ni
__strcmp_avx2 () at ../sysdeps/x86_64/multiarch/strcmp-avx2.S:79
79	../sysdeps/x86_64/multiarch/strcmp-avx2.S: No such file or directory.
=> 0x00007ff2769a6ae0 <__strcmp_avx2+0>:	f3 0f 1e fa	endbr64 
(gdb) ni
92	in ../sysdeps/x86_64/multiarch/strcmp-avx2.S
=> 0x00007ff2769a6ae4 <__strcmp_avx2+4>:	89 f8	mov    %edi,%eax
(gdb) info reg
rax            0x0                 0
rbx            0x0                 0
rcx            0x7                 7
rdx            0x0                 0
rsi            0x3cd9ad00          1020898560
rdi            0x58797c4c          1484356684
rbp            0x58797c4c          0x58797c4c
rsp            0x7ffe38d9f5a8      0x7ffe38d9f5a8
r8             0x6                 6
r9             0x11                17
r10            0x7ff2756194bc      140679328142524
r11            0x3cd9b8ac          1020901548
r12            0x3                 3
r13            0x6                 6
r14            0x3cd9a450          1020896336
r15            0x4                 4
rip            0x7ff2769a6ae4      0x7ff2769a6ae4 <__strcmp_avx2+4>
eflags         0x206               [ PF IF ]
cs             0x33                51
ss             0x2b                43
ds             0x0                 0
es             0x0                 0
fs             0x0                 0
gs             0x0                 0
(gdb) x/20c 0x3cd9ad00
0x3cd9ad00:	80 'P'	76 'L'	76 'L'	95 '_'	65 'A'	68 'D'	86 'V'	95 '_'
0x3cd9ad08:	88 'X'	48 '0'	89 'Y'	48 '0'	0 '\000'	0 '\000'	0 '\000'	0 '\000'
0x3cd9ad10:	0 '\000'	0 '\000'	0 '\000'	0 '\000'
(gdb) x/20c 0x58797c4c
0x58797c4c:	0 '\000'	0 '\000'	0 '\000'	0 '\000'	65 'A'	68 'D'	86 'V'	95 '_'
0x58797c54:	88 'X'	48 '0'	89 'Y'	48 '0'	0 '\000'	77 'M'	0 '\000'	0 '\000'
0x58797c5c:	95 '_'	79 'O'	78 'N'	95 '_'

而要找的字符是PLL_ADV_X0Y0,前面四个字符正好可以放PLL_。不知道是不是这4个字节被无意间清空了。

下面跟GetName()

0x00007ff279d66a50 in Rf_Cell::GetName() const () from /home/u/Xilinx/10.1/ISE/lib/lin64/libRf_FacadeBase.so

这个GetName()看上去没问题,因为后来看到得到的这个字符串PLL_ADV_X0Y0是完整的。

在调用了这个 Port::StringBase<char>::~StringBase((StringBase<char> *)&local_48); _ZN4Port10StringBaseIcED1Ev@plt

String的析构函数?

这个以后开头四个字节就清空了。 是不是可以nop这个函数?

(gdb) 
0x00007ff275600d21 in BsRain_BfdTile::plladvpminfo(Bs_BfdCell*, char const*, char const*, char const*, char const*) ()
   from /home/u/Xilinx/10.1/ISE/virtex5/lib/lin64/libBsRain_Bitgen.so
=> 0x00007ff275600d21 <_ZN14BsRain_BfdTile12plladvpminfoEP10Bs_BfdCellPKcS3_S3_S3_+545>:	e8 d2 8a ff ff	callq  0x7ff2755f97f8 <_ZN4Port10StringBaseIcED1Ev@plt>
(gdb) info reg
rax            0x7ffe38da4f20      140729852251936
rbx            0x7ffe38da4f20      140729852251936
rcx            0x305930585f5644    13608863058056772
rdx            0xd                 13
rsi            0x5f5644415f4c4c50  6869753329162669136
rdi            0x7ffe38da4f20      140729852251936
rbp            0x5878bfdc          0x5878bfdc
rsp            0x7ffe38d9f5b0      0x7ffe38d9f5b0
r8             0x5878bfd0          1484308432
r9             0x3d29cce0          1026149600
r10            0x5                 5
r11            0x7                 7
r12            0x3d29cce0          1026149600
r13            0x3d29ccc0          1026149568
r14            0x3cd9a450          1020896336
r15            0x3cda6d60          1020947808
rip            0x7ff275600d21      0x7ff275600d21 <BsRain_BfdTile::plladvpminfo(Bs_BfdCell*, char const*, char const*, char const*, char const*)+545>
eflags         0x202               [ IF ]
cs             0x33                51
ss             0x2b                43
ds             0x0                 0
es             0x0                 0
fs             0x0                 0
gs             0x0                 0
(gdb) x/20c 0x5878bfdc
0x5878bfdc:	80 'P'	76 'L'	76 'L'	95 '_'	65 'A'	68 'D'	86 'V'	95 '_'
0x5878bfe4:	88 'X'	48 '0'	89 'Y'	48 '0'	0 '\000'	0 '\000'	0 '\000'	0 '\000'
0x5878bfec:	0 '\000'	0 '\000'	0 '\000'	0 '\000'
(gdb) ni
0x00007ff275600d26 in BsRain_BfdTile::plladvpminfo(Bs_BfdCell*, char const*, char const*, char const*, char const*) ()
   from /home/u/Xilinx/10.1/ISE/virtex5/lib/lin64/libBsRain_Bitgen.so
=> 0x00007ff275600d26 <_ZN14BsRain_BfdTile12plladvpminfoEP10Bs_BfdCellPKcS3_S3_S3_+550>:	45 8b ae ac 08 00 00	mov    0x8ac(%r14),%r13d
(gdb) x/20c 0x5878bfdc
0x5878bfdc:	0 '\000'	0 '\000'	0 '\000'	0 '\000'	65 'A'	68 'D'	86 'V'	95 '_'
0x5878bfe4:	88 'X'	48 '0'	89 'Y'	48 '0'	0 '\000'	0 '\000'	0 '\000'	0 '\000'
0x5878bfec:	0 '\000'	0 '\000'	0 '\000'	0 '\000'
(gdb) 

把这句call给nop掉, ERROR:Bitgen - Unknown PLL_ADV site in pminfo. 这个错误就没再出现。

INFO:PhysDesignRules:1503 - Dangling pins on
   block:<iop_fpga_0/iop_fpga_0/sparc0/mul/dpath/mulcore/Mmult_par3_mult00001>:<
   DSP48E_DSP48E>.  When DSP48E attribute AREG is set 0 the CEA1 and CEA2 pins
   should be tied GND to save power.
INFO:PhysDesignRules:1503 - Dangling pins on
   block:<iop_fpga_0/iop_fpga_0/sparc0/mul/dpath/mulcore/Mmult_par3_mult00003>:<
   DSP48E_DSP48E>.  When DSP48E attribute AREG is set 0 the CEA1 and CEA2 pins
   should be tied GND to save power.
DRC detected 0 errors and 16 warnings.  Please see the previously displayed
individual error or warning messages for more details.
Creating bit map...
Saving bit stream in "system.bit".
Bitstream generation is complete.
u@unamed:~/prjs/OpenSPARCT1/design/sys/edk/implementation$