QuartusのTips

 

Quartus上の回路図の文字が切れる問題について

アプリケーションの互換性の設定で解決できそうです。

  • 「Quartus (Quartus Prime 20.1) Lite Edition」起動ファイルを右クリックして「プロパティ」を選択し、「互換性」タブを開く。
  • 「高DPI設定の変更」ボタンを押し、「[設定]での指定ではなくこの設定を使用して、このプログラムのスケーリングの問題を修正する」と「高いDPIスケールの動作を上書きします」にチェックを入れる。
  • 「次の場合、メイン ディスプレイに設定されているDPIを使用する:」で「このプログラムを開いたとき」を選択(不要かも)
  • 「OK」を押して設定完了

この方法のほか、ディスプレイの倍率を100%にすることでも解決できます。

register と resistor

時々、レジスタファイルの回路図のファイル名などで”resister”とつけている人を見かける。これは間違い(2つの過ちを犯している)。

値を記憶するレジスタはGのレジスタ(”Register”)が正しい綴りであり、Sのレジスタ(”Resistor”)は抵抗器の意味であり”〜er”ではなく”〜or”である。ちなみに、レジスタのer無しのregistという言葉はない。たぶん、registerがregist+〜er(〜するもの)だから、registで「登録」という意味になるだろうと推測して使っているんじゃないかと思うけど…これは間違い。情報分野の用語として正しい言葉を覚えておこう/使おう。

信号名などの命名について

  • ファイル名は、英大文字/英小文字+数字+”_”(アンダースコア)を使うこと。”-“(マイナス)は使わない方がよい。日本語のファイル名等は持ってもほか(入力ができないと思うけど…)。
  • 信号名もファイル名と同様に英大文字/英小文字+数字+”_”(アンダースコア)を使うこと。信号名の大文字/小文字はシステムが区別しないので、同一とみなすので注意(VHDLの場合)。 “-“(マイナス)記号も信号名には使用しない。
    • “~”,”#”,”%”,”!”等の特殊記号も使えないと思った方がよい(確認してないけど…)。
      • 大文字/小文字を区別しない(Case Insensitive)のは、Quartusでは、回路図入力の他にVHDLやVerilog HDL等のハードウェア記述言語の設計環境とつながっている。VHDLはadaを元に作られた言語でCase Insensitiveな言語である。さらに、他の設計ツールとの連係もできるようになっている。おそらく、VHDL環境をサポートするためには、Case Insensitiveにしておく方が楽。外部ツールにもCase insensitiveなツールがあるかも知れないので、Quartusもそれに合わせてあると考えた方がよさそうである。
    • よくある問題
      • 7セグメントの回路図ファイルの名前を 7seg.bdf にする(ファイル名を含め、数字で始めてはいけない)。
      • R/W_Nの信号名を R/W にする(スラッシュは使えません)。
  • プロジェクトの納められているフォルダ(ディレクトリ)のパス名の途中にスペースがはいっていると、ファイルの関係が崩れる(コンパイル等ができない)ことがある。
    • プロジェクトのフォルダを「マイ ドキュメント」などにいれた時に起こる。フォルダのパス名が、「C:\Document and setting\UserName\My Documents」のようにフォルダ名にスペースが入っている場合や、日本語のフォルダ名が使用されているとシンボルファイルと本体のデザインファイルがつながらなくなる(確認済)。プロジェクトのフォルダを作る際には、名前に気をつけてください。

ツールバーを消したい/出したい

大きさに限りのあるディスプレイを有効に使ってQuartusで編集をしたい。とか、ツールバーが消えてしまって、いちいちメニューバーから選ばないといけないので、ツールバーを出したい。等というときには、「Tools」→「Customize…」を選択するとダイアログが出る。「Toolbars」のタブを選択し、「Standard Quartus」あたりのチェックを付けたり/外したりすることで、ツールバーを制御できる。

ツールメニューバーを消したい/出したい

