EDA365电子论坛网

标题: #技术风云榜#OpenRISC开发板O_board的设计,实现,调试与验证 [打印本页]

作者: qsoiuwisjiuw    时间: 2020-11-16 14:50
标题: #技术风云榜#OpenRISC开发板O_board的设计,实现,调试与验证
引言
! m; I/ \0 {4 {2 G5 Q! I8 f“书上学来终觉浅,绝知此事要躬行”,“百闻不如一练”。
% r: w) H' o8 \, {7 ~! F) Z
# H; e: E! j  j9 Z无论是研究什么东西,学习和观摩是一回事,动手操作又是另外一回事。玩OpenRISC也是这样,只分析RTL,做一下仿真,对其感觉只能停留在‘纸上’,要想进一步加深对OpenRISC的理解,加深对CPU设计技术的掌握。除了分析RTL和仿真之外,还需要做很多基于OpenRISC的实验或者实际的项目才行。! H4 |7 Y$ [, L5 B- _

9 U* b9 ]+ n! j* P( U' R要做实验就需要对应的开发板,目前国内的FPGA开发板种类很多,但没有一款是专门针对OpenRISC的,要想用目前市场上的开发板,主要面临两个问题,首先,大多数普通大众的开发板大多逻辑资源不足,无法运行ORPSoC;另外一 个问题是,即使有高端的FPGA开发板,资源也够用,一般价格昂贵,此外还需要大量的RTL移植工作,bootloader移植工作和linux移植工作。这些移植工作需要的知识面很广,并且非常耗时。
9 s5 U0 A( O; O/ B( h- n5 O9 F* z. A$ ~) c8 u5 N
我从2012年下半年开始接触OpenRISC,并购买了官方的ORDB2A开发板,价格适中,资源丰富,而且免去了大量的移植工作。, P1 m4 }# X( @8 g  Z# s
) E, u1 _' ?( g' H6 b2 k% C% X
后来,随着研究的深入,越来越多的人参与进来,大家一起讨论问题,解决bug。其中深深体会到,很多问题重复的问题出现,此外还有很多问题根本不知道怎么描述,其中一个很重要的原因是大家没有一致的开发板,于是我建议大家购买官方的开发板,但是很快发现,官方的板子“Out-Of-Stock”了,没货了!
  K2 c  {% Z; \: ~& ]' ]7 y9 b& H! t, ?0 Z( L
怎么办?当时有很多人“怂恿”我,让我仿照官方的板子,做一块一模一样的!!!+ }6 \: M- D- V9 }2 m2 ?3 ^* s

  F" n+ x9 F9 [我当时考虑到这个板子既能用来学习嵌入式,又能学习FPGA和RTL,还能了解CPU设计技术,一举三得,所以就毫不犹豫就答应了,于是,从那时起,我就陷入了“苦海”。
' q$ W& Z8 z2 t1 [
/ q0 t  V6 B2 _6 P从2013年9月初,开始画原理图,到现在(2014年1月5日)可以在板子上跑linux。前后四个多月的时间里,一波三折,五味杂陈。: K8 u2 E7 t5 f8 r* `* ]
: ^0 a5 j4 k1 s: r+ {0 m
本小节就回顾一下这四个月里做OpenRISC开发板--O_board 的酸甜苦辣。
6 C% S  q1 b0 E9 }, C* h% F
+ x0 j  H+ ]. ?% C+ p/ K- X9 x3 x2 W+ C8 j% A4 T

- ~0 p/ M, S0 v8 l1,O_board的logo$ j8 p1 I. S6 L0 i( f% y! B
下面就是我用5分钟设计的logo。. r9 ~, q9 c' i- b& I5 F3 ~) d

$ d( i" X" q  q
! q! F9 I" c- e2 h0 M
0 d0 s! s4 _  O4 b4 n! m( }% M0 u5 J
+ N8 E1 s; g" a9 @, B+ y5 A/ d6 r* N* m
2,原理图( n4 @/ B( c* H
O_board原理图,以opencores的ORDB2A的原理图为参考,重新用altium designer修正原图中的几个错误,并重画了一遍。6 x% f/ |. V5 a% M
7 h. ~, b9 U4 |7 y4 [6 j
原理图,我已传到了QQ群的共享文件里(群号:277505520),有需要可加入此群之后下载。
7 `+ P2 p' q) T) L1 ]
: K& v& b( T+ l+ `3,布局布线  N) o3 q* i# ~% W
如果说原理图是参考ORDB2A的话,那PCB的布局和布线就完全是原创了。O_board为了降低制版费用,决定采用4层板布线,要知道FBGA封装的FPGA芯片的256个引脚通过4层板全部扇出,对我这种菜鸟来说,确实有很大挑战。
$ X9 \- X) P6 X+ Y# @' O1 W; j4 `9 K- w3 U: V" B4 {: G
下面是用altium designer完成P&R之后的样子。$ w2 e2 e$ b1 Q, c+ B% j
1 x/ _  t$ H5 x
1 c% V% Z% T: _
7 T; H, R; Z' C- {. T

% Q2 a9 a% f0 A6 y6 u/ u1 O( ~: ^: }% ]+ \( y! ]- Z9 j

) n: U. u9 ]0 A+ }8 b# y& k  Z+ d7 [4 Z
4,制版* [/ w! Z  d! F' Y' C
在布完线之后,检查一遍又一遍。然后就是找制版厂拿去制版了,由于比较关心制版质量,再加上制版工艺要求较高,所以我并没有找深圳那边的厂子,而是找了长沙的一个制版厂,并且采用沉金工艺。
  ?- _/ Y) S' P2 U
