ブログ記事100件
安価なRISC-VマイコンCH32V003が秋月でも発売され,ArduinoIDEで動くとの事なので試してみました。まだまだ分からない点や問題がありますが,普通のデジタル出力までは来ましたのでその概略のメモです。[ハードの準備]今回手に入れた物です。1.CH32V003J4M68pinSOP2.CH32V003F4P620pinTSSOP3.それぞれのピッチ変換基板4.WCH-LinkEエミュレーター(プログラムダウンロード用)8PinのMPUは1個40円
NVIDIAのGPUのライブラリーであるCUDA(クーダ)をRISC-Vでサポートする様です。RISC-V、UCバークレー製ですが、もう今は、中華のおもちゃになってます。
8PinのRISC-VマイコンCH32V003J4M6をArduinoIDEで使っています。時としてプログラムを書き込めなくなるので,その事例と対処法のメモです。私の場合,UART通信を使ったときに書き込めなくなったので,エミュレーターのユーティリティ機能でマイコン上で動いている「プログラムを全消去」を使いました。CH32V003の中でもJ4M6はピン数が8と少ないマイコンなので,プログラムの書き込みピンSWIOとデフォルトのUART通信のTXが同じPD1ピンになっています(^^;;;。
他のCPUの弱点を分析して反映されていることもあり、RISC-V命令セットの何が特徴なのか?を見ていきたいと思います。RISC-Vの命令形式を調べてみます。以下を見ると、ものすごくビットが揃っている事が分かります。基本的に命令セットは32ビット長ですが、7ビットのopcode,レジスタ指定(rd,rs1,rs2)が5ビット、その他がfunctとして機能指定をしたり、immで即値となっています。このRISC-Vの命令形式がハードウェアの作りやすさを考慮しており、rd(書き込みレジスタ指定)
Arduinoで動くRISC-VマイコンCH32V003では,PA1とPA2は外部クロックをつなぐPinの役目もあるためかデフォルトではGPIOとして使えません。8pinは当然として20Pinでも一般的な出力Pinなどに使いたいので,設定法を探してみました。機材は・MPU:CH32V003J4M6(8pin)とCH32V003F4P6(20pin)・Boards;CH32MCUEVTBoardsbyWCHVer.1.0.3・書き込み機:WCH-LinkEエミュレータ
ArduinoIDEで小さなRISC-VマイコンCH32V003が動くようになりました。センサーなどをつなぐにはI2C通信が必要な事も多く,ATtiny402などをテストした環境と同じI2C接続の光センサーで試してみました。最大の難敵はメモリ不足でした。プログラムメモリ16KBに安心していてはいけないのです(^^;;;;;;☆その後2024年1月時点ではボードマネージャのバージョンアップでかなりメモリ使用が改善されているので参照してみてください。→ArduinoでCH32V0
RV32Iの基本命令のJ形式を見ていきます。J形式はJAL,JALRの2つの命令があります。どちらも関数呼び出しで使われる命令ですので、これも実際の関数の記述も見ながらどう使われているか見てみます。以下のC言語の記述を考えましょう。inth1(void){return10;}inth2(inta){returna+10;}int(*ptr)(int)=h2;/*関数ポインタ*/intgoo(){intt;t=h1(
RISC-VのCPUレジスタを見ていきたいと思います。汎用レジスタが32個(ゼロレジスタを含む)に、PCを別に持っている構成になっています。昨日の命令形式でrd,rs1,rs2が5ビットだったのは、この32個のレジスタを指定するためです。他のCPUのレジスタを調べるとこんな感じですね。多分、組込み領域では16か32で選択されますが、レジスタの数は命令長に影響するので設計者の方針で決まってしまう内容に見えます。特に32ビット命令だとコード効率が悪くなるので、16ビット命令を用意するのだ