日曜技術者のメモ

趣味でやった事のメモ書きです。

Vivado IP Integratorでap_fifoとfifoを簡単に接続する

ap_fifofifoを接続するときの小ネタ。

ap_fifofifoと接続されない

Vivado HLSでap_fifoを多用する私ですが、Vivado IP Integrator上でFIFO Generatorと接続しようとしてもそのままでは繋がりません。
f:id:ginnyu-tei:20170717120816j:plain:w400
↑の様に接続候補に現れない。

ap_fifoは何故かfullやempty信号が負論理になっているので反転する必要があります。

f:id:ginnyu-tei:20170717121804j:plain:w400
↑この様な形で配線が必要。

この配線を毎回するのは面倒な上にせっかくIP IntegratorでFIFO I/Fがまとめてられているのに毎度ばらして配線するのは見た目が悪いので変換するIPを作成した。
これを使うと↓の様に配線がすっきりする。
f:id:ginnyu-tei:20170717123204j:plain:w400

ap_fifo2fifo

まずIPにするRTLだが↓の様にFULLを反転するコードを用意する。
これでIPを作成すれば良い。

module ap_fifo2fifo(
    WR_DATA_o,
    FULL_N_o,
    WR_EN_o,
    WR_DATA_i,
    FULL_i,
    WR_EN_i
);

parameter WIDTH = 32;

//ap_fifo
input [WIDTH-1:0] WR_DATA_o;
output FULL_N_o;
input WR_EN_o;

//fifo
output [WIDTH-1:0] WR_DATA_i;
input FULL_i;
output WR_EN_i;


assign WR_DATA_i = WR_DATA_o;
assign FULL_N_o = ~FULL_i;
assign WR_EN_i = WR_EN_o;

endmodule

このままIPを生成すると各ポートがそのままになるのでI/F定義が必要になる。
f:id:ginnyu-tei:20170717124414j:plain:w400

din側はInterface Definitionを"acc_fifo_write_rtl"のslaveにして各ポートを割り当てる。
f:id:ginnyu-tei:20170717124525j:plain:w400
f:id:ginnyu-tei:20170717124718j:plain:w400
dout側はInterface Definitionを"fifo_write_rtl"のmasterにして各ポートを割り当てる。
f:id:ginnyu-tei:20170717124838j:plain:w400 f:id:ginnyu-tei:20170717124851j:plain:w400

fifo2ap_fifo

ap_fifo2fifoもemptyを反転するRTLを用意してIPを作成する。

module fifo2ap_fifo(
    RD_DATA_i,
    EMPTY_i,
    RD_EN_i,
    RD_DATA_o,
    EMPTY_N_o,
    RD_EN_o
);

parameter WIDTH = 32;

//fifo
input [WIDTH-1:0] RD_DATA_i;
input EMPTY_i;
output RD_EN_i;

//ap_fifo
output [WIDTH-1:0] RD_DATA_o;
output EMPTY_N_o;
input RD_EN_o;

assign RD_DATA_o = RD_DATA_i;
assign EMPTY_N_o = ~EMPTY_i;
assign RD_EN_i = RD_EN_o;

endmodule

こちらもI/F定義をやっていく。
f:id:ginnyu-tei:20170717130240j:plain:w400

din側はInterface Definitionを"fifo_read_rtl"のmasterにして各ポートを割り当てる。 f:id:ginnyu-tei:20170717130343j:plain:w400
f:id:ginnyu-tei:20170717130354j:plain:w400
dout側はInterface Definitionを"acc_fifo_read_rtl"のslaveにして各ポートを割り当てる。
f:id:ginnyu-tei:20170717130425j:plain:w400
f:id:ginnyu-tei:20170717130439j:plain:w400

後はVivadoのプロジェクト上から各IPをインスタンスすれば簡単に配線できる。