Sim's blog

電子工作はじめてみました

LatticeXP2で内蔵クロックを使う

2009-04-20 09:57:40 | FPGA
ispLEVERのHELPを見ていて使い方が分かりました。OSCEという内蔵クロック発生モジュールをインスタンス化します。クロック周波数はdefparamで設定します。指定できる周波数は2.5, 3.1, 4.3, 5.4, 6.9, 8.1, 9.2, 10.0, 13.0, 15.0, 20.0, 26.0, 32.0, 40.0, 54.0, 80.0, 163.0 (全部MHz)です。最高で163MHzってすごいですね。精度はどうなんでしょう。
以下のように書きます。

OSCE clkgen(clk);
defparam clkgen.NOM_FREQ = "2.5";

clkgenはインスタンス名なので、好きな名前にできます。defparamの名前と一致させる必要があります。

前回のLEDチカチカの内蔵クロック版です。
`default_nettype none
module main(LED);
    output reg [1:0] LED = 2'b00;

    wire clk;

    OSCE clkgen(clk);
    defparam clkgen.NOM_FREQ = "40.0";

    reg [22:0] ctr;
    wire ctr_en = ctr == 0;

    always @(posedge clk)
        ctr <= ctr + 1;

    always @(posedge clk)
        if(ctr_en) LED <= LED + 1;

endmodule

internal oscillatorで検索すると「How to Use the Internal Oscillator」というトピックが見つかりました。LatticeXP2に搭載されているのはOSCEなので、OSCEで検索して、試した結果が今回の話になります。