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

0 件のコメント:

コメントを投稿