0
1

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 > Pmod VGA > FPGAプログラミング大全 Xilinx編 > 「6-2 文字表示回路の設計とIP設計」をPYNQ-Z1で動かす時にはまったこと

Last updated at Posted at 2020-09-02
動作環境
PYNQ-Z1
Windows 10 Pro v1909
Vivado v2019.1
Pmod VGA

概要

  • FPGAプログラミング大全 Xilinx編 の6-2にある文字表示をPYNQ-Z1で行う
  • HDLとROMDATAは本のサイト提供のものを使う
  • VRAMとCGROMはVivadoにて作成する
  • XSDKの実装は本のコードを使用する

謝辞

この記事の内容は小林優様の著書「FPGAプログラミング大全 Xilinx編」の内容および関連ファイルを使用しています。
この本はVivadoでFPGA学習をする上でいろいろ勉強になることが掲載されています。
本の執筆および関連ファイルの提供に謝意を表したいと思います。

前準備1.

ここにあるXilinxFPGA.zip を取得しておく。

中にあるArty\dai6sho\chardispをコピーしておく。
この記事ではc:\ip_200902\chardispにコピーをした状態で作業をした。
c:\ip_200902\chardisp\chardisp_ip以下にPackge IPで追加するVRAMやCGROMの関連ファイルが生成されることになる。
また、c:\ip_200902\chardisp\chardisp_ipはプロジェクトSettings > IP > Repositoryに追加されるようになる(後述)。

前準備2. CGROM, VRAMフォルダの削除 (失敗の回避)

先ほどコピーをしたc:\ip_200902\chardisp\chardisp_ipにあるフォルダについて、以下のように二つのフォルダを削除する。

  • CGROM/ => 消す
  • HDL/
  • ROMDATA/
  • VRAM/ => 消す

CGROM, VRAM, 二つのフォルダがある場合、Run synthesis時に以下のようなエラーで困ることになる。

  • module VRAM not found
    • IPパッケージにVRAMの情報が追加されなくなり起きる
    • (実際にはVRAM.xciをPackage IPに追加してない理由だったかもしれない)
  • xxxx.digilent.xxxx does not match xxx.pynq.xxx
    • 読み込んだCGROM, VRAMがArty向けに生成されているため、Vivadoで作るPYNQ向けと整合しないというエラー

bitstream生成まで (MicroBlaze以外の部分を主に)

プロジェクト新規追加

  1. プロジェクトを新規作成する (例: C:\ip_200902\appChrdsp)
    • RTL Project
    • Do not specify sources at this time
  2. Boards > PYNQ-Z1選択 (あらかじめボードファイルはVivadoで見えるようにしている)
  3. Finish

IPを用意

次にIPを用意する

  1. Tools > Create and Package New IP
  2. Package a specified directory選択
    • Package as a libray coreは未選択
    • C:/ip_200902/chardisp/chardisp_ipを選択する (前準備で用意したフォルダ)
      • このフォルダにこれから作るCGROM, VRAMのファイルが生成される
      • また、C:\ip_200902\appChrdspプロジェクトのIP Repositoryとしても登録される
        • Tools -> Settings > IP > Repositoryに見える
  3. Edit in Package Project Name
    • Project name: edit_ip_project (デフォルトのままとした)
    • Project location: デフォルトのままとした

上記でNew IP Creationを完了する。

VRAM IPの生成

この時点でPackageIPペインが表示されていて、以下のようになっている。

コメント 2020-09-02 212803.png

SourcesペインにあるVRAMとCGROMは?マークがついている。
VRAM, CGROM IPの生成が必要となる。

VRAM IPを生成する。

(Note: 本の6-2-3 プロジェクトの作成とVRAMの生成、を参照する方が以下の記載よりわかりやすいです)

  1. Window > IP Catalogを表示
  2. Memories & Storage > RAMS & ROMs & BRAM > Block Memory Generator をダブルクリック
  3. Component Nameを「VRAM」に変更する
  4. Basicタブ
    • Memory Type: True Dual Port RAM
    • Byte Write Enable
      • Byte Size (bits): 8
  5. Port A Optionsタブ
    • Write Width: 24
    • Read Width: 24
    • Write Depth: 4096
    • Enable Port Type: Always Enabled
    • Primitives Output Registerをチェックはずす
  6. Port B Optionsタブ
    • Enable Port Type: Always Enabled
    • Primitives Output Registerをチェックはずす
  7. OKを選択

Generate Output Products画面で「Out of context per IP」を選択してGenerateする。