ツールメニューバーを間違って消してしまって、部品が呼び出せない。ツールメニューバーを出したい。等というときには、「Tools」→「Customize Block Editor」を選択するとダイアログが出る。「Toolbars」のタブを選択し、「Block Editor」にチェックを付けよう。チェックを付けたり/外したりすることで、ツールメニューバーのon/offを制御できる。

書き込み Programmer

回路図エディタ

回路図エディタを開いた時に出てくる、ブロック・エディタ・ツールバーについての説明とTipsです。

  • Quartusでは、信号名や部品名などの名称は”大文字/小文字を区別しません”。したがって、大文字/小文字だけが違う文字列(AND_Nとand_nのようなもの)は、同一と見なします。エラーがでる/意図通りに動かない原因になりますので、注意してください。

基本的な使い方

  • 回路図エディタで左ダブルクリックすると、部品の呼出しダイアログが表示され、一回限りの部品をおくモードになっている。ToolbarのSymbol Toolボタンをつついて部品を呼び出すよりはお手軽。
  • Quartusで使用するツールバーのアイコンの意味を図1に示す。

図1 ブロック・エディタ・ツールバーのアイコンの意味

  • 必要に応じて、Rubberbanding機能のON/OFFや Partial Line Selection機能のON/OFFを切り替えて効率よく回路図を編集するとよい。ON/OFFの違いは、自分で使って確かめてみてください。

ゴム紐機能の効果

あまり、上記の小技を多用しすぎると、配線がこんがらがったり、意図しないところがつながったりしますので、移動する先の場所を考えて使ってください。

  • Symbolツールを使ってシンボルを選択する際に左側のメニューから探して入れるのは煩わしい。シンボル名がわかっている場合には、直接”Name:”に名前を入力することもできます。 ex. “input”, “output”, “and2”, “not”, “GND”, “vcc”などなど。
  • 回路図を変更途中で思いがけない変更になってしまったときには、”Ctrl+Z”で Undo することができる。編集でもとに戻すよりも、いったんUndoした方が早いこともある。
  • 配線を引くには、Selection Toolを用いる。下4つの描画ツールはシンボルを作成する際の外枠をひくためにある。例えば、ALUの太いV字のような形などを登録したいときに使うのであり、普通使うことは少ないと思われる。
  • 回路図を引くときには、画面にグリッドがある方が引きやすいが、レポートなどに回路図を載せる出力をするときには、グリッドが邪魔になる。グリッドは、「Tools」→「Options」,「Block Symbol Editor」を選択すると、グリッドのOn/Offを切り替えるチェックボックスがあるので、これでOn/Offを制御できる。
  • Selection Tool を選択し、コピーしたいシンボルをクリックして選択状態にする。その後、キーボードの”Ctrl”キーを押しながら、シンボルをドラッグするとシンボルのコピーができます。※右クリックでコピー&ペーストもできます。ショートカットキー(Ctrl+C:コピー,Ctrl+v:ペースト)も使えます。
  • 配線の交点の付け替え:接続点にしたい配線上にポインタを移動し、マウスの右ボタンをクリックする。”Toggle Connection Dot”を選択すると接続点が表示される。もう一度、”Toggle Connection Dot”を選択すると接続点が削除される