; B1 T, X' u4 K8 p& m3 R8 L, j把PCB文件扔出去之后,经过一周的等待,2013年12月10日,终于制版回来了。
! t- s" c- i' f! [
1 ^6 U  G7 N. d- o6 Z6 u + t1 {( C+ |4 r7 H
& k! q& j2 }- X8 n. Y/ m
! n( b5 p- D5 A5 q  _9 L
$ I+ |7 J- h$ O% \/ {
5,采购物料
. u' J# y7 m; i3 Z3 i+ a9 P板子回来之后,下一步就是根据BOM,采购物料了。麻雀虽小五脏俱全。板子不大,但是芯片,电容,电阻,晶振,各种接插件,一样也不少。
' u0 n* d: }6 h) ~3 ?- k1 {
9 \' p5 c+ Q+ j& ^+ D; y由于官网的板子是欧洲生产的,所以O_board的很多物料,在国内都很难买到。- `# S- E; @+ _

# t( \1 I; Q+ S$ H在我跑过无数次中发,搜遍淘宝之后,总算把所有的物料的买全了。由于买的量太少,我本人之前也从来没干过采购的活儿,为了买到原装正品的芯片和接插件,买了退,退了买,折腾了近半个月之后,总算搞定了。. A, }: H9 e1 _9 J! H
2 T! P' \1 [1 A+ a

: \3 q5 K: u- f5 l% a
4 R8 c3 U, i4 l" c: Y9 f7 c' d) P) M6,焊接# J9 K( r% C, o# R: J7 F; G. \0 W8 A
制版也好了,物料也全了。下一步就是焊接了。
$ q0 o6 ^. n+ ^7 k8 q6 `# \- k+ ^
  [; j6 N. C! Q3 o1 Z; z$ y我是做软件出道的,半路转的硬件。虽说是硬件,但主要还是RTL,真正和PCB级别的打交道还是很少的。焊工就不用提了,那叫一个差啊。( h$ Q, d6 b! l9 p+ ^9 c. |
7 a, S& D; D; p. ]7 }
于是我整理好物料,光板,焊接说明书之后,交给了北京的一家专业焊接厂。" @! J. F0 ]7 `8 ~# n1 g
0 }( U0 H& N" a! I* l
三天之后,板子焊完回来了。
4 j$ j. N! ^% G* c6 V: D
8 m+ \5 y/ E8 ~
+ K( f3 H* E" w1 b: c9 u" ^/ ~
, Y9 }5 @+ o6 R2 O7 Z, _ 1 s% @' K8 X0 F

+ p1 ~- K1 V. j% K7 q3 i3 f' s
3 F: B$ P: D/ T7 U1 b+ l  F  F  v+ [* `- w9 w
7,硬件调试1 }* ^  e; h% o
焊接完之后,我刚拿到板子,就发现有好几个地方焊的都不对,有的电阻不让焊,结果给焊上了;有的电阻漏焊了;有的芯片引脚焊错了;有的芯片引脚焊锡太多造成短路了。" S0 l$ N- u; `+ e& X% Y

0 y5 O  B; X* j4 V, Z1 V# u( d总之,上电之后,电源灯根本不亮。6 e. D, ]! k  F* Q% B

4 _5 C, v! x) }后来检查发现是电源芯片的几个引脚给焊短路了,有另外一个电源芯片的引脚虚焊了。
" X7 d. T% {' U, x  |, y- K* I6 o& r, f" N( j$ R, w% E
修改之后,发现板子发热很厉害,不到一分钟时间,板子就特别烫手,5V输入也被拉低到了4.6V。6 e/ Q" l/ o7 j# q! d

& I/ T3 R- l- j3 D$ P2 ugdb可以下载程序,但不能读写SDRAM。。。。。。。。
" N) |( ^+ M2 {7 n5 v2 \5 K5 ]1 H# R  V! e0 m' d! k
调试or_debug_proxy。。。。。。$ e- ~8 e8 m. E( R

6 K/ C7 z5 w7 X! h4 W/ H调试adv_jtag_bridge。。。。。。
  D+ T. k" ]) }7 u* c+ u' [: \# ^( R+ u; }( R
后来检查发现是晶振的引脚给焊错了。- G2 y: g' J- V3 Z7 @
4 }4 d5 S8 J* N5 R4 k, A
。。。。。。
. d& G$ J$ M# [7 Z* l. z& m" \
% F, W5 J+ `4 P7 V经过四五次修改,供电部分和晶振总算正常了。
) Q( n2 ~% R0 x) E' T
1 a" O/ a( o& a# w, V下面是我晚上熬夜调试的情景。, ^2 E2 X  a4 U4 G; ]3 ?
6 e: e- F3 }7 V# D; ?4 v) }2 Q! V' x
需要说明的是,白天还要正常工作哦,毕竟公司给安排的工作是第一位的。0 j+ j: w: S  h% G' K" Q

+ r0 Y0 q' i9 K; o- [( P' o( S
( }8 [, ?- U/ T" M
: S9 ]2 S9 A: m& T
# x+ U6 J3 u  X% g8 c
7 i9 [( n) ^. H6 \7 i, ^+ F& M% q# m' z' k# w
3 a+ o; O+ C) A) C5 c) _0 M4 q- z- [
+ v( x9 j. j8 Q+ i6 [9 {% P
% V# Q" I0 q, A. T
8,RTL的调试0 n0 v! M+ i; ^: R3 x- _
由于主芯片EP4CE22F17C6N,在国内一直买不到原装正品,所以就采用了功能,逻辑资源,封装完全一致,但速度略低的EP4CE22F17C8N。
( D: E0 V2 j& Z* X0 [' I# K  r* V2 \2 G% m7 G. @, f% Y* U
将ORPSoC中的PLL的频率降低之后(从50M降到20M),发现时序分析时出现错误,修改SDC文件,OK。0 o& l8 e. }/ p5 P3 o1 P/ y8 y
& `0 q5 w2 r9 M2 y4 F6 ]+ u  p
4 c1 h" m, Y( F% p. F5 _
$ U$ o* S" v0 D
9,软件的调试0 G( X* R3 M8 z1 a+ t' P1 ^+ R( I
这里主要包括orpmon和linux。
, T  X& r2 M# N  _1 A9 d! W: W( Q0 x% V  F3 o, V2 y
同样是修改频率,之前移植到ML501时有过介绍,这里不再赘述。
& b/ O! s& f3 N
3 l3 v6 f& P0 T2 n' N  z1 _0 Q1 Z, N% P# S" W9 r
1 D/ m" ~% Q  `
10,验证8 Q, }4 u  a* O/ O! @
经过千难万险,总算可以跑软件了。
4 @# q$ J6 w( k
2 A. [1 n7 z% w" {具体的操作步骤,之前已经介绍过了,如有疑问,请参考。
0 A# B* }2 r! C# a
+ @* j  v# V0 o& z; g* M- v3 [O_board 跑orpmon:
/ T1 I" g8 P9 z5 N
0 R' o# u) G. ], W' B  V0 k$ t8 i( [ 7 A+ Z6 e) p# C  Y$ t% X
/ b. R5 ~/ J8 v+ l, F7 f

: D, q% s: S5 i: cO_board跑linux:
; @. h1 A: ]" m- s
9 I7 Y8 Z1 I2 F# x & f+ ?& q$ Q( X3 n* ~$ e' h# u

6 W  w* y7 t* \, v; H1 k: y  D4 w) P; ^. U  J7 u; ~: Q, i$ p
O_board起来linux之后,挂在PC机上的NFS,并运行“hello O_board”程序:( z% T# [9 P3 I& g. q: r

" s) C5 P  M6 K, L! r $ F/ {) K# ?0 m9 v$ b5 @! a
" y7 X# B# e5 x8 U; [* J
$ b4 y5 @- T$ {
注意:出现Segmentation fault是因为我用or32-elf-gcc编译的,改用or32-linux-gcc之后,OK。
/ c( E2 g5 G( @5 M1 N6 G& Q( c5 m0 ?

! g# L, M# F, a  ^+ s) Q/ Z7 `* j- R& Q2 u
通过上面的测试,说明O_board的JTAG,串口,ORPSoC,SDRAM,ETH等模块完全工作正常!
3 S" W% @7 e8 d2 L# J2 j5 v9 _& Y
* |4 Q# v* X. d7 M
7 q2 m2 i9 V7 \, ^  t11,上市+ s3 a/ r$ u8 |7 F2 b: S1 R
原理图经过6次改版,PCB经过3次改版,制版厂经过两次改版,现在板子的所有功能都没有问题了。
( c9 K9 s$ X( ]/ K; ~  Z3 {( j  [8 V, K  o  ^
板子调试成功之后,就有好多人跟我说想要,在我免费送出去两块光板之后,发现这样下去不行,光快递费我都付不起。
+ h& L' F0 ^8 k! a, f& w) B4 F4 O& Z. ~4 `: _$ i

: _4 N& T! ?' s, I需要注意的是,除了板子之外,还会提供全套的学习资料,包括已经搭建好的开发环境,还有很多实验例子。8 \# s1 l6 P! z9 ]' t+ b. k! b

- S/ L, W. [- D( E
" @7 N% \, Z- l4 |: c: z+ ^
0 E8 c: s- n% @1 X! N: E6 k. I1 t: s
  Q! h  c# a. b/ j
1 ?" k* N" _( j- r# c7 ]

+ D! j! x( j9 s, ^+ @( S附录:O_board feather
3 g3 Z4 z; D+ y' r8 O* i( Y; L! f适用对象:
+ B2 {: d* S  W: j5 |) M& ~1,嵌入式爱好者
/ z* _  s& H) _! P9 H用处:学习U-boot,linux开发,驱动开发。2 o! Y+ X5 s" C9 z* i6 B
2,FPGA爱好者7 F4 Y: o8 E# }: I* ~
用处:可以熟悉quartusII软件操作,SoC设计,verilog HDL练习。9 d+ A9 v6 l- Q1 N/ g  ?7 d  N- R
3,开源CPU爱好者& y- T% M2 @# }/ |' n/ w
用处:修改CPU内部模块,如流水线,cache,MMU等。$ c1 i4 e  I' W# }. j
2 M2 q8 R# }* k9 |' B6 [* c/ O* w
如果是学生,可以用来做毕业设计。
5 I- m6 }0 P* X* J( n) b如果是工程师,可以锻炼技术能力。' t7 [/ T( N% V- M! ]6 z  j- q

9 c; i  n4 A. o板子参数:
5 G% x1 P4 j4 W, U-ALTERA Cyclone IV E, 22K LUT (EP4CE22F17)$ j  B+ }/ P* J) o3 T  G
-SDRAM 32 Mbyte
, M) ^. j% W' B7 l' T+ ]' W" _-SPI FLASH, 1 Mbyte
/ t$ ^6 s+ P2 L6 S. x1 P% Y) B-SDIO micro connector
, ~' h$ E! d- ~6 F( F% K-Fast Ethernet
, s& m1 h8 Q2 |, [# D  W( M5 Z# A' j-USB "on-the-go" HOST/SLAVE
9 W: w4 H; p8 L7 M% b# [: Z" K-USB power, configuration, UARTs 3 d) J9 @- H' V9 Y" T
-Expansion connectors $ R0 V/ w' _' S5 o
-Supply via USB
& y, i  Y' F8 e8 o
; I! t) E- p! t- a9 Y* Y- J, U: j/ `0 i
小结$ F  B( V3 S2 ^5 T& E6 B; v, y* n7 m3 }9 o+ f
这次可真是体验了一下从画原理图,PCB的布局布线,再到制版,采购元器件,焊接,调试,FPGA开发,CPU设计,SoC开发,linux开发的全套流程啊,最后甚至还体会了一下销售+客服,感慨万千,收获颇多啊。
作者: yin123    时间: 2020-11-16 16:35
OpenRISC开发板O_board的设计,实现,调试与验证




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2