2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PYNQ で遊ぶ : 2. Verilog HDL を使ってみる

Last updated at Posted at 2020-08-04

これは何か

PYNQ-Z1 を使って遊んでみます。

今回は、下記ができるようになる事を目指します。

  • Verilog HDL のコードを書いてみる
  • Verilog HDL でモジュールを作って IP に接続する
関連記事:

する事

  • CLK を数えるカウンタを verilog HDL で書く
    • カウンタを使って分周して、LED を点滅させる

役に立ちそうなリンク

...

2-1. プロジェクトの作成

2-2. Verilog HDL でモジュールを作る

2-2-1. Verilog HDL のファイルを追加します。

Sources の Design Sources を右クリックし、Add Sources をクリック

スクリーンショット 2020-08-04 18.10.43.png

design sources が選択されている事を確認して Next

スクリーンショット 2020-08-04 19.05.01.png

Create file をクリックし、File name を指定。led_blink にしました。

スクリーンショット 2020-08-04 19.07.47.png

Finish をクリックして完了

スクリーンショット 2020-08-04 19.08.56.png

I/O Port は後で設定するので、とりあえず OK します。警告が出ますが yes

スクリーンショット 2020-08-04 19.10.27.png

2-2-2. Verilog HDL のファイルを編集します

  • 新しくできた led_blink をダブルクリック
  • 右に、エディタが開きます
スクリーンショット 2020-08-04 19.11.33.png
  • 100 MHz でクロックが来ます
  • そのクロックを 26 bit カウントします
  • LED への出力を、カウンタの 26 bit 目と同期させて点滅させてみましょう
  • 0.335 秒くらいで ON/OFF が切り替わるはずです
led_blink.v
module led_blink
  (
    input CLK,   // 入力 CLK を定義します
    output led   // 出力 led を定義します
  );             // 最後の行には , がいらないので注意
  
  reg [25:0] counter;    // 26 bit のカウンタを定義します
  
  always @(posedge CLK)  // CLK が立ち上がるたびに、この中が実行されます
    begin
      counter <= counter +1; 
    end                // counter を 1 追加するだけです。 +=, ++ は使えません
                       // 桁が溢れると、0 に戻ります
    
  assign led = counter[25];  // counter の 26 bit 目を led に接続します
    
endmodule

エディタの編集が終わったら、Ctrl+S を押すか save ボタンを押して保存しておきます。

スクリーンショット 2020-08-04 19.22.14.png

2-3. IP Integrator で IP を配置する

大まかな手順は下記です:

  • led_blink.v を配置する
  • ZYNQ (CPU) の IP を配置する
  • 配線する

2-3-1. 自作モジュールを配置する

  • Diagram をクリックしておきます
  • led_blink.v を右クリックし、Add Module to Block Design をクリック
スクリーンショット 2020-08-04 19.23.24.png

led_blink.v モジュールが設置されます

スクリーンショット 2020-08-04 19.25.37.png

2-3-2. ZYNQ を配置する

手順 1-4-1. ZYNQ の IP を配置する を参考に、ZYNQ の IP を設置します。

スクリーンショット 2020-08-04 19.27.13.png

2-3-3. 配線する

led_blink_0 の led 端子を右クリックし、Make External をクリックします

スクリーンショット 2020-08-04 19.28.26.png

生成された led_0 ポートをクリックし、External Port Properties ボックス内の Name: を LED に変更します

スクリーンショット 2020-08-04 19.30.23.png
  • Run Connection Automation と Run Block Automation をクリックして実行します
  • ZYNQ7 Processing System の FCLK_CLK0 と M_AXI_GP0_ACLK が自動で配線されなかったので、手動でつなげます
  • デザインはこうなりました
スクリーンショット 2020-08-04 19.36.00.png

2-4. 後仕上げ

2-4-1. HDL Wrapper を生成する

手順 1-5. HDL Wrapper を生成する と同様の手順です

2-4-2. 制約ファイルを設定する

手順 1-6. 制約ファイルを設定する と同様の手順です

2-4-3. 生成する

手順 1-7. 生成する と同様の手順です

こんな実装になりました。AXI を使ってないので、とてもシンプルですね。

スクリーンショット 2020-08-04 19.40.17.png

2-5. PYNQ で実行する

2-5-1. ファイルのアップロード

scp ~/vivado/asobu/asobu02/asobu02.runs/impl_1/design_1_wrapper.bit xilinx@192.168.2.99:pynq/overlays/asobu02/asobu02.bit
scp ~/vivado/asobu/asobu02/asobu02.srcs/sources_1/bd/design_1/hw_handoff/design_1.hwh xilinx@192.168.2.99:pynq/overlays/asobu02/asobu02.hwh

2-5-2. jupyter で実行

スクリーンショット 2020-08-04 19.43.22.png
asobu02.ipynb
import pynq
fpga = pynq.Overlay('asobu02.bit')
# コンフィグレーション完了後、LED が点滅し始めるはずです
2
2
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?