この時点でSourcesペインのBRAMが?マークからICのマーク?に代わっている。
コメント 2020-09-02 212803.png

CGROM IPの生成

VRAMと同様にCGROM IPを生成する。

  1. Window > IP Catalogを表示
  2. Memories & Storage > RAMS & ROMs & BRAM > Block Memory Generator をダブルクリック
  3. Component Nameを「CGROM」に変更する
  4. Basicタブ
    • Memory Type: Single Port ROM
  5. Port A Optionsタブ
    • Port A Width: 8
    • Port A Depth: 1024
    • Enable Port Type: Always Enabled
    • Primitives Output Registerをチェックはずす
  6. Other Optionsタブ
    • Load init Fileをチェック
      • Coe File: C:/ip_200902/chardisp/chardisp_ip/ROMDATA/CGDATA.coe
      • 本のサイトから提供されるCGDATA
  7. OKを選択

Generate Output Products画面で「Out of context per IP」を選択してGenerateする。

この時点でSourcesペインのCGROMが?マークからICのマーク?に代わっている。

コメント 2020-09-02 212803.png

File GroupsにVRAM, CGROM IPのxciファイルを追加

二つのIPの生成内容をPackage IPに追加する。
これをしないと「module VRAM not found」というエラーがRun Synthesisで発生するように思う。

Package IP - chardisp_ip_v1_0ペインにあるFile Groupsに「Merge changes from File Groups Wizard」という確認があるので実行しておく。

この時点でPackage IPのFile Groupsは以下のようになっている。

コメント 2020-09-02 212803.png

Synthesis、Simulationsともに以下のファイルが足りない。

  • src/VRAM/VRAM.xci
  • src/CGROM/CGROM.xci

以下の手順で足す。
(足し方については、本のp289にAdd Existing IPを使うように記載があったが、こちらの環境では表示されなかった)。

  1. File Groupsのファイルリスト上で右クリック
  2. Add Files...
  3. Add Filesボタン
  4. Files or type: All Files
  5. c:\ip_200902\chardisp\chardisp_ip\src\VRAM\VRAM.xciを選択
  6. 同様にc:\ip_200902\chardisp\chardisp_ip\src\CGROM\CGROM.xciを選択
  7. OKを押して完了する。

コメント 2020-09-02 212803.png

上記を行い、File Groupsに以下のように3つのファイルがSynthesisとSimulationともにあるようにしておく。

コメント 2020-09-02 212803.png

パッケージ作成

Package IPにおいてReview and Packageの「Package IP」を実行してパッケージを作成する。

MicroBlazeとchardisp_v1_0の追加

MicrboBlazeの追加とchardusp_v1_0の追加をしたBlock Designを生成する。
このあたりは本に記載のことをそのまま実行したので、詳細は省く。

chardisp_v1_0_0は、以下のようにIP Repositoryに含まれているためBlock Designに追加ができる状態になっている。

コメント 2020-09-02 221437.png

作成したBlock Designは以下のようになっている。

コメント 2020-09-02 212803.png

制約ファイルの指定とbitstream生成、XSDKでの実行

制約ファイルを指定する。
https://www.shuwasystem.co.jp/support/7980html/4753.html
にある「PYNQ-Z1.zip」に含まれるPYNQ_constraints_PmodVGA.xdcを使用した。
このうち、CLK, RST, VGA_R[], VGA_G[], VGA_B[], VGA_HS, VGA_VSをアンコメントして使用できるようにしている。

また、VRAM IP, CGROM IP生成時に作成された以下の二つの制約ファイルも追加しておいた。

  • C:\ip_200902\chardisp\chardisp_ip\src\CGROM\CGROM_ooc.xdc
  • C:\ip_200902\chardisp\chardisp_ip\src\VRAM\VRAM_ooc.xdc

以上の作業でbitstreamを生成した。

提供されるXSDKのサンプルXilinxFPGA\Arty\dai6sho\chardisp\SDK\char_test.cを実行すると以下のようにVGA出力されることを確認できた。

618722c97825f960.jpeg

はまった

画面表示が成功するまでに13回の試行をした。
とくにVRAMとCGROMがPackage IPに追加されない状況が続き、その対処方法が本を見てもよくわからなかった。
試行錯誤した結果、この記事に書いている方法で対処できることが分かった。

Vivadoのバージョンの違いなのか(あるいはEditionの違い?)、本のp289に記載のある「Add Existing IP」の選択が「Add Source」画面に表示されないということもわからなかった。
代わりにFile Groupsで右クリックしてAdd Filesをすることを見つけた。

0
1
0

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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?