FPGAに行く前にまずはボード上の周辺機器を操作の仕方を調べました。内容的には
https://pynq.readthedocs.io/en/latest/5_programming_onboard.html
を試してみた感じです。
ボード上の右下にある
- LD0-5
- SW0,1
- BTN0-3
がデフォルトでボード上に実装されているI/O機器です。Lチカしたりスイッチで操作したりしてみましょう。
コードはすべてJupyter notebookから実行します。まずは必要なライブラリをimportします。
from pynq import Overlay
from pynq.board import LED
from pynq.board import Switch
from pynq.board import Button
Overlay("base.bit").download()
LD0を操作してみます
led0 = LED(0)
led0.on()
一番右下のLEDが点灯したと思います。led0.off()
で消えます。pythonにはsleep関数があるのでLチカしてみましょう。
import time
for i in range(20):
led0.toggle()
time.sleep(0.1)
次はスイッチの値を読み込んでみます。まずはSW0のオブジェクトを作って
swt0 = Switch(0)
値を読み込みます
swt0.read()
ボード上のSW0の上下を操作しながら何度か実行してみると0や1が読み込めると思います。以下のコードを実行するとスイッチの上下でLチカするLEDを切り替えてくれます。
led0 = LED(0)
led1 = LED(1)
swt0 = Switch(0)
for i in range(100):
if swt0.read()==0:
led0.on()
else:
led1.on()
time.sleep(0.1)
led0.off()
led1.off()
time.sleep(0.1)
ボタンの場合も同様にButton(n)
でオブジェクトを取得し、read
関数で値を読み込めます。以下のコードではボタンを押している間、対応するLEDを点灯します。
leds = [LED(0),LED(1),LED(2),LED(3)]
btns = [Button(0),Button(1),Button(2),Button(3)]
for i in range(100):
for j in range(4):
if btns[j].read():
leds[j].on()
else:
leds[j].off()
time.sleep(0.1)
以上がPYNQ-Z1ボード上でのLED/スイッチ/ボタンの操作方法です。pynqはボードだけでなく、このようなAPIも提供してくれているので手軽に試してみることができます。
http://qiita.com/takushi-m@github/items/54e8c654ae74d786550d
では購入して動作させるところまでを解説しているので参考にしてみてください。