FC2ブログ

[LM32](3)interrupt_handlerにjumpしない原因解析

ether.elfをobjdumpで逆アセンブルした。
シミュレーション波形と見比べてみると、
INSTメモリは0x0番地から実行される。


00000000 <_reset_handler>:
0: 98 00 00 00 xor r0,r0,r0
4: d0 00 00 00 wcsr IE,r0
8: d0 20 00 00 wcsr IM,r0
c: 78 01 00 00 mvhi r1,0x0
10: 38 21 02 a8 ori r1,r1,0x2a8
14: d0 e1 00 00 wcsr EBA,r1
18: f8 00 00 3a calli 100 <_crt0> > ここで_crt0(0x100)へjump
1c: 34 00 00 00 nop > 0x18 calliで実際にjumpする前にフェッチされた。

00000020 <_breakpoint_handler>:
20: 90 e0 38 00 rcsr r7,EBA > 0x18 calliで実際にjumpする前にフェッチされた。
   :
fc: 34 00 00 00 nop > ここ0xfcへjumpした。なぜ0x100に直接jumpしないか不明。

00000100 <_crt0>:
100: 98 00 00 00 xor r0,r0,r0
104: 78 1c 20 00 mvhi sp,0x2000
108: 3b 9c 1f fc ori sp,sp,0x1ffc
10c: 78 1a 20 00 mvhi gp,0x2000
110: 3b 5a 80 00 ori gp,gp,0x8000
114: 78 01 00 00 mvhi r1,0x0
118: 38 21 02 a4 ori r1,r1,0x2a4
11c: 78 02 00 00 mvhi r2,0x0
120: 38 42 02 a4 ori r2,r2,0x2a4
124: 44 22 00 04 be r1,r2,134 <_crt0+0x34>
128: 78 03 00 00 mvhi r3,0x0
12c: 38 63 08 f8 ori r3,r3,0x8f8
130: f8 00 00 30 calli 1f0 <_relocate_text>
134: 78 01 20 00 mvhi r1,0x2000
138: 38 21 00 00 ori r1,r1,0x0
13c: 78 02 00 00 mvhi r2,0x0
140: 38 42 08 f8 ori r2,r2,0x8f8
144: 44 22 00 08 be r1,r2,164 <_crt0+0x64>
148: 78 03 20 00 mvhi r3,0x2000
14c: 38 63 00 04 ori r3,r3,0x4
150: 44 23 00 05 be r1,r3,164 <_crt0+0x64>
154: c8 61 18 00 sub r3,r3,r1
158: 78 04 00 00 mvhi r4,0x0
15c: 38 84 06 88 ori r4,r4,0x688
160: d8 80 00 00 call r4 > ここで0x688へjump。
164: 78 01 20 00 mvhi r1,0x2000 > jumpする前にフェッチされた。
168: 38 21 00 04 ori r1,r1,0x4 > jumpする前にフェッチされた。
16c: 78 02 00 00 mvhi r2,0x0
   :
684: c3 a0 00 00 ret

00000688 :
688: b8 20 38 00 mv r7,r1 > 今度のjumpは0x688に直接jumpした。
68c: b8 40 28 00 mv r5,r2
690: b8 20 20 00 mv r4,r1
694: 34 06 00 0f mvi r6,15
698: 50 c3 00 19 bgeu r6,r3,6fc
69c: b8 41 08 00 or r1,r2,r1
6a0: 20 21 00 03 andi r1,r1,0x3
6a4: 5c 20 00 16 bne r1,r0,6fc
6a8: b8 c0 28 00 mv r5,r6
6ac: 28 41 00 00 lw r1,(r2+0)
6b0: 34 63 ff f0 addi r3,r3,-16
6b4: 58 81 00 00 sw (r4+0),r1
6b8: 34 42 00 04 addi r2,r2,4
6bc: 28 41 00 00 lw r1,(r2+0)
6c0: 34 84 00 04 addi r4,r4,4
6c4: 58 81 00 00 sw (r4+0),r1
6c8: 34 42 00 04 addi r2,r2,4
6cc: 28 41 00 00 lw r1,(r2+0)
6d0: 34 84 00 04 addi r4,r4,4
6d4: 58 81 00 00 sw (r4+0),r1
6d8: 34 42 00 04 addi r2,r2,4
6dc: 28 41 00 00 lw r1,(r2+0)
6e0: 34 84 00 04 addi r4,r4,4
6e4: 58 81 00 00 sw (r4+0),r1
6e8: 34 42 00 04 addi r2,r2,4
6ec: 34 84 00 04 addi r4,r4,4
6f0: 50 a3 00 0f bgeu r5,r3,72c
6f4: e3 ff ff ee bi 6ac
6f8: b8 40 28 00 mv r5,r2
6fc: 34 63 ff ff addi r3,r3,-1
700: 64 61 ff ff cmpei r1,r3,-1
704: 5c 20 00 08 bne r1,r0,724
708: 40 a1 00 00 lbu r1,(r5+0)
70c: 34 63 ff ff addi r3,r3,-1
710: 64 62 ff ff cmpei r2,r3,-1
714: 30 81 00 00 sb (r4+0),r1
718: 34 a5 00 01 addi r5,r5,1
71c: 34 84 00 01 addi r4,r4,1
720: 44 40 ff fa be r2,r0,708
724: b8 e0 08 00 mv r1,r7
728: c3 a0 00 00 ret
72c: 34 01 00 03 mvi r1,3
730: 50 23 ff f2 bgeu r1,r3,6f8  > ここで何かが起こり、0x0番地へ戻った。simulation時間62us地点。

その後、IROMのアドレスを見ると。0x0から順次実行
  > 0x168まで行った後、0x688へjump
  > そのまま0x730まで実行した後、0x0へ戻る。2回目のこの地点でsim時間118us地点。
これがずっと繰り返されるようだ。



0x730での命令bgeuが原因のようだ。何が起こったのか。

LatticeMico32 Processor Reference Manual で調べると、
r1がr3以上であれば、PC + へ分岐する。
という事らしい。

bgeu r1,r3,6f8
Syntax = bge rX, rY, imm16
Semantics = if (gpr[rX] >= gpr[rY]) PC = PC + sign_extend(imm16 << 2)




■memcvt.c設定を疑う

#define INST_BASE_ADDR 0x00000000
#define INST_SIZE_LIMIT (1024*16)
#define RWDATA_BASE_ADDR 0x20000000
#define RWDATA_SIZE_LIMIT (1024*8)
#define TARGET_MEM_WIDTH (256/8) > これは.mifではなく.v用かな?
#define TARGET_MEM_WIDTH_MIF 4

system_conf.v内の設定 `define CFG_IROM_LIMIT 32'h3fff
system_conf.v内の設定 `define CFG_DRAM_LIMIT 32'h20003fff


上の設定で、
#define TARGET_MEM_DEPTH_MIF 2048
こうすると、data_ram_data.mifは全て0x00データになる。これは以前正常動作してた時と同じ。
しかし今はリセット番地0x0へのループが発生。

#define TARGET_MEM_DEPTH_MIF 4096
ちなみにこうすると、data_ram_data.mifは0x801辺りから最後0xfffまで初期値が存在するようになった。
こちらもリセット番地0x0へのループが発生。
スポンサーサイト



コメントの投稿

非公開コメント

カレンダー
10 | 2019/11 | 12
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
累積訪問者
現在の訪問者
現在の閲覧者数:
最新記事
最新トラックバック
最新コメント
月別アーカイブ
カテゴリ
プロフィール

bobgosso

Author:bobgosso
FPGAのブログへようこそ!

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード