Edited at

Python で FPGA/Zybo Z7 で Lチカ


もっかい Lチカおさらい

これが「Lチカだ」でLチカをつくりました。main ルーチンはごく簡単でした。


main

    def main(self):

led_bit:bit = 1
while is_worker_running():
self.led(led_bit)
led_bit= 1 - led_bit
self._wait()

ぐるぐるまわって led_bit を 0/1 でひっくり返すだけです。


Polyphony でコンパイル

gist に python のソースを置いておきます。

https://gist.github.com/ryos36/8411816a15915a97471aa778f564d8e3

このソースを polyphony でコンパイルします。


コンパイル

$ polyphony blink.py

$ ls *.v
Blink_blink.v polyphony_out.v test.v


出来たソースは?

Verilog のソースの冒頭部分はこんな感じ

> head Blink_blink.v

module Blink_blink
(
input wire clk,
input wire rst,
output reg led = 0
);


Vivado 2018.1 に入れてみる

XADC でつくったプロジェクトに無理やり入れてみます。


Create Block Design

まずはお絵かき回路図で作業をしたいので、左の選択肢から IP INTEGRATOR -> Create Block Design を選択します。空のデザインができます。

image.png


Blink_blink.v を Vivado のデザインに追加

Design Sources を右クリックして Add Sources... を選択し Blink_blink.v を追加します。

image.png

image.png

image.png


Blink_blink.v をトップモジュールに

Blink_blink.v を選択して右クリックから Set as TOP を選択します。

image.png

Zybo-Z7.xdc を Disable します。

image.png

あらたに blink.xdc をつくります。

image.png


blink.xdc の中身

Verilog のトップモジュールの各ピンをどこにアサインするか指定します。


blink.xdc

set_property -dict { PACKAGE_PIN K17   IOSTANDARD LVCMOS33 } [get_ports { clk }]; #IO_L12P_T1_MRCC_35 Sch=sysclk

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 { led }]; #IO_L23P_T3_35

set_property -dict { PACKAGE_PIN K18 IOSTANDARD LVCMOS33 } [get_ports { rst }]; #IO_L12N_T1_MRCC_35



合成とダウンロード

Generate Bitstream をクリックして合成してください。

image.png


実行

Zybo Z7 を JTAG モードにして USB 経由で PC とつなぎ、bit stream をダウンロードします。うまくいけば LED チカチカが始まるはず、、、といいたいところですが、LED はひかりぱなしです。rst にアサインしたボタンを押すと LED は消えます。プログラムは動いていますが、clk が早すぎてチカチカに見えません。改良の余地がありそうです。

image.png

image.png