openMSP430を使ってみる[導入・開発環境整備編]
※この記事は3部に分かれています。以下の記事も併せてどうぞ。
| Link |
|---|
| (1) openMSP430を使ってみる[導入・開発環境整備編] ※この記事です |
| (2) openMSP430を使ってみる[ハードウェア編] ハードウェア・RTLのカスタマイズを紹介します |
| (3) openMSP430を使ってみる[ファームウェア編] ファームウェアのカスタマイズ・コンパイルとデバッガを利用したデバッグの方法を紹介します |

openMSP430って何よ?
openMSP430はTexas Instrumentsが開発・販売しているMSP430マイコンの機能をFPGA上で再現したもので、無償で公開されているいわゆるソフトコアCPUです。
「FPGAに実装可能な無償のソフトコアCPU」と聞くと『胡散臭い』『どうせ変な制約があってマトモに使えないだろう』と邪推する人も多いでしょうが、マトモに動きます。
ざっくり以下のような特徴があります。
- BSDライセンスで無償公開されている
openMSP430はBSDライセンスで公開されており、開発成果物を公開する義務がありません。また、著作権を消さない限りはほぼ制約なく利用・配布することができます。
うまく利用すればDIYだけでなく量産製品の生産性向上にも大きく寄与することでしょう。 - 開発環境はgccベースのコンパイラなど含めすべて無償で入手できる
ソフトウェア環境の構築にはいっさいお金はかかりません。
(…とはいえgccベースの開発環境はTexas Instrumentsがメンテナンスしてくれているので何らかの形で売上に貢献しましょう。) - ドキュメントが非常に詳しく書かれている
開発者のGirard Olivierさんが非常に丁寧にドキュメントを記載してくれており、ただドキュメントを読み込むだけでもかなり理解を深めることができます。
英語の勉強にもなりますしね(ニッコリ) - 実FPGAできちんと動作する(重要!)
ソフトコアCPUの中には、開発者がCPUコアを開発することしか興味がなく「シミュレーション上は動いてますが、実際のFPGA上でプログラムが動くことは確認してません。する予定もありません。(おわり)」みたいなものが意外と多くあります。
openMSP430は実FPGAでもきちんと動作することが確認されている上、デバッガなども同梱されています。
メモリ空間がプログラムメモリとデータメモリを合わせて64kB以下という制約はあるものの、DIYで気軽に使えるソフトコアプロセッサという意味ではほぼ一択ではないかと思います。(そんなモンDIYで気軽に使えるスキルがある人がどれだけ居るんだ、ていうのは別として…。)
たまたまopenMSP430に触れる機会があり、その際に環境構築を行ったので備忘録も兼ねてデモプロジェクト・Windows環境で開発する際のノウハウなどを公開することにしました。
デモプロジェクトはGithubで公開していますのでよければどうぞ。
GPIO・Basic UART・I2Cマスタ機能を実装していますので、そのままでもワンチップマイコンと同じ程度には使えるでしょう。
| URL | |
|---|---|
| omsp430_demo_tmct | https://github.com/tmct-web/omsp430_demo_tmct |
デモプロジェクトはコアの言語に合わせてすべて Verilog か SystemVerilog で作っています。
「あまり馴染みはないけどソフトコアCPUが使ってみたい!」という人は、デモをダンロードして ¥board フォルダにある各ブレッドボード向けのプロジェクトを開いてみてください。
ちなみに、ソフトコアCPUといえば各FPGAメーカーが各々独自のものを開発し提供しています。たとえばIntelならNIOSII、XlilnxならMicroBrazeが有名ですね。
これらのコアはメーカーにより開発環境などが提供される等のメリットはあるものの、最大のデメリットは各メーカーのFPGA専用に作られていることです。
コアを選択すると自ずと制御機能の中核ハードウェアがFPGAメーカーに依存する形になってしまい、移植性が大変悪くなってしまいます。
BCP対応を考えるなら製品用途でもopenMSP430を採用するメリットはあるでしょう。
MSP430(現物)と何が違うの?
IC形態で販売されているMSP430との最大の違いは、基本的にCPUコア以外は好き勝手に構成できるということでしょう。
いらない機能を省いたりして独自のハードウェア構成を構築することができます。FPGAベースのシステムであれば外付けチップを追加することなく機能を大幅に強化することができるでしょう。
ただ、たいていの周辺ハードウェアはドライバファームウェア込みで自力で実装する必要があることには注意が必要です。
たとえばデモプロジェクトに機能を追加しようとした場合、FPGA開発だけではなくファームウェアの知識やビルド環境構築に対する知識も必要になってきます。
わりと広い分野で高い技術力が要求されるので組み込み系を極めたい人にはチャレンジしがいのある課題であると思います。
何をするにしてもHow Toを明確に示したものは無いか、あったらラッキー、くらいに思っておいた方が良いでしょう。
開発環境を構築する
まずは開発環境を入手しましょう。
ソフトウェア類についてはいずれも2022年時点では無償で入手可能ですが、一部ダウンロードの際にユーザーアカウントの登録が必要です。
ちなみにファームウェアのコーディングやコンパイルはすべてテキストエディタかコマンドプロンプト上で行います。
統合開発環境なんてものはありません。
〔準備1〕コアを入手する
openMSP430はドキュメント含めてOpenCores.orgからダウンロードすることができます。
サンプルプロジェクトに使用しているI2Cマスタコアも入手可能です。(※いずれのプロジェクトもダウンロードにはアカウント登録が必要です)
とりあえず使ってみるだけならGithubからデモプロジェクトだけダウンロードしてもらえばアカウントなしで最低限のソースコードは含まれます。
| URL | |
|---|---|
| omsp430_demo_tmct | https://github.com/tmct-web/omsp430_demo_tmct |
| openMSP430 | https://opencores.org/projects/openmsp430 |
| I2C controller core | https://opencores.org/projects/i2c |
| OpenCores.org | https://opencores.org |
〔準備2〕開発ツール類を入手する
開発ツール類をダウンロードしてインストールします。
開発ツール類はパスがあまり長くなく、2バイト文字や空白を含まないパスにインストールすることを推奨します。
この記事では c:¥dev 以下にインストールされていると仮定して説明します。
| URL | |
|---|---|
| mspgcc | mspgcc - Google検索 ※Texas Instrumentsのサイトからダウンロードします |
| Make for Windows | http://gnuwin32.sourceforge.net/packages/make.htm |
| magicsplat-tcl | https://sourceforge.net/projects/magicsplat/files/magicsplat-tcl/ |
あとFPGA自体のコンパイル環境は好みのものをどうぞ。上記にはありませんが、デモプロジェクトをコンパイルするならQuartus Primeが必要になります。
〔準備3〕パスを通す
以下のパスを環境変数のpathに登録するか、環境を汚すのがイヤな人はバッチファイルで一時的にパスを追加した環境でプロンプトを起動できるようにします。
(※c:¥dev 以下にツール類をインストールしていると仮定しています。ツールをインストールしたパスに応じて変更が必要かもしれません。)
- c:\dev\Tcl86\bin
- c:\dev\msp430-gcc\bin
- c:\dev\msp430-gcc\include
- c:\dev\GnuWin32\bin
バッチファイルを作って開発環境としたい場合は以下のコードを参考にどうぞ。
echo off
path %PATH%;C:\dev\msp430-gcc\bin;C:\dev\msp430-gcc\include;C:\dev\GnuWin32\bin;c:\dev\Tcl86\bin
cmd /k
コードを見てみる
プロジェクトのファイル構成を簡単に説明しておきます。
openMSP430プロジェクトの中身
OpenCores.orgからダウンロードした圧縮ファイルを解凍すると、たくさんのフォルダが展開されます。
各フォルダの中身は概ね以下の通りです。
| Folder | Details |
|---|---|
| /branches | 空っぽ |
| /tags | 空っぽ |
| /trunk/core/bench | テストベンチ関連のファイル |
| /trunk/core/doc | MSP430のデータシート |
| /trunk/core/rtl | RTL本体 |
| /trunk/core/sim | シミュレーション用スクリプトなど |
| /trunk/core/synthesis | 各社FPGAへの実装サンプルプロジェクト |
| /trunk/doc | ドキュメント類 |
| /trunk/fpga | 各社FPGA評価ボードへの実装サンプル |
| /tools/bin | デバッグ用TCLスクリプト |
RTLしか興味がないのであれば、必要なのは /trunk/core/rtl の中身だけです。
ただ、/trunk/doc に含まれるドキュメントはとても詳しく書かれています。ざっと目を通しておいた方が良いでしょう。(英語だけど)
また、/tools 以下に含まれるtclで記述されたデバッガ類は、とくにFPGAにCPUコアや周辺モジュールを実装した直後のハードウェアデバッグには非常に有用です。
デモプロジェクトの中身
omsp430_demo_tmctの中身は概ね以下のようになっています。
なお、以下からは省略しているフォルダもありますが、要らないから書いてないという意図ではないので削除する場合は十分に注意してください。
| Folder | Details |
|---|---|
| /board/terasic_de0 | 主に以下が含まれます: - Terasic DE0(Intel CycloneIII EP3C16F484C6)向けのプロジェクトファイル - PLL・プログラムメモリ・データメモリのIPコア - トップレベルファイル(omsp430_demo_top.v) - openMSP430の構成定義ファイル(openMSP430_defines.v) |
| /board/terasic_de0cv | 主に以下が含まれます: - Terasic DE0CV(Intel CycloneV 5CEBA4F23C7)向けのプロジェクトファイル - PLL・プログラムメモリ・データメモリのIPコア - トップレベルファイル(omsp430_demo_top.v) - openMSP430の構成定義ファイル(openMSP430_defines.v) |
| /doc | デモプロジェクトに含まれるドキュメントへのリンクが格納されています。 |
| /firmware | 以下が含まれます: - サンプルファームウェアのソースコード(*.c; *.h) - makeファイル - リンカースクリプト - 開発環境用のバッチファイル(dev.bat) |
| /firmware/bin | *.binファイルをmifファイルに変換するためのプログラムとソースコードが含まれます。 プログラムは make 時に呼び出されて使用されます。 |
| /firmware/obj | コンパイルの際、中間オブジェクトファイル(*.o)が生成されます。 |
| /firmware/output | コンパイルの際、最終成果物ファイル(*.bin; *.mif)が生成されます。 |
| /firmware/tools/bin | 主にデバッグ時に使用するTCLスクリプトが含まれます。 |
| /firmware/tools/lib | TCLスクリプトを実行するためのライブラリが含まれます。 |
| /rtl/basic_uart_tmct | ごく基本的なUART機能のコアが含まれます。 コアについての詳細は readme.md に詳細が記載しています。 |
| /rtl/i2c_master | OpenCores.orgで公開されているI2C controller core のコア部分が含まれます。 I2C controller core |
| /rtl/omsp430 | openMSP430 の /trunk/core/rtl フォルダの中身がそのまま含まれます。 以下のファイルはこのデモプロジェクトでは使用されません。 - /rtl/omsp430/periph/* - openMSP430_defines.v ※openMSP430_defines.v は /board 以下にある各ボード向けのものが使用されます。 |
| /rtl/omsp430_periph_regs | GPIO・UART・I2Cに関連するレジスタ部分が含まれます。 |
デモプロジェクトのコンフィグレーション
デモプロジェクトのコンフィグレーションや機能は何もいじらない状態では以下の通り構成されています。
ペリフェラルバスに UART と I2Cマスター機能 を接続しているので、このままでもほぼ普通のワンチップマイコンと遜色ないことはできるはず。
| Item | Details |
|---|---|
| プログラムメモリ | 16k Bytes (8k words) |
| データメモリ | 4k Bytes (2k words) |
| ペリフェラル領域 | 512 Bytes |
| ハードウェアブレークポイント | 無効 |
| デバッグインターフェイス | UART |
| IRQ | ×13 |
| UARTインターフェイス | ×1 |
| I2C マスタインターフェイス | ×1 |
| GPIO | 8bit × 2 |
サンプルファームウェアにはシリアル通信ターミナルからのコマンド発行でハードウェアを一通り動かすことができるシリアルコンソールが実装されています。
実装されたハードウェアに対する制御のサンプルとして参照するとよいでしょう。
ハードウェアのアサイン
ボード上のデバイスやピンに対しては以下のようにアサインされています。
各FPGAのピンアサインはプロジェクトに含まれるピンアサインファイルをご覧ください。
| Item | Direction | Details |
|---|---|---|
| Key0(Button0) | Input | 押下でリセット |
| Key1(Button1) | Input | 押下でIRQ0割り込み発生 |
| Key2(Button2) | Input | 押下でIRQ1割り込み発生 |
| スライドスイッチ 7~0 | Input | PORT00[7:0] |
| LED7~0 | Output | PORT01[7:0] |
| LED8 | Output | DEBUG_FREEZE ※デバッガによるCPU停止中に点灯 |
| LED9 | Output | PLL_LOCKED ※PLLロックで点灯 |
| GPIO1-22pin | Input | デバッガ用UART:RX ※TCLスクリプトのデバッガを使用する場合はUSB-UART変換などをここに接続 |
| GPIO1-24pin | Output | デバッガ用UART:TX ※TCLスクリプトのデバッガを使用する場合はUSB-UART変換などをここに接続 |
| GPIO1-26pin | Input | ファームウェア用UART:RX ※ファームウェアからアクセス可能なUARTインターフェイス(basic_uart_tmct) ※シリアルコンソールを利用する場合はUSB-UART変換などをここに接続 |
| GPIO1-28pin | Output | ファームウェア用UART:TX ※ファームウェアからアクセス可能なUARTインターフェイス(basic_uart_tmct) ※シリアルコンソールを利用する場合はUSB-UART変換などをここに接続 |
| GPIO1-38pin | Output | I2Cマスタ:SCL ※I2Cデバイスをここに接続(外部Pull Up抵抗必要) |
| GPIO1-40pin | InOut | I2Cマスタ:SDA ※I2Cデバイスをここに接続(外部Pull Up抵抗必要) |
テスト環境では以下の写真のようにGPIOピンヘッダに基板を接続し、USB-COM変換を介してパソコンに接続しました。
写真では2.2kΩのPull Up抵抗だけが見えていますが、基板の裏にはI2C EEPROMが載っています。

まとめ
openMSP430について導入〜開発環境整備・デモプロジェクトの構成までを紹介しました。
続きはこちらをどうぞ。
| Link |
|---|
| (1) openMSP430を使ってみる[導入・開発環境整備編] ※この記事です |
| (2) openMSP430を使ってみる[ハードウェア編] ハードウェア・RTLのカスタマイズを紹介します |
| (3) openMSP430を使ってみる[ファームウェア編] ファームウェアのカスタマイズ・コンパイルとデバッガを利用したデバッグの方法を紹介します |