よくある質問とその答え(FAQ: Frequency Asked Question)
目次
|
- 実験の進めかた
- 設計/デバッグ
- PowerMedusaボード
|
- ちゃんとライセンス・サーバが指定されていない
- Tools→License Settingsでライセンス・サーバが指定されているか確認する。
- 基本的に、"環境変数LM_LICENSE_FILEを使用する"の
チェック・ボックスにチェックを入れておけば問題ありません。
- LM_LICENSE_FILEのチェック・ボックスにチェックを入れても、
LM_LICENSE_FILEの右のボックスに何も出ない場合。
- LM_LICENSE_FILEのチェック・ボックスを外す
- License fileの右のボックスに"1717@10.228.192.53"を入れる
- ちゃんとコンパイルされていない
- ちゃんとコンパイルされていないとピンは指定できません。
もう一度、コンパイルしてみてください。
- FPGAのピンにアサインできるのは、Top-Level EntityのBlock Diagramの
入出力だけです。FPGAのピンにアサインしたい入出力は、
Top-Level EntityのBlock Diagramまで引っ張ってきましょう。
- 1つのプロジェクトの中で、複数のFPGA用データを
作ろうとしていませんか?
別のFPGA用データを作るのでしたら、新しいプロジェクトを立ち上げてください。
トップのBlock Diagramのファイル名がプロジェクト作成時に
していたTop-Level Entityと同じでないと、
コンパイルがうまくいきません。
解決方法(いずれかの方法を取ること)
- Block Diagramのファイル名をTop-Level Entitiyと同じに変更する
- Project NavigatorでProjectを右クリック→Setting→Generalで
Top-Level Entityをトップつもりで編集していたBlock Diagramのファイル名に変更する
- バスを配置し幅と名前を定義する
- 名前はバスを選択して右クリック→Properties→General→Nameでつける
- この時、バスの名とバスがつながるピンの名が同じだと
コンパイル時にエラーが起きる。
- 名前はname[0..xx](xxはバスの幅-1)の形でつける
- バスをつなぐ入出力ピンも同じ書式で名前をつける
- "0"を"00"、"1"を"01"とか書くと、コンパイル時に怒られますので注意しましょう
- バスに配線をつなぐ
- 配線を選択して右クリックし、
Properties→General→Nameに引き出す配線を明示する
- バスがA[0..15]であり、9bit目を引き出すのであればNameに"A[9]"と入れる
- "A9"と大括弧を省いて書くとコンパイル時に認識されません。線がつながってない等、別の理由で怒られます。
- バスとバスを合流/分岐させることもできます。
A[0..7]とB[8..15]を定義して合流させ、C[0..15]にすることができます。同様に分岐もできます。
-
シフタの製作時に、バスA[0..15]のA[0]とバスB[0..15]のB[1]を
つなぎたいことがあるかもしれません。
この時、バス間の配線を直線で引いてしまうと、
その配線には1つのプロパティしかつけれないので、うまくつなげません。
この場合、配線の途中にバッファを置いて配線を分割し、
バスA[0..15]につながっている部分にA[0]、
バスB[0..15]につながっている部分にB[1]のプロパティを与えることで実現できます。
バッファには色々種類がありますが、
単純に配線を名前を変えたい場合は、"wire"のバッファを使えば良いでしょう。
- ライブラリでmegafunctions→storage→lpm_ram_dqを選択してOK
- "MegaWizard Plug-In Manager[page 2c]"
- "MegaWizard Plug-In Manager - LPM_RAM_DQ (3/6)"
- How wide should the 'q' output bus be?を16 bitsにする
- How many 16-bit words of memory?を4096 wordsにする
- 座学で話したように、仕様書どおり65536 word作ろうとすると、
コンパイル時に"選択したデバイスを配置できない"と怒られます
- Nextを押す
- "MegaWizard Plug-In Manager - LPM_RAM_DQ (4/6)"
- "Which port should be registered?"の項目の
"'q' output port"のチェックを外す
- これをチェックしたままにしておくと、'q'の出口に
flip-flopが設置され、読み出しに2クロック必要となります
- Nextを押す
- "MegaWizard Plug-In Manager - LPM_RAM_DQ (5/6)"
- "Allow In-System Memmory Content Editor to capture and update content..."をチェックする
- あらかじめメモリに書き込むデータのファイルを準備してあるのならば、
"Do you want to specify the initial content of the memory?"
をYesにし、ファイルを指定する
- Nextを押す
- 配置する
- RAMの読み出しに関する注意
- 通常のRAMはアドレスを与えると即データを出します。
しかし、Megafunctionで作ったRAMは出口にレジスタがあるようで、
アドレスを入力した後にクロックを入れないとデータが出てきません。
注意して下さい。
- ボードのSW26をcycl(溝が左上から右下)に切り替えます
- Tools→In-System Memory Content Editorを立ち上げます
- 右上の"Hardware"の項目で"USB-Blaster"を選択します。
- 問題がなければ、左上の"Instance Managaer"にFPGA中に作成
されたメモリの一覧が出ます
- "Instance Manager"でエディットするメモリを選択します
- 下のメモリ内容を示すウィンドウが"??"で埋まります
- 下のメモリ内容を示すウィンドウでメモリの操作を行います
- ウィンドウを右クリックして"Read Data from In-System Memory"を
選択すると、メモリの内容を読み込みます。
- (前回の読み込みから)更新された部分は赤色で表示されます
b - ウィンドウを右クリックして"Continuously Read Data from w
In-System Memoery"を選択すると、メモリの内容を読み込み続けます
- リアルタイムでメモリ更新されているのが見えます
- 更新された部分は、一瞬、赤色になります
- ウィンドウを右クリックして"Stop In-System Memory Analysis"を
選択すると、リアルタイムの更新を終了します。
- クロック周波数1Hzぐらいで動作見たりするといいでしょう
- メモリの内容の変更のしかた
- 変更したい部分の左にカーソルと持って来て、
書き込みたい値を入力します。
- 書き込まれた値は青色で表示されます
- この時点では、変更はまだFPGA内部には反映されていません
- ウィンドウを右クリックして"Write All Modified Words to
In-System Memory"を押して経ん後部をFPGAに書き込みます
- 他にも、右クリック後の操作で部分読み込み/書き込み等が
できますので、必要に応じて利用してください
- In-System Memory Content Editorの詳細は、
オンライン資料: Quartus II開発ソフトウェアの
Quartus IIハンドブックのVolume 3, Chapter 15, "FPGAメモリおよび定数のインシステム・アップデート"に書かれています。
- File→New→Other Files→Memory Initializationを選択し、
メモリ・エディタを立ち上げる
- ワード数とワード・サイズを聞かれるので、
ワード数には必要なワード数を指定し、ワード・サイズを16を指定する
- Excel風のウィンドウが出ますので、メモリの内容を編集します
- View→Cells Per Rowで1行あたりのワード数を変更できるので、
使いやすいワード数にすると良いでしょう
- View→Adress RadixおよびView→Memory Radixで
表記(2進数/8進数/10進数/16進数)を変えれるので、
好きな表記で編集すると良いでしょう
- セルの間に新たなセルをいれたければ、右クリックをして
Incert Cellで間に新たなセルを挿入できます
- .mifファイルは簡単な構造のテキスト・ファイルですので、
直接いじくることも可能です
- アセンブラを作るのでしたら、この形式で出力させるように作ると良いでしょう
Insert Node or Bus→Node Finder→Customizeで、"Filter:"を"Pins: all"以外にして
"OK"を押し、さらに"List"を押すと、入出力ピン以外の波形を入力したり、
出力をチェックしたりできます。
- ファイルの読み出し権限がない
エクスプローラ等でファイルを右クリックし→プロパティ→セキュリティで、
自分に読み出し権限があるかどうか調べる。
無ければ、必要に応じて変更する(他人のファイルなら「してもらう」)。
- ファイルが壊れている
過去にCADが保存時にファイルを壊してしまったと思われるケースがありました。
この時は、メモ帳で対象ファイルと他の無事に開けるファイルを開いて見たところ、
開けないファイルは後ろの方の書式がおかしくなっていることが確認できました。
一般的なソフトウェア同様、CADにもバグはあります。
受講上の注意の最後にあるように、
ファイルは適時バックアップして、このような状況に備えて下さい。
上記にあるように、CADもソフトウェアですのでバグはあります。
CADの動作が時々おかしくなるという報告もあがっています。
このような時には、一度CADを終了して、再度立ち上げなおして動かしてください。
変な動作らしきものの例
- FPGAボードへのダウンロード時に、再コンパイル前の.sofが送られているようで、
動作を変更した部分が反映されない。
- シミュレーションの入力ファイルを変更したのに、どうも変更前のファイルで
シミュレーションを行っているようだ。
Assignment→Setting→User Libraryを選択後、インクルードしたい
回路があるディレクトリを選択し、Addボタンを押します。
そうすれば、ライブラリの呼び出し時の一覧に上記のディレクトリが追加されます。
Help→MessagesでCADのメッセージの解説(英語)を見ることができます。
ここで調べて下さい。
バス/配線/ファイル名等に記号が入っていませんか?
記号によってはCADが認識してくれないものがあります。
現状では、以下の記号が大丈夫/だめということが分かっています。
- 大丈夫なもの: ハイフン、アンダースコア
- だめなもの: 小括弧、中括弧
主記憶(RAM)はどうやって作るのかの
"MegaWizard Plug-In Manager - LPM_RAM_DQ (5/6)"の部分で
メモリに書き込むデータ・ファイルを指定してあれば、
シミュレーション時にもそのデータ・ファイルの内容が
メモリに書かれているものとしてシミュレーションできます。
なお、すでに配置したRAMに対してメモリのデータ・ファイルを
指定したい場合は、RAMのオブジェクトをダブルクリックすることで、
主記憶(RAM)はどうやって作るのかの
設定をやり直すことができます。
Tools->Options->Generalで、
"Display tabs for child windows"をチェックすると復活します。
- 実験の時間外に実験を行う
- 他の学年が実験を行っていなければ、
他の授業時間(月〜金の1〜5限)にも計算機室は使えます。
- 「時間外実験演習申請書」を提出し、
実験日の18時以降も実験を行う。
- 21時までしか延長できません。また、教官の都合がつかない場合も延長できません。
- 終了時には、教官/TAに実験が終了したことを報告してから帰って下さい。
- 18時を過ぎると、計算機室のドアは番号キーでは開かなくなりますので、
外部に出る時には、かならずグループの相方を中に残して出るなどして下さい。
-
QuartusII Web Editionを手に入れ、自宅で作業を行う
- 1回ライセンスを申請すれば(無料)、5か月使えます。
最終報告以降も実装を続け、デモができる程度に完成させて、
デモを行ってください。
実験期間終了後でも、平日昼間は計算機室を使えます。
平日昼間以外に計算機室を使用するつもりならば、
「時間外実験演習申請書」を提出し、
教官の許可を受けて計算機室を使用してください。
- Windowsのエクスプローラのアドレス欄に"¥¥fsv0¥ユーザ名"で、
そのユーザのホーム・ディレクトリを見ることができます
- ファイル/フォルダ見れない/コピーできない場合
- sambaに要求されるユーザ名とパスワードを、そのユーザのユーザ名とパスワードにして、
そのユーザの権限でアクセスする
- もちろん、パスワードはそのユーザに入れてもらいましょう)
- そのユーザに、ファイル/フォルダのパーミッションを変更してもらう
- ファイル/フォルダを右クリック→プロパティ→セキュリティを選択し、
Everyoneもしくはstudentsのグループに対し、読み取りと実行、フォルダの内容の一覧表示、読み取りの許可を与えましょう。
頑張って設計データを作り直して下さい。
コンピュータのディスクが壊れたり、ソフトが異常終了して重要なデータを壊したり、
はたまた、操作ミスから空データで重要なデータを上書きしてしまうことは、
この先、コンピュータを使用する上で多々経験することでしょう。
そういった時のために、ちゃんとバックアップを取っておきましょう。
講義担当者のお薦めのバックアップ・メディアは、USBメモリです。
今なら、2,3千円で実験で使うデータを納めるには十分過ぎる大きさのUSBメモリが買えます。
大容量のものを買えば、「4月第1週のバックアップ、
4月第2週のバックアップ、・・・」のように、
バックアップに履歴を持たせることもできます。
履歴を持つことで、「間違って重要なデータを上書きしてしまったが、
しばらくしてから気づいたため、
すでにバックアップも上書きされたデータになっていた」
という状況を減らすことができます。
組んだ相手(orグループor下請けor上司)が外れだったという不幸なことは、
長い人生の中では何回か経験することになるでしょう。
今回も、その中の1回が巡って来たとして、
あきらめて、自分で相手の担当部分も自分で行い、帳尻合わせをしましょう。
幸い、ここは大学ですので、企業のように、
「相方が出てこなくなろうが何だろうが、
ちゃんと期日までにきちんと仕事を終わらせて下さい。」
という厳しいことは言いません。
相方が出てこなくなったことを考慮して成績をつけます。
全ての命令を実装できなくてもかまいませんから、
何とか、プロセッサと言える最低レベルのもの(メモリ・アクセス、
演算、条件分岐による制御が可能なもの)を作り、デモを行ってください。
PRN入力はプリセット入力です。動作は、クリア(CLR)入力の反対で、
信号が入力されるとD-フリップフロップの値が1になります。
ちなみに、このPRNとCLRは負論理ですので注意して下さい。
Helpの中に各論理素子の説明があります。
例えば、Help->Index->キーワードでprimitivesの節を見ると、
primitiveの節を見ると、primitivesに含まれる論理素子の説明があります。
スクロール・バーをスクロールしてprimitivesの節まで行くのが面倒ならば、
検索欄にprimitivesと入れるとprimitivesの節に飛べます。
3状態バッファ(Tri-state buffer)なる素子があります。
これは、状態切替え用の入力により、以下の2つの状態を切替えることできる素子です。
- 信号線より入力された値をそのまま出力する
- 出力をハイインピーダンス状態にする。(出力側の状態は他の素子の出力で決まる)
信号が出力されると困る場合、この素子を使って信号を遮断して下さい。
余談ですが、「3状態」の由来は、出力の状態が「0/1/ハイ・インピーダンス」の3つを
取れることから名付けられています。
RAMの作り方の最後に書いたように、
Megafunctionで作ったRAMはアドレスを入力した後に
クロックを入れないとデータが出てきません。
どのようにしてクロックを入力するかは、
マルチサイクルの読み出しを行うとか、
逆位相のクロックを有効利用するとか考えて下さい。
すでにドライバをインストール済なのに、
再度ドライバのインストールを要求されることがしばしばあるようです。
その場合は、TAを捕まえて、Administrator権限でドライバを入れてもらって下さい。
- Assignments→Devices→Device & Pin Options→Configuration
→Use configuration deviceがチェックされており、EPCS1になっているか?
(デフォルトはAuto)
- Assignments→Devices→Device & Pin Options→Configuration
→Generate compressed bitstreamsがチェックされているか?
FPGAへのダウンロード時のファイル指定をする時、
"Error: Can't locate programming file hogehoge.sof (;) in Chain Description File"
というエラーが出て.pofファイルや.sofファイルを指定できないことがあります。
これは、対応する.cdfファイルの中で.pofファイルや.sofファイルへの
正しくパスが書かれていないのが原因です。
他のマシン等で作成したプロジェクトを持ってきた時に発生します。
解決方法(いずれかの方法を取ること)
- 対応する.cdfをメモ帳等のテキスト・エディタで開き、
"Device Part Name..."で始まる行のPathの項目を正しいパスに直す
- 新しいプロジェクトを作成し、そこに前のプロジェクトのファイルを持ってきてやり直す
- RAM作成時の設定で"Allow In-System Memory Content Editor..."を指定していない
- RAMをダブルクリックし、"Allow In-System Memory Content Editor..."を指定する
- USB-Blasterとの接続悪くてボードと通信できていない
- USB-Blasterとの接続を確認した後"Scan"を押す
- 通信中に途切れることもあります
実際の論理回路では、信号が論理ゲートを通過するに一定の時間がかかりますが、
機能シミュレーションではこの遅延時間を考慮せず、単純に論理の正しさのみを評価します。
このため、実際にはレジスタ(レジスタ・ファイルのみならず、一時的に値を保持するレジスタも含む)の
書き込み時にセットアップ時間やホールド時間を満たせない回路でも、
機能シミュレーションの上では動いてしまいます。
そこで、以下のように、コンパイル時のタイミング解析の結果を元に、
あやしい信号パスを見つけ、問題が発生しないように修正します。
- コンパイルをする
- Compilation Report→Timing Analyzerを開き、その中の各項目に、
赤色で示される、タイミング違反の結果がないか探します。
- Clock Setup:
前段のレジスタへの出力が変更されてから(前段のレジスタにクロックの入力されてから)、
その信号が論理回路を通過して、後段のレジスタへの入力に入るまでの時間
- Tsu: レジスタの入力のセットアップ時間
- Th: レジスタの入力のホールド時間
- Tco: チップ外への出力がある信号パスに対し、
前段のレジスタの出力が変更されてから、その信号が論理回路を通過して、
出力ピンまでに到達する時間
- Tpd: チップ外からの入力がある信号パスに対し、
入力ピンからの入力が変更されてから、その信号が論理回路を通過して、
レジスタの入力に入るまでの時間
- 問題となる信号パスが見つかりましたら、そのエントリ番号を左クリックし、
Locate→Locate in Technology Map ViewerもしくはRTL Viewerで表示させます
- すでにコンパイルされた結果をもとに表示するため、
Block Diagram Editor上の図とは異なります
- 遅延時間が短すぎる信号パスがあったら、適当な論理ゲートを入れて、
遅延時間を延ばしてタイミング制約を満たすという手があります
- ただし、あまりにも単純な素子だと、
コンパイラが最適化で取り除いてしまう可能性があります
- とりあえず、NOTゲートはだめだったが、
セレクタは大丈夫だったという報告があります
PowerMedusa EC6Sのマニュアルの15ページにボード上で発生させることができる
クロック信号とリセット信号について説明がありますが、なぜか、
クロック信号の方は入力ピンについて明記されていません。
マニュアルの最後の方にあるピン一覧をみてもらえば分かりますが、
このクロック信号は28番ピンに入ってきます。
- 7SEG LEDの動作のon/offスイッチはどうなっています?
- 全体はFPGAの横のDIP-SW(SW30)の2番によってon/offできます。onになっていますか?
- 1つ1つはその下にあるDIP-SW(SW31)によってon/offできます。onになっていますか?
- ブザーのon/offスイッチはどうなっていますか?
- FPGAの横のDIP-SW(SW30)の1番によってof/offできます。onになっていますか?
- LEDのon/offスイッチはどうなっていますか?
- FPGAの横のDIP-SW(SW30)の3番によってof/offできます。onになっていますか?
MU200-EC6SボードとMU200-7SEGボードの間の配線は、
MU200-7SEGボードのすべてのLEDと7SEG LEDを操作できるだけの数がありません。
よって、MU200-7SEGボードを9つの区画に分け、各区画を示す配線(9本)を準備し、
その区画に対応した配線に1を流しながら、
その区画のLED(7SEG LED)を変更させる構成になっています。
なお、その区画が選択されていない場合は、
最後に入力されていた値を表示し続けます。
質問の宛先は
shimada@kuis.kyoto-u.ac.jp.
Last modified: 2008/4/11 15:30