接続の黒丸●を消す

  • 論理素子や部品を「シンボル」と呼びます。論理素子間を配線するラインを「ノード」と呼びます。T字の配線は接続点を境に、3つのノードから構成されます。input/outputピンに直接つながっているノードはピン名と同じ名前を持っています。異なるノード名を付けられません。名前を付けるには、ノード(配線)を選択して、右クリックし「Properties」を選択すると、ダイアログが出ます。 ”Name:” にノード名を入れることで、ノード名を付けたことになります。
  • Selection Toolを使って回路図を範囲指定した後、Flip Horizontal/Flip Virtical/Rotate 90ボタンで選択したもの全体が、反転/回転する。デフォルトでは、信号やゲートは左から右へ信号が流れる向きに作られる。個別にそれぞれを反転させて書くよりも、デフォルトの方向で書いておき、必要であれば、範囲指定をして反転や回転をする方が手間が省ける。
  • 当り前のことではあるけれど……、Selection Toolを使って回路図を範囲指定した後、指定範囲をコピー&ペーストができる。コピー:Ctrl+C, ペースト: Ctrl+Vのショートカット・キーも使用可能である。 ペーストは、Selection Toolでペーストする場所を指定する必要がある。
    • 発展形: Partial Selectionを使って基本形となる矩形領域を範囲指定する。このとき、基本形の配線まで含めて範囲指定し、コピー&ペーストして基本形を並べて接合していけば、配線の手間を大幅に省略することができる。
    • ショートカット: マウスのポインティングとキーボードのショートカットやキーボードコマンドを併用することで効率の良い設計ができ、設計時間の短縮がはかれる。覚えておくと何かと便利。

Windows標準のショートカットキー

機能 ショートカットキー
カット Ctrl+X
コピー Ctrl+C
ペースト Ctrl+V
アンドゥ Ctrl+Z
検索(Find) Ctrl+F
すべて選択 Ctrl+A
削除(delete) Del
保存(save) Ctrl+S

 

Quartus用のショートカットキー

機能 ショートカットキー
コンパイル Ctrl+L
シミュレーション Ctrl+I

 

  • 回路図上にシンボルが出ていて、もう一つ同じシンボルが欲しいんだけど……というとき、Ctrlキーを押しながらそのシンボルを左ボタンドラッグすると、シンボルのコピーが取り出せるよ。IOポートなどABUS0のような名前をつけてCtrl+ドラッグすると、ABUS1,ABUS2…のように自動的に連番をつけてくれます。バスの信号などを定義するときに便利。ただし、その場でつかんで放したりすると同じ場所にシンボルがいくつも重なったようになり、エラーになります。
  • 回路図シンボルの挿入はSymbolダイアログから行うが、デフォルトでは”Repeat-insert mode”になっており、左クリックでコピーがポコポコできる。キャンセルは別のツールを選ぶ(例えばSelection Toolを選択)かキャンセル(Esc キーを押す)すると良い。

信号名の命名規則

  • 信号名やノード名などの名前を付ける場合は、意味のある(信号名を見て用途が分かる)名称を付けるように心がけよう。(ソフトウェア開発上の変数名や関数名の命名とおなじことです。)
  • 大文字/小文字の区別がないので注意しよう。”Ea”と”EA”はQuartusでは同じノードや信号名と見なされて、信号が衝突している旨のメッセージがでたりします。
  • 負論理(‘L’に意味のある)信号については、バー(上線)が付けられないので、信号名の最後が(_N)で終る命名規則にしておけば、負論理だと言うことが信号名から分かるようになります。(例:CLR_N)

バス信号を使う場合

  • 8ビットや16ビットのデータがやり取りされる信号線を、一本一本配線していては、回路図が醜くなるばかりか、手間がむちゃくちゃかかります。複数の信号線をまとめて1本の太い配線で記述するのが「バス」信号線です。シミュレーションもバスを使った方が、データの入力をしやすいので、まとまったデータ線はバス信号線にすることをお勧めします。
  • バス信号のノード名(信号名)はビット数を ”[” ”]”で挟みます。配線はバス信号線の太い線を使います。 [例] ピン名が ”DATA_IN”で4ビットの信号の場合: ”DATA_IN[3..0]”,&color(red){バス信号はノード名[MSB..LSB]で指定する。};~ 信号一本一本は、DATA_IN[3] または DATA_IN3 、DATA_IN[2]またはDATA_IN2のように指定する。
    • 配列の大括弧 [] は無視されることがあります。したがって、バス名の末尾を数字にしてはいけません。
      • BUS1[5] BUS[15]、BUS15はすべて同一視される可能性があります。
  • ”DATA_IN[3..0]”と”DATA_IN[0..3]”とでは、ビットの配置が異なります。最下位側を小さい数字になるよう、統一しておくことを勧めます。
  • input/outputピンに直接つながっている配線(ノード)に名前を付ける場合には、ピン名と同じ名前をつけてください。モジュールの入出力がバスになっている場合も、それにつながるバスに名前をつけてください。名前をつけないとコンパイルが通りません。通常は特に名前を付ける必要はありません。
  • バス信号の交点の後には、必ずノード名(信号名)を付けてください。
  • ノード上に ”wire” というシンボルを挿入すると、その前後のノード名(信号名)を変えることができます。(異なる信号名なのだが、本質は同じ信号を結ぶときなどに使うことが多い)
  • ノード名が同じ場合、記述上配線されていなくても信号はつながります(陽に配線をしなくても同じノード名をつけておけば、つながっていると判断してくれる)。ノード名のミスタイプなどで、つながっているべき配線がつながっていないことがあるため、デバッグの際に注意すること。

