从连接到PCIe集成端点的逻辑读取寄存器时,我遇到了一些间歇性问题。我使用的是virtex ultrascale board,寄存器总线映射到bar 0.我大部分时间都没有问题地执行32位读写操作,但是即使我能看到一些寄存器读取,我仍然会得到错误的答案这些转移的cc总线和数据似乎是正确的:
来自ILA核心输出:
1=s_axis_cc_tkeep
2=s_axis_cc_tdata
3=s_axis_cc_tlast
4=s_axis_cc_tready
5=s_axis_cc_tvalid
0f 000000000000000000000000000000000000001c000000008018000100040026 1 1 1
0f 000000000000000000000000000000000180c200000000008018000100040027 1 1 1
0f 0000000000000000000000000000000000000008000000008018000100040028 1 1 1
0f 0000000000000000000000000000000000000100000000008018000100040029 1 1 1
0f 000000000000000000000000000000000000010000000000801800010004002a 1 1 1
0f 000000000000000000000000000000000000000000000000801800010004002b 1 1 1
我读到寄存器时得到的答案是:
165, 100
166, 0 => hex(166&0x3f) = 0x26
167, 0 => hex(167&0x3f) = 0x27
168, 0 => hex(168&0x3f) = 0x28
169, 0 => hex(169&0x3f) = 0x29
170, 100 => hex(170&0x3f) = 0x2a
171, 0 => hex(171&0x3f) = 0x2b
所以我不知道的是为什么170处的转移有效,但其他人返回0.我看不到s_axis_cc总线上的任何明显信息。有什么想法吗?