入門チュートリアル - デザイン階層の検討

FPGA プロジェクトファイル (*PrjFpg) は様々なソースドキュメントとリンクすることで単一のプロジェクトとしてまとめられています。従って、ドキュメント間やネット接続などの関連はドキュメント自体の情報で定義されています。

階層のあるデザインでは、デザインは論理ブロックで仕切られており、それぞれのブロックがトップの回路図シートにシートシンボルとして表現されています。各シートシンボルの Filename の属性は、それが表している元のデザインファイルを参照しています。元のデザインファイルには、以下のものがあります:

  • 回路図シート
  • OpenBus システムのドキュメント
  • VHDL ファイル
  • Verilog ファイル

回路図のサブシートにも、更に下位のデザインファイルを参照しているシートシンボルが含められていることがあります。このアプローチで、任意の深さや組合せを持つデザイン階層 を作成することができます。

階層になったネットやバスとドキュメントとの接続性は、標準的な階層プロジェクトの接続の動作に従っています。そこでは、サブドキュメント上のポートが、シートシンボル上でそのドキュメントを表わす同じ名前のシートエントリに接続しています。回路図や VHDL のサブドキュメントについては、図 1 をご覧ください。

図 1. シートエントリからそれに相当する下位ドキュメント上のポートへ接続される階層のあるネット。

このチュートリアルでベースとなるシンプルなカウンタのデザイン例にとっては、デスクトップ NanoBoard から供給される同期クロック信号が早すぎます。カウンタをスローダウンさせるため、分周器用の回路を追加します。Simple_Counter の回路図にこの回路を追加するのではなく、サブファイルとして(最初は回路図に、その後に VHDL ファイルに)キャプチャします。それによって、FPGA をプログラムする際、階層デザインがどのように使用されるか確認してみましょう。

回路図サブシートを使用する分周器

分周器の回路を回路図サブシートにキャプチャしてみましょう。

  • 回路図ドキュメント Simple_Counter.SchDoc を開きます。
  • 初めにシート上のフリースペースにシートシンボルを配置します (Place » Sheet Symbol)。このシートシンボルはサブシートを表しています。サブシート上に分周器の回路を定義します。
  • シートシンボルをダブルクリックし、表示される Sheet Symbol ダイアログで以下のように設定します:
    • デジグネータ: U_Clock_Divider
    • ファイル名: Clock_Divider.SchDoc.

図 2. 元の回路図サブシートを参照しているシートシンボル。
  • シートエントリをシートシンボルの左右に追加します (Place » Add Sheet Entry)。以下のプロパティを設定します:
    • 左側のシートエントリ: Name: CLK_REF, I/O Type: Input
    • 右側のシートエントリ: Name: CLK_OUT, I/O Type: Output
  • シートシンボルをメインの回路内、CLK_REF ポートコンポーネントの隣に接続します(図 3)。

図 3. シートシンボルを含む Simple_Counter の回路図。Clock_Divider.SchDoc サブシートが配置され、配線されています。

これで、親になるシートシンボルができました。参照先となり、目的の回路が載ったサブシートを実際に作成しなくてはなりません。

注: 以下のステップは、回路図サブシートとその内容を線画で定義するプロセスです。ステップのこの部分を省略するには、Projects パネル内の Simple_Counter.PrjFpg のエントリを右クリックして、Add Existing to Project を選択してください。Choose Documents to Add to Project ダイアログが表示され、Clock_Divider.SchDoc ファイルを開くようにナビゲートされます。このファイルは、Altium Designer をインストールしたディレクトリの \Examples\Tutorials\Getting Started with FPGA Design フォルダにあります。
その後、プロジェクトと回路図のトップシートを保存して、次のステップに進んでください。

  • シートシンボルを右クリックして、Sheet Symbol Actions » Create Sheet From Symbol を選択します。新しい回路図ドキュメント Clock_Divider.SchDoc が作成され、アクティブドキュメントとしてメインデザインウィンドウ内に開かれます。最初、このドキュメントには 2 つのポート、CLK_REF と CLK_OUT があります。これらは親のシートシンボルにおけるそれぞれのシートエントリに関連(接続)するものです。
  • Libraries パネルにアクセスして、6 つの分周器コンポーネント(CDIV10DC50 - 50% の負荷サイクル出力で 10 分の 1 分周)を FPGA Generic 統合ライブラリ (FPGA Generic.IntLib) からこの新しいシート上に配置します。コンポーネントを順に接続し、2 つのポート間を接続します(図 4)。

