找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 4247|回复: 11
打印 上一主题 下一主题

FPGA实现PCIe设备时的一个问题【图已补上】

[复制链接]

17

主题

48

帖子

-8915

积分

未知游客(0)

积分
-8915
跳转到指定楼层
1#
发表于 2010-8-14 23:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 cuizehan 于 2010-8-15 11:22 编辑
; C# |5 H2 s$ w0 H0 o7 F4 t% L# J2 ?- [& g% Q
我用的xilinx v6-lx130t-ff783-2的FPGA,来实现一个PCIe设备,整个系统的结构如下图
$ U$ S& j1 f. Z
3 X+ S2 m! h& s+ e( n: l5 u
! j4 Z9 s) h% H' ~! ZFPGA所在的板卡通过一根Cable连到PCIe转接卡,再通过金手指插到主机的PCIe插槽。0 {+ g/ Y  i" }$ U6 b$ w' ]
+ c# N$ O5 e3 z( P9 `
上图中只画出了PERST#信号的拓扑结构
; W# }# U, T, A( w/ u4 [3 }. n7 Y$ e: V4 _& B6 d5 x) [) v
. w4 m  \9 Q7 `
正常的PCIe设备启动过程如下图4 ]' ^! t$ C+ N) h/ L  h
  
( y6 Q5 _* k' a( A$ p. c/ D- u4 J
8 V* x0 `7 m6 q7 i3 H1 o& ~预期的正常情况是:
$ n( W, t5 r) B  t8 r" L% O3 K1 G/ Y: {
         1. 设备卡先加电,因此电源一直处于稳定状态,初始时PERST#被上拉到高电平。6 \* r5 F' c( b: l; S6 O9 I
         2. 启动主机,在主机POST过程中,PERST#被拉低一段时间,使所有的PCIe设备复位。
6 K8 W# Z5 G6 P0 p& w         3. 经过一段时间之后,大于tPVPERL,设备完成复位,准备好传输数据,主机撤去PERST#,设备开始工作。- i0 Z5 V. t3 V% R# W8 l3 U
2 B: Z- I# ?" b# B/ H, A

