FPGA+SoC+Linuxのブートシーケンス(Device Tree Overlay+FPGA Manager編)
FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)
FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)
そうすれば、SDSoCのライセンスは必要ありません。
また、ボードに対するSDSoC用のプラットフォームも用意する必要はありません。
また、ボードに対するSDSoC用のプラットフォームも用意する必要はありません。
パラメータを設定する setup 関数部のモジュールと kernel 関数部を 下記の図のような構成にして、
それぞれ、Vivado HLS用のコードを出力すればいいと思うんですが、いかがでしょうか?
それぞれ、Vivado HLS用のコードを出力すればいいと思うんですが、いかがでしょうか?
こうすることで、SDSoCが不要になり、ビルド時間も短くなります。
GUINNESSは吐き出すコードの各レイヤーはVivado HLSコードなので、
最上位部をSDSoCでなく、Vivado HLS用コードにすればできると思います。
最上位部をSDSoCでなく、Vivado HLS用コードにすればできると思います。
追記)2017.11.25
本日(2017.11.25)発売のインターフェース、2018年1月号に中原先生ご自身によるGUINNESSについての記事(8頁もの)が掲載されています。
なんとラズパイ3の800倍! リアルタイムPython①...高速ディープ・ラーニングに挑戦 <= クリックすると、見本の最初のページのPDFがダウンロードされます。
なんとラズパイ3の800倍! リアルタイムPython①...高速ディープ・ラーニングに挑戦 <= クリックすると、見本の最初のページのPDFがダウンロードされます。
また、Vivado HLS用コードについては、中原先生から直接、そのようなコードにはなっていることをを教えてもらいました。
サンプルコードのTinyCNNでは、sdsoc/cnn.cppのBinCNN関数は、下記のようになっていますが、
#pragma HLSの部分をコメントアウトして、Vivado HLSで合成すればいいようです。
サンプルコードのTinyCNNでは、sdsoc/cnn.cppのBinCNN関数は、下記のようになっていますが、
#pragma HLSの部分をコメントアウトして、Vivado HLSで合成すればいいようです。
{ //-------------------------------------------------------------------- // Top Function for a Binarized CNN //-------------------------------------------------------------------- #ifdef __SDSCC__ #pragma SDS data access_pattern(t_bin_convW: SEQUENTIAL) #pragma SDS data access_pattern(t_BNFb: SEQUENTIAL) #pragma SDS data access_pattern(t_in_img: SEQUENTIAL) #pragma SDS data zero_copy(t_bin_convW[0:224192]) #pragma SDS data zero_copy(t_BNFb[0:330]) #pragma SDS data zero_copy(t_in_img[0:32*32]) #endif void BinCNN( #ifdef __SDSCC__ int *t_bin_convW, int *t_BNFb, ap_int<64> t_in_img[32*32], int fc_result[10], int init #else int t_bin_convW[224192], int t_BNFb[330], ap_int<64> t_in_img[32*32], int fc_result[10], int init #endif ) { /* #pragma HLS INTERFACE s_axilite register port=t_bin_convW bundle=slv0 #pragma HLS INTERFACE s_axilite register port=t_BNFb bundle=slv0 #pragma HLS INTERFACE s_axilite register port=t_in_img bundle=slv0 #pragma HLS INTERFACE s_axilite register port=fc_result bundle=slv0 #pragma HLS INTERFACE s_axilite register port=init bundle=slv0 #pragma HLS INTERFACE s_axilite register port=return bundle=slv0 */ if( init == 1) setup( t_bin_convW, t_BNFb); else kernel( t_in_img, fc_result); }