2004/07/18 【ソフトウエア編TOPに戻る】
今回はQuartusⅡWebEditionの操作概要をご説明しましょう。QuartusⅡWebEditionはALTERA社のCPLDやFPGAの統合開発ツールです。TekuRoboでは、ハードウエア記述言語のVHDLを使った開発に使うことにします。
QuartusⅡWebEditionの準備や関連するハードウエアの準備については、以下のページを参照してください。
ところで、「操作概要をご紹介しましょう」などと偉そうなことを言ってしまいましたが、実はQuartusⅡWebEditionについて今回ご紹介すること以外は、何も知りません!(^^;; つまり、力弥が知る全てのことをご紹介することになります。でもそれは、QuartusⅡWebEditionの持つ機能の最低限だろうと思うので、「概要」と言ってしまいました。
そもそも、QuartusⅡWebEditionを使い始めたばかりでマニュアルを読んだ訳でもなく、誰かに教わった訳でもないので、Quartusパワーユーザーの方々から見るとおかしなことを言っていると思われるでしょうが、とりあえず不自由なく作業を進めることができるので、勇気を出してご紹介してしまおうというところです。その昔、ALTERAの旧ツールであるMAXPlus BaseLineを使ったことがあるため、その時のことを思い出しながら使い始めました。もっと便利な機能がたくさん隠れているはずですので、その辺は追々勉強できたらご紹介することにします。
間違ったことや、もっと良い使い方がある、といったご指摘がありましたら、是非お教え下さい。m(_ _;m
さて、これから以下の順にご紹介して行くことにしましょう。
QuartusⅡWebEditionでは、ひとつのロジックを開発する経緯で生成される複数のファイル類を、プロジェクトという枠でまとめて管理します。先ず最初にプロジェクトという入れ物を作り、その中で作業を進めていくという考えです。では、そのプロジェクトの作成から始めてみましょう。

|
|
1−1. QuartusⅡWebEditionを起動すると、はじめに上図のような画面になります。 ここで、メニューバー上からFile → New Project Wizardを実行します。
|
|
|
1−2. New Project Wizardが起動すると、以下のような窓が現れます。 ここでNextを押して先に進みます。
|
|
|
1−3. この窓では、以下の項目を指定します。 上段:プロジェクトを保存するフォルダ 中断:プロジェクト名 下段:作成するロジックのTop-Level Entity名 Top-Level Entityについては、VHDLのプログラミングに関係する部分ですので、次の機会にご説明します。 ここでは、全ての名前をAND_TESTという名前にしています。この名前は、作りたい機能に合わせて自分で付けます。 プロジェクト用のフォルダを予め作っておけば、[...]のボタンでフォルダ参照によって指定できるので楽です。 入力が終わったらNextボタンで先に進みます。
|
|
|
1−4. 予めプロジェクトフォルダを作っていなかった場合、1−3.で入力したフォルダを作成するかどうかの確認窓が開きます。ここでは「はい」を選んで先に進みます。 |
|
|
1−5. 次に、すでに作られているファイルなどがある場合には、ここで指定してプロジェクトの仲間として登録します。VHDLのソースファイルなどは、予め類似のソースファイルをコピーして入れておくと後の登録作業を省略することができて楽です。 Nextボタンで先に進みます。
|
|
|
1−6. 次に、サードパーティーのツール類を使用するかどうかを設定します。今回はサードパーティーは使用しないため、全て<None>に設定します。 入力が終わったらNextボタンで先に進みます。
|
|
|
1−7. 次に、ターゲットとなるデバイスを指定しましょう。ここではMAX7000Sシリーズを指定しておきました。 入力が終わったらNextボタンで先に進みます。
|
|
|
1−8. 次に、1−7.項で指定したシリーズから、更に詳細なデバイスの指定を行います。右横のFiltersで候補を絞ることもできます。ここでは、EPM7032SLC44-5を指定しました。 入力が終わったらNextボタンで先に進みます。
|
|
|
1−9. Wizardの最後に、今まで入力した項目の一覧が表示されますので、最終確認をします。 良ければFinishボタンで終了です。
|
|
|
1−10. Wizardを終了すると、QuartusⅡのメイン画面上の左側に、作成されたTop-Level Entity名が表示されます。 |
プロジェクトの作成は以上で終了です。以降の作業は、このプロジェクトを中心に進めていきます。
プロジェクトの作成が終わったら、VHDLのファイルを作成しましょう。VHDLはハードウエア記述言語のソースファイルで、CPLDの動作を決めるプログラムファイルです。
|
|
2−1. メイン画面のメニューバーから、File → Newを選びます。 |
|
|
2−2. ここではVHDLファイルを作成するので、「Device Design Files」のタグの「VHDL File」を選択してOKボタンを押します。 |
|
|
2−2. すると、メイン画面の作業エリアの中に、左のようなテキストエディタが現れます。このテキストエディタでVHDLのソースファイルを作成編集します。 |
|
|
2−3. では、テキストエディタで左のようなソースファイルを入力してみましょう。面倒な人は、ここをクリックするとダウンロードできます。and_test.vhd ダウンロードしたらお手持ちのテキストエディタで開いて、コピーアンドペーストで貼り付けて下さい。 ちなみにこのVHDLプログラムは、 a , b , c の3つの入力端子のANDを、yの出力端子から出力するというものです。 上から3行目の entity AND_TEST is の「AND_TEST」がここでのTop-Level Entity名 となります。プロジェクト作成の際に指定したTop-Level Entity名 と同じ名前でないと、コンパイルの際にエラーになるので注意して下さい。
|
|
|
2−4. テキストエディタへの入力が終了したら、フロッピーアイコンを押してセーブします。 |
|
|
2−5. セーブするときには、予めプロジェクトフォルダが設定されているので、そのまま「保存」ボタンを押して保存します。 これでVHDLファイルの作成は終了です。 |
|
|
2−6. 一度VHDLファイルが作られると、メイン画面上の左側に作成されたTop-Level Entity名を右クリックしてポッポアップメニューを開き、Locate in Design File を選べば、VHDLファイルを開くことができます。 File → Open から開くよりも楽に操作できます。 |
ここではVHDLファイルの作り方をご紹介するために、VHDLのソースファイルをコピーして貼り付けてしまいましたが、実際の開発では、このVHDLのソースファイルを作る作業が中心になり、一番頭を悩ませる部分にもなると思います。
さて、作ったVHDLのソースファイルを、一度コンパイルしてみましょう。間違いがあればエラー表示されますし、構文的に間違いがなければエラーは発生しません。(思った通りに動くかどうかは別ですが...) また、VHDLソースファイルという単なる文字列を、意味のある情報としてQuartusⅡに認識させるという意味でも、コンパイルが必要なようです。
|
|
3−1. メイン画面のメニューバーから、Tools → Compiler Tool を実行します。
|
|
|
3−2. 左のような窓が表示されます。これは、コンパイル処理の一連の進み具合を表示するインジケータであるとともに、それぞれの処理結果をモニタするためのボタン類が並ぶランチャーとしての機能も兼ねています。
|
|
3−3. コンパイルが終了すると、下の図のような画面になります。Compiler Toolの青いインジケータが埋まっていき、コンパイル成功の確認窓が開きます。コンパイル実行時に発生したエラーや警告や情報は、メイン画面の最下段にリストで表示されます。ちなみに、Compiler Tool中の最後の工程であるEDA Netlist Writer は組み込んでいないため実行されません。 今回はたまたまコンパイルが成功しましたが、エラーでコンパイルが失敗した場合には、エラーメッセージを手掛かりにしてコンパイルが成功するまでVHDLのソースファイルと格闘します。 |
|
|
|
|
3−4. コンパイルが成功したら、Compiler ToolのFitterの中のFIT(Fitter Report)ボタンをクリックして、Fitterの実行結果を見てみましょう。Fitter Reportでは、設計したVHDLによるロジックをターゲットとなるCPLDデバイス上にどう展開するか、といったところを確認することができます。 |
|
|
3−5. レポートはテキスト文字形式で表示されます。色々な情報が表示されますが、ここではInput Pinsというところを見てみましょう。これは、VHDLソースファイルで宣言した、a,b,cの各入力端子が、CPLDデバイスの何番ピンに割り振られたかを表示しています。 ここではa,b,cの各ピンは、それぞれ24,21,25番ピンに割り振られたことを示しています。この割り振りは勝手に行われます。 |
|
|
3−6. 今度は、同じFitter Reportの中のOutput Pinsというところを見てみましょう。これも同様に、VHDLで宣言した出力端子yが、CPLDデバイスの何番ピンに割り振られたかを表示しています。ここでは4番ピンになっているようです。 |
Fitter Reportではこの他に、設計したロジックではマクロセル(D-FF)をいくつ使って残りはいくつあるのか、などデバイスが持つ上限に対してその利用率がどれくらいなのかといった情報等も表示されます。
ところで、入出力ピンの番号は、上記のようなピン番で良いのでしょうか? これから基板を作るのであれば、これに合わせた配線にすれば良いのでしょうが、すでに基板が出来上がっているのであればそうも言っていられません。そもそも、QuartusⅡの気まぐれに付き合わされるのは御免です。そこで、ピン番号を指定してあげることにしましょう。
VHDLソースファイルで宣言した入出力ピンを、実際のCPLDデバイス上の何番ピンに割り振るかを指定してみましょう。ここでは、16.ALTERA CPLD7032Sテストボードのハードウエアに合わせ、入力のa , b , c を 4 , 5 , 6 番に、出力の y を16番にそれぞれ割り当ててみることにします。
|
|
4−1. メイン画面のメニューバーから、Assignments → Assignment Editor を実行しましょう。
|
|
|
4−2. 左のような窓が開きます。ここで、VHDLのソースファイルで宣言した端子を、実際のCPLDデバイスのピン番に割り当てていきます。 窓最上段のCategoryの中から、Pin ボタンをクリックし、窓最下段のEditの表の中から、Toの列の<<new>>をクリックしてハイライトさせておきましょう。
|
|
|
4−2. 次に、表の上にある横長のエリアの<<new>>をクリックします。すると、VHDLのソースファイルで宣言した入出力端子の一覧が表示されますので、そこから a を選択してみます。
|
|
|
4−3. すると、表のToの列に a の端子がセットされました。
|
|
|
4−4. 次に、隣のLocationの列をハイライト表示させます。 |
|
|
4−5. その状態で、先ほどと同様に表の上にある横長のエリアをクリックすると、今度はCPLDデバイスのピン番の一覧が表示されます。ここでは予定通りに4番ピンを選択することにします。
|
|
|
4−6. すると、表のLocationの列にPin_4がセットされました。 これで、a 端子が Pin_4 に設定されたことになります。
|
|
|
4−7. 同様にして、b , c , y の各端子についてもセットしましょう。 セットが終わったら一旦セーブしておきます。セーブしないとコンパイルの時に情報が生きません。
|
|
|
4−8. さて、■3.コンパイルの手順で再度コンパイルを実行して、Fitting Reportを見てみましょう。 Input Pins では、指定した通りのピン番になっていることが分かります。 |
|
|
4−9. 同様にOutput Pinsも見てみましょう。やはり指定した通りになっている様子が分かります。 これで実際のCPLDデバイスに流し込んでも大丈夫そうですね。
|
さて、コンパイルも無事に済んだし、ピン番も間違いがないことが確認できました。でも、実際にデバイスにダウンロードする前に、ちゃんと思った通りの動きをしてくれるかどうか、シミュレーションをしてみましょう。これで間違いがなければ完璧です!(のはずです...)
|
|
5−1. メイン画面のメニューバーから、Tools → Simulator Tool を実行します。
|
|
|
5−2. すると、左のような窓が開きます。ここでは、左のような設定になっていることを確認して0penボタンを押してみましょう。
|
|
|
5−3. シミュレーションを行うための波形表示用の画面が現れます。まだどこにも波形表示などありませんが、この中に入力信号として与えてみたい波形を書き込んであげると、シミュレーションによって、その時に得られる出力波形が表示されるという段取りです。 では、入力波形の書き込み方を見てみましょう。
|
|
|
5−4. 先ずはじめに、シミュレーションしたい出力端子と、波形入力させたい入力端子を登録します。窓の中の左側の枠(Nameと表題が付いている下側の白い枠)を右クリックすると、ポップアップメニューが開くので、Insert Node or Bus を選択します。 |
|
|
5−5. すると、左のような窓が開きます。ここで、Node Finder というボタンをクリックしてみましょう。
|
|
|
5−6. 左のような窓が開き、Filter欄がPins outputになっています。 また、Look in欄が今回のEntity名のAND_TESTになっていることも確認しておきましょう。 ここで、Listボタンをクリックします。
|
|
|
5−7. すると、Node Found欄に、entityで宣言されている出力端子の一覧が表示されます。ここではy端子ひとつしかないので、左図のようになります。ここで、シミュレーションに参加させたい端子をクリックしてハイライト状態にさせておいて、>ボタンか>>ボタンを押します。
|
|
|
5−8. そうすると、Selected Nodes 欄にentity名とともに表示されます。 |
|
|
5−9. 次に、入力端子の登録を行いましょう。Filter欄をPins inputにセットして、Listボタンを押します。 |
|
|
5−10. すると、entityで宣言されている入力端子の一覧がNode Found欄に表示されますので、先ほどと同様にシミュレーションに参加させたい端子をクリックしてハイライト状態にさせておいて、>ボタンか>>ボタンを押します。 必要な端子がSelected Nodes 欄に出揃ったら、OKボタンを押しましょう。
|
|
|
5−11. 先ほどのInsert Node or Bus画面のName欄とType欄に**Multipul Items**と表示されていることを確認して、OKボタンを押してください。 |
|
|
5−12. さて、シミュレーションしたい端子の登録が終わると、波形表示用の画面に端子が現れました。波形表示エリアには、初期状態として出力信号はハッチング状態、入力信号は無信号状態になっています。 では、ここに入力信号を書き込んでみましょう。 |
|
|
5−13. 波形表示画面のすぐ左横、メイン画面中に縦に走るツールバーを見て下さい。[A]のアイコンのすぐ下にパルス波形と矢印を模ったアイコンがあるので、クリックします。そのまま波形表示画面の波形表示エリアにマウスを持って行ってみて下さい。マウスポインタがそのアイコンの形に変化するはずです。
|
|
|
5−14. では、波形表示エリアの好きな部分をマウスでドラッグしてみて下さい。ドラックした範囲にパルス波形が現れます。同じ部分をもう一度ドラッグすると、今度は波形が消えます。 こんな調子で入力信号波形を書き込んでいきます。
|
|
|
5−15. 今回は、左のような入力波形を書き込んでみました。今回のロジックは、 y = a AND b AND c なので、a , b , c の3個の入力波形が全て1(high)の状態の時だけ、y 信号の出力も1になるはずです。では、本当にそうなるかどうか、早速シミュレーションを実行してみましょう。
|
|
|
5−16. 一番初めに開いたSimulator Tool窓のStartボタンを押してください。シミュレーションが開始されます。終了すると、左のように成功したことを示す確認窓が開きます。成功したらReportボタンを押します。
|
|
|
5−17. 左の画面がシミュレーション結果です。何だか良く分かりませんね。でも、波形の左端のほうに何かパルスらしきものが見えます。ちょっと拡大してみましょうか。 |
|
|
5−18. 先ほどの縦に走るツールバーに、虫眼鏡の形のズームアイコンがあります。これをクリックして、波形表示部分を左クリックすると拡大表示、右クリックすると縮小表示されます。 |
|
|
5−19. で、拡大表示させて見たのが左の画面ですが... あれ?予定と違いますね? a , b , c の3個の入力波形が全て1の状態の時だけ、y 信号の出力も1になるはずだったのですが... しかし、これがシミュレーションというものなのでした。時間軸を見て下さい。適当に入力パルス信号を書き込みましたが、ほぼ10nS以内の信号変化でした。そして、出力パルスはほぼ5nS程度遅れて現れています。つまり、これが出力信号の遅延分を考慮したシミュレーション結果ということになります。 |
|
|
5−20. 今度はもっと長い時間軸上に入力信号を書き込んでみました。これで、もう一度シミュレーションをして見ましょう。
|
|
|
5−20. 左がシミュレーション結果です。今度は予想通りの結果が出ましたね。今回のロジックでは、あまり時間軸の長さに関係しない動作でしたが、クロックに同期して動作するようなロジックの場合には、時間軸も与えるクロックの周期に合わせなければなりません。
|
|
|
5−21. シミュレーション結果の時間軸をもう少し引き伸ばしてみましょう。一番上の出力信号に遅延があるのが分かります。プロジェクト作成の際にデバイスの種類を特定しておくことにより、そのデバイスの持つ内部遅延量をシミュレーションに反映させることが出来るのです。
|
実際にダウンロードして動作させる前に、どのように動作するのかをシミュレーションできるのは便利ですね。
さて、いよいよ実際のCPLDデバイスへのダウンロードです。しかしその前に、ダウンロードケーブルの設定をしておきましょう。この設定は一度やっておけば、他のプロジェクトでも有効になります。利用するダウンロードケーブルは、17.ALTERA ダウンロードケーブルで製作したByteBlasterです。
|
|
6−1. メイン画面のメニューバーから Tools → Programmer を実行しましょう。 以下のような窓が開きますので、左上のHardware Setup ボタンをクリックします。
|
|
|
|
|
6−2. Hardware Setup画面のAdd Hardware ボタンをクリックします。
|
|
|
6−3. Hardware type欄にByteBlasterを、Port欄に接続するパソコンのプリンタポート番号を設定してOKボタンを押します。大抵のパソコンにはプリンタポートはひとつしか付いていないと思うので、LPT1で良いかと思います。 |
|
|
6−4. 先ほどのHardware Setup画面にByteBlasterが追加されているので、クリックしてハイライト状態にしておいてからSelect Hardwareボタンを押し、Closeボタンで窓を閉じます。
|
|
6−5. 先ほどの画面の上段を見ると、ByteBlaster設定されたことが分かります。また、その右のMode欄にJTAGになっていることも確認しておきましょう。この設定は、他のプロジェクトにも引き継がれます。 |
|
|
さて、お待たせしました。いよいよCPLDデバイスへのダウンロードです。
|
7−1. 先ほどのHardware Setupを行った画面からスタートします。メイン画面のメニューバーから Tools → Programmer を実行して下さい。ダウンロードしたいファイルをクリックしてハイライト状態にして、右側の□の中をクリックしてチェックマークを付けましょう。そして画面左側のStartボタンを押します。 |
|
|
|
|
7−2. さて、ダウンロードケーブルをパソコンに接続しない状態でStartさせた場合、メイン画面の下段に左のようなメッセージが表示されます。
|
|
7−3. ついでに、ダウンロードケーブルをパソコンに接続して、CPLDが載ったターゲット基板を接続しない状態でStartさせた場合は以下のようなメッセージが表示されました。 |
|
|
|
|
7−4. またまたついでに、CPLDが載った基板は接続するのですが、そのターゲット基板に電源を入れなかった場合は、以下のようなエラーメッセージが表示されます。
|
|
|
7−5. ダウンロードケーブルをパソコンの所定のプリンタポートに接続し、CPLDのターゲット基板と接続し、ターゲット基板に電源を供給した状態でStartボタンを押せば正常にダウンロードが終了して、左のようなメッセージが表示されます。 これでダウンロード成功です!
|
|
7−6. 下記の画面の右上を見て下さい。Progress欄にはダウンロードの経過がバーグラフで表示されます。終了すると100%と表示される訳です。 |
|
|
では、実際にダウンロードされたCPLDターゲット基板で動作を確認してみましょう。
|
|
8−1. 左の写真が実験風景です。左側の基板がCPLDが載ったターゲット基板で、右側の基板が実験用のI/O基板です。ここではI/O基板中央のディップスイッチから入力信号のa, b , c を入力してあげて、基板右下のLEDで出力信号yの確認をします。
|
|
|
8−2. 左の写真がスイッチ部分とLED部分の拡大写真です。 ディップスイッチの1,2,3がそれぞれ入力信号a, b , cに相当します。写真の状態は全ての入力信号が1の状態を示しており、このときLEDの0bit目(出力y)が1になり点灯してることが分かります。スイッチの1,2,3のいずれかを操作して0にすると、LEDも消灯します。
|
ちょっと長くなりましたが、いかがでしたか? 色々な手順があって面倒に思われるかもしれませんが、実際にやってみると全然簡単です。是非ご自分で試してみて下さい。電子工作の幅がグッと広がります。 ただし、ハードウエア記述言語について勉強を進めなければ、自由にロジックを組むことができませんね。この後は、ハードウエア記述言語のVHDLについて、少しご紹介して行くことにしましょう。