|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
( u# N; P' |5 Y8 e$ Y: ~5 }( T
( v$ u; F0 P! `8 Q) l做了5年的FPGA了。手中经历的项目也不在少数。就在此刻又一个FPGA项目宣告结题,好多感受趁着现在还新鲜着,写出来和大家一起分享。不对之处,希望得到大家的指正。另外1234并没有绝对顺序,都是有感而发,随性而写。0 N1 o+ n ^" l
5 M3 h* m8 a6 R& S" M1. 要和人配合。0 `, h4 ?0 ^, b* B. d
1 X- g' J" l& ^. W8 N0 L以我们做硬件的工程师为例,测试的时候一般都需要软件的配合,一个对硬件来说无比复杂的工作,可能在软件工程师看来就是几行简单的代 码。所以要和人配合,多听听别人的意见,这样必然可以产生新know-how 从而加快测试和开发的速度,退一步讲,至少没有坏处。1 v2 b% V' y1 R$ Z0 @- `" H
* ~1 h% W3 Z. T3 a9 H2. 测试还是要别人来做。
2 J3 o; \1 `1 C4 y2 E B# P, u* F3 p8 O
开发者看待自己的产品有如看待自己,大多是没有勇气去发现缺点的。一是源自自尊心,二是为了避免额外的工作。所以就算有问题,如果不严重就藏着掖着。但是这对项目来说是不行的,所以测试,verification,一定要旁人来做。/ n1 a; |/ ~: n+ t2 Q1 g' n
* _! f% _- N% Q, D# S' ]4 M
3. 多点时间思考。& j8 s; v9 o3 S* W/ Y9 w8 Q, S6 r
+ L$ \9 z) f5 n* c& z5 v出现问题后,不要急着修改。要思考推测可能的原因,想清楚后把这些可能的原因都用debug pin或者chipscope引出来。
# X7 \: ^) R- X4 S7 g, L( o) Y" o5 q% _- K- S4 l( h' L
4. 注意复用已有的debug pin。& Y# {1 }! ?; G! F% k F# ~
. F d( @2 d7 e' h- D5 e
很多时候,在测试过程中产生了一大堆测试信号,但是时间一长就忘了复用。实际上,当一个问题产生的时候,通过反复观察已有的debug-pin或许足以发现问题根源,而无需再引出新的pin,并浪费时间去综合和PAR。# ~! J- o# z7 c4 g% |$ p' W
5 `7 ?. s- D K, p( K' Z7 f, {+ p5. 仿真加时序足矣。. r3 k# K" z3 J; ?
/ Q" \& L: V# _8 {6 }- m q数字电路在时钟同步的设计原则下,其功能通过simulation就可以验证。simulation的结果和PAR后产生的 FPGA-image完全等价。当然FPGA也要遵循同样的设计原则:即时钟同步。所以对于PAR的结果首先就要确保其时钟同步的特性。体现为寄存器之间 的path必须在一个时钟周期内完成。(当然有其他约束的例外。)+ V5 v! v+ x8 b {- x% [' Y
) @) M1 _" H8 b, j0 `同时要满足FPGA器件的setup和hold要求。一旦出现timing-error 必须通过各种途径消除error,因为error的存在,意味着时钟同步的大前提已经被破坏,这时,simulation取得的结果和FPGA是不等价的,继续测试也毫无意义了。
! O9 D T+ ~ h6 C6. 注意不可控的接口部分。6 M; f4 q7 |" F' l
0 {& X- R. t& m7 U
FPGA内部的寄存器之间的timing完全可以通过PAR报告来确认是否有问题。但是和外界的接口部分却充满了疑问。我们 一般通过假定的input-delay和output-delay来对接口部分进行约束。由于从一开始就施加的是假定的delay,所以即使没有 timing-error,其结果也存在诸多疑问。! r; [* N2 g1 X5 Z
. L8 I) V1 a0 `* H# r( V以我正在进行的测试为例,模块内部loopback测试完全正常,但是一过cable,传到对方FPGA,则马上产生很多误码。由于simulation没有问题,所以必然是我们的某个假定出现了问题,尤其是时钟同步的假定会得不到满足。这时候,就要想尽一切办法,使接口也满足假定的条件,或者调整设计,将不理想的接口adapting成理想的接口。, w( { ^ L" Y, _4 ?( [
, t4 `" a0 X/ p! @; x, B
7. 向直接上司汇报情况,寻求各种可能的许可。
V& E3 h1 o, [ v
& R( y6 l6 A3 [" Y7 b7 A1 G懒得向直接上司汇报情况时,万一出现进度或者结果不符,所有责任都需要本人承担。如果提前向上司汇报情况 并取得许可,则一切后果都在可控范围内。比如,工作繁忙时又被派给新的任务,则不能一味逆来顺受。应该向上司说明困难,并提前想好一个可行的解决方案供上司参考。) F; x( ~. j1 C6 q/ @
$ k' V5 p& V; b7 g7 N7 L
8. 外部接口是最大障碍。
; w. H# g- Z7 {! J. \0 {. b6 v$ C! B
3 L6 s% ~+ f3 @/ D0 P* g/ j; y如前所述,FPGA内部如果timing没有问题的话,一般和仿真结果是一致的,问题是外部的接口,包括cable连线等,不 在我们确切控制的范围内,比如其延时特性在40Mhz下仍然正常,但是在80Mhz时可能出现不可预料的情况。; D* E* A0 K' l$ p: C9 m- ]
0 Q+ T2 B. m! ]3 U) ^: D! S- Q* {所以应该尽量使用经过验证的 “cable--frequency”组合。或者通过设备测量并确认外部接口的延时特性。这样可以进行有针对性的调整。我最近的教训就是花了整整一个月调 整并测试内部的结构,但是仍然失败。结果发现由于cable的问题,80Mhz的信号(数据+使能+others)无法正常并行传输。如果换成40Mhz 的信号就通过了。
+ `0 _5 I" c# [/ ~6 A" W
8 ]" ]% [% h+ a0 Q8 t9. 综合PR后的结果要和代码等价。0 d6 ?( }7 D8 M a
: n6 _% m" Y5 V, I8 a/ u前面提到仿真加时序足矣,这里面的前提是PR的结果和原始代码要等价。为了确认这一点,就要把握syn和pr过程中的所有warning以及error,warning的内容不是完全可以忽略的。要特别关注综合报表中的以下内容:unused ports, removal of redundant logic, latch inference,simulation mismatch 等等。 | ; n9 W, r" `# T2 V. @9 ~% e
|
|