そしてLチカ。

シミュレーションでクロックの間引きがちゃんと動作することがわかりましたから、あとはその出力をポートにつなげればLEDがチカチカするはず。

それではトップモジュールを追加…の前にやっておくことがあります。

せっかく作ったテストベンチですが、これはシミュレーション用のモノなので、FPGAを作成するには不要です。なので、テストベンチのプロパティを変更しておきます。

clk1000hz_test.vを右クリックしてPropertiesを開くと、どの段階でインクルードするかの指定ができます。


そこでSimulationのみを指定してやると、シミュレーションの時には使用され、Synthesis、つまり実際の論理合成では使用しないという設定ができます。

トップモジュールの追加

さてそれではトップモジュールの追加です。英語では"a top level module"というようですが。

Diamondの左側のFile ListタブでInput Filesを右クリック、Add → New File...します。Verilogを選択してファイル名を入力します。ここではtwincle_ledとでもしましょう。


ファイルが追加されたら、Verilogを記述します。


// vim: set fenc=utf-8 filetype=verilog expandtab ts=4 sts=0 sw=4:
//
// twincle LED.
//
module Twincle(clk, reset, LED1);
 input clk;
 input reset;
 output LED1;
 wire out;
 
 reg [15:0] count; // clk1mを数えるためのカウンタ
 reg _out;
 
assign LED1 = _out;

CLK1000HZ clk(
  .clk(clk),
  .reset(reset),
  .clk1m(out));

always @ (posedge out or negedge reset) begin
    if (reset == 0)
    begin
        _out = 0;
        count <= 0;
    end else
    if (count < 100 - 1)
    begin
        count <= count + 1;
    end
    else begin
       count <= 0;
       _out <= ~_out;
    end
end
endmodule
LED1はボード上のLED1を制御するための出力です。それから1msecクロックを伝えるためのwire clk、1msecを数えるためのカウンタ、そしてLED1に直結するregの_outを定義します。 次に1msecクロックをインスタンス化し、最後にalwaysでリセット時の初期化とカウントループを作ってやります。


ここまでやったら一度コンパイルします。ここでコンパイルに通らないと、後のステップが通りません。

ピンを割り当てる

さて、無事コンパイルに通ったら、次は物理的なピンアサインです。

Brevia2ボードのピンアサインはBrevia2のユーザガイドに載ってますが、ここではSpreadsheet Viewから設定してみます。

ツールバーの左端、星形と鉛筆のアイコンをクリックするとSpreadsheet Viewが開きます。


親切なことに、この段階ですでにトップモジュールの入出力が表示されています。

Brevia2ボードはすでにできあがっているボードですから、ピンアサインはすでに決まっています。今回使用するピンは以下の通りです。
  • clk : 21ピン
  • reset : 19ピン
  • LED1 : 46ピン
さらにこれらは3.3VのTTLレベルです。ということでそれを設定していきます。
ここで先ほどのコンパイルが通っていないと、Spreadsheet Viewは編集できません。

入力が終われば次のようになります。


ちなみにピンアサインはlpfファイルを直接編集することでも指定できます。

プログラムしてRun!

それではいよいよ仕上げです。
左側のProcessペインで、一番下のJEDECファイルにチェックを入れます。その状態でRunボタンを押すと…


裏でごにょごにょやったあとで、ファイルが生成されます。ここで生成されたJEDECファイルをFPGAにプログラムすることで、ハードウェアを動かすことができるようになるのです。

さてそれではボードをminiUSBケーブルでPCに繋いで、いよいよプログラムボタンを押します。ちなみにProgrammerのボタンはツールバーの真ん中よりやや左にある、ICに下矢印のアイコンです。


このボタンを押すと、Programmerのケーブルを指定するダイアログが出ます。


OKを押すと、初回に限り次のようなダイアログが出ることがあります。


ここでは「アクセスを許可する」を押して先に進むとなにかを裏で始めてるようですが、少しすると戻ってきます。
そこであらためてProgrammerタブのプログラムボタンを押します。


Programmerの矢印がオレンジだったのに対して、プログラムボタンは緑です。


こんな感じのプログレスバーが出て、しばらくすると書き込み終了です。

すると自動的にLEDが点滅を始めます。

プログラムでは、100msec点灯したら100msec消灯、つまり1周期が200msecなので、1秒間に5回の点滅をしているはずです。

もしそうなっていなかったら…LEDが点きっぱなしに見えたら…。

clk1000hz.vのparameter CNTの値が10に変更したままになっていませんか。そうすると実際に点滅しているのに、あまりにも周期が速すぎて人間には点滅に見えません。

ということで、ながながと書いてきましたが、これでようやく第一歩が踏み出せた気がします。

Lチカ、終了~。

0 件のコメント:

コメントを投稿

Windowsでシンボリックリンクを試してみる。

きっかけは、1つのファイルを別の名前で起動したら違う動きになるようなスクリプトを書く、でした。  busybox なんかでは、同じ実行形式ファイルの名前を、lsにすればlsと同じ、cpとすればcpと同じ動作をするようにしてますが、Pythonスクリプトでそれと同じように argv...