6. Zynq Verilog-HDLをZynqに書き込みFPGAを使う

前回はFPGA部分(ZynqではPL部と呼ばれています)は無視していました。
とりあえず回路構成をSDKに教えて、SDK側でARMのデバッグ実行を指定ました。
実はSDKはARMの操作やデバッグに使うためのもので、PL部のプログラムだけならVivadoから行えます。今回は簡単なVerilog-HDLで回路を構成してZynqに書き込んでみましょう。

Verilog-HDLを書く

Vivadoを開いて前回利用したプロジェクトをそのまま利用します。
新しいVerilogを追加するには「Add Sources」を押します。

bitstream0

「Add or create design sources」を押します。

bitstream1

ここで既存のファイルを入れるのか、新しくファイルを作るのか決められます。
新しく作りたいので「Create File…」を押しFile typeで「Verilog」を選びます。File nameは適当にledなどと入れて。「OK」を押します。

bitstream2

Finishを押して完了させるとVerilogが出てきますが、 同時にポートの設定Dialogも出てくると思います。これはあとでも出来ますので「Cancel」で閉じておきましょう。

bitstream3

Sourcesウインドウにled.vというファイルが追加されていると思います。
恐らくSimulation SourcesとDesignSourcesのそれぞれのNon-module Filesっていう場所に入っていると思います。
ファイルはダブルクリックで開けますが、どちらも同じファイルを指しているのでどちらから開いても同じファイルになります。

bitstream4

開いたら今回のVerilogを書いてみましょう。
今回は入力をそのまま出力に出すというものです。


module led(led, button);
output led;
input button;

assign led = button;

endmodule

これをled.vに書き込みます。
ファイルの保存は右クリックから「Save File」で保存できます。

bitstream9

ちなみに保存した瞬間にVerilogとして正しいかが検証されます。
もし文字を間違えたりして文法エラーを起こしていたら「Syntax Error Files」に入ります。
bitstream7

また、エラーの詳細は右下の「Log」というところに出てきて、細かく何が違ったのか、どのファイルの何行目なのかを教えてくれます。

bitstream8

問題がなければ保存すると同時にNon-module Filesから出てきて、前回勝手に作成されたwrapperファイルと同じレベルにled.vが上がってきます。

bitstream10

led.vを論理合成させるためにled.vをTopに持ってきます。
今はledでなくwrapperが太文字になっていると思いますが、それはwrapperがTopになっている証拠です。ledの方をTopにするにはledを右クリックし「Set as Top」を押します。

bitstream16

ledが太文字になるはずです。
ここまででVerilogの準備は出来ました。

RTL Analysis

Verilogである入力がある出力にそのまま繋がるというのは決めました。じゃあそれってどのピンなのよというのはまだ設定していません。RTLAnalysisのI/O Plannningから設定します。
FlowNavigatorのRTL AnalysisにあるElaborated Designを押します。
初めて押す場合は押すだけで前処理が始まり、一度押した場合は既に作成されているので右クリックから「Reload Design」を押します。

bitstream6

終わったら下にある「Schematic」を押してみましょう。Verilogで書いた通りの回路が出てくると思います。

bitstream14

ここでVerilogで設定した入出力がどのピンなのか、CLockどうするのかTimingどうするのかを設定できます。今回はとりあえずピンだけ設定しましょう。上に「Default Layout」となっている部分をI/O Plannningにします。

bitstream17

すると下に「IO Ports」ってのが出てくると思います。これこそがVerilog上のピンと実際のZynqのピンをつなぐためのものです。

bitstream13

 

今回どこへつなぎましょうか。ZYBOの説明書によるとスイッチやLEDはこうなっています。

bitstream12

PLから利用できるLEDは4つD18, G14, M15, M14です。
スイッチはスライドスイッチとボタンがそれぞれ4個あります。
今回はY16のボタンとD18のLEDをつかってみましょうか。
さっきのIOPortsの「Site」っていうのがZynqの物理ピンを選択する部分です。
buttonの方をY16に、ledの方をD18に設定します。
「I/O std」にdefaultの赤文字がついていますが、defaultだと後で失敗します。
LVCMOS25などに切り替えましょう。
これでピンアサインは終わりです。

Synthesis-Implementation-GenerateBitstream

あとはZynqに書き込むためのbitstreamを作成するだけです。
「Run Synthesis」「Run Implementation」「Generate Bitstream」の3つをそれぞれ実行します。
ちなみにそれぞれ終わるときに「次これやります?」と親切に聞いてくれるのでそのまま従ってみましょう。

ボードを開く

VivadoからJATG経由でbitstreamを書き込みましょう。
OpenHardwareManagerからOpen Targetを押しOpen New Targetを押します

bitstream18

 

後はDialogに従って行くだけです

bitstream19

 

Connect toではLocal serverを選びます。
Local serverって何かというと、JTAGでZynqにはつなぐわけですがVivadoとSDK両方でJTAGを使うこともありそうですよね。なので、JTAGを使いローカルサバーとして立ち上がっているプロセスがあってそこにつなぐことでそれ経由でボードにbitstreamを書き込んだり出来るのです。

 

bitstream20

 

問題なくボードが見つかればこんな風になると思います。下の写真だと2つ出てきてますが、xc7cの方がZYBOボードですのでそれを選んでNextで進みます

 

bitstream21

 

以上で完了です。

 

bitstream22

 

デバイスが追加されると、HardwareManagerが開かれます。

bitstream23

 

これでbitstreamを書き込める状態になりましたので、早速書き込みましょう。
Hardware Managerの「Program Device」を押して、先ほど追加したチップを選択します。

bitstream24

ここで、bitstreamを選択してくれと出てきます。
多分前回のプロジェクトのbitstreamファイルが選ばれたままになっています。なので、右側のファイル選択を押して今回作成したbitstreamを選びましょう。
Debug probes fileはそのままで大丈夫です。
これでもうProgramを押すだけで、ボードに書き込まれます。

bitstream25

 

書き込みが完了するとPL部ConfigrationDoneLEDが点灯すると思います。

2014-12-31 17.17.01

 

このLEDがついたということは問題なくbitstreamが書き込まれたということで、もう動作しています。

2014-12-31 17.17.16

 

Y16に繋がれているボタンを押してみましょう。(ボードにも印字されています。一番左のボタンですね)そうするとD18につながれているLEDが点灯すると思います。
回路図ではボタンを押すと電圧が加わるようになっていて、LEDは先がGNDにつながっているので、ボタンを押すとLEDが点灯するというので合っていますね。

試しに


assign led = !button;

と反転させるとちゃんとボタンを押していない時だけLEDが点灯すると思います。

“6. Zynq Verilog-HDLをZynqに書き込みFPGAを使う” への2件のフィードバック

  1. 7of9のアバター

    参考になりました。どうもありがとうございます。
    以下、補足事項を記載させていただきました。
    http://qiita.com/7of9/items/1b39d055b0792e222f73

  2. MTのアバター
    MT

    お世話になります 最近 ZYBOボードを購入しVivadoに挑戦しています。
    こちらのブログはたいへん参考になります。 ついては質問があります。
    「6_ Zynq Verilog-HDLをZynqに書き込みFPGAを使う」で led.vを追加しtopモジュールに変更後にRTL AnalysisでElaborated Designを押した後でSchematicsを押すとled.vでなく前に作成したmaindesignの回路図が表示されます。そのため I/O Planningに変更してもledとbuttonのピンアサインが指定できないため対策をお知らせください。

コメントを残す