|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 cuizehan 于 2010-8-15 11:23 编辑
; S% O5 Y6 I, N0 z2 T
& f+ Y- \# k1 C$ ?" W1 u+ t我用的xilinx v6-lx130t-ff783-2的FPGA,来实现一个PCIe设备,整个系统的结构如下图
6 T, L# L1 J" z- x
; ?) i$ V, n0 r
FPGA所在的板卡通过一根Cable连到PCIe转接卡,再通过金手指插到主机的PCIe插槽。
" m5 q4 ?- `# ~5 W( t8 t: }+ Y+ N+ B/ }6 @
上图中只画出了PERST#信号的拓扑结构。
; s q" ~% |, O8 _+ G6 y# y: k6 L, f1 p3 z
, N) ^' ^9 x7 R3 [& I
正常的PCIe设备启动过程如下图
" G+ S- V+ J( O7 t* V$ z4 C
4 \6 v6 n* O4 x, X6 O
5 T+ N4 }1 @0 h. E* B: K: x; A预期的正常情况是:& M' {% p* l7 m1 U) R" a' x N
8 C* E5 m$ N6 ?
1. 设备卡先加电,因此电源一直处于稳定状态,初始时PERST#被上拉到高电平。9 ?6 W/ o% V' q. K: S# \: E, R5 e
2. 启动主机,在主机POST过程中,PERST#被拉低一段时间,使所有的PCIe设备复位。
4 t: e3 s3 y: \4 V& {0 R 3. 经过一段时间之后,大于tPVPERL,设备完成复位,准备好传输数据,主机撤去PERST#,设备开始工作。6 ~8 g, D) S% _* Z
{! t7 z0 x; j. W
, X- `; g7 h6 y1 z9 u3 C
但是现在的情况是:7 j: a0 b9 W* I/ ~) Q; C- G3 p0 U
1 g' k0 h; \% G8 _8 y! L 1. 如果设备卡不加电,则主机能够正常启动。& p9 G! E+ L+ |1 x( k4 c1 q
2. 如果设备卡加电,则主机不能启动,显示器没信号,cpu、显卡风扇转速都很低,没有出现滴滴响声。
9 P2 {& ?. D7 w [
) P3 o' u3 {7 q, y& E
! x2 C# G" r; W: O$ n3 S我通过chipscope抓取了PERST#信号,发现设备卡加电时该信号时高时低,持续时间都不会超过1ms。. B* Y8 a8 I" C" M q- l+ t# R
) b, x- }, f# C: u
我做了如下分析:' L# P4 N3 q8 D6 Q5 o; Y
; z5 ~+ ?% Z3 S5 J! z
1. 通过万用表测量,发现主机上所有的PCI、PCIe插槽的PERST#引脚都是相连的。, F" _& x2 _- V$ h# ?9 g/ o9 {( o
2. 因此正是PERST#信号的时高时低,使得主机的所有PCIe设备都不能正常工作,包括显卡,因此显示器会没信号,进而不能启动。
3 G k! ~! c1 R7 h0 T0 z7 n" I3 Z9 s h0 Y4 S( c v4 [
但是我不知道是什么原因造成了PERST#信号的时高时低,从系统的拓扑结构来看,当主机撤去PERST#的低电平时,PERST#应该被上拉到高电平才对。% I. C3 t: ]7 Q1 N p
5 \! N7 G- F- b2 h) S8 Q; N: c+ C图中的3.3V - 2.5V电平转换器用的TXB0108芯片,参考的是xilinx ml605的原理图,因为v6的pcie核PERST#要求是2.5V电平的。 |
|