Lattice Diamond階層設計を用いたテストベンチのチュートリアル

Logic Home

概要

Lattice Diamond Ver.2.0.1設計ソフトウェアでは、以下のトピックを扱います。

• Lattice Diamond設計フローツールの基本的な概要
• トップレベル階層におけるVHDLモジュールのインスタンス化
• DiamondのDesign Viewを用いた階層の生成
• DiamondのDesign Viewを用いたテストベンチテンプレートの生成
• カスタムテストベンチを使用したActive-HDLのプロジェクト作成
• Active-HDLでの信号の表示とカスタムテストベンチの実行

はじめに

このチュートリアルでは、Lattice LFE2-70E FPGA用のLattice Diamondバージョン2.0.1とActive-HDLを用いた基本的なテストベンチの作成とActive-HDLのシミュレーションについて説明します。テストベンチを作成していると、別のeeWikiの記事でより詳細に説明されている、combinational carry look-ahead adder(組合せキャリー先読み加算器)を読みたくなると思います。VHDLモジュールが用意されていますので、Active HDLで使用する回路図シンボル、トップレベルの回路図ファイル、およびTest Benchテンプレートを作成するだけです。

背景

Lattice ECP2は中密度(6~95K LUTと90~583 IO)デバイスで、sysDSPとフレキシブルなメモリリソースを備えています。これにより、3~42個の高性能DSPブロックと55Kビット~5308KビットのsysMEM内蔵ブロックRAMを実現します。このチュートリアルは、シミュレーションベースであり、ソフトウェアのみを使用します。

チュートリアルに必要なソフトウェアです。
Lattice Diamond Design Software バージョン2.0.1(サードパーティ製ソフトウェアSynplify Pro for LatticeおよびActive-HDL Lattice Editionが付属)

応用例

回路を作る

  1. 開発の最初のステップは、Lattice Diamond Design Softwareを起動し、新規プロジェクトウィザードを使用して新規プロジェクトを作成することです。File → New → Projectと進み、プロジェクト名(Testbench_Tutorialなど)と場所(location)を入力します。

  2. 「Next>」をクリックして、Add Source Window(ソース追加ウィンドウ)を表示します。「Add Source」をクリックすると、このプロジェクトのeeWikiウェブページに提供されているVHDLモジュールをインポートすることができます。Top_Testbench_Tutorial.vhdとdflipflop_nbit.vhd、およびnbitsatadder.vhdを追加し、「Copy source to implementation directory(ソースを実装ディレクトリにコピーする)」にチェックを入れてください。

  3. 「Next>」をクリックし、Select Device Window(デバイス選択ウィンドウ)に進みます。以下を入力し、「Next>」をクリックします。
    • Family: LatticeECP2
    • Device: LFE2-70E
    • Performance grade: 5
    • Package type: FPBGA672
    • Operating Conditions: Commercial
    • Part Names: LFE2-70E-5F672C

  4. 設定が正しいことを確認し、「Finish>」をクリックします。この手順は、他のLattice FPGAを使用する場合も同じです。ただし、Select Device Windowの設定のみが異なります。

  5. File List window(ファイル一覧ウィンドウ)で、いずれかの.vhdファイルをダブルクリックすると、そのファイルが開かれ、表示されます。以下の図1のような環境になります。

図1 - Diamondの設計環境

  1. File List Windowで、入力ファイルフォルダの1つ上の階層にあるアクティブな実装フォルダを右クリックし、ポップアップメニューからProperties(プロパティ)を選択します。

  2. Project Propertiesダイアログボックスで、プロジェクトがハイライトされていることを確認し、「Top-Level Unit」のValueのセルで、Top_Testbench_Tutorialを選択します。このファイルは、手動で入力することが必要な場合があります。これは以下の図2で見ることができます。

図2 - Project Properties Window

  1. 上部ツールバーの「Generate Hierarchy」ボタンをクリックするか、Design → Generate Hierarchyをクリックします。

  2. この時点で、VHDLコンポーネントが階層的に配置されたDesign Viewが表示されます。ここで、「Run BKM Check(BKMチェックの実行)」をクリックするか、Design → Run BKM Checkをクリックしてください。VHDLモジュールが緑色になり、(0)エラーと(0)警告が表示されます。これは以下の図3で見ることができます。

図3 - 階層が生成されたDesign View

  1. Design View内のtop_testbench_tutorialを右クリックし、VHDL Test Bench Templateを選択します。これは以下の図4で見ることができます。

図4 - Test Bench Templateを作成する

  1. File List WindowのInput Filesフォルダの下に、新しいファイルが作成されます。これはテストベンチのテンプレートで、シミュレーションを実行するのに必要なほとんどのVHDLが含まれています。ファイルはこのパスから実行することも、ソースフォルダに移動することも可能です。テストベンチの名前は、この例のように、「testbench.vhd」から「top_testbench_tutorial_tb.vhd」などに変更することができるようになりました。また、テストベンチには、トップレベルデザインの入力ポートを駆動するためのカスタムテストベクタと、クロックを制御するためのプロセスが必要です。信号の割り当ては、「tb:PROCESS」プロセスで行う必要があります。クロックを制御するために「clock:PROCESS」というプロセスが追加されます。駆動アーキテクチャのRTL回路図は、Lattice DiamondのツールバーからSynplify Proを開き、デザイン実行後に 「RTL View」ボタンをクリックすることにより、Synplify Proで作成できます(オプションとして)。以下の図5のようなRTL回路図が作成されます。

