Edited at

Python で FPGA/Lチカ(Cora Z7編)


Cora Z7 買ってみました

Zynq の 7007S というチップで FPGA の容量は少なめです。ARM もシングルコアです。今回の記事では ARM は使いません。

本家の情報はここにあります。

https://reference.digilentinc.com/reference/programmable-logic/cora-z7/start


Vivado 2018.1 で環境作り

先の本家にすでに動作可能なプロジェクトがあるようなのですぐに使いたい人はそちらをどうぞ。今回は ARM 以外を使うという前提で素からプロジェクトを作ってみましょう。

image.png

ボードファイルは使わずに XC7z007sclg400-1 を選択することにします。この方法だと ARM の設定がされません(今回は使わないからこれでよい)。もちろんボードファイルをコピーしてそれを選択しても構いません。そうすれば将来的に ARM の設定で悩まないでしょう。

image.png


Blink.py アップデート!

前回の反省点として待ち時間が短かったためちゃんとLチカしませんでした。そこで Blink.py の定数を 10000 から 125 * 1000 * 1000 にします。


blink

blink = Blink(125 * 1000 * 1000)

test(blink)

ほとんどかわらないですが gist に置いておきます。

https://gist.github.com/ryos36/96f1f250a5f3d880faeeaa94969bd1bf


コンパイルとその結果


コンパイル

> polyphony blink.py


コンパイル結果を見てみます。


インターバル抜粋

  assign interval = 125000000;


コンパイラが掛け算をちゃんと計算して定数にしてくれています。


Create Block Design

前回と同じ作業なので省略気味に書きます。

IP Integrator から Create Block Design を選んでDiagram(回路図エディター?)を立ち上げます。

次に Create HDL Wrapper でまずはからの wrapper を作ってしまいます。これが自動的に Top Module になります。

image.png

Polyphony でつくった Blink_blink.v をSources に追加して、さらに Diagram で Add Module。そして 各足を Make External します。今回は外部名称を変えません。

image.png


もう一度 Create HDL Wrapper

Diagram の中身が変わったので再度 Create HDL Wrapper を実行します。

image.png


xdc を新規作成

Constraints で blink.xdc という名称で xdc を新規作成します。中身は

https://github.com/Digilent/digilent-xdc/blob/master/Cora-Z7-07S-Master.xdc

からコピーし、少々編集します。


blink.xdc

## PL System Clock

set_property -dict { PACKAGE_PIN H16 IOSTANDARD LVCMOS33 } [get_ports { clk }]; #IO_L13P_T2_MRCC_35 Sch=sysclk
create_clock -add -name sys_clk_pin -period 8.00 -waveform {0 4} [get_ports { clk }];#set

## RGB LEDs
set_property -dict { PACKAGE_PIN L15 IOSTANDARD LVCMOS33 } [get_ports { led0_b }]; #IO_L22N_T3_AD7N_35 Sch=led0_b
#set_property -dict { PACKAGE_PIN G17 IOSTANDARD LVCMOS33 } [get_ports { led0_g }]; #IO_L16P_T2_35 Sch=led0_g
#set_property -dict { PACKAGE_PIN N15 IOSTANDARD LVCMOS33 } [get_ports { led0_r }]; #IO_L21P_T3_DQS_AD14P_35 Sch=led0_r
#set_property -dict { PACKAGE_PIN G14 IOSTANDARD LVCMOS33 } [get_ports { led1_b }]; #IO_0_35 Sch=led1_b
#set_property -dict { PACKAGE_PIN L14 IOSTANDARD LVCMOS33 } [get_ports { led1_g }]; #IO_L22P_T3_AD7P_35 Sch=led1_g
#set_property -dict { PACKAGE_PIN M15 IOSTANDARD LVCMOS33 } [get_ports { led1_r }]; #IO_L23N_T3_35 Sch=led1_r

## Buttons
set_property -dict { PACKAGE_PIN D20 IOSTANDARD LVCMOS33 } [get_ports { rst }]; #IO_L4N_T0_35 Sch=btn[0]
#set_property -dict { PACKAGE_PIN D19 IOSTANDARD LVCMOS33 } [get_ports { btn[1] }]; #IO_L4P_T0_35 Sch=btn[1]



Diagram のピンの名称変更

xdc に合わせてピンの名称を変更します。

clk_0 -> clk

rst_0 -> btn0

led_0 -> led0_b

image.png


合成!!そして実行!!

Generate Bitstream を実行します。RGB の LED の青が点滅しました!!(まぶしい!!)

image.png

なれてきたのもあってこれを書きながら 25分で達成。