FPGAマガジン No.6 サポートWiki

FPGAマガジン No.6で紹介したJPEG DecoderのサポートWikiです。 FPGAマガジンで紹介しきれなかった部分を保管することを主目的としています。 JPEG Decoderをダウンロードすることができます。

  • 本プロジェクトはVivado 2014.2で実行できます。
  • Linux上で動作確認を行っております。

JPEG DECODER プロジェクト

JPEG DECODERは下記のようにgithubからダウンロードしてください。下記のようにIPCOREをダウンロードして頂くと、FPGAマガジン No.6で必要なIPCODEをまるごとダウンロードすることができます。 詳細仕様などについては、今後、追加していきますので今、しばらくお待ちください。 (2014/07/26、githubのディレクトリ構成を修正しました)

% git clone https://github.com/aquaxis/IPCORE.git
% cd aq_axi_djpeg

IPCODEのディレクトリにあるIPコアのうち、今回使用するのは下記のディレクトリがあります。

aq_axi_djpeg aq_axi_fifo aq_fifo6432

aq_axi_djpegディレクトリには下記のファイルがあります。

./aq_axi_djpeg.xpr // Vivadoプロジェクトファイル ./aq_axi_djpeg.srcs/sources // DJPEG HDLソースファイルディレクトリ ./aq_axi_djpeg.srcs/sources/aq_djpeg_fsm.v ./aq_axi_djpeg.srcs/sources/aq_axi_lite_slave.v ./aq_axi_djpeg.srcs/sources/aq_djpeg_hm_decode.v ./aq_axi_djpeg.srcs/sources/aq_djpeg.v ./aq_axi_djpeg.srcs/sources/aq_axi_djpeg.v ./aq_axi_djpeg.srcs/sources/aq_djpeg_ycbcr2rgb.v ./aq_axi_djpeg.srcs/sources/aq_djpeg_ycbcr.v ./aq_axi_djpeg.srcs/sources/aq_djpeg_huffman.v ./aq_axi_djpeg.srcs/sources/aq_djpeg_idctb.v ./aq_axi_djpeg.srcs/sources/aq_djpeg_ycbcr_mem.v ./aq_axi_djpeg.srcs/sources/aq_djpeg_ziguzagu.v ./aq_axi_djpeg.srcs/sources/aq_djpeg_regdata.v ./aq_axi_djpeg.srcs/sources/aq_djpeg_dqt.v ./aq_axi_djpeg.srcs/sources/aq_djpeg_idct_calc.v ./aq_axi_djpeg.srcs/sources/aq_djpeg_idct.v ./aq_axi_djpeg.srcs/sources/aq_djpeg_dht.v ./aq_axi_djpeg.srcs/sources/aq_axi_djpeg_ctrl.v ./aq_axi_djpeg.srcs/xgui // Vivado IP Integrator用ディレクトリ ./aq_axi_djpeg.srcs/xgui/aq_axi_djpeg_v1_0.tcl ./aq_axi_djpeg.srcs/component.xml // IP-XACTファイル ./aq_axi_djpeg.srcs/sim // シミュレーション用ディレクトリ ./aq_axi_djpeg.srcs/sim/tb_aq_djpeg.v ./aq_axi_djpeg.srcs/sim/test.mem ./aq_axi_djpeg.model // Cモデルディレクトリ ./aq_axi_djpeg.model/sample1.jpg ./aq_axi_djpeg.model/sample2.jpg ./aq_axi_djpeg.model/djpeg.c ./aq_axi_djpeg.model/sample0.jpg ./aq_axi_djpeg.model/cjpeg.c ./aq_axi_djpeg.model/convbtoh.c ./aq_axi_djpeg.model/convsim.c ./aq_axi_djpeg.model/sample3.jpg

Vivadoでプロジェクトの利用

Vivadoで"Open Project"を選択し、aq_axi_djpeg.xprのプロジェクトファイルを読み込むと、JPEG DECODERのVivadoプロジェクトを開くことができます。

ZYBO用 Vivadoプロジェクト

下記のようにgithubからプロジェクトファイルをダウンロードします。

ZYBO用 Vivadoプロジェクトは中身が存在しませんが、IPコアのリポジトリの設定を行っています。 従って、IPCOREと同じディレクトリでダウンロードしてください。

% git clone https://github.com/aquaxis/FPGAMAG.git

下記のようにディレクトリを移動してから、ZYBOのWebページからZYBO_def.zipをダウンロードして、Zipファイルを解凍後、"ZYBO_zynq_dev.xml"をFPGAMAG/No6/ZYBO/の下に置いてください。

% cd FPGAMAG/No6/ZYBO

FPGAMAG/No6/ZYBOの下でVivado 2014.2を起動してください。

% vivado

Vivado起動後、下図のように"Open Project"でZYBO.xprを選択して開いてください。

開いたあと、"Tools" -> "RUn Tcl Script"でZYBO.tclを実行します。

TCLが正常に実行されると下図のようにFPGAマガジン No.6で紹介しているプロジェクトが生成されます。

ZYBO用 BOOT.BIN

ZYBO用 BOOT.BINの生成方法を解説します。

1.ダウンロード

まず、githubから下記のようにリポジトリをクローンしてください。 ダウンロード完了後にNo6というディレクトリがありますので移動してください。

% git clone https://github.com/aquaxis/FPGAMAG.git
% cd No6

SD_IMAGEディレクトリには下記のファイルがあります。

BOOT.BIN DJPEG_ZYBO_wrapper.bit bootimage.bif mkbootbin.sh

BOOT.BINはSD_IMAGEにコミットしてますのでそのまま使用してもかまいません。

2.u-bootのダウンロード

ZedBoard Out Of Box SD Card image and sourceからZedBoard_OOB_Design.zipをダウンロードします。 ダウンロードしたファイルを解凍し、boot_imageディレクトリにあるu-boot.elfをSD_IMAGEディレクトリにコピーします。

% unzip ZedBoard_OOB_Design.zip
% cd ZedBoard_OOB_Design/boot_image/
% cp u-boot.elf SD_IMAGE

3.BOOT.BINの生成方法

u-bootとFSBL.elf、ZYBO_wrapper.bitをSD_IMAGEにコピーできたら、mkbootbin.shを実行するとBOOT.BINが生成されます。

% ./mkbootbin.sh

4.SDカードへの書き込み

MicroSDカードの第一パーティションをFAT32でフォーマットし、BOOT.BINをコピーします。 パーティションサイズは100MB程度で構いません。

ZYBOでデバッグ

ZYBOにMicroSDカードを挿れて起動します。

シミュレーション

HDLのシミュレーションはDJPEGのみ行えます。 Vivadoからシミュレーションを実行すると、テストベンチはtest.memを読みながらシミュレーションを行います。 シミュレーション用のデータはJPEGファイルから生成することができ、結果をBMPに変換することができます。

シミュレーション用データの生成方法

% gcc -o convbtoh convbtoh.c
% convbtoh test.jpg test.mem

シミュレーション結果のBMP変換方法

% gcc -o convsim convsim.c
% convsim test.dat test.bmp

Cモデル・シミュレーション

aq_axi_djpeg.modelディレクトリにDJPEGのシミュレーションモデルがあります。 このCモデルでDJPEGのアルゴリズム検証が行えます。

djpeg.c(JPEG⇒BMP)

本DJPEG IPコアと全く同じ結果を出力します。

% gcc -o djepg djpeg.c
% djpeg test.jpg test.bmp

cjpeg.c(BMP⇒JPEG)

JPEGエンコーダになります。 参考資料です。

% gcc -o cjepg cjpeg.c
% cjpeg test.bmp test.jpg