2018-08-02 (木) 10:22:27

IPexpress

FPGAデバイスのハードマクロやIP(知的財産)コアを利用する方法として、「IPexpress」があります。

これはGUI上でパラメータ設定を与えると、それが反映されたHDLコードが出力されます。

また、下記のほか有償無償のIPがLattice Semiconductor・webサイトからダウンロードすることができます。

設定方法

PLLの作成を例にとり、説明します。

01.png

「Tools」−「IPexpress」をクリックします。


02.png

PLLをクリックします。


03.png

作成するファイル名、言語を選択し「Customize」をクリックします。


04.png

設定パラメータを入力し、「Calculate」「Generate」をクリックします。

パラメータ内容は「Help」をクリックすると、説明が参照できます。


05.png

「Total Errors: 0」であれば正常にファイルが生成されます。問題があるときは、タブ「Configuration」をクリックし、再度パラメータを設定します。


06.png

生成したファイルをプロジェクトに組み込みます。

「File」−「Add」−「Existing File...」をクリックします。


07.png

以下の入力した名称のファイルがあるので、「PLL.ipx」をクリックします。

  • PLL.ipx Lattice Diamondで組み込む設定ファイル。
  • PLL.lpc ispLEVERで組み込む設定ファイル。
  • PLL.v モジュールが記述されたHDLファイル。シミュレーションで利用する。
  • PLL_tmpl.v 作成したモジュールを利用するためのネット名称が記述されている。

pll.v

/* Verilog netlist generated by SCUBA Diamond_1.2_Production (92) */
/* Module Version: 5.2 */
/* D:\EDATOOL\lscc\diamond\1.2\ispfpga\bin\nt\scuba.exe -w -n PLL
-lang verilog -synth synplify -arch mj5g00 -type pll -fin 100 -fclkop
100 -fclkop_tol 0.0 -delay_cntl STATIC -fdel 0 -fb_mode CLOCKTREE -noclkos -e  */
/* Mon Jul 18 08:52:20 2011 */


`timescale 1 ns / 1 ps
module PLL (CLK, RESET, CLKOP, LOCK)/* synthesis syn_noprune=1 */;
// exemplar attribute PLL dont_touch true 
    input wire CLK;
    input wire RESET;
    output wire CLKOP;
    output wire LOCK;

    wire scuba_vlo;
    wire CLKOP_t;

    VLO scuba_vlo_inst (.Z(scuba_vlo));

    // synopsys translate_off
    defparam PLLCInst_0.DELAY_CNTL = "STATIC" ;
    defparam PLLCInst_0.FDEL = 0 ;
    defparam PLLCInst_0.DUTY = 4 ;
    defparam PLLCInst_0.PHASEADJ = 0 ;
    defparam PLLCInst_0.CLKOK_DIV = 2 ;
    defparam PLLCInst_0.CLKOP_DIV = 8 ;
    defparam PLLCInst_0.CLKFB_DIV = 1 ;
    defparam PLLCInst_0.CLKI_DIV = 1 ;
    // synopsys translate_on
    EHXPLLC PLLCInst_0 (.CLKI(CLK), .CLKFB(CLKOP_t), .RST(RESET), .DDAMODE(scuba_vlo), 
        .DDAIZR(scuba_vlo), .DDAILAG(scuba_vlo), .DDAIDEL0(scuba_vlo), .DDAIDEL1(scuba_vlo), 
        .DDAIDEL2(scuba_vlo), .CLKOP(CLKOP_t), .CLKOS(), .CLKOK(), .CLKINTFB(), 
        .LOCK(LOCK))
             /* synthesis DELAY_CNTL="STATIC" */
             /* synthesis FDEL="0" */
             /* synthesis DUTY="4" */
             /* synthesis PHASEADJ="0" */
             /* synthesis FREQUENCY_PIN_CLKOK="50.000000" */
             /* synthesis CLKOK_DIV="2" */
             /* synthesis FREQUENCY_PIN_CLKOS="100.000000" */
             /* synthesis FREQUENCY_PIN_CLKOP="100.000000" */
             /* synthesis FREQUENCY_PIN_CLKI="100.000000" */
             /* synthesis CLKOP_DIV="8" */
             /* synthesis CLKFB_DIV="1" */
             /* synthesis CLKI_DIV="1" */
             /* synthesis FIN="100.000000" */;

    assign CLKOP = CLKOP_t;


    // exemplar begin
    // exemplar attribute PLLCInst_0 DELAY_CNTL STATIC
    // exemplar attribute PLLCInst_0 FDEL 0
    // exemplar attribute PLLCInst_0 DUTY 4
    // exemplar attribute PLLCInst_0 PHASEADJ 0
    // exemplar attribute PLLCInst_0 FREQUENCY_PIN_CLKOK 50.000000
    // exemplar attribute PLLCInst_0 CLKOK_DIV 2
    // exemplar attribute PLLCInst_0 FREQUENCY_PIN_CLKOS 100.000000
    // exemplar attribute PLLCInst_0 FREQUENCY_PIN_CLKOP 100.000000
    // exemplar attribute PLLCInst_0 FREQUENCY_PIN_CLKI 100.000000
    // exemplar attribute PLLCInst_0 CLKOP_DIV 8
    // exemplar attribute PLLCInst_0 CLKFB_DIV 1
    // exemplar attribute PLLCInst_0 CLKI_DIV 1
    // exemplar attribute PLLCInst_0 FIN 100.000000
    // exemplar end

endmodule

pll_tmp.v

/* Verilog module instantiation template generated by SCUBA Diamond_1.2_Production (92) */
/* Module Version: 5.2 */
/* Mon Jul 18 08:52:20 2011 */

/* parameterized module instance */
PLL __ (.CLK( ), .RESET( ), .CLKOP( ), .LOCK( ));

08.png

Imput Filesに「PLL.ipx」が表示されます。


09.png

このまま合成してみます。「JEDEC File」をダブルクリックします。


10.png

PLLのハードマクロが組み込まれ、マップレポート上PLLが使用されていることがわかります。

モジュールを使用する

上記「pll_tmp.v」のポート名を参考にし、上位モジュールに接続します。

module test(
  input refclk,
  input mreset,
  input ina,
  input inb,
  output reg outc
  );

  wire mclock;

  PLL PLL_u (
    .CLK(refclk),
    .RESET(mreset),
    .CLKOP(mclock),
    .LOCK()
  );

  always @(posedge mclock) begin
    if (~mreset) begin
      outc <= 1'b0;
    end else begin
      outc <= ina & inb;
    end
  end

endmodule

関連情報

Lattice Diamond

この記事は役に立ちましたか?

選択肢 投票
役に立った 8  
役に立たなかった 0  
コレジャナイ! 0  

(画像の文字列を入力して下さい)

添付ファイル: file03.png 1410件 [詳細] file10.png 1447件 [詳細] file09.png 1355件 [詳細] file08.png 1319件 [詳細] file07.png 1332件 [詳細] file06.png 1351件 [詳細] file05.png 1277件 [詳細] file04.png 1441件 [詳細] file02.png 1249件 [詳細] file01.png 1365件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-08-02 (木) 10:22:27 (416d)