- ボードの JP5 が JTAG 側に刺さっていることを確認
- ボードの PROG UART に USB ケーブルを接続、電源投入、ドライバ類の認識を確認
- ボードをリセット (BTN7 PS-SRST)
- Flow Navigator 領域内、Program and Debug → Hardware Manager → Open Target → Open New Targetを実行、Local server から選択
- Flow Navigator 領域内、Program and Debug → Hardware Manager → Program Device → xc7z010
- LD10 DONE の点灯を確認
6. プロセッサシステム情報のエクスポート(Vivado)
ソフトウェア開発のためにプロセッサシステムの情報をエクスポートする。
- 上端メインメニューのFileから、Export → Export Hardware を実行。
- [ ] Include bitstream のチェックを外してOK。
7. ソフトウェア開発プロジェクトの設定(SDK)
Xilinx SDK 上でのソフトウェア開発環境をセットアップする。
7-1. SDK の起動
- Vivado の上端メインメニュー File から Launch SDK する。
- (SDKが起動できない→インストール確認)
- (次以降に SDK を立ち上げる時も Vivado のプロジェクトから Launch するのが無難)
7-2. プロジェクトの生成
- (A)上端メインメニュー File から New → Application Project
- Project name: testfifo に設定し、
(Finish ではなく)  [Next] する。
- Hello World の Template を選択し、[Finish]する。
8. 動作確認 (Hello World) (SDK)
8-1. コンパイル
- (B) Project Explorer ウィンドウで testfifo 下 src 下 helloworld.c をダブルクリックして開く。
- (C)メインウィンドウでソースコードを確認する。必要なら編集して保存する。
- (A)上端メインメニュー Project から Build All する。
8-2. 標準入出力とUARTの接続
8-3. 実行と動作確認
- (B) Project Explorer で testfifo を右クリックし、
Run As → Launch on Hardware (System Debugger)を実行。
- (F)エリアの Terminalタブで、Hello Wolrd の出力を確認。
8-4. 再実行
- ボードをリセット (BTN7 PS-SRST)
- Vivado の Hardware Manager で Program Device
- SDK で Run As → Hardware
- Vivado の Hardware Manager で Reflesh Device
9. 動作確認 (psloopback) (SDK)
ここでは、PC から ZYNQ のプロセッサへデータを送り、そこで処理して PC に送り返す動作の確認を行う。
具体的にはターミナルエミュレータから文字を送り、大文字⇔小文字変換をして送り返す。
※SDK上のターミナルは使わない!
9-1. ソースコードの登録
- (B) Project Explorerのtestfifo/srcの下の helloworld.cを右クリックし、Delete
- Windows の Explorer から psloopback.c をドラッグし、SDK の Project Explorer ウィンドウ内のtestfifo/srcにドロップ、
(*)Copy files にチェックし、OK
9-2. コンパイル
- (A) 上端メインメニュー Project から Build All
9-3. SDK上のターミナルを切る
- (F)エリアのTerminalタブを選択
- Disconnect ボタンで接続を切る
9-3. ターミナルエミュレータの起動
9-4. 実行と動作確認
- ボードをリセット (BTN7 PS-SRST)
- Vivado の Hardware Manager で Program Device
- (B) Project Explorer で testfifo を右クリックし、Run As → Launch on Hardware (System Debugger)を実行。
- ターミナルエミュレータに文字を入力、大文字⇔小文字変換されて表示されることを確認
※SDK上のターミナルからは文字は送れないようだ。別途ターミナルエミュレータを開くこと。
10. コードの登録、コンパイル、実行
10-1. ソースコードの登録
- (B) Project Explorerのtestfifo/srcの下の psloopback.cを右クリックし、Delete
- Windows の Explorer から testfifo.c をドラッグし、SDK の Project Explorer ウィンドウ内のtestfifo/srcにドロップ、
(*)Copy files にチェックし、OK
10-2. コンパイル(SDK)
- (A) 上端メインメニュー Project から Build All
10-3. UARTの追加
この動作テストでは、追加のUARTを必要とする。
- USB-UART モジュールと配線材を用意
(sparkfun FTDI Basic, aitendo USB2UART-CP2102 等)
- PCへのドライバのインストール、PCとの接続
- コンピュータ→プロパティ→デバイスマネージャで COM ポート番号を確認しておく
- ZYBO Pmod JE ポートに接続
USB-UART モジュールのピン | ZYBO Pmod JE のピン | FPGA内での接続 |
モジュールからのデータ出力 | JE3(上段右から3番目) | UART TX (FPGAからの出力) |
モジュールへのデータ入力 | JE4(上段右から4番目) | UART RX (FPGAへの入力) |
GND | GND(上下段左から2番目) | - |
※PC側から見た送信データ(TX/出力)はFPGA側から見れば受信データ(RX/入力)である。信号名はどちら側の観点から名付けるか、で変わる。
信号名だけではなく入出力の方向を確認すること!
※接続を間違えるとボードが壊れる。
ZYBO FPGA Board Reference Manual の p.24 の「16 Pmod Connectors」と、
USB-UART モジュールの資料をよく読んで確認すること。
わからなければ、詳しい先輩や教員に尋ねること。
10-4. ターミナルエミュレータの起動
10-5. 実行
- ボードをリセット (BTN7 PS-SRST)
- Vivado の Hardware Manager で Program Device
- (B) Project Explorer で testfifo を右クリックし、Run As → Launch on Hardware (System Debugger)を実行。
11. 動作確認(SDK,Vivado)
11-0. 信号観測の準備
- SDK で Run As → Launch on Hardware した後に
Vivado Hardware Manager で Reflesh Device (必要なら(1)の辺りに出る)すると
実機デバッグが可能になる。
- ILA の Setting (2)
- Capture Mode: BASIC
- Trigger position in window: 32
- Trigger Setup (3)
- + (Add Probes)を押して arm_m0valid を追加
- Compare Value の Value を R (0->1) にする
- 同様に arm_m1valid, arm_s0valid, arm_s1valid を追加し R に設定
- ゲート記号マークを押してトリガ条件を論理和に設定(Set Trigger Condition to Global OR)
- Status (4) で観測開始(右向き三角に縦棒)
- AXI Data Stream の出入があると、その波形が表示される
- 表示を拡大縮小、移動して確認(5)
11-1. 直接接続 M0, S0 ポートの動作テスト(SDK)
- ボードの SW3,SW2,SW1,SW0 を0000にしておく
- ボードのBTN0を押すとM0にデータを送り出す
- ボードのBTN2を押すとS0からデータを受け取る
- ポートのビジー状態、送受データなどが SDK の Terminal に表示される
- M0 のビジーが0の時に送り出したデータの下位4bitが
ボードのLD3,LD2,LD1,LD0に表示される
- S0 のビジーが0の時に読み出すと「LEDの値+SWの値」の値が読み出される
- M0 のビジーが1の時に送り出したデータは無視される
- S0 のビジーが1の時に読み出したデータは不正(直前の値のまま)
- BTN0, BTN2 を様々な順番で押してみて、上記の動作を確認
発展:zybo_top.v の AXIS_LB_THROUGH を 1 にして
ハードウェアをコンパイルしなおすと、
valid, ready を無視したレジスタ型の動作を確認できる。
11-2. M1 ポートの1文字書き出し動作テスト
- ボードの SW3,SW2,SW1,SW0 を0000にしておく
- ボードのBTN1を押すとM1にデータを送り出し、UARTを経由してPCのターミナルエミュレータに表示される
- SDK の Terminal に表示される送信状況と、ターミナルエミュレータに表示される受信内容を見比べて、動作を確認する。
※人がボタンを押す速度は UART に比べて充分に遅いので、ここでは M1 Busy で待たされることはない
11-3. M1 ポートの複数文字書き出し動作テスト
- ボードの SW3,SW2,SW1,SW0 を1000にしておく
- ボードのBTN1を押すとM1にデータを送り出し、UARTを経由してPCのターミナルエミュレータに表示される
- Write Port 1 のFIFOの残容量を確認し、書込可能な文字数を連続して送る。
- SDK の Terminal に表示される送信状況と、ターミナルエミュレータに表示される受信内容を見比べて、動作を確認する。
※SWを1111にすると、FIFOの残容量以上のデータを連続して送る。UARTの速度はプロセッサの書き込み速度に比べてとても遅いので、書き込めなかったデータは無視され、捨てられる。なお、M1から出た先のレジスタやFIFOのため、FIFO残容量以上のデータが書きこまれることもあるが、それは保証されない。
11-4. S1 ポートの1文字読み込み動作テスト
- ボードの SW3,SW2,SW1,SW0 を0000にしておく
- ボードのBTN3を押すと、PCのターミナルエミュレータに入力された文字が
UARTを経由してS1からデータを受け取る。
- ターミナルエミュレータから入力した文字と
SDK の Terminal に表示される受信状況を見比べて、動作を確認する。
※人がボタンを押す速度は UART に比べて充分に遅いので、ここでは M1 Busy で待たされることはない
11-5. S1 ポートの複数文字読み込み動作テスト
- ボードの SW3,SW2,SW1,SW0 を1000にしておく
- ボードのBTN3を押すと、PCのターミナルエミュレータに入力された文字が
UARTを経由してS1からデータを受け取る。
- Read Port 1 のFIFOのデータ量を確認し、読出可能な文字数を連続して読む。
- ターミナルエミュレータから入力した文字と
SDK の Terminal に表示される受信状況を見比べて、動作を確認する。
※SWを1111にすると、FIFO内のデータ数以上を連続して読む。UARTの速度はプロセッサの書き込み速度に比べてとても遅いので、読み出せなかったデータは不正なものとなる。なお、S1以前のレジスタやFIFOのため、FIFO内のデータ数以上のデータが読めることもあるが、それは保証されない。
99. その他
Verilog デバグ〜埋もれたタイプミスを見つける
Verilog では、信号を宣言せずに使用してもよい。
なので、タイプミスをしてもエラーにならない。
そのようなバグを見つけるためには、
Messages から次の Warning を検索して確認するとよい。
- [Synth 8-3331] unconnected port
- [Synth 8-3848] does not have driver
- [Synth 8-3295] tying undriven pin to constant
Zynq の実機での実行について
何故かうまくいかない。経験的に成功率の高い方法は…
- プロセッサをリセット(PS-RST,PS-SRSTのボタン)する
- Program FPGA する
- Run As, Hardware する
その他の対処として…
- Terminal をいったん Disconnect して Connect しなおしてみる
- ボードの電源をいったん切って、再投入してみる
Zynq の実機デバッグ時の実行
PL側に回路をコンフィグしただけではデバッグモジュール(ILA)が認識されないようだ。
PS側でソフトウェアを実行すると認識される。
経験的に成功率の高い方法は…
- ボードでプロセッサをリセット(PS-RST,PS-SRSTのボタン)する
- Vivado の Hardware Manager で Program Device する
- SDK で Run As, Hardware する
- Vivado の Hardware Manager で Reflesh Device する
Zynq の COMポートが認識できない
いちど削除して、ドライバをインストールしなおすと認識することがあるかもしれなくもない…。
- ボードをPCから外す
- PCの電源を切る
- PCを起動する
- 後述の方法で未使用COMポートを削除
- PCの電源を切る
- ボードを接続する
- PCを起動する
- 認識するかどうか確認(しばらく時間がかかる)→認識すればそれでOK
- Windows のデバイスマネージャーから、表示→デバイス(種類別)して当該デバイスを探す。
Cypress の USB Serial というような表示になると思われる。
- デバイスドライバを再インストールする。