tag:crieit.net,2005:https://crieit.net/tags/Verilog/feed 「Verilog」の記事 - Crieit Crieitでタグ「Verilog」に投稿された最近の記事 2021-02-09T20:50:42+09:00 https://crieit.net/tags/Verilog/feed tag:crieit.net,2005:PublicArticle/15772 2020-03-19T20:19:01+09:00 2021-02-09T20:50:42+09:00 https://crieit.net/posts/CPU-RISC-V-vs-ICF3-Z オープンソースのCPUの除算性能 RISC-V vs ICF3-Z <h2 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h2> <p>2020年1月15日に<a target="_blank" rel="nofollow noopener" href="https://icf3z.idletime.tokyo/">8bit CPU ICF3-Z</a>を制限の緩いオープンソースのライセンスで公開しました。</p> <p>CPUのようなハードウェアもオープンソースな時代になってきました。CPUのオープンソースで最も有名なのはRISC-Vです。RISC-Vを見てみるとオープンソースによるメリットを見つけることができます。RISC-Vは、とても広い範囲をカバーする32bit(64bit)のCPUですが低性能な領域でも万能というわけではないように思います。</p> <p>例えば通信系のハードウェアでは8bit単位で処理するものもあり32bitが無駄になる場合もあります。無駄になるだけなら問題はありませんが消費電力で不利です。</p> <p>一方、8bit CPUは除算命令がなかったり、除算命令があっても8bit÷8bitで、使える範囲が狭いということがありました。8bit CPUのオープンソースも既に複数、存在していますが、高性能な除算を持ったものは、あまりないように思います。ICF3-Zはオープンソースで、少ないトランジスタ数であるにもかかわらず高速な除算が可能です。</p> <h2 id="除算性能の比較"><a href="#%E9%99%A4%E7%AE%97%E6%80%A7%E8%83%BD%E3%81%AE%E6%AF%94%E8%BC%83">除算性能の比較</a></h2> <p><strong>実際に比較しないと、わからない人が多いと思っています。</strong> ICF3-ZのZeviosを小型のRISC-VコアであるlowRISCのibexと比較してみました。 ICF3-ZのZeviosは8bit CPUですが、lowRISCのibexは<strong>除算器を持った32bit CPU</strong>です。</p> <p>lowRISCの<a target="_blank" rel="nofollow noopener" href="https://www.lowrisc.org/blog/2019/06/an-update-on-ibex-our-microcontroller-class-cpu-core/">Webページ</a>にXilinxのローエンドのFPGA(7シリーズ)に実装した場合の周波数が50MHz、面積2500LUTと書かれてありました。 除算のサイクル数は<a target="_blank" rel="nofollow noopener" href="https://ibex-core.readthedocs.io/en/latest/instruction_decode_execute.html#multiplier-divider-block-mult-div">別のページ</a>に37サイクルと記述されています。</p> <p>Zeviosは同じくXilinxのローエンドのFPGA(Artix-7)に実装した場合、周波数は150MHzになります。つまりibexの3倍の周波数で動作します。ibexが1命令を実行するのにZeviosは3命令を実行できる。</p> <div class="table-responsive"><table> <thead> <tr> <th>除算</th> <th>ibexRISC-V[サイクル]</th> <th>ZeviosICF3-Z[サイクル]</th> <th>ibexを1とした倍率</th> <th>周波数を考慮した倍率</th> </tr> </thead> <tbody> <tr> <td>16bit÷8bit</td> <td>37</td> <td>20</td> <td>1.85</td> <td>5.55</td> </tr> <tr> <td>24bit÷8bit条件付き</td> <td>37</td> <td>21</td> <td>1.76</td> <td>5.29</td> </tr> <tr> <td>32bit÷8bit</td> <td>37</td> <td>55</td> <td>0.67</td> <td>2.02</td> </tr> <tr> <td>32bit÷16bit</td> <td>37</td> <td>約350</td> <td>0.11</td> <td>0.32</td> </tr> </tbody> </table></div> <p>0除算などのチェックや演算レジスタへのロード、ストアの補正として3~6サイクル追加しています。<br /> ZeviosはXilinxのFPGA XC7A35TICSG324-1Lに実装した場合です。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>ibexは2500LUTの面積ですが、Zeviosは400LUTの面積です。 外部I/OなどZeviosに不足しているものがあるかもしれませんが<strong>5分の一の面積で5倍以上の性能が出る</strong>ことは、考えるべき点ではないでしょうか。16bit÷8bitは32bit CPUであるRISC-Vに不利ということはありますが、制御など32bitの精度が必ずしも必要ない場合もあるように思います。</p> <p>ICF3-Zは海外のパクリな構造ではなく僕の考えた独自アーキテクチャです。疑似パイプラインによって高周波数で動作することも、この圧倒的な面積当たりの性能(25倍)に貢献しています。</p> <p>このオープンソースな8bit CPU ICF3-Zが、期待を含めれば2020年代に大きく産業に貢献していくかもしれません。</p> <h2 id="参考リンク"><a href="#%E5%8F%82%E8%80%83%E3%83%AA%E3%83%B3%E3%82%AF">参考リンク</a></h2> <p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/izuna/items/49ad4eef53c65c591d61">8bit CPU ICF3-ZのZeviosの除算性能のメモ</a></p> <p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/izuna/items/38a04fbedf531f193a7d">8bit CPU ATmega328の除算性能を測定してみた</a></p> <p><a target="_blank" rel="nofollow noopener" href="https://icf.hatenablog.com/entry/2019/04/16/181417">仮想マシンの加速支援機構つきの新型8bit CPU</a></p> spinlock