TA的每日心情 | 怒 2019-11-20 15:22 |
|---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
废话不多说了,继续······3 \# t* [: P# S4 z- X9 G8 Z/ \
; C1 W% D ?; s7 w. R( a4 F 在我们的源码目录下是不是还有一个这样的文件?
* {5 K3 |8 x/ c( b3 N0 @
6 T) k" M! X- H [: E# {7 ~
. F3 ?) X! i9 d# ^5 q
0 [+ J( Q& B( N0 [. J 在virtualbox的镜像中,包含了一个or1ksim的程序,这个程序是对or1200体系架构的软件模拟,就好像ARM架构类似的也有一个在软件上模拟芯片行为的程序,具体叫什么我不记得了,呵呵。
, `2 o* U$ G/ \- ]3 T. D3 K f4 e# y
也就是说,我们写的程序可以在这个or1ksim进行模拟,而or1ksim.cfg就是对or1ksim的配置文件,关于配置文件这里先不讲了,因为码字实在是很辛苦啊。感兴趣可以自行打开了修修改改的,对于上面我们写的程序来说,这个配置文件or1ksim.cfg我都改好了,直接用就行了。
5 i6 F& L& O# W A2 h: p, l6 _6 g+ o! ]
$ H$ p9 F, O* a- e
4 Y- d# C0 x+ \4 `8 r 老规矩,把windows下的共享文件夹mount上去5 n* g5 N# R, l) s
+ |. F$ G5 Z* ]2 `7 s0 b' B) ]. z
- l, ]3 z& x( N8 H+ C( W
* \0 r; e! W$ f" Y6 M* f4 ~& s7 X# R
5 D+ |; Z+ E6 \, z& a9 I 然后,切换到我们的源码目录下,cd啊cd8 z7 R* ~9 I# ^, h. \* n
: P1 w' {( A1 C' X5 V m
! p3 } K7 f: V. z: i# R0 ]+ L3 b+ I2 w3 u3 Y
3 l; V" [5 }9 @# d. A 再然后,make吧% h/ ]; y- i) f T
# ^0 r6 G6 |2 w& L* b' t- K
" r" Y3 C/ J, L8 X: m5 b3 U: L8 }! G9 _: ]( H% _# U( {
; V4 L( Y3 r' Y4 J7 X! { 信息太多了,这里我贴不完了,编译生成boot.or32就是可执行文件了
- U1 C' W7 V, e1 ?& N! y4 z, b3 d5 B0 i3 K' n, ]# h7 M
- C1 K1 E; v# S 再然后,验证下我们写的代码是不是可以执行的,在or1ksim上验证吧,输入sim -for1ksim.cfg boot.or32,然后回车
2 ?/ f4 o+ U0 X% _" V, V5 K) D/ o6 h% E- k! L, `$ s7 @
8 ` c: V- p, |7 D2 U& [
. _ o M, C6 f8 d- n: v, X
2 ?& {) m# k4 w1 H: w: R" l3 X" _
然后可以看到一堆信息出来了。
8 L! B0 F! v( m7 v# @- g/ u5 Q, e+ k
其中包含我们在lds文件中定义的段信息
1 d7 k' ?$ w/ O2 [; s8 e" d. e8 s' P: _8 v7 F6 P4 P
8 X+ H) R* h, @4 g" R# P7 r" P$ v, }( e; [! r0 u
3 N8 V, o; {* }8 w7 \, F% R( t, f! o3 H3 Y( x6 h3 M
然后在弹出的xterm窗口,这个窗口就是模拟UART16550的串口输出的,并且在命令行中都可以看到我们的main函数执行的结果了。& T3 E2 i; U; ^3 O
4 U1 N. t+ O/ N' }+ |
9 Q: `. I }: e: w% P" x/ U7 Z; K1 u( `- _6 t' |7 F* g2 e
7 i4 h( x$ t% l# P6 E( [ E+ J. a2 G; X. T
但是这样验证还不是我们想要的结果咧,我们是要下载到我们之前做得SOC上才算成功的咧,好,现在至少已经说明我们的程序编码至少是可以运行的了,接下来就是下载到板子上来验证。
9 a+ G3 y# S( e/ P! l3 [) ^
1 e2 ^! B3 f; X* }7 E6 R$ V# s 好,QuartusII软件打开,FPGA板子连接好,下载器连接好,把之前综合出来的or1200_basic_soc.sof文件download到板子上。" o. E( ?+ M/ f0 k* U3 m# _
, } e. w3 Y, _' N
' M2 U. t# X! G/ z5 @
- F! d% i' P9 N 3 |% w# r# r3 F3 z4 }. l
" u4 K: f/ l& t9 E0 w. u 然后在virtualbox的右下角中把下载器连接到虚拟机上去。 E/ y! D6 |% o* @4 t6 a4 h) P: W, a
^6 W& Y% b q1 O! l% \; A9 e0 p" K$ B
& j; _$ d: t- s3 T& K3 g+ C5 J' w& f7 i) I. Z! R) D. t- i
( S5 A( b8 S3 M2 T
' H+ u4 } K5 P* R0 R9 I
接下来我们休息一下吧,上上网,去找找手头上FPGA芯片的BSD描述文件吧,顺便刷刷微博,看看新浪NBA什么的。好,我现在板子上的芯片是altera的EP2C20F484,要找的芯片的BSD文件就是EP2C20F484.BSD,google之,大喜,收之。
& y2 O/ c+ m5 N0 a$ q. P% t9 ?( p
3 W: {/ X" G! i1 z 好,我们来继续,把BSD文件扔到home目录下,怎么扔,自己想办法吧,BSD文件一定要对应自己板子芯片啊8 A1 O! F0 Y0 o5 ^
) K! D. {% v' v8 s: c! k/ b, ]
$ J. |" Y$ g& w
. ^ n( z7 P) _. t/ w, Y' h# ? 1 n. `, i& U# n; x' e
* U: u# v k. d8 d1 s; T" i0 p6 ]0 Y 继续,打开一个terminal,之前在软件搭建已经把adv_debug_sys_latest.tar.gz包make install了,所以在terminal输入adv_jtag_bridge-h看到adv_jtag_bridge的帮助信息,
1 y9 u( r% y9 e% B( Q0 d8 I3 o' n
) F) }+ v8 M0 a9 r1 i( X9 U
" R$ z' ~1 ^3 c5 C / i6 `8 j8 O0 b# [: c' E2 s7 K* y
3 r; {1 Q: [5 C 上面列出的就是现在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的帮助文档选择对应的下载器选项。- B9 d* F2 B. X B* B& s) y
9 |' ~ G6 Z6 N- U8 ?; ~: O 好,继续,将下载器连上虚拟机后,adv_debug_sys_latest.tar.gz安装好后,soc下载到FPGA板子后,BSD文件放到HOME目录下后,再继续在命令行输入sudoadv_jtag_bridge -b ~/ ft245,提示输入密码时,输入openrisc,adv_jtag_bridge就会连接上下载器+ @5 Z, j# v$ m# ^; B. E
5 n1 C* S: U- [ i% N6 [
2 A" |4 @, f2 H( K; r
$ \/ i+ C/ E. R6 l) f! _
% T" l6 f6 a8 I5 x& x0 T2 N' u 这说明顺利通过下载器连接上or1200的调试接口了,我们可以通过这个JTAG来下载程序了% M1 q3 r8 Z3 F6 |$ D) q! v" W
0 v# X% `* N) ]9 P+ f& |. Q. z5 q9 p: k# F
再打开一个terminal,cd进源码的目录,在源码目录下输入or32-linux-gdb
0 N9 b; ?4 f' y" L/ l3 L1 ~6 @3 P: U- ~- C2 ^
5 r0 i& }4 O' [* D( |! M4 n; G9 o% N
8 i3 R4 c. ?8 V1 z) I1 I
+ B. d) i0 o9 i2 o" C; O3 b6 { c
然后输入file boot.or32,读取boot.or32文件信息
9 h" ^) l9 H3 {8 f: W9 ] M4 B
7 x: N' y8 s ?2 |
. {$ O% {% z) C/ w7 s" X5 \7 f& q& N
: O) q% B& b% B3 e3 D
[, F% N$ q& m* [ 继续输入target remote:9999
( N* H- o( ]5 q: n' A' `6 d6 `. m6 q" u8 |% B
0 U/ q6 } y) W+ l
9 \, D) A% o. `. g
$ M- ?. `2 O5 D! S 这时说明已经通过gdb服务远程登录到开发板上面了。
& S0 S# h# i( |8 t G3 X9 a
S( o. P) h8 n$ ^3 b0 @) e# D) g& V1 [# }
继续输入load,将可执行程序文件boot.or32下载到开发板的SDRAM上
. U+ a+ B7 R4 h @* Q7 N8 ^0 b- V q z/ Z1 L
% A* g& i7 h8 t( R0 n
. O, e4 D; b) \
0 E2 J) l0 _1 f 同样这里也出现我们在lds文件中描述的段信息 U T( g% d$ j
2 K$ r0 T$ Q: W% n9 z
( R1 s- X' b1 [. ~6 i
好,继续,之前我们讲过reset向量是从0x100地址执行的,所以要把CPU的NPC寄存器设置为0x100,这样CPU才会从0x100开始取出第一条指令执行。所以,输入set $pc=0x100
; K$ x5 {: K& [1 g" B, p8 O
! f) G+ k: f9 s1 y( C
0 T% g4 Z! I3 C. r" {- T/ } F
/ @) M* H6 }/ V. ?0 l6 g1 b6 k" ]+ F6 q* e
好,到这里设置完毕啦,在现在可以打开自己熟悉的串口工具了,minicom、c-kermit、putty、ScureCRT,我用在是ScureCRT,windows版本的,打开设置好波特率,在写源码board.h中关于串口的定义是
|: `4 ]+ J+ o# C) c' g1 \! n5 e+ I" U5 t* \* F% s
% X C$ C- t; e0 q8 G2 X: i7 _
2 I1 Y! `3 s7 F" U) Z1 S7 X" l1 q% l9 Y$ t. L
波特率为38400,也可以修改成自己想用的波特率,由于我的板子的速度问题,38400是比较适中的,因为在后面板子上了linux后,lrz和lsz在38400的波特率可以和虚拟机无错误传输。
7 S3 |2 G, e7 Q/ \3 s4 a( G) Q2 x; P( ~2 J( G; e2 M' z
2 v. e& f; n. N! M4 \/ g0 h ScureCRT中设置好波特率,打开,然后回到虚拟机的terminal中,输入c
0 L- E1 K" b' W; h5 A! T& i+ D' c- [2 h) m/ w
; ~+ `, J: \) l) d8 n2 k
9 k) n$ I1 D' u
8 K9 I8 ^; r: l0 R) T1 F 然后准备切换到ScureCRT中,好紧张,有没有信息呢,来了。2 I2 A: V7 `& k
- u; E, |( n' x: Y
/ C* [9 h, J* a+ O; [4 @# k
: k1 t+ N* e/ i N" M* m4 E6 r- e1 k% D* h1 E
哎呀,有了,妥妥的,好了,第一个程序就到此为止了。
7 F9 h3 ?% A# u4 U# u4 l1 Q) l
|" Y: c- l# I: R, A9 a 接下去我们做些什么好呢,对了,还有关于or1200的定时器timer和中断的程序没写呢,这些留给朋友们去练习了,对于练习,可以到opencores社区上把+ D8 T4 a6 ~+ R) _0 D6 l( g1 z0 G
, I5 D7 m0 C6 |" C
minsoc_latest.tar.gz
0 q6 U" z. B% h3 Z) L3 E* c- b" p# }' o- Q1 z, w
or1k_soc_on_altera_embedded_dev_kit_latest.tar( q+ x6 I; l1 q+ X0 I, m- {* W
; G3 o* J8 f6 z orpsoc-master.tar.gz9 w$ ^% h6 N$ j3 A; _
# [0 H! q8 K0 k 这三个工程下载下来,这三个工程都是关于or1200的SOC的参考设计,里面也有相应的参考程序,有时间我会把这三个工程都上传,至于“裸机程序”的练习也可以加深对or1200的理解。
0 U2 m& Z+ f" Z" }1 q- B \2 _/ a4 y% c; L
同样,在虚拟机home目录下的soc-design中有orpsoc-v2的参考设计,里面包含一大堆的“裸机程序”源码,我在学习时也是通过这个工程的。6 h: M2 y( E# t D. t# S
. f. L* q, u: z+ j/ c. E, `
下次我们来完善我们的or1200_basic_soc,完善之后我们在此基础上移植u-boot,移植u-boot我们再在上面移植linux系统。9 i+ U! F) K$ [$ e8 t* E7 R/ F
|
|