概要
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が付属)
応用例
回路を作る
-
開発の最初のステップは、Lattice Diamond Design Softwareを起動し、新規プロジェクトウィザードを使用して新規プロジェクトを作成することです。File → New → Projectと進み、プロジェクト名(Testbench_Tutorialなど)と場所(location)を入力します。
-
「Next>」をクリックして、Add Source Window(ソース追加ウィンドウ)を表示します。「Add Source」をクリックすると、このプロジェクトのeeWikiウェブページに提供されているVHDLモジュールをインポートすることができます。Top_Testbench_Tutorial.vhdとdflipflop_nbit.vhd、およびnbitsatadder.vhdを追加し、「Copy source to implementation directory(ソースを実装ディレクトリにコピーする)」にチェックを入れてください。
-
「Next>」をクリックし、Select Device Window(デバイス選択ウィンドウ)に進みます。以下を入力し、「Next>」をクリックします。
• Family: LatticeECP2
• Device: LFE2-70E
• Performance grade: 5
• Package type: FPBGA672
• Operating Conditions: Commercial
• Part Names: LFE2-70E-5F672C -
設定が正しいことを確認し、「Finish>」をクリックします。この手順は、他のLattice FPGAを使用する場合も同じです。ただし、Select Device Windowの設定のみが異なります。
-
File List window(ファイル一覧ウィンドウ)で、いずれかの.vhdファイルをダブルクリックすると、そのファイルが開かれ、表示されます。以下の図1のような環境になります。
図1 - Diamondの設計環境
-
File List Windowで、入力ファイルフォルダの1つ上の階層にあるアクティブな実装フォルダを右クリックし、ポップアップメニューからProperties(プロパティ)を選択します。
-
Project Propertiesダイアログボックスで、プロジェクトがハイライトされていることを確認し、「Top-Level Unit」のValueのセルで、Top_Testbench_Tutorialを選択します。このファイルは、手動で入力することが必要な場合があります。これは以下の図2で見ることができます。
図2 - Project Properties Window
-
上部ツールバーの「Generate Hierarchy」ボタンをクリックするか、Design → Generate Hierarchyをクリックします。
-
この時点で、VHDLコンポーネントが階層的に配置されたDesign Viewが表示されます。ここで、「Run BKM Check(BKMチェックの実行)」をクリックするか、Design → Run BKM Checkをクリックしてください。VHDLモジュールが緑色になり、(0)エラーと(0)警告が表示されます。これは以下の図3で見ることができます。
図3 - 階層が生成されたDesign View
- Design View内のtop_testbench_tutorialを右クリックし、VHDL Test Bench Templateを選択します。これは以下の図4で見ることができます。
図4 - Test Bench Templateを作成する
- 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回路図
- 「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;
- 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”;
- コードは以下の図6、図7のように入力します。
図6 - クロックプロセスを追加した修正テストベンチ
図7 - テストベクタを追加した修正テストベンチ
-
デザインを保存し、上部ツールバーのSimulation Wizardをクリックするか、Tools → Simulation Wizardをクリックします.
-
プロジェクト名をこの例のように「testbench」と入力し、正しいプロジェクトの場所を探してください。Active-HDLのラジオボタンをクリックし、Next>をクリックします。
-
RTLのラジオボタンをクリックし、Next>をクリックします。
-
「Add and Reorder Source」ウィンドウで、Next>をクリックします。
-
「Parse HDL files for simulation」ウィンドウで、「top_testbench_tutorial_tb」が「Simulation Top Module:」に設定されていることを確認し、Next>をクリックします。
-
「Summary」ウィンドウで、「Run Simulator」がチェックされていることを確認し、「Finish」をクリックします。
-
Active-HDLが開きます。「Files」ウィンドウで「work library」を展開し、「top_testbench_tutorial_tb (behavior)」で右クリックし、Initialize Simulationを選択してください。これは、以下の図8で見ることができます。
図8 - Active-HDLシミュレーションの初期化
- 「Structure」タブが一番上に浮上し、最上位のポートをWaveウィンドウに追加できるようになりました。これを行うには、各信号を右クリックし、ポップアップメニューからAdd to Waveformを選択します。これは以下の図9で見ることができます。
図9 - Waveformへのポート信号の追加
-
これで、ツールバーの「Run For」(F5)ボタンをクリックするか、「Run」と入力し、「Console」ウィンドウに指定した時間を「run 100 ns」のように入力すると、テストベンチを実行できます。
-
もう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)