図 4. 回路図サブシート Clock_Divider.SchDoc 上のクロック分周回路。
  • Tools » Annotate Schematics Quietly を使用してコンポーネントをアノテートします。
  • File » Save All を使用して回路図と親プロジェクトの両方を保存します。 Clock_Divider.SchDoc の保存には、デフォルトの場所(例えば、トップレベル回路図と同名のフォルダ)を用意してください。
  • プロジェクトをコンパイルしてエラーをチェックします。エラーがあれば、修正、保存し、再コンパイルしてください。
  • コンパイル後、プロジェクトのシート階層を Projects パネルでチェックできます。これでプロジェクトがサブシート (Clock_Divider.SchDoc) を Simple_Counter の回路図の子として認識するようになります。

図 5. 回路図サブシートの階層。

クロック分周器の回路の追加はこれで終了です。テストしてみましょう。

  • Devices ビューを開き、Live オプションが有効で、Connection の表示が緑であることを確認します。
  • 物理的 FPGA デバイスがプログラムされ、Process Flow は全ステージが完了したことを表示(緑)しています。デザインのソースドキュメントを変更した場合、どうしてこのような結果になるのでしょうか? その答えは、Ignore FPGA source オプション(デフォルトで有効)にあります。このオプションを無効にしなくてはならない場合、Process Flow のステータス評価の際に、変更されたソースドキュメントが考慮されるようになります。無効にすると、Process Flow の各ステージが黄色に変わり、失効、再度実行が必要と言う状態になります。

図 6. Ignore FPGA source オプションを無効にした場合、Process Flow の評価時に、変更されたソースが考慮されます。
  • ドータボードの FPGA デバイスを再度プログラムします。これを行う最も簡単な方法は、Process Flow の Program FPGA ステージを直接クリックすることです。それに先立つ全てのステージが自動的に、順次実行されます。なぜなら、それらは失効とされているからです。論理合成ステージの後で、この新しい回路図サブシートに関連する中間 VHDL ファイルが、プロジェクト用に生成された VHDL ファイル内に現れます。

図 7. 論理合成で生成されたサブシート用の追加 VHDL ファイル。

一度プログラムされ、カウンタ(DIP スイッチのスイッチ 7、スイッチ 8 がオン)を開始、NanoBoard のユーザ LED の出力がスローダウンしているのを確認します。シーケンスはよりクリアになりました。DIP スイッチを使用して方向を切り替えてみてください。今度はうまくいくはずです。

HDL サブファイルを使用する分周器

回路図シートと HDL コードの組合せでデザインをキャプチャする場合、デザイン階層のコンセプトは容易に拡張できます。VHDL や Verilog のサブドキュメントは、回路図サブシートと同じ方法で参照されます。つまり、シートシンボル中で、それが表しているサブドキュメントのファイル名を特定することで参照されます。

VHDL サブドキュメントを参照する際、考慮される接続性は、シートシンボルから VHDL ファイルにおけるエンティティの宣言までになります。エンティティを VHDL のファイル名とは異なる名前で参照するには、VHDLEntity パラメータをシートシンボルに含めます。この値は、VHDL ファイルにおいて宣言された Entity の名前です。

Verilog サブドキュメントを参照する際も、プロセスは同様です。考慮される接続性は、シートシンボルから Verilog ファイルにおけるモジュールの宣言までになります。モジュールを Verilog のファイル名とは異なる名前で参照するには、VerilogModule パラメータをシートシンボルに含めます。この値は、Verilog ファイルにおいて宣言された Module の名前です。

