Lチカ(Zybo編)
ネタがなくなってきたので Zybo でも Lチカをこころみることにします。
Lチカ アゲイン(Python での記述)
Python のソースを掲げます。
blink.py
from polyphony import testbench, module, is_worker_running
from polyphony.io import Port
from polyphony.timing import wait_value
from polyphony.typing import bit
@module
class Blink:
def __init__(self, interval):
self.led = Port(bit, 'out')
self.interval = interval
self.append_worker(self.main)
def main(self):
led_bit:bit = 1
while is_worker_running():
self.led(led_bit)
led_bit = 1 - led_bit
self._wait()
def _wait(self):
for i in range(self.interval // 2):
pass
@testbench
def test(dut):
v = 0
for i in range(4):
print("loop:", i)
wait_value(1, dut.led)
wait_value(0, dut.led)
print("finished")
blink = Blink(125 * 1000 * 1000)
test(blink)
Python でシミュレーション
Python で実行します。
Pythonで実行
> python3 blink.py
loop: 0
loop: 1
loop: 2
loop: 3
finished
Polyphony でコンパイル
コンパイルすると Blink_blink.v が出来ます。
Polyphonyでコンパイル
> polyphony blink.py
> ls Blink_blink.v
Blink_blink.v
Vivado で合成・実行
Zybo 用ですが ARM の部分は使いませんので簡単に作れます。
作業の詳細はこちらも参考にしてください。ほぼ同じです。
https://qiita.com/ryos36/items/0f757c674ef90a33ddf2
Vivado のプロジェクト作成
XC7z010clg400-1 を選択します。
デザインを追加してソースも追加
- 空の design を作り
- wrapper も設定し
- Blink_blink.v も追加します。
Block_block.v を追加
make external でピンを生成します。名称は変えました。
ピン情報を追加(xdc の追加)
ピン情報を追加します。
zynq.xdc
## PL System Clock
set_property -dict { PACKAGE_PIN L16 IOSTANDARD LVCMOS33 } [get_ports { clk }];
create_clock -add -name sys_clk_pin -period 8.00 -waveform {0 4} [get_ports { clk }
## LED
set_property -dict { PACKAGE_PIN M14 IOSTANDARD LVCMOS33 } [get_ports { led0 }];
## Buttons
set_property -dict { PACKAGE_PIN R18 IOSTANDARD LVCMOS33 } [get_ports { btn0 }];
これは回路図の赤で囲った部分から作ります。
合成して実行
合成した上で Zybo を JTAG で立ち上げて実行します。Lチカの完成です。