TA的每日心情 | 怒 2019-11-20 15:22 |
|---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
废话不多说了,继续······
* v$ O% v: x' e) }9 M+ V
6 O, G- t" O" t7 y7 c( T8 l3 k' [ 在我们的源码目录下是不是还有一个这样的文件? D, H2 h. r X* S4 V* B1 }
- Q7 r6 Z0 c& E3 M u
5 d; F) m3 s/ A& g% \ I; H0 a
j) w* j8 }& h Z& N% }
在virtualbox的镜像中,包含了一个or1ksim的程序,这个程序是对or1200体系架构的软件模拟,就好像ARM架构类似的也有一个在软件上模拟芯片行为的程序,具体叫什么我不记得了,呵呵。( r2 P% d4 I, Q
; p! M5 i" c% r/ E3 o- b" H9 R
也就是说,我们写的程序可以在这个or1ksim进行模拟,而or1ksim.cfg就是对or1ksim的配置文件,关于配置文件这里先不讲了,因为码字实在是很辛苦啊。感兴趣可以自行打开了修修改改的,对于上面我们写的程序来说,这个配置文件or1ksim.cfg我都改好了,直接用就行了。
% n0 K- M0 w! ^' ?9 e! Z
" Z( h* U: b3 R2 u$ o5 k1 `4 J8 v * G2 K* M9 ^, s- h4 o
/ o* F- k* P: e& G* k( i
老规矩,把windows下的共享文件夹mount上去
5 s. A: p1 T+ d3 }8 F* a% a
7 e' L R1 [' r
2 k" }; ^' T3 y. C) L5 Q1 y. [7 n" s. ]! y% _
4 l* k( z# H" c1 R& d& i! K
然后,切换到我们的源码目录下,cd啊cd
3 D& k* C+ z& l* `; q
4 S& c" \5 }$ j$ p+ u, f/ L
# s& U7 j, I5 D$ {5 \4 ?
9 Q+ t! {/ g; @: x5 _; Q* K! T a) ^5 k! o' W( K6 k4 T
再然后,make吧
4 E2 R6 h, i# k
) E% U% H1 K! ` M0 Y- i
, v5 }0 o9 R/ ?, f4 ?
$ o! }0 f: c l# {. X
% J, {0 u/ ^! @9 O! ^0 H& z& U
信息太多了,这里我贴不完了,编译生成boot.or32就是可执行文件了
2 ^1 D: N; @" a z: R% W2 w, E- I! T+ C9 n7 v/ I+ k
1 @% e1 G( G6 J+ `: ?* c4 U- V
再然后,验证下我们写的代码是不是可以执行的,在or1ksim上验证吧,输入sim -for1ksim.cfg boot.or32,然后回车0 d2 p0 v* Z. }. X5 G+ o0 {# o* |
, S0 U6 ?: A ^6 A
1 j1 s5 E2 k: m0 J# K1 T) f/ O
: z5 Q8 u0 Y; q9 P
, b" ^9 I4 X6 D& e' J
% N1 R1 ?$ b/ _" `" C! z0 Y 然后可以看到一堆信息出来了。) o) `- }+ f9 _( {. ?# Z+ l
; z, U2 k9 F+ c) C2 w5 ~, g& v
其中包含我们在lds文件中定义的段信息+ [ Y `5 h7 h* _
% ~! ]' h. a- [" c. G# x
& X+ y6 H, h7 _& t$ A& `8 n
& ^! ?( C( V9 i1 t4 g( ^7 u' \
1 ]6 G8 u! y7 }) \: c
2 V4 K. n' h! G 然后在弹出的xterm窗口,这个窗口就是模拟UART16550的串口输出的,并且在命令行中都可以看到我们的main函数执行的结果了。
7 b0 A* S2 U' p% Z" N% G; F7 S5 H( j! P- D" h8 O
5 n5 T, r f! k3 Q# c Q7 s- B
0 {( b) O! m1 {6 W: d ! @: v3 Y+ ^* Q' y8 z i
+ a5 b: G" [- o% s0 p 但是这样验证还不是我们想要的结果咧,我们是要下载到我们之前做得SOC上才算成功的咧,好,现在至少已经说明我们的程序编码至少是可以运行的了,接下来就是下载到板子上来验证。! \" T3 u' j7 G* ?9 ^/ d/ V
4 n1 k6 s ~( h1 O3 N5 v. L 好,QuartusII软件打开,FPGA板子连接好,下载器连接好,把之前综合出来的or1200_basic_soc.sof文件download到板子上。' u. \0 j+ |8 T" k3 P! }
4 s" u! Z, P& n i
4 _: u. ]5 e) L3 K. R- Z. \; x- d- j, x( u9 R5 [6 U
* S1 f3 t6 d5 _( P. n: Q7 W E8 C/ w: t
然后在virtualbox的右下角中把下载器连接到虚拟机上去。
2 G' [3 }* p" [" J) X
1 O1 t* f3 G' z9 [% w( V5 R0 F( a
% Z" d7 B3 S' _! n
1 D0 N! D2 D# S# u; l
8 s& S0 @% c( I" |( U" s! A& t7 c
接下来我们休息一下吧,上上网,去找找手头上FPGA芯片的BSD描述文件吧,顺便刷刷微博,看看新浪NBA什么的。好,我现在板子上的芯片是altera的EP2C20F484,要找的芯片的BSD文件就是EP2C20F484.BSD,google之,大喜,收之。
0 r- m. g' z5 x' z/ ~2 e" |
L$ X8 G( Z. E/ V 好,我们来继续,把BSD文件扔到home目录下,怎么扔,自己想办法吧,BSD文件一定要对应自己板子芯片啊* w$ R9 R" h" j, y. [$ { i
+ k4 b+ |/ Z# |8 I; ~6 I8 a
- Y' E1 Y- t" D) U# T9 G U3 L: |& L& e% i
1 a6 R$ C; T+ M x% W
& N. @$ N( \+ ^* R; a6 W- h
继续,打开一个terminal,之前在软件搭建已经把adv_debug_sys_latest.tar.gz包make install了,所以在terminal输入adv_jtag_bridge-h看到adv_jtag_bridge的帮助信息,
: ~' c' x @) C7 }6 B$ R8 q. p( ?% Z: B7 y; A N' q" ^& X j6 V
( Z* _- E6 w: P* [. E0 |5 r
; s; Y0 T9 E! m7 Z9 m& y
9 T' T T; K8 S/ `( K4 @0 K 上面列出的就是现在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的帮助文档选择对应的下载器选项。
4 }+ h3 p% g6 q: {0 K& B6 ~4 ?# X
好,继续,将下载器连上虚拟机后,adv_debug_sys_latest.tar.gz安装好后,soc下载到FPGA板子后,BSD文件放到HOME目录下后,再继续在命令行输入sudoadv_jtag_bridge -b ~/ ft245,提示输入密码时,输入openrisc,adv_jtag_bridge就会连接上下载器
2 w, f' n; ~; ]7 i# z7 Q* {; j2 m5 U7 @6 A7 P T; M N
+ m1 E0 n* x1 G% l; Q1 I) h# t E" ~; K5 q' u
; Y( a( [/ u l2 u 这说明顺利通过下载器连接上or1200的调试接口了,我们可以通过这个JTAG来下载程序了
9 a( i; s. z: ^
) o% q' k& m8 ^7 y; W U+ Z. ^: N, r/ [9 M# J6 Z
再打开一个terminal,cd进源码的目录,在源码目录下输入or32-linux-gdb! N: N8 c5 W4 z' n% r( d6 r
( c+ L! d0 s/ C0 J) c; q/ g3 N
* P+ g) f% p5 Y8 Q; ^, ~+ Z0 y) Z1 O L/ |
2 g* m7 |. P8 b0 d$ W2 Z
/ s, {7 J( Z: n2 L3 ?; ]7 g6 e# Y 然后输入file boot.or32,读取boot.or32文件信息 m0 |1 D" ~% l: \
2 P3 g2 G9 H/ ^5 a4 p1 @6 a
/ {6 y8 l% E' v% ~3 s3 E/ s' v+ w8 r# X z$ O9 K
5 z1 B& i/ p' J6 \' `. p6 O0 u3 h
继续输入target remote:9999
# A2 e7 @. W. Q4 @* i0 c/ m4 [; Y. f: O* C6 T1 ^3 u
& L5 M8 ]+ b1 Z4 U
' I! ^7 Y8 z6 b# H% ^; q% Q3 ?4 y+ L! m- ?! g
这时说明已经通过gdb服务远程登录到开发板上面了。
3 M+ J$ a' A& [( C0 Q1 Z. b
% L7 ~- [: v- D) Z5 J
# f# m% e' o% D" A; h 继续输入load,将可执行程序文件boot.or32下载到开发板的SDRAM上0 {. _, A$ ?6 n7 ] P
% c+ s4 W7 L, n
$ U3 q( B) n0 F4 g1 J- u W. H4 H8 o# @7 o/ _% v* d
9 [# |8 j% f \5 D/ [
同样这里也出现我们在lds文件中描述的段信息
/ t. j0 S! f9 d6 D
) s9 _% [, v/ v3 y* z7 |- N: A
4 b/ b$ q/ s) H7 P) a4 [9 F 好,继续,之前我们讲过reset向量是从0x100地址执行的,所以要把CPU的NPC寄存器设置为0x100,这样CPU才会从0x100开始取出第一条指令执行。所以,输入set $pc=0x100
: b4 [' g. G3 _; W5 Y- {
0 [# L" U3 @ ?) W- ]2 F5 \0 e
8 q% f( n; ?. n7 r' O
* X3 \6 \, m& a, Z
$ O4 a! X& W* Z 好,到这里设置完毕啦,在现在可以打开自己熟悉的串口工具了,minicom、c-kermit、putty、ScureCRT,我用在是ScureCRT,windows版本的,打开设置好波特率,在写源码board.h中关于串口的定义是
0 n* d7 U, o2 G; B I/ P, k, Y- e# C5 w
- w/ A8 _ b. o2 N& a/ Q7 b
/ \( j6 {! s1 }! B, S+ d3 i" ^
- n) d) v# |' _$ r! S7 b 波特率为38400,也可以修改成自己想用的波特率,由于我的板子的速度问题,38400是比较适中的,因为在后面板子上了linux后,lrz和lsz在38400的波特率可以和虚拟机无错误传输。
0 e X" f) j/ N2 n( v2 H8 n4 m, l" v n# {% F
# N0 _0 }9 i- { ScureCRT中设置好波特率,打开,然后回到虚拟机的terminal中,输入c2 ?6 S) u. R& ] P2 k& g4 a8 z" S0 P
. f" i0 j5 G7 I) ]
1 C8 l( W1 z3 o7 f! v$ [
?" l7 y1 P6 B' j8 { F# P/ E6 R5 s2 q$ D
然后准备切换到ScureCRT中,好紧张,有没有信息呢,来了。
8 o6 K# h, O# W) i1 @3 E ?
! W* ~- Z/ I9 A* |5 n) @
1 ]. {; Z( k: f8 T
: X" J* Z& q% I. T! d5 Y% z9 v) z
. F1 f0 E: f6 G4 H
哎呀,有了,妥妥的,好了,第一个程序就到此为止了。
5 r( _1 b' \5 N( l+ w
1 M# v+ A" p' v 接下去我们做些什么好呢,对了,还有关于or1200的定时器timer和中断的程序没写呢,这些留给朋友们去练习了,对于练习,可以到opencores社区上把
3 o Q8 e8 h9 P# M* W6 e% x+ X5 w3 i% c" M5 ~) J3 z# R
minsoc_latest.tar.gz
9 {, ], y1 D! @9 o X: v8 n
) V* J# Z2 | D. N% H4 s: u or1k_soc_on_altera_embedded_dev_kit_latest.tar* a& g; T% d3 D
/ i: {, x, e" S8 B k- L orpsoc-master.tar.gz& T* b; p# O/ c& w2 _
, z, _6 L( X7 e& c% ?5 O& P
这三个工程下载下来,这三个工程都是关于or1200的SOC的参考设计,里面也有相应的参考程序,有时间我会把这三个工程都上传,至于“裸机程序”的练习也可以加深对or1200的理解。
' t6 T/ ^7 y& ^4 o# Q! Q" H. Z! C6 ?/ s8 N
同样,在虚拟机home目录下的soc-design中有orpsoc-v2的参考设计,里面包含一大堆的“裸机程序”源码,我在学习时也是通过这个工程的。
5 d- T; {- _; p6 T7 g4 `% l( H) \4 Y+ Y
下次我们来完善我们的or1200_basic_soc,完善之后我们在此基础上移植u-boot,移植u-boot我们再在上面移植linux系统。; Y1 n" j' t- P- X" K& ]+ {" P
|
|