Mhz の単純な遅延によるクロック分周を装備した VHDL ファイルとして、追加したばかりの回路図サブシートの代用を考えてみましょう。

最初に VHDL ソースファイルを生成します。

注: 以下のステップは、VHDL サブファイルとその内容を線画で定義するプロセスです。ステップのこの部分を省略するには、Projects パネル内の Simple_Counter.PrjFpg のエントリを右クリックして、Add Existing to Project を選択してください。Choose Documents to Add to Project ダイアログが表示され、Clock_Divider.vhd ファイルを開くようにナビゲートされます。このファイルは、Altium Designer をインストールしたディレクトリの \Examples\Tutorials\Getting Started with FPGA Design フォルダにあります。
その後、プロジェクトを保存して、既存の回路図サブシートを削除するステップへ進みます。

  • Projects パネルの Simple_Counter.PrjFpg エントリを右クリックして、Add New to Project » VHDL Document を選択します。新しい VHDL ドキュメント (VHDL1.vhd) が作成され、アクティブドキュメントとしてメインデザインウィンドウ内に開かれます。ドキュメントを Clock_Divider.vhd の名前で、プロジェクトファイルと同じ場所に保存します。
  • 以下の VHDL コードをドキュメントに入力してください:

    library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;  entity Clock_Divider is     port (         CLK_REF : in std_logic;         CLK_OUT : out std_logic     ); end entity;  architecture RTL of Clock_Divider is begin     process(CLK_REF)        variable i : integer range 0 to 999999;     begin        if rising_edge(CLK_REF) then            if i = 0 then                CLK_OUT <= '1';                i := 999999;            else                CLK_OUT <= '0';                i := i - 1;            end if;        end if;     end process; end architecture;
  • ドキュメントを保存します。

VHDL ソースファイルができました。これで、シートシンボルを直にそこから作成することができます。でもその前に、既存のシートシンボルをトップレベルの回路図と参照先の回路図サブシートから削除しましょう。

  • 回路図サブシート Clock_Divider.SchDoc を FPGA プロジェクトから削除します。Projects パネル内のサブシート名を右クリックしてメニューから Remove from Project を選択します。
  • Simple_Counter の回路図ドキュメント (Simple_Counter.SchDoc) を開きます。既存のシートシンボルをクリックして、Delete キーを押します。
  • メインメニューから、Design » Create Sheet Symbol From Sheet Or HDL を選択します。Choose Document to Place ダイアログが表示されますので、Clock_Divider.vhd エントリを選択し、OK をクリックします。
  • 新しいシートシンボルを回路に配置、配線します(図 8)。DesignatorFilename が自動的に U_clock_dividerClock_Divider.vhd にそれぞれ設定されることに注意してください。VHDLENTITY パラメータもまた、value = clock_divider(VHDL サブファイルにおけるエンティティの名前)として追加されます。

図 8. シートシンボルを含む Simple_Counter の回路図。Clock_Divider.vhd サブファイルが配置され、配線されています。
  • 回路図とプロジェクトを保存します。
  • プロジェクトをコンパイルしてエラーをチェックします。エラーがあれば、修正、保存し、再コンパイルしてください。
  • コンパイル後、プロジェクトの階層を Projects パネルでチェックできます。これでプロジェクトが VHDL サブファイル (Clock_Divider.vhd) を Simple_Counter の回路図の子として認識するようになります。

図 9. VHDL サブファイルの階層。

クロック分周器の VHDL バージョンの追加はこれで終了です。テストしてみましょう。

  • Devices ビューを開き、ドータボードの FPGA デバイスを再プログラムします。Process Flow の Program FPGA ステージをクリックしてください。
  • 一度プログラムされ、カウンタ(DIP スイッチのスイッチ 7、または、スイッチ 8 のどちらかをオンに設定)を開始させます。NanoBoard のユーザ LED で、スローダウンしたカウンタ出力と、DIP スイッチによる出力のコントロールを確認できます。
You are reporting an issue with the following selected text and/or image within the active document: