tmct-web

電子工作・DIYの製作例やノウハウを公開しています

openMSP430を使ってみる[導入・開発環境整備編]

 

※この記事は3部に分かれています。以下の記事も併せてどうぞ。

Link
(1) openMSP430を使ってみる[導入・開発環境整備編]
※この記事です
(2) openMSP430を使ってみる[ハードウェア編]
ハードウェア・RTLのカスタマイズを紹介します
(3) openMSP430を使ってみる[ファームウェア編]
ファームウェアのカスタマイズ・コンパイルとデバッガを利用したデバッグの方法を紹介します

 

opemMSP430テスト環境

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が載っています。

opemMSP430テスト環境

まとめ

openMSP430について導入〜開発環境整備・デモプロジェクトの構成までを紹介しました。
続きはこちらをどうぞ。

Link
(1) openMSP430を使ってみる[導入・開発環境整備編]
※この記事です
(2) openMSP430を使ってみる[ハードウェア編]
ハードウェア・RTLのカスタマイズを紹介します
(3) openMSP430を使ってみる[ファームウェア編]
ファームウェアのカスタマイズ・コンパイルとデバッガを利用したデバッグの方法を紹介します
最終更新: 2022-08-18
作成: 2022-08-18
  • FPGA

© 2025 tmct-web All Rights Reserved.
Powered by Hugo. Theme by TechDoc. Designed by Thingsym.