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チカチカの内蔵クロック版です。
internal oscillatorで検索すると「How to Use the Internal Oscillator」というトピックが見つかりました。LatticeXP2に搭載されているのはOSCEなので、OSCEで検索して、試した結果が今回の話になります。
以下のように書きます。
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で検索して、試した結果が今回の話になります。