図5 - RTL回路図

  1. 「PORT MAP(」の上の「BEGIN」文の前に、以下を挿入します。

• constant PERIOD : time := 20 ns;

「tb:PROCESS」の直前にクロックを制御するために以下のVHDLを挿入します。

• clock : PROCESS
• BEGIN

• clk <= ‘1’;
• WAIT FOR PERIOD/2;
• clk <= ‘0’;
• WAIT FOR PERIOD/2;

• END PROCESS;

  1. BEGINとwait文の間の「tb : PROCESS」に、入力ポートを駆動するために以下のVHDLを入力します。

• ready <= ‘0’;
• n_reset <= ‘0’;

• WAIT FOR 40 NS;

• n_reset <= ‘1’;

• WAIT FOR 40 NS;

• ready <= ‘1’;

• a_in <= “001100111111111111”;
• b_in <= “000010000000000001”;

• WAIT FOR 10 NS;

• a_in <= “101100111111111111”;
• b_in <= “100010000000000001”;

• WAIT FOR 10 NS;

• a_in <= “011100111111111111”;
• b_in <= “010010000110000001”;

• WAIT FOR 10 NS;

• a_in <= “101100000100001111”;
• b_in <= “100010000000000001”;

• WAIT FOR 10 NS;

• a_in <= “101111111111111111”;
• b_in <= “111110001111100001”;

• WAIT FOR 40 NS;

• a_in <= “111111000001111111”;
• b_in <= “111011111111100001”;

• WAIT FOR 40 NS;

• a_in <= “001111111111111111”;
• b_in <= “101001100011100001”;

• WAIT FOR 40 NS;

• a_in <= “001111110000110011”;
• b_in <= “001011111111100001”;

• WAIT FOR 40 NS;

• a_in <= “100000111111111111”;
• b_in <= “111101101111100001”;

• WAIT FOR 40 NS;

• a_in <= “000000000000001111”;
• b_in <= “011010000011100110”;

  1. コードは以下の図6、図7のように入力します。

図6 - クロックプロセスを追加した修正テストベンチ

図7 - テストベクタを追加した修正テストベンチ

  1. デザインを保存し、上部ツールバーのSimulation Wizardをクリックするか、Tools → Simulation Wizardをクリックします.

  2. プロジェクト名をこの例のように「testbench」と入力し、正しいプロジェクトの場所を探してください。Active-HDLのラジオボタンをクリックし、Next>をクリックします。

  3. RTLのラジオボタンをクリックし、Next>をクリックします。

  4. 「Add and Reorder Source」ウィンドウで、Next>をクリックします。

  5. 「Parse HDL files for simulation」ウィンドウで、「top_testbench_tutorial_tb」が「Simulation Top Module:」に設定されていることを確認し、Next>をクリックします。

  6. 「Summary」ウィンドウで、「Run Simulator」がチェックされていることを確認し、「Finish」をクリックします。

  7. Active-HDLが開きます。「Files」ウィンドウで「work library」を展開し、「top_testbench_tutorial_tb (behavior)」で右クリックし、Initialize Simulationを選択してください。これは、以下の図8で見ることができます。

図8 - Active-HDLシミュレーションの初期化

  1. 「Structure」タブが一番上に浮上し、最上位のポートをWaveウィンドウに追加できるようになりました。これを行うには、各信号を右クリックし、ポップアップメニューからAdd to Waveformを選択します。これは以下の図9で見ることができます。

図9 - Waveformへのポート信号の追加

  1. これで、ツールバーの「Run For」(F5)ボタンをクリックするか、「Run」と入力し、「Console」ウィンドウに指定した時間を「run 100 ns」のように入力すると、テストベンチを実行できます。

  2. もう1つの便利なコマンドは「restart」で、これはテストベンチの初めからシミュレーションを再開します。テストベンチのシミュレーションの最終結果は、以下の図 10 のようになります。

図10 - テストベンチの最終結果

機能、制限、および変更点

このチュートリアルの作成にはLattice Diamondバージョン2.0.1を使用し、サポートソフトウェアはSynopsisのSynplify Pro for LatticeとAldecのActive-HDL Lattice Editionを使用しました。Diamondは、別の合成ソフトやシミュレーションソフトと組み合わせて、スタンドアローンの開発環境として使用することができます。

まとめ

このチュートリアルでは、Lattice Diamond設計ソフトウェアを用いて、カスタムのユーザーテストベンチをテンプレートからいかに簡単に作成できるかを説明しています。このチュートリアルで説明した手順を実行するだけで、どんな設計のカスタムテストベンチでも作成することが可能です。

補足説明

さらなる設計サポート、製品チュートリアル、アプリケーションノート、ユーザーガイド、およびその他の文書は、Latticeのウェブサイト(https://www.latticesemi.com/ja-JP/Support)でご覧いただけます。

付録:ファイルダウンロード

LD_Testbench_Tutorial.doc (774 KB)

Top_Testbench_Tutorial.vhd (3.1 KB)
NbitSatAdder.vhd (3.0 KB)
NBitDFF.vhd (2.0 KB)
top_testbench_tutorial_tb.vhd (3.9 KB)




オリジナル・ソース(English)