MAX10 FPGA (3: PLL設定・タイミング制約) 【自作USBブラスター】

アイキャッチ

自作USBブラスター用FPGAの続きです。

記事を4つに分けて書いていきます。

  1. ファイルの展開 ~ デバイス指定
  2. ピン制約(ピン定義)
  3. PLL設定・タイミング制約 ←現在地
  4. コンパイル・デバイスへの書き込み

PLL 設定

基板上のオシレータが 12 MHz に対して、今回のデザインで使用するクロックは 24 MHz です。
MAX10のPLLを使って、12 MHz のクロックから 24 MHz のクロックを生成して使用します。

IP選択

Quartus の右のほうにある IP Catalog の検索欄に「pll」と入力します。
pll で絞り込まれた候補のうち、ALTPLLをダブルクリックします。

PLL IPを選択

epm7064.qpf があるフォルダに、IP というフォルダを作ってその中に pll.vhd というファイル名を指定しました。 (このあたりは好みで構わないけど、ファイルパスに日本語とスペースを含まないようにしましょう)

file type は VHDL を選びましたが、Verilog な方はそちらをどうぞ。OK をクリックします。

PLL IP設定

変更する項目だけ挙げていきます。

[1] Parameter Settings – General/Modes
 What is the frequency of the inclk0 input? に 12 MHz と入力
ALTPLL設定
[3] Output Clocks – clk c0
 Enter output clock frequency を選択
 Requested Settings で 24 MHz と入力
ALTPLL設定

残りのページは変更なしです。右下の Finish をクリックして終了です。

ファイルの追加確認ウィンドウが出た場合は、Yes をクリックしてプロジェクトへ追加しておいたらいいと思います。No を選んでも後で手動で追加するので、どちらでも大丈夫です。

IP追加確認ウィンドウ

ソースファイル追加

作成した PLL と、ダウンロードし使用している jtag_logic をつなぐためのソースファイルを作ります。

ソースはGitHubに置いてあります。(jtag_logic_top.vhd)

ソースファイルをプロジェクトに追加

上記のソースファイルをプロジェクトに追加します。VHDLのファイル名は jtag_logic_top.vhd です。

Quartus のメニュー、Assignments → Setting をクリックします。

Quartus Setting

左側のメニューから Files を選びます。
File name の右のほうの「…」をクリックして、 jtag_logic_top.vhd を選びます。
下のファイル一覧に追加されればOK。

PLLを追加していない場合は、同様に pll.qip ファイルを選択して追加しましょう。

Quartus Files

追加できたらOKをクリックして閉じます。

トップソースを指定

追加した jtag_logic_top.vhd をトップに指定します。

左上のほうの Project Navigator で Files に切り替えます。

Project Navigator - Files

その中に先ほどの jtag_logic_top.vhd があるので、右クリックから Set as Top-Level Entity を選択。

Set as Top-Level Entity

Project Navigator で Hierarchy に切り替えると、図のように jtag_logic_top.vhd がトップになっています。

Project Navigator - Hierarchy

ピン定義の補足

正解はないですが、トップソースが決まってからピン制約をした方がいいと思います。
ポート名が変わったり、増減したら二度手間になるので・・・

タイミング制約

クロックの周期をタイミング制約に追加します。
コンパイルにおいて、ここで設定した周期を満たすように内部の配線長が調整されます。

Timing Analyzer 起動と Netlist Setup

Timing Analyzer アイコンをクリックして Timing Analyzer を起動します。(以前のバージョンでは TimeQuest Timing Analyzer、名前変わってる。)

Timing Analyzer

起動したら、Update Timing Netlist をダブルクリックしてネットリストをアップデートします。

update Timing Netlist

クロックの制約を作成

クロックの制約を追加します。
メニューの Constraints → Create Clock をクリックします。

Create Clock

MAX1000 の基板上にある 12 MHzのオシレータを使用するので、その情報を追加します。

12MHzの周期は、1/12(MHz) = 83.333(ns)
ソースのポート宣言でクロックのポート名は CLK なので同じ名前にしておきます。

Create Clock
  • Clock name: CLK
  • Period: 83.333

次に Targets の右の方の「…」ボタンをクリックします。

Name Finder

Name Finder ウインドウが出てきます。
 Collection は、 get_ports を選択
 Filter に、 CLK と入力
の状態で List ボタンをクリックします。

ボタンの下側に CLK が出てくるので 「>」ボタンをクリックして、CLK を右側に追加します。
その後、OK をクリックして閉じます。

Create Clock ウィンドウに戻ると、SDC Command に

が入力されているはずです。RUN をクリックします。

Timing Analyzer の画面に戻るとオレンジになれば正常です。

SDCファイル書き出し

Tasksの一番下の Write SDC File をダブルクリックします。

Write SDC File

Write SDC File は内容を変更せずに OK をクリックします。

Write SDC File

ファイルへの出力は以上です。Timing Analyzer は閉じましょう。

余談ですが、 jtag_logic.out.sdc ファイルをテキストエディタで開くと先ほどの内容が書かれています。

SDCファイルをプロジェクトに追加

作成したSDCファイルを、Quartus でプロジェクトに追加します。

その前に、ファイル名を jtag_logic.sdc に変更しましょう。
(間違えて Timing Analyzer から上書きしないために)

Quartus のメニューで、Assignments → Setting をクリックします。

Quartus Setting

Setting ウィンドウで、左側の Timing Analyzer をクリックします。
右の「…」をクリックして、先ほどのSDCファイルを選択します。
下側にファイルが追加されればOKです。

Quartus Setting SDC File

スポンサーリンク