![](https://jhalfmoon.com/dbc/wp-content/uploads/2018/11/JH-2-150x150.png)
前回、Vitis IDEでデバッガを使うために、RISC-V(MicroBlaze-V)のコアを再設定しました。ハッキリ分かっているわけじゃないんだけれども、まあ「こんなもんだろ~」的な成り行きで設定してました。しかし、待てよと、それぞれのチェックボックス、プルダウンメニューの一つ一つに神だか悪魔だかが宿っておると。
※かえらざるMOS回路 投稿順 INDEX
※実習にはWindows11上の AMD社 (Xilinx) Vivado 2024.1 および Viris 2024.1 を使用させていただいております。
※ターゲットボードは、Digilent製 Cmod S7ボードです。お求めやすい? Spartan-7搭載の超小型開発ボードです。
参照させていただいたAMD(Xilinx)社ドキュメント
以前さがしたときには見つからなかったドキュメントが見つかりました。といって「読み込んだ」わけでは全然なく、「あった」というだけなのですが。
UG1629 MicroBlaseV Processor Reference Guide
いつくか疑問解決
上記のドキュメントを読んで、ようやく腑に落ちたのが以下のプルダウン・ボックスでの設定です。
上記の Select Implementatio optimization なるプルダウンボックス、合計4つのチョイスが列挙されております。前回は一番ちいさいのは AREA っしょ、という勝手な推測にて AREAを選択。実際にFPGAに書き込んで実機動作まで確認しました。しかし、上記のドキュメントに目を通したことで4つの選択肢の意味をようやく理解しました。
-
- AREA、3段パイプライン
- THROUGHPUT、4段パイプライン
- PERFORMANCE、5段パイプライン
- FREQUENCY、8段パイプライン
という選択でした。プロセッサに精通しておられるお兄さん、お姉さん方には説明不要かと思いますが、パイプラインを深くするほどハードウエア量はかさみます。その代わりパスは短くなるのでクロック周波数を上げることができるようになります。また、深い方が、いろいろ工夫して「ちょっと待った」と処理が止まるような状態(ストール)を防ぐことも可能でないかと。知らんけど。
通常、Arm様のコアなどでは、パイプライン段数が変わると製品が異なり、深い方がお値段高そ~(実際は知りませんが)です。しかし、Xilinx様はプルダウンメニュー1つで4種類を切り替えられるっと。大判ぶるまい?
後でパイプラインの設定を切り替えて命令動作の挙動の深いところを見てみたい、とも思ったですが、メンドそう。まあ、時間があったらね。
まあ周波数が遅くてよい、ほんわかした制御用の構成ならAREAで十分でしょ。FREQUENCYなど選択すると、ちっこいFPGA搭載のCmod S7では載せきれない可能性がありそうです。
なお、Microblaze Vプロセッサは、シングルイシューの(スーパスカラーではない)順番に処理していくフツーのRISCのスタイルです。シンプルが一番。ホントか。
なお、RISC-Vには32ビット、64ビット(128ビットもあり)が存在し、ほぼほぼ「シームレス」な感じでビット幅を自然に拡張したりできるのです。お作法として
-
- RV32I、32ビットの最も基本的な整数命令
- RV64I、64ビットの最も基本的な整数命令
は必須。それ以外の「オプショナル」な命令どもは英文字一文字で表記してIの後に並べていきます。その際、
-
- Mは乗算、除算のオプション(RV32M)
- Aはアトミック命令のオプション(RV32A)
- Cは圧縮命令のオプション(RV32C)
といった具合です。上記のドキュメントを拝見すると、Xilinx社は32ビットだけでなく 64ビットのRISC-Vもサポートしているもみたいなのですが、以下のプルダウンメニューからは手元の環境(無料のやつだし)では見えないようです。
まあ、64ビット使うような設計しないけど。
一番上の Enable Atomic Instractions のチェックボックスはRV32Aオプションであるアトミック命令を含むか否かのスイッチ。これまたプロセッサに精通しておられるお兄さんお姉さん方には説明不要かと思いますが、マルチプロセス、マルチスレッドなソフトウエアを作製する上でアトミック命令があると無いのでは段違いであります。
Enable Integer Multiply and Divideのところのプルダウンメニューは、RV32M、乗除算命令を含めるか否かのオプションです。底辺の制御用マイクロコントローラの中には乗除算など持たないものが昔は多かったです。まあ乗除算命令なくても年寄は普通に計算できるし(遅いけど。)そのためにハード使うのはモッタイナイという感じ。でも、Xilinx社FPGAにはDSPブロックなる専用ブロックあり、この辺利用すれればハードウエア乗算器などお茶の子さいさい。折角あるのでモッタイナイなどということもなし。使うの一択でしょう。ただしここに、STANDARDとOPTIMIZEDと2つの選択肢があって、力の入れ方がちょっち異なるみたいなのだけれども上記のドキュメントからはその差をうかがえず。残念。
次の Enable Floating Point Unit は、浮動小数点演算ユニットを搭載して RV32F命令を有効にするか否かのオプションです。なおRV32Fは、単精度浮動小数です。倍精度はRV32Dとなりますが、上記のプルダウンでは現れませんでした。こちらは実装されてないのかな。まあ単精度にせよ、FPUをイネーブルにしたらどのくらいハード量が増えるのか?恐ろしいけど後でやってみますか。。。
まだまだいろいろ項目多数なんだけれども今回はここまでか。