TA的每日心情 | 怒 2019-11-20 15:22 |
|---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
废话不多说了,继续······
+ d/ B; Z* |4 B+ Y# u6 z) G- r0 i5 n! }
在我们的源码目录下是不是还有一个这样的文件?
2 Z, R8 p1 B3 J* d1 P9 z9 w
! z: i$ V" M3 F2 ?, z# K! L, T
5 C. I5 _1 Z# n3 o" f8 [' _" ]% R/ {) `; r
在virtualbox的镜像中,包含了一个or1ksim的程序,这个程序是对or1200体系架构的软件模拟,就好像ARM架构类似的也有一个在软件上模拟芯片行为的程序,具体叫什么我不记得了,呵呵。
7 J/ n# P* c& u2 _3 v) D. D
* C/ I( k. w6 q6 o }. @6 r2 m6 o 也就是说,我们写的程序可以在这个or1ksim进行模拟,而or1ksim.cfg就是对or1ksim的配置文件,关于配置文件这里先不讲了,因为码字实在是很辛苦啊。感兴趣可以自行打开了修修改改的,对于上面我们写的程序来说,这个配置文件or1ksim.cfg我都改好了,直接用就行了。
! O/ R. s: \$ O! [9 I! ^! E/ \7 n d5 c+ i/ c
6 T# b4 j" t4 a6 q; M) H* L) r7 J1 f2 k, u$ z3 [
老规矩,把windows下的共享文件夹mount上去
; u6 z2 z& x) }. |" D7 r1 \1 U, ?- X! o q
7 k/ x3 k3 e. x$ c- V; B# F3 a: Q% F0 H) {/ a, V) Z F; T
; m: o* [! L! R# |8 W
然后,切换到我们的源码目录下,cd啊cd
4 C1 l j9 q) @
- I5 j @5 C L* N
3 \3 R" s& b( Y0 U9 z% F) O5 R B7 u$ b9 J% B
2 I3 B, b' P" u+ Y4 W
再然后,make吧: O$ J, R) e9 X& q: s% j* z
$ o( Y% J, \: _
$ Q3 | d. p0 K- t2 l' J& `# ~6 S( T- v
3 Y& H2 M6 n& K# X; D
信息太多了,这里我贴不完了,编译生成boot.or32就是可执行文件了" x! E- _$ @! W( J6 h
" _. c6 J! A+ r2 V' Q( W! j
! M5 p9 [" H# d u# i% Q' G6 o4 \
再然后,验证下我们写的代码是不是可以执行的,在or1ksim上验证吧,输入sim -for1ksim.cfg boot.or32,然后回车
& T& w5 H. g8 j' c0 D
4 |( V" }+ D; M. O, m9 d% M4 p5 U
$ E( ^0 C- ~- Q, D8 I1 q/ S7 W1 M
7 H( O/ J* T' N1 @+ D
. `& x4 F4 L: B- s& j" W/ M4 e- j( j" v# W+ o4 O9 o U- R: c7 D8 p
然后可以看到一堆信息出来了。
) [: X2 ~- Q) X4 m% r: y* m
1 a3 b" @7 x) e( z 其中包含我们在lds文件中定义的段信息
" e0 b+ @: E. R/ s8 t' e: n( m1 i/ A/ s) Y6 s5 M
6 { B1 H$ a' s4 x2 q1 Y' h
6 V g) |5 r5 G0 _2 r5 z- c, G
$ C, f& B& U8 m
( J8 X7 o& y! v/ V 然后在弹出的xterm窗口,这个窗口就是模拟UART16550的串口输出的,并且在命令行中都可以看到我们的main函数执行的结果了。
$ D8 z. Q0 S( }$ u2 Y I/ N
8 R3 ^! f7 d' r9 z- e* t- n0 ?
. B" C7 A" X7 Y. w: V: }& Y( B
I/ J$ }( F i3 w) O3 w1 E ( W4 b) |- H$ F; G0 e5 `
* j+ u7 V! V f; m: \3 X 但是这样验证还不是我们想要的结果咧,我们是要下载到我们之前做得SOC上才算成功的咧,好,现在至少已经说明我们的程序编码至少是可以运行的了,接下来就是下载到板子上来验证。+ ~, h- H/ U# N9 N, y
; P _4 w9 w% o% L
好,QuartusII软件打开,FPGA板子连接好,下载器连接好,把之前综合出来的or1200_basic_soc.sof文件download到板子上。# F8 o* Y- J" D, }$ C
( ]6 h _( w* v' m' p/ Q6 P
1 B/ C, p% {! G+ j
: j# W1 [( x% U. h6 y 2 D. D* M2 P8 s c2 y5 j9 j
) K6 B: H( k/ p: z! f1 e9 m 然后在virtualbox的右下角中把下载器连接到虚拟机上去。
% u$ X/ g' M* g" }+ H
$ C. h3 o$ E8 k+ `$ S
: ?% y- X5 J9 h* P& [5 [) B
$ r0 }/ b0 }" h3 J; l+ u7 F: L m. L3 E4 M# V
( l4 i) q7 _2 N; B8 W5 [
接下来我们休息一下吧,上上网,去找找手头上FPGA芯片的BSD描述文件吧,顺便刷刷微博,看看新浪NBA什么的。好,我现在板子上的芯片是altera的EP2C20F484,要找的芯片的BSD文件就是EP2C20F484.BSD,google之,大喜,收之。
+ e5 y+ h" T: u0 S
/ C2 [+ p/ v4 i6 X5 V+ J 好,我们来继续,把BSD文件扔到home目录下,怎么扔,自己想办法吧,BSD文件一定要对应自己板子芯片啊
/ K( h! Z( f3 f
/ W- |/ \# ^9 p' j3 M4 T
8 z1 c" S. N. W5 `8 B. O" T6 c
$ e9 t; {" D; F$ I# M, O& I, m , \- d2 O) d" A4 ]
& L8 D, e. R- D5 [' e) u4 Y4 p 继续,打开一个terminal,之前在软件搭建已经把adv_debug_sys_latest.tar.gz包make install了,所以在terminal输入adv_jtag_bridge-h看到adv_jtag_bridge的帮助信息,1 ]+ E+ m1 o: K7 C( N2 B
# h; a( U& s6 j, A1 Y+ S5 _
9 I6 I: b" j8 T% z
7 Q( R0 F1 A( [% w q! r/ t
; A. g# F+ b# B* `7 j! H 上面列出的就是现在adv_jtag_bridge支持的下载器,我使用的是usbblaster下载器,但是貌似经常提示找不到下载器,所以前面在搭建软件环境时把libusb-1.0.9.rar、libusb-compat-0.1.4.rar都make install上,可以用ft245驱动代替usbblaster,下载器还是那个下载器,至于用xilinx或者actel的朋友自行去看看adv_debug_sys_latest.tar.gz的帮助文档选择对应的下载器选项。- }) @# z0 s% g) I
}. C4 c% r; T7 @- @/ ?
好,继续,将下载器连上虚拟机后,adv_debug_sys_latest.tar.gz安装好后,soc下载到FPGA板子后,BSD文件放到HOME目录下后,再继续在命令行输入sudoadv_jtag_bridge -b ~/ ft245,提示输入密码时,输入openrisc,adv_jtag_bridge就会连接上下载器0 }1 s) `5 _" B% p$ P, ]
! x9 x. k* q- j8 u/ P% Y, [
8 Y, ]% |) I/ C2 S6 |- a1 a" y4 o
* x3 T6 Q2 p4 f. q" z- r2 k) |5 c0 J" |/ l% y; d/ ?
这说明顺利通过下载器连接上or1200的调试接口了,我们可以通过这个JTAG来下载程序了
1 ]+ i4 M6 U" R9 m4 y# x0 t) m+ T# H6 W! {, z
' ?4 Z9 V% R7 J( F 再打开一个terminal,cd进源码的目录,在源码目录下输入or32-linux-gdb
T5 Y$ a1 y- `5 `4 j3 p# f, x. ^% }6 u4 w/ S* u( C7 J2 B
# p9 I9 p$ F( b o3 q5 B) W
4 m9 n. v5 d. J v j8 b9 b! B & T; j9 G, S! Q* t
! I+ ^* m6 \: }( Z3 X 然后输入file boot.or32,读取boot.or32文件信息6 L+ B: @6 t* T) |: B' b$ R. T x
1 ~4 |$ E3 ]0 T# c( |4 }/ |
! G8 q1 s1 `4 X* W \+ e+ y% W- M: u
* y6 y7 P. x9 a$ M c, e5 X
继续输入target remote:9999
9 \: E: \+ B+ E8 n* W' N
" F4 ]; {* [* L+ K0 l2 v
7 h6 t" j! s' W+ G7 c3 N- A
& L9 {8 [. F" }3 {+ ^; d# h g& M4 c+ q: k3 @5 ~
这时说明已经通过gdb服务远程登录到开发板上面了。# a/ F1 p' x6 W2 z! X6 j7 V4 T
& V+ X L8 o# \9 |* F$ g# W3 z5 l b" S6 i. w0 \8 F6 y
继续输入load,将可执行程序文件boot.or32下载到开发板的SDRAM上4 i6 y b) O' I8 ?5 i. R* ]6 O
0 [& a1 u, b$ O3 c% A7 v+ x
1 n. G" A# O# C& p
" b) J, `5 e% i! V0 `( D0 [
: T: I# u" F) M- a7 {. \0 `- v 同样这里也出现我们在lds文件中描述的段信息
) q5 \3 c) E0 D) \4 }# E
3 M/ _5 [0 b% ^. K0 u4 _9 H. k- @) _% \
好,继续,之前我们讲过reset向量是从0x100地址执行的,所以要把CPU的NPC寄存器设置为0x100,这样CPU才会从0x100开始取出第一条指令执行。所以,输入set $pc=0x100
/ o) Z- p5 K7 B( f' @$ F$ x
) d" X$ B* o& J% C E. x
7 P* N7 s$ x: D) \0 s# u+ A/ g+ D. y1 O; f1 P& x, S7 e' t
/ Z% V9 Z, v- T/ Y6 V. _" E
好,到这里设置完毕啦,在现在可以打开自己熟悉的串口工具了,minicom、c-kermit、putty、ScureCRT,我用在是ScureCRT,windows版本的,打开设置好波特率,在写源码board.h中关于串口的定义是
2 h& I7 f' h3 h4 c! y) G; j
0 [7 @: @! z2 d; I* a+ G
4 \% N3 t: x5 s' I/ Y
" u. y& u4 N& q1 f6 Q
9 A8 V8 V( {) c1 o- R 波特率为38400,也可以修改成自己想用的波特率,由于我的板子的速度问题,38400是比较适中的,因为在后面板子上了linux后,lrz和lsz在38400的波特率可以和虚拟机无错误传输。' T3 F% m# z% ~+ `, Q
! K0 t" c5 {) W
' @% e3 m2 [$ c) x ScureCRT中设置好波特率,打开,然后回到虚拟机的terminal中,输入c5 V/ @4 h2 } t4 t9 V
8 z" E$ O g% l. _% O6 B$ p
; R5 R! |* T( L* t' s& {
* X. Q8 E% C0 W8 U. x/ p8 w: H! U+ n% m& p
然后准备切换到ScureCRT中,好紧张,有没有信息呢,来了。+ ~% T& s+ a5 _% l1 ~7 ?
|. j u& `( E
+ @0 z8 X, r# q4 z
, O7 G3 e B3 p4 q z" M/ U* ~/ u# z5 b) y
哎呀,有了,妥妥的,好了,第一个程序就到此为止了。" R) G# z q& p; b( V
' e, D, d5 U, M) z- }, t2 u
接下去我们做些什么好呢,对了,还有关于or1200的定时器timer和中断的程序没写呢,这些留给朋友们去练习了,对于练习,可以到opencores社区上把5 Z9 O6 f: o; J3 i0 {- o
! x, G T; ^6 I' w" \# k* I2 h
minsoc_latest.tar.gz
( W2 E+ ~. ~3 g7 b. C/ z( S; e0 `! a& l; _% o3 M9 U M1 x5 _
or1k_soc_on_altera_embedded_dev_kit_latest.tar U; x7 S- k9 |
9 D$ [2 b0 J/ S" m3 @& w1 F% N: b
orpsoc-master.tar.gz" P. e' S. p0 n' Z/ {& ]& |: c
/ N% F: [( n' u 这三个工程下载下来,这三个工程都是关于or1200的SOC的参考设计,里面也有相应的参考程序,有时间我会把这三个工程都上传,至于“裸机程序”的练习也可以加深对or1200的理解。
e7 O0 x! o p* J9 h: ?
/ J1 r* F( }) N, k% M 同样,在虚拟机home目录下的soc-design中有orpsoc-v2的参考设计,里面包含一大堆的“裸机程序”源码,我在学习时也是通过这个工程的。
$ {. n3 Z4 ]( T5 m8 O/ z. L2 ~3 t( Z7 n8 R- c" |, X2 M4 Z# ^' L) [
下次我们来完善我们的or1200_basic_soc,完善之后我们在此基础上移植u-boot,移植u-boot我们再在上面移植linux系统。& ^0 \ E' Y3 ?2 X' Q
|
|