ラベル Odyssey MAX10 の投稿を表示しています。 すべての投稿を表示
ラベル Odyssey MAX10 の投稿を表示しています。 すべての投稿を表示

2016年5月11日水曜日

Odyssey MAX10でLチカ



■いよいよ書き込み■


と続いてきました、いよいよ書き込みです。Quartus Prime Liteを一通り使ってみます。

マクニカさんの記事は「はじめての」と書いてあっても読んだ人間が操作に完熟しまくっていることが前提になっていますので、ちょっと大変です。大変苦労しましたが、いい勉強になります(いや皮肉じゃないよ…技術者ってマゾじゃなきゃやってられないし)

■Linux上での起動■

インストール先/altera_lite/15.1/quartus/binにパスを通すか、毎回このディレクトリへcdで移動して quartus とタイプします。何かエラーが出るんですが、良いんでしょうか。
koichi@koichi-ubuntu:~$ quartus
Inconsistency detected by ld.so: dl-close.c: 762: _dl_close: Assertion `map->l_init_called' failed!

■プロジェクトを作る■

Quartus Prime Lite IIを起動したら、ファイルメニューからNew Project Wizard...を選び、プロジェクトを作るディレクトリとプロジェクト名を入力します。私はディレクトリ名プロジェクト名トップデザイン名を「MacnicaBlinky」にしました。


Nextをクリックします。「Project Type」画面、ここはEmpty projectのまま、Nextをクリック。「Add Files」画面も何も触らないでNext。

次のFamily & Device Settingsは大事です。Familyはもちろん「MAX10なんたら」を選びます。まだまだリストには大量にチップが並んでます。絞り込みたいのですが、上記ページどころかマクニカのサイトのあちこちを探してもOdysseyに搭載されているMAX10が「10M08だ」としか書いてありません。それだけでも何個もあるっちゅーねん(怒)。FPGAマガジンのNo13に「10M08SAU169C8GES」とあったので、それを入力します。めでたく選択肢が一個になったのでNextです。いやはや。



Summary画面です。内容を一通り確認して「Finish」をクリックします。




■VHDLを打ち込む■

Fileメニュー>New...を選びます。Design Files下の「VHDL File」を選びOKをクリックします。



エディタが開くので、記事のソースをコピペします。なお、13行目あたりの代入文で「<=」であるべき箇所が「<=」になっていますので、全角の<を半角に直してください。真面目にWeb作れよなぁ、マクニカ(すっかりタメ口にw

…と、その貼ったソースもいろいろ見えない文字が埋まってたりで使えないので、掃除しました。また、entityの名前もプロジェクト名と一致させないとダメっぽいので、それも合わせてあります。

library ieee;
use ieee.std_logic_1164.all;
entity MacnicaBlinky is
port (
    BUTTON : in std_logic;
    LED    : out std_logic
    );
end MacnicaBlinky;
architecture rtl of MacnicaBlinky is
begin
    LED <= BUTTON;
end rtl;

■入出力ピン割り付け■

ここからは「トランジスタ技術2015年11月号」の特集第二章を参考にします。この記事ではテンプレから操作を追っていくのですが、苦労してVHDLを貼ったので、設定はマクニカ、操作はトラ技…というクロス技で進めていきます。

マクニカには「PB0 はK13ピン、LED0 はL13ピン」と書いてあります。

なお、マクニカの「はじめてガイド ピン・アサインの方法」によれば、「2.2.データベースの構築」というところに「ピンをアサインする前にデザイン情報を作成しておくと…とても便利です」と書いてあるので、従います。Processingメニュー>Start>Start Analysis & Elaborationを実行するとno erro / ワーニング1個だけになるはずです。

ということで、ピンの割り付けに戻ります。資料は「はじめてガイド ピン・アサインの方法」の「3.ユーザーピン アサインの方法」に戻ります。

Assignmentメニュー>Pin Plannerを選びます。

よくみかけるあの画面が出てきました。



下の一覧から上のマトリクス上にドラッグ・アンド・ドロップしてつなぐようです。「PB0 はK13ピン、LED0 はL13ピン」ですが、PB0は一覧表ではBUTTONとなっています。まずBUTTONをゆっくりドラッグしてK13のあたりでウロウロしていると黒いダイアログにK13についての説明が出てきますので、手を離します。同様にLEDをL13で。

表のI/O Standardのところをダブルクリックしプルダウンから「3.3-V LVTTL」を選びます。似たようなのが多いので間違えないように。間違えるとハード的に破損します。

■コンフィギュレーションモードを選ぶ■

「MAX 10 の CFM をどう使うか=何モードを選ぶか、になるのですが、今回は Single Compressed Image を選択します。」って書いてあるんだけどー、それはどこですかー。と喉から血を吹き出しながら叫んだら、見つかりました。

Assignmentメニュー>Device



真ん中へんにあるDevice and Pin Optionsボタンをクリックします。



左のCategoryで「Configuration」を選び、右のConfigurationのConfiguration modeのプルダウンを「Single Compressed Image(1376Kbits UFM)」」にて、OKをクリックします。




■論理回路に対するタイミング制約 ■

元記事に「論理回路に対するタイミング制約を作成&設定します。 今回はクロック制御とは無関係で、スピードを必要とする論理回路ではないですし、Pin to Pin の単純動作なので、省略します。」とあるので省略します。

■コンパイル■

Processingメニュー>Start Compilationでコンパイルを開始すると下のメッセージ欄にたらたらメッセージが出てくるのですが、毎回この表示が出て少し止まるのでちょっとココロがくじけますが、影響ないので終了を待ちます。



終わりました。


元Java屋としてはワーニングが大変気になるところですが。エラーはでていないので、気にしないことにします。

■タイミング検証■

「今回は上記の手順③-3で述べた理由から省略します。」だそうです。

■プログラミング(書き込み)■

プロデューサーさん、プロデューサーさん、ついに書き込みですよ書き込み!

…すまん。ついやってしまった。デレマスは渋凛一択だけど、アイマスとしては765プロの面々の方が好きだな。

さて、それはともかく。

あちこちひっくり返しても、接続する順番とかJTAGコネクタの向きが見当たりません。ググってやっと見つけたのがこの記事(プログラミング)。ありがとうございます。以下の作業はこの記事を参考にさせていただきました。


写真のように赤い線の向きを合わせてBlasterのケーブルを刺します。初回だとちょっと硬いかもしれませんが、根元までしっかり挿しましょう。悟空にもUSBケーブル(mini USB)もつなぎ、Odysseyにもmicro USBケーブルをつなぎます。VM上で使っている方は、VMがちゃんとUSB Blasterを認識しているか確認しておきましょう(経験者は語る)。

Toolsメニュー>Programmerを選びます。



Hardware Setup...をクリックしてCurrently selected hardwareでUSB-Blaster [1-2]を選択してCloseボタンをクリックします。


もう疲れたので、記事をそのまま引用します
4.ハードウェアにプログラミングするconfigのファイルを指定します。[Add File..]ボタンをクリックします。プロジェクトフォルダ配下のoutput_filesフォルダにconfigファイルがあります。テストの用途では拡張子がsofのファイルを選びます。

私の場合は「MacnicaBlinky.sof」を選び、Openボタンをクリックします。



なお、スクショ撮り忘れたからって同じ操作をもう一回やるとこんな画面になってしまいます。


二行目を右クリックしてDeleteすれば戻ります(ちょっと焦った)

さて、いよいよです。「Start」ボタンをクリックします。結果は右上のマドに出るのですが「Failed」でした。「プログラミング」を拝見したら、OdysseyにもUSBつなぐんですね。はっはっは。


ではケーブルをつないで、改めてStart。「100% (Successful)」キター!!

■動作テスト■

これでFPGAが俺様の回路になりましたw テストボタンを押せば、1000千万桁の円周率が算出されます!…なんてことはなく、押している間だけLEDが1個点灯します。ぽちぽち。ボタンとLEDを直結すれば5分もかからない、とか言ってはいけません。

いろいろ回り道をしましたが、ともかくOdyssey MAX10で入力と出力と回路を作ることができました。

いい加減なWeb資料を公開してくださったマクニカにも感謝します。ブログには全部書いてないけれど、回り道して調べまくって、すっげー勉強になりました。いや、でも、調べられることであれば、アウトラインでもいいから一連の処理手順が公開されているって大事なことですよね。いやマジで。今後もよろしくお願いします。

あ、お笑い系テクニカルライターの御用があれば、おこえかけてくださいねw

2016年5月7日土曜日

Odyssey MAX10評価キット:開封編


このごろの新しいおもちゃ興味の中心はFPGA、というかAltera MAX10です。

附属基板をちゃんと動かすのは面倒くさいからBeMicroで勉強するつもり

さくっと動かして実験するにはBeMicro MAX10というボードがコストパフォーマンス的(Chip1stopで4000円)にも規模的(FPGA上にマイコンチップを合成してまだ余る)にも使い勝手(USBつなげばプログラム可能)もよさ気ですが、まずは「Odyssey MAX10 FPGA and BLE Sensor Kit」というやつを買ってみました。

これは、FPGA MAX10と各種センサーの乗っかったBLEマイコンがセットになっているもので、iPhone/Androidの専用アプリからプリセットされた数種類の回路?を選んでFPGAをプログラミングし、動作させることができる、というものです。回路?は、もちろん自分で設計製作してダウンロード?したものも動かすことができます。キットにプリセットされた回路?や自分でプログラムする回路?はpersonalityと呼ばれています。

※「?」が多くてすみません。
 まだFPGA習い始めたばかりなので、用語に馴染めていないのです。

センサーとしては、マイク、温度、湿度、照度、加速度、DACがついていて、他にLED8個とスイッチ2個を使うことができます。

■使ってみる■

届いたのはプラスチックのケース。


開けてみると思っていたより小さいです。mbed LPC1768と同じぐらい、といえば電子工作方面の方には通じるでしょうか。Arduino Nanoより少し長いです。


クッションに2つのブツが。左のキーホルダー状プラスチックケースに入っているのはBLEマイコン用の電池ホルダーです(袋にワッシャが同梱されていますので開封時に無くさないようにご注意を)。右はFPGA+BLE基板が2階建てになっています。電池ホルダー基板+BLEマイコンだけで使う場合には、この2階建てをバラす必要がありますが、ピンセットで返しの部分をつまむと比較的簡単に外れます。ピンセットの先で基板を傷つけないようにご注意を。

準備としては
  • https://odyssey.m-pression.com/でユーザ登録
  • iPhone/Androidアプリをダウンロードし、上で登録したアカウントでログイン
  • マイクロUSBケーブル

あたりが必要です。

さっそくOdysseyにマイクロUSBを接続し、iPhoneアプリを立ち上げると、BLEのペアリング画面になります。すぐに見つかると思いますので、選択します。



するとPersonality Listが出ます。



まず「ADC and Audio Monitor」をタップします。



この時、OdysseyのUSBコネクタ近くの緑LEDが点灯しています。これは選択したPersonalityをFPGAにプログラミングしていることを示すもので、これが終わるまでiPhone画面を操作しても反応しません。LEDが消えた時点でスマフォで「ADC on」をタップし、Odyssey近くで音を出すとUSBの反対側にある緑LEDラインが音の大きさに比例した長さで点灯します。

同様に、温度&湿度、加速度、照度…などいろいろありますので試してみましょう。

なお、iPhone上の画面はWeb上でカスタマイズ可能です。配置や項目などを入れ替えることで、センサーなどに合わせたアプリとして構成することができます。例えばボタンを配置し、I2Cへのコマンド(アドレス、レジスタ番号、書き込み値、データ長など)を指定すれば、スマフォ上のボタンをタップ→BLE経由でOdysseyへ→MAX10のI2Cラインに信号を出力→結果を逆ルートでスマフォへ、という動作をします。

必ずしもすべてのI2Cデバイスに対応できるわけではないですが、よっぽどへそ曲がりなデバイス出ないかぎりは対応できそうな感じです(まぁI2Cは大抵ヘソ曲がってますけどね)。


■感想■

FPGA初体験なのですが、いやー、TTL ICにラッピングで配線して間違えたりショートしたりして苦労してたのがウソみたいに回路できちゃいますね。魔法みたいです。もちろん今までの回路図のかわりにVHDLやVerilog HDLなどとの戦いが待っているわけですが(回路図を書いていくこともできます)。

さて、明日はチュートリアルに従ってVHDLかVerilog HDLをコンパイルし、組み上がった回路をOdysseyにダウンロードして実行してみたいと思います。

当面の目標は、もちろんデジタル時計です(笑)。

■参考書など■

  • トランジスタ技術 2015年 11月号
    特集「FPGAキットで体験!チップ内電子工作」
    FPGA電子工作として、いろいろな事例が具体的に紹介されていて勉強になります。
  • FPGAマガジン No.13
    特集「入門もホビーもピッタリ! ワンチップFPGA=MAX10」
    MAX10の概要を把握したりカタログ的な意味では役に立ちましたが、表面をさらっとなでた感じの記事が多いのでちょっと不満。
  • (1)MAX10(2)ライタ(3)DVD付き! FPGA電子工作スーパーキット 
    記事は入門書として素晴らしいと思います。なおCQ出版お馴染みのマルツで部品を買い足さないと動かない基板が同梱されていますが、買い足す部品を合計するとあんまり安くないのでBeMicro MAX10を買った方が手っ取り早いと思います。ライタも悟空 ALTERA USB Blaster互換JTagケーブルが1200円ですしね。
  • HDLによる高性能ディジタル回路設計
    今の私には少し歯ごたえがありすぎるのですが、従来の回路設計の延長ではないFPGAとしての回路設計はどうあるべきかという観点から記述されているので、ソフト屋の私にはむしろ理解しやすいです。