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$