バス信号線の使い方

  • 上記のバス信号を使う場合の例にもあるようにANDゲートやD-FFにバス線で示すような複数の信号線を入力するように記述できる。バス接続にできるのは、Quartusのライブラリ中(librariesフォルダ中のprimitives)に用意されている部品だけだと思われる。ユーザが定義した部品でバス接続に変更はできませんでした。

LPMライブラリを使う

  • LPM (the Library of Parameterized Modules :LPM)とは、ALTERA社独自のパラメタ化されたファンクション・モジュールである。良く使用されている一般的な機能モジュールが用意されており、Intel FPGAに最適化されている。使えるモジュールには以下のようなものがある。個別に作ると大変な回路になるけど…使いこなせるなら使った方が楽。megafunction, logic の階層の方にあると思う。licenseファイルに許可が無いと使えないかも(要確認)。
    • セレクタ(lpm_mux,busmux)
    • 2進化10進デコーダ(lpm_decode) 2進数をワンホット(1つだけ1が出力される)の信号にばらす回路、デコーダを作るのがなかなか大変。3bitを8本にするならまだしも、5ビットを32本なんて…とても大変。そこで、すでに用意されたパラメタライズされたモジュールを使うと楽になるよね。 下の図のように、LPM_DECODEを用意し、パラメタを設定して、信号線名を付け直せば使えるようになります。

LPMライブラリのシンボルとパラメータの定義

LPMデコーダのパラメータの指定

  • 回路図中に表がありますが、指定するパラメタは、 LPM_WIDTH:入力の2進数の幅、図の例では、3bitとして定義。 LPM_PIPELINE:デコード回路をパイプライン化するかどうかの指定であり、今はパイプライン化しないので0を指定。 出力はLPM_DECODESは、2^LPM_WIDTH本(2^3=8)になるように指定してあるので、ここはノータッチ。 指定方法は、シンボルを選択して「Proparties」→portタブ,parameterタブを選択する。上の図は、パラメタタブを選択した図。パラメタを指定したら「Change」ボタンを押すのを忘れないように。これで、3本のバイナリ信号を入力として、バイナリ番目の信号だけに1が出力されるデコード回路が利用できるようになった。中で基本論理ゲートを使ってばらすより簡単。使えるものは使ったほうがよい。

LPMデコーダの入出力の定義

  • ポートの指定は、data[LPM_WIDTH-1..0](入力のポート)とeq[LPM_DECODES-1..0](出力のポート)だけを”Used”(使用する)にして,それ以外のポートを”Unused”(使用しない)に指定すること。” パラメタを指定したら「Change」ボタンを押すのを忘れないように。 できあがったLPM_DECOERがちゃんと動作しているのか、どんな動作しているのか分からないのであれば、シミュレーションして動作を確認しておこう。入出力ポートをつければ、単体でシミュレーション可能です。動作が分かれば使ってよし!!。

シミュレーション

  • バス信号線をつかって回路図を記述すると、16本の信号をグループ化して一つの信号線であるかのようにシミュレーションすることができる。上記の図3の回路図のシミュレーションレポート画面を図4に示す。