* z/ K4 J3 Z6 c, B1 @但是现在的情况是:
  {( _/ T6 r' X: N9 z% l) T
! @' t' Y; ~4 T3 y9 c7 I, A" e: `         1. 如果设备卡不加电,则主机能够正常启动。8 V1 Z4 X+ V3 T- f! o6 }' ?9 I% Y
         2. 如果设备卡加电,则主机不能启动,显示器没信号,cpu、显卡风扇转速都很低,没有出现滴滴响声。
. c* U5 i/ M! T( @8 m: A  ]/ v1 k
2 I4 L7 O, u" r' e, b
6 v0 c2 B( }: u我通过chipscope抓取了PERST#信号,发现设备卡加电时该信号时高时低,持续时间都不会超过1ms。/ ]# T6 s% i, A" p. j
; _3 D9 N( \. v
我做了如下分析:
* ?( r+ t7 y1 z7 N; z, D0 ~( V. e' S% U. y0 G1 K$ O
         1. 通过万用表测量,发现主机上所有的PCI、PCIe插槽的PERST#引脚都是相连的。2 M* [0 d# C+ D$ I
         2. 因此正是PERST#信号的时高时低,使得主机的所有PCIe设备都不能正常工作,包括显卡,因此显示器会没信号,进而不能启动。1 g2 V: s: o# v" L, X
5 z2 B" v: J6 \( e" X. ~1 c
但是我不知道是什么原因造成了PERST#信号的时高时低,从系统的拓扑结构来看,当主机撤去PERST#的低电平时,PERST#应该被上拉到高电平才对。2 c" ^1 A4 ?% {  H4 O" y
) W6 |+ d$ p' A
图中的3.3V - 2.5V电平转换器用的TXB0108芯片,参考的是xilinx ml605的原理图,因为v6的pcie核PERST#要求是2.5V电平的。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

20

主题

445

帖子

1316

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1316
2#
发表于 2010-8-15 00:46 | 只看该作者
图形我看不到,不过PERST#时高时低,看情况是主机的电源在进行保护,导致PERST#上拉电源在复位,你看看你的Pcie卡的pin map是否有短路的,电源和地。
2 u3 k! G( F/ ?4 [" |" g
  s" b( r9 k6 d) y6 T; K或者是你看看你设计的V6子卡的pcie连接器的3.3V/12V的电源情况,通常是主板给子卡供电,但是你设计的子卡的3.3V/12V的pin上可能有电,是来自你子卡自身的电源模块,理解吗?
" E5 w1 i0 Y4 Q7 k  s1 \: P8 i& X* |) G! m6 E, u
这样3.3V/12V相当于2个源,主板的电源进入保护状态了。

17

主题

48

帖子

-8915

积分

未知游客(0)

积分
-8915
3#
 楼主| 发表于 2010-8-15 10:33 | 只看该作者
图形我看不到,不过PERST#时高时低,看情况是主机的电源在进行保护,导致PERST#上拉电源在复位,你看看你的 ...
2 U6 ^& P% @! @: A* Wliqiangln 发表于 2010-8-15 00:46

* \! @3 m3 _1 J2 _$ m* F& ~4 T4 `: G9 t- `# F# z

" o/ A- t) X% ~9 j: [    PCIe连接器并不传送电源,同时PCIe转接卡和FPGA子卡都采用外部电源供电。& V# _3 N6 m% r, T1 A# N0 l$ l7 Y

; _6 C/ _4 l- }5 C9 ~3 R' g    PCIe插槽上的3.3V/12V电源在接到PCIe转接卡的金手指时就做了开路,因此应该不存在3.3V/12V有两个源的情况。2 s# [( Y0 g+ W+ V5 o* l

3 z' S0 N; a# @4 z% {3 C- G9 D1 V这是PERST的拓扑结构图,再补一下( B3 N4 M  o8 u! o8 Z

17

主题

48

帖子

-8915

积分

未知游客(0)

积分
-8915
4#
 楼主| 发表于 2010-8-15 11:49 | 只看该作者
回复 2# liqiangln . F; v0 ]  a/ S4 J( k: O4 `
( j9 u5 R* U+ b% o/ S* I! D

) r3 y" h8 _' N+ f7 r9 d8 L    我怀疑是FPGA子卡的存在干扰了PERST#的正常时序,
, k# D2 K/ P6 }. g
* A' I/ I$ z7 `+ c% Q# E3 |    现在把子卡上4.7K的上拉电阻去掉后,问题还是存在。

20

主题

445

帖子

1316

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1316
5#
发表于 2010-8-15 16:37 | 只看该作者
其实在电路中说的信号完整性,电源完整性,干扰,仅仅是针对性能谈的,对于基本功能实现没那么大的危害,不要神化了,还是要从基本的方式解决问题。
5 D% m. b! ^3 e: c+ E. J比如说你的外部电源和你的主机是否是共地,是否有同样的参考点。
1 ]4 D$ n0 i# ]$ v/ C5 L8 X, f7 Y* r7 B; p5 R
比如说你FPGA(设备卡)的3.3V和主机的3.3V是什么关系,因为你把设备卡链接上去的时候,这个3.3V就传递到主机卡上了,如果这个3.3V先于主机3.3V电源上电,那么可能造成主机的3.3V电源模块没启动。

17

主题

48

帖子

-8915

积分

未知游客(0)

积分
-8915
6#
 楼主| 发表于 2010-8-15 16:38 | 只看该作者
又做了一个实验:
; M% a; _6 U5 w
; G# J. q9 r6 P$ a/ H; a' h    把4.7K电阻焊上,把PCIe转接卡上的0R电阻换成开关。0 i% Q; o6 z) D: P
' ^" [: t/ U1 C& p* u
发现:& I$ @+ o$ y$ V& ]3 a, q9 K

5 a" a/ m' N3 [9 E8 Z! u+ ?4 }   若开关断开,则FPGA侧PERST#为高电平;
+ ^' Z: G6 x% Z: A   若把开关合上,则PERST#被拉低,FPGA侧PERST#为低电平;
4 a! [- C6 S! w6 ?3 a! m- q" k8 R& z   若此时再把开关断开,则理论上PERST#应该被拉高,但实际中FPGA侧PERST#为低电平,3.3V-2.5V电平转换器的3.3V一端的PERST#电压为1.57V,2.5V一端为0.2V。
% b( M8 {# Y# ?/ [* }- C2 j6 K+ ^6 ~7 [5 R
推断:7 I# m. [% Z, J; ?- u# x
& x* s, C! C5 }: Y$ L
    可能是电平转换器的输入阻抗不够大,导致上拉能力不够,换一个470R的上拉电阻试一下。

17

主题

48

帖子

-8915

积分

未知游客(0)

积分
-8915
7#
 楼主| 发表于 2010-8-15 16:40 | 只看该作者
本帖最后由 cuizehan 于 2010-8-15 16:42 编辑 1 N( u! p' _. A7 F# a0 h- r3 x
- O7 x( i, o" J
回复 5# liqiangln # v( u! x# ]( V7 Q6 s

7 R' b, q7 f. z. u, i5 ]$ q+ z  Y: [. u' I0 Q
    主机的3.3V电源和设备卡的3.3V电源是隔离的,分别由不同的电源模块产生,且中间没有通路。" ~$ V* i( [% H9 G9 v/ u# F
    参考地是一样的。

17

主题

48

帖子

-8915

积分

未知游客(0)

积分
-8915
8#
 楼主| 发表于 2010-8-15 17:12 | 只看该作者
回复 6# cuizehan 2 t. z. B7 Z/ t& ^  K* P
* x2 s+ B' o  F2 A) {' Z7 s

' q) ~7 b2 m7 c& b    换了470R上拉电阻后,通过开关手工复位,主机可以正常启动,并且也检测到PCIe设备了。
2 {/ F6 f5 w2 E1 c) u% I4 U' e. f6 c$ `4 E
    虽然可以了,但是需要手工操作。下面把开关换回0R电阻再试一试。

17

主题

48

帖子

-8915

积分

未知游客(0)

积分
-8915
9#
 楼主| 发表于 2010-8-16 08:57 | 只看该作者
通过开关手工复位,和0R电阻,主机都可以正常启动,并且通过PCItree都检测到了该设备。
5 m( Z2 \6 C) ~7 O5 Z" T' g6 h& d+ l
但是,用0R电阻(由主机来实现复位时),PCI配置空间里的BAR寄存器是0,没有分配空间。
  g1 E+ q+ W3 t- p! x) t- w2 u; L1 t6 w$ @. {6 ]6 V; b- {1 d
通过手工开合开关(手工复位),PCI配置空间的BAR寄存器非0.' x+ M; v' |) j7 }$ r
2 S" P# {  k! a
还不知道是什么原因造成了这个现象。

20

主题

445

帖子

1316

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1316
10#
发表于 2010-8-16 10:44 | 只看该作者
你也可以把3.3Vto2.5V的模块,跨过,用分压电阻来实现,看看是否有改善。: D" j3 Z! T: C: j2 y- w
; g. b+ I6 B" ?3 f) k4 \2 W
PCIe金手指上出来RST以外,还有在位检测线号我记得也是默认上拉的,你看看是如何处理的?+ n: u/ ^- C3 O1 T5 L! T* b3 k* E
, y/ G0 {: u$ _# y% p. t4 v
如果你的地址空间没有分配,还是不能工作。

17

主题

48

帖子

-8915

积分

未知游客(0)

积分
-8915
11#
 楼主| 发表于 2010-8-17 15:41 | 只看该作者
回复 10# liqiangln 2 A. V2 W4 E" ]

5 S" B- r5 ?" q  W' {! o) c$ S, R% Y: H
    把3.3V-2.5V模块跨过,这个我还没想好怎么弄,主要是焊接上不好实现。
2 P+ }7 |4 g( O
  r8 i& c! y! B4 J* N    在位检测信号,, L8 G% h" B4 J% }3 |: d
          按照PCIe CEM规范上将,应该是讲两个PRSNT#短接,这样主机才能发现设备,提供电源和时钟。  m: I" {  y; y& O+ d; u6 R
          实际实现中并没有直接短接,而是用了一个跳线,发现不管有没有短接都没什么影响。7 W9 ~8 }# s* \" x1 C
          之前一个做这方面的工程师给讲过,说一般的PC机是没实现这个功能的,直接给所有的插槽提供给电源和时钟,所以这两个信号可以不用管。

20

主题

445

帖子

1316

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1316
12#
发表于 2010-8-18 09:06 | 只看该作者
不知道你找到原因没呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2025-2-23 06:08 , Processed in 0.064399 second(s), 36 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表