2019年1月9日水曜日

ZYBO Z7-20 (zynq-7020)でPL(FPGA部のみ)を使ってLチカ

前回(ZYBO Z7-20 (zynq-7020)に電源を入れて初期動作確認をする)はただ電源入れただけでほぼ何もやっていないので、Verilogで書いた回路をZYBOのFPGAに書き込んでLチカさせます。
SoC FPGAなのでPL(Programmable Logic)部≒FPGA部分とPS(Processing System)部≒ARMコア部がありますが、今回はPL部のみを設計して論理回路だけでLチカさせてみます。
チカチカさせるLEDはZYBO上に実装されたものをつかうので、準備するものはZYBOとUSBケーブルだけです。
ボードへの書き込みやコンパイル等は「Vivado」を使うのでインストールしておいてください。(容量・時間ともにかなりかかります)今回使うVivadoのバージョンは2017.4です。最新のもの(現在はたぶん2018.3)だと動作が安定しないことがあるらしいので、今のところ2017.4が比較的安定して使えるらしいです。


ボードファイルを登録する

Vivadoをインストールしても、ZYBOのボードの設定ファイル(ボードファイル)は入っていないので自分で追加する必要があります。ボードファイルにはボードのクロックや各素子などの接続情報が書き込まれています。たいていはボードを発売している会社がボードファイルを公開しています。
Digilent社のGitHub(https://github.com/Digilent/vivado-boards/archive/master.zip)からZIPファイルをダウンロードします。(リンクをクリックしたらすぐダウンロードされます)ダウンロードしたら解凍します。

解凍したフォルダの中はこんな感じになっています。

先ほど解凍したフォルダvivado-boards-master内のnewフォルダ内のboard_files内に入っているフォルダを、C:\Xilinx\Vivado\2017.4\data\boards\board_filesに全てそのままコピーします。(Vivadoのインストール先にあわせてフォルダパスは適宜変えてください)

これでプロジェクトを作成するときにZYBOのボードファイルを選ぶことができます。
ボードファイルを追加していないとプロジェクト作成時にZYBO用のプロジェクトにすることができません。


プロジェクトを作成する

Vivadoを起動します。起動後の最初の画面で、Quick StartのCreate Projectをクリックします。

New Projectウィンドウが開きます。ただの説明なので、Nextを押して次に進みます。

Project nameに好きなプロジェクト名をつけて、Project locationに保存場所を決めてNextを押します。Create project すbdirectoryにチェックを入れていると自動でプロジェクト名のフォルダが作られます。

RTL Projectにチェックを入れます。現段階ではまだRTL(Verilog)を書いていないのでDo not specify sources at this timeにチェックを入れます。

ボードファイル選択画面になったら、Boardsをクリックして、Vendorをdigilentinc.com、Display Nameに使っているZYBO(今回はZybo Z7-20)を選択します。ボードファイルが絞られたら選択してNextを押します。

プロジェクト作成の確認画面のようなものが表示されますので、Finishを押してプロジェクト作成を完了させます。

少し待つとプロジェクトが作成され、プロジェクトが編集できるようになります。


RTL(Verilog)を追加・編集する

Add Sourcesをクリックして、Add or create design sourcesを選択し、Nextをクリックします。

Create Fileをクリックし、Verilogファイルを作成します。

File typeはVerilogにして、File nameを好きなものにしてOKをクリックします。

追加されたことが確認できたらFinishをクリックしてVerilog追加を完了させます。

以下の画面でVerilogに信号を追加できますが、手書きでVerilogに書けばいいだけなのでそのままOKを押します。

OKをクリックします。

Verilogファイルがプロジェクトに追加されていることがわかります。

Sourcesにある作成したVerilogファイルをダブルクリックすると、Verlogの内容を閲覧・編集できます。

VerilogにLチカの記述をします。書き終わったら、フロッピーマークをクリックして保存します。

以下に、今回記述したVerilogの内容を示します。

module PL_Lchika(
    output  reg     led,
    input   wire    clk
    );
 
    parameter LED_CHANGE = 27'd124999999;
    reg [31:0] counter_reg;
 
    always@(posedge clk)
    begin
        if(counter_reg >= LED_CHANGE)
            counter_reg <= 32'h0000_0000;
        else
            counter_reg <= counter_reg + 32'h0000_0001;
    end
 
    always@(posedge clk)
    begin
        if(counter_reg >= LED_CHANGE)
            led <= ~led;
    end
 
endmodule


ピン制約を設定する

RTL ANALYSISのOpen Elaborated Designをクリックして、OKをクリックします。

すこし(数十秒くらい)待つと右上のプルダウンリストからI/O Planningが選択できるようになります。I/O Planningを選択します。

下のウィンドウにI/O Portsが表示されるので設定します。clkはPackage PinをK17に設定し、ledはM14に設定します。というのも内部の125MHzのクロックがFPGA部のK17につながっており、ボード上のLED0はM14につながっているからです。
I/O StdはどちらもLVCMOS33に設定します。

フロッピーマークを押して、File nameを好きなものに入力して、OKを押してピン制約を保存します。


Bitstreamファイルを生成する

Bitstreamファイルとは、回路情報が書き込まれたファイルのことです。
Flow NavigatorのPROGRAM AND DEBUGのGenerate BitstreamをクリックしてBitstreamを生成します。

Synthesisやってないから、Synthesis終わったら自動でBitstream生成するよ?みたいなことを言っているのでYesをクリックします。

Launch runs on local hostを選択して、OKをクリックします。Number of jobsは大きい数字ほど速く処理が終わります。ほかに作業してるものがなければデフォルトで良いでしょう。

右上にGenerate作業の進行状況が表示されます。


BitstreamファイルをZYBOに書き込みLチカを実行する

Bitstreamの生成が完了すると以下のような画面が表示されます。Open Hardware Managerを選択してOKを押し、Hardware Managerを開きます。
もしここで間違ってCancelなどを押してしまっても、Flow NavigatorのPROGRAM AND DEBUGのところのOpen Hardware Managerをクリックすれば開けます。

ZYBOのJP5をJTAGに差し替えた後、ZYBOをUSBケーブルでPCと接続し、ZYBOボード上のSW4をONにします。PCがZYBOを認識したら、Open targetをクリックして、Auto Connectをクリックします。

Hardware ManagerでZYBOが認識されたらxc7z020_1を右クリックし、Program Deviceをクリックします。

自動で先ほど生成されたbitstreamファイルのパスが選択されているので、Programをクリックして、ZYBOにbitstreamファイルを書き込みます。

書き込みが完了すると、ZYBOボード上の書き込み完了を示すLD12(DONE)が点灯し、回路が自動で動きだしLD0が1秒ごとに点滅します。
SW4をオフにしたりケーブルを抜くとZYBO上のbitstreamファイルは消えてしまうので、再度Lチカさせたい場合はもう一度同じ手順でbitstreamファイルを書き込みます。





0 件のコメント:

コメントを投稿