FC2カウンター FPGAの部屋 Vivado HLS 2014.1で生成したラプラシアンフィルタIPをZYBOのカメラ表示システム上で使用する1
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Vivado HLS 2014.1で生成したラプラシアンフィルタIPをZYBOのカメラ表示システム上で使用する1

ZYBO Linux (Ubuntu 14.04 LTS) 上でMakefile を作ってラプラシアンフィルタIPの制御ソフトをコンパイル2”の続き。

前回は、Vivado HLS 2014.4 で生成したラプラシアンフィルタ IP を ZYBO のカメラ表示システムに追加してテストした。正常にラプラシアンフィルタ処理後の画像が表示されたが、28 秒程度かかり、しかもその間、表示画像が乱れていた。
Vivado HLS 2014.4 は、Vivado HLS 2014.1 からVivado HLS 2014.4 の間で、AXI4バスを生成するディレクティブが変更されたことでも分かるように、大きく変更されたのでは無いかと思う。
今回は、Vivado HLS 2014.1 を使用して、以前のCソースコードのままでやってみようと思う。思い返してみれば、ZYBO でVivado HLS のIP を動作させたことは無かった。

Vivado HLS 2014.1 のプロジェクトを作製して、以前のVivado HLS 用のラプラシアンフィルタのCソースコードをプロジェクトに入れた。そして、高位合成して、IP化を行った。
Vivado_HLS_lap_filter_66_150301.png

このCソースコードの cam_addr は ap_hs インターフェース、lap_addr は ap_vld インターフェースに設定してあるので、cam_addr と lap_addr を ap_none に設定してある Vivado HLS 2014.4 と比べて、Control signal のアドレスが増えている。下に、xlap_filter_axim_hw.h のコメント部分を引用する。

// ==============================================================
// File generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC
// Version: 2014.1
// Copyright (C) 2014 Xilinx Inc. All rights reserved.
//
// ==============================================================

// LiteS
// 0x00 : Control signals
// bit 0 - ap_start (Read/Write/COH)
// bit 1 - ap_done (Read/COR)
// bit 2 - ap_idle (Read)
// bit 3 - ap_ready (Read)
// bit 7 - auto_restart (Read/Write)
// others - reserved
// 0x04 : Global Interrupt Enable Register
// bit 0 - Global Interrupt Enable (Read/Write)
// others - reserved
// 0x08 : IP Interrupt Enable Register (Read/Write)
// bit 0 - Channel 0 (ap_done)
// bit 1 - Channel 1 (ap_ready)
// others - reserved
// 0x0c : IP Interrupt Status Register (Read/TOW)
// bit 0 - Channel 0 (ap_done)
// bit 1 - Channel 1 (ap_ready)
// others - reserved
// 0x10 : Control signal of cam_addr
// bit 0 - cam_addr_ap_vld (Read/Write/COH)
// bit 1 - cam_addr_ap_ack (Read)
// others - reserved
// 0x14 : Data signal of cam_addr
// bit 31~0 - cam_addr[31:0] (Read/Write)
// 0x18 : Control signal of lap_addr
// bit 0 - lap_addr_ap_vld (Read/Write/SC)
// others - reserved
// 0x1c : Data signal of lap_addr
// bit 31~0 - lap_addr[31:0] (Read/Write)
// 0x20 : Data signal of ap_return
// bit 31~0 - ap_return[31:0] (Read)
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)


xlap_filter_axim.c にも以下の関数が追加されている。

void XLap_filter_axim_SetCam_addr(XLap_filter_axim *InstancePtr, u32 Data)
u32 XLap_filter_axim_GetCam_addr(XLap_filter_axim *InstancePtr)
void XLap_filter_axim_SetCam_addrVld(XLap_filter_axim *InstancePtr)
u32 XLap_filter_axim_GetCam_addrVld(XLap_filter_axim *InstancePtr)
u32 XLap_filter_axim_GetCam_addrAck(XLap_filter_axim *InstancePtr)
void XLap_filter_axim_SetLap_addrVld(XLap_filter_axim *InstancePtr)
u32 XLap_filter_axim_GetLap_addrVld(XLap_filter_axim *InstancePtr)


最後に、Vivado HLS 2014.1 で高位合成を行うためのCソースコードの laplacian_filter.c を貼っておく。

(追記) Vivado HLS で合成したラプラシアンフィルタのバグの原因は、古いバグありラプラシアンフィルタのCソースコードを使用したためでした。正しいラプラシアンフィルタのCソースコードについては、”Vivado HLS 2014.4で生成したラプラシアンフィルタIPをシミュレーション3(原因が分かった)”をご覧ください。
  1. 2015年03月01日 05:14 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/3087-48b490d3
この記事にトラックバックする(FC2ブログユーザー)