図4 16ビットレジスタのシミュレーションレポート画面

DやQa,Qといった信号線は16本のバス信号として扱われていることがわかる。信号名の前の+ボタンをクリックすると各信号線(ex. D[15], D[14], … D[0]等)をバラして表示できる。

  • ん?!図4のDの入力はどうなっているの?と思った人はスルドイ!! ここは信号がランダムに変わっている。値がいくつかは、タイムラインカーソルを見たいところに移動させると信号名右側に値が表示される。ランダムに変える方法はというと……信号名を選択して右クリック、Value→Random Valueを選択した。信号が変わるタイミングや変わる値はQuartusにおまかせ。ランダム値にすると
    Warning: Found clock-sensitive change during active clock edge at time xxx.x ns on register “信号名?”
    みたいな警告が出ることがあるけど、たまたまクロックの変化するところで、値も変わったことを示す警告なので、この場合は無視。
  • ん? 図4のDの値はひょっとして16進? シミュレーションをする時の入力の値に16進も使えるの? と思った人はなかなかの観察力!!。そうです。2進,8進,符号あり/なし10進,16進で表示することができるのです。切り替える方法は、信号名を選択し右クリック、Propertiesを選択するとダイアログが出てくる。ダイアログの”Radix”(基数の意味)を変更すると表示や入力をその基数にする事ができる。
基数名称 意味 表記
Binary 2進表記 B xxxxxxxxx
Hexadecimal 16進表記 H xxxx
Octal 8進表記 O xxxxx
Signed Decimal 符号付き10進表記 S xxxx
Unsigned Decimal 符号なし10進表記 U xxxx

基数名称と意味くらいは情報分野としては常識の範囲。覚えておこう。

  • Simulation Coverageについて
    ヘルプによると、
This option reports the ratio of outputs (coverage) actually simulated to the
number of outputs in the netlist and is expressed as a percentage.
The three types of coverage reports you can select from are Display
complete 1/0 value coverage report, Display missing 1-value coverage
report, and Display missing 0-value coverage report.

The following are individual reports and their definition:

Complete 1/0 value coverage report
Displays all the nodes or buses that toggle between 1 and 0 during
simulation.
Missing 1-value coverage and Missing 0-value coverage reports
Displays all the nodes that do not toggle to the designated value.

だそうです。

コンパイル

  • メニューバー Assignments / Device でターゲット・デバイス(SEP3の場合 EPF10K30EQC208-3)が正しく設定されているか確認する。
  • コンパイルしてエラーがあるとMessageウィンドウ内に赤い文字でエラーの内容が”英語で”表示される。以下の手順で対処方法を確認できる。
    1. エラーメッセージを選択し、マウスの右ボタンをクリックする
    2. Helpを選択する。
    3. エラーの内容と対処方法を記述したHelpが起動するので内容を確認する。当然”英語で”。
    4. メッセージウィンドウ内の”エラーメッセージをダブルクリックするとエラー箇所にリンクされる”。Helpで確認した内容に従い修正を行う。
  • [[Quartusのエラーと対処|エラーメッセージのページ]]を参照してみる。
    • そこに無ければ、メッセージを登録しておく。そのうち天の声が聞こえてくるのを待つ。
    • 待っていられなければ、TAや教員を呼ぶ。

ファイル・タイプ

Quartusで使用する主なファイルは次のとおりである。

ファイル・タイプ 拡張子(Extension)
Block Design File .bdf
Block Symbol File .bsf
EDIF Input File .edf, .edif, .edn
Graphic Design File .gdf
Pin-Out File .pin
programmable logic Partial SRAM Object File .psof
Programmer Object File .pof
Quartus Default Settings File .qdf
Quartus Project File .qpf
Quartus Settings File .qsf
Quartus Workspace File .qws
Vector File .vec
Vector Table Output File .tbl
vector source files .tbl, .vwf, .vec
Vector Waveform File .vwf
waveform files .scf, .stp, .tbl, .vec, .vwf