FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://sites.google.com/site/fpgadevelopindex/

自作ISSのRelease-6への対応を検討する(新規命令を実装する)

msyksphinz.hatenablog.com

という訳で、実装した。Coremarkも完走したので、とりあえずは大丈夫かな。

github.com

github.com

  • PC操作、分岐系
  • addiupc
  • align
  • aluipc
  • aui
  • auipc

  • コンパクト型分岐系

  • balc
  • bc
  • blezalc
  • bgezalc
  • bgtzalc
  • bltzalc
  • beqzalc
  • bnezalc
  • blezc
  • bgezc
  • bgec
  • bgtzc
  • bltzc
  • bltc
  • bgeuc
  • bltuc
  • beqc
  • bnec
  • beqzc
  • bnezc
  • bovc
  • bnvc

  • メモリアクセス拡張系

  • lsa

  • 算術演算(HI/LOを利用しない)系

  • div_r6
  • mod_r6
  • divu_r6
  • modu_r6
  • mul_r6
  • muh_r6
  • mulu_r6
  • muhu_r6

  • 分岐系

  • jic
  • jialc

  • 参考演算子

  • seleqz
  • selnez

基本的にパイプラインを効率性を重視する命令が増えている。 - 遅延分岐を撤廃 - 1命令で3レジスタを読む命令の撤廃

命令数的にはどうなのか?

実は、R5でコンパイルした方が命令数的には少ない。ただ、R6の方がパイプラインの効率が良いかもしれんね。

$ tail coremark.r5.log
    333416 : [80002aa4] 8fb60080 : lw      r22,0x0080(r29)         r29=>7f003f78 (7f003ff8)=>00000000 r22<=00000000
    333417 : [80002aa8] 8fb5007c : lw      r21,0x007c(r29)         r29=>7f003f78 (7f003ff4)=>00000000 r21<=00000000
    333418 : [80002aac] 8fb40078 : lw      r20,0x0078(r29)         r29=>7f003f78 (7f003ff0)=>00000000 r20<=00000000
    333419 : [80002ab0] 8fb30074 : lw      r19,0x0074(r29)         r29=>7f003f78 (7f003fec)=>00000000 r19<=00000000
    333420 : [80002ab4] 8fb20070 : lw      r18,0x0070(r29)         r29=>7f003f78 (7f003fe8)=>00000000 r18<=00000000
    333421 : [80002ab8] 8fb1006c : lw      r17,0x006c(r29)         r29=>7f003f78 (7f003fe4)=>00000000 r17<=00000000
    333422 : [80002abc] 8fb00068 : lw      r16,0x0068(r29)         r29=>7f003f78 (7f003fe0)=>00000000 r16<=00000000
    333423 : [80002ac0] 03e00008 : jr      r31                     r31=>bfc00094 pc<=80002ac4 pc<=bfc00094
    333424 : [80002ac4] 27bd0090 : addiu   r29,r29,0x0090          r29=>7f003f78 r29<=7f004008
    333425 : [bfc00094] 42000020 : wait
$ tail coremark.log
    345063 : [800026c0] 8fb60088 : lw      s6,0x0088(sp)           sp=>7f003f80 (7f004008)=>00000000 s6<=00000000
    345064 : [800026c4] 8fb50084 : lw      s5,0x0084(sp)           sp=>7f003f80 (7f004004)=>00000000 s5<=00000000
    345065 : [800026c8] 8fb40080 : lw      s4,0x0080(sp)           sp=>7f003f80 (7f004000)=>00000000 s4<=00000000
    345066 : [800026cc] 8fb3007c : lw      s3,0x007c(sp)           sp=>7f003f80 (7f003ffc)=>00000000 s3<=00000000
    345067 : [800026d0] 8fb20078 : lw      s2,0x0078(sp)           sp=>7f003f80 (7f003ff8)=>00000000 s2<=00000000
    345068 : [800026d4] 8fb10074 : lw      s1,0x0074(sp)           sp=>7f003f80 (7f003ff4)=>00000000 s1<=00000000
    345069 : [800026d8] 8fb00070 : lw      s0,0x0070(sp)           sp=>7f003f80 (7f003ff0)=>00000000 s0<=00000000
    345070 : [800026dc] 03e00009 : jalr    ra,zero                 ra=>bfc00094 pc<=800026e0 pc<=bfc00094
    345071 : [800026e0] 27bd0098 : addiu   sp,sp,0x0098            sp=>7f003f80 sp<=7f004018
    345072 : [bfc00094] 42000020 : wait