FC2カウンター FPGAの部屋 Vivado HLSのaxi_stream_side_channel_dataを試す
FC2ブログ

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

FPGAの部屋

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

Vivado HLSのaxi_stream_side_channel_dataを試す

前回は、”Vivado HLSのaxi_stream_no_side_channel_dataを試す1

今回は、axi_stream_side_channel_dataを試すことにする。

・Vivado HLSを立ちあげて、Open Example Project をクリックした。

・axi_stream_side_channel_data を選択して、Next> ボタンをクリックした。
Vivado_HLS_AXIS_12_131022.png

・Location を選択して、Finishボタンをクリックした。
Vivado_HLS_AXIS_13_131022.png

・Vivado HLSが立ち上がった。
Vivado_HLS_AXIS_14_131022.png

このCソースは、また強烈な書き方だね。example()関数の引数にもろにap_axis が書いてある。ap_axis構造体は ap_axi_sdata.h に書いてあって、下のような宣言になっていた。

template<int D,int U,int TI,int TD>
  struct ap_axis{
    ap_int<D>    data;
    ap_uint<D/8> keep;
    ap_uint<D/8> strb;
    ap_uint<U>   user;
    ap_uint<1>   last;
    ap_uint<TI>  id;
    ap_uint<TD>  dest;
  };


AXI4 Stream の信号がそのまま構造体になっていた。

・C Simulation を行った。
Vivado_HLS_AXIS_15_131022.png

・次に、C Synthesis を行った。レイテンシが 51クロックでインターバルが52クロックだった。この状態では、かなり遅い。
Vivado_HLS_AXIS_16_131022.png

・インターフェースは、ap_ctrl_hs 1つと ap_fifoがたくさんある。
Vivado_HLS_AXIS_17_131022.png

・C/RTL Co-Simulation をSystemC で行った。成功した。
Vivado_HLS_AXIS_18_131022.png

・pcoreとして出力した。トップのVerilog HDLファイルを見ると、AとBのAXI Stream ができている。ap_start などはそのまま出ている。
Vivado_HLS_AXIS_19_131022.png

AXI4 Stream 用の Vivado HLSの Cコードを書くと、どうしても時間の概念が入ってきてしまうと思う。
3x3のフィルタを実装するとなると、少なくとも2個のラインパッファが必要になる。”Vivado Design Suite ユーザーガイド 高位合成 UG902 (v2013.2) 2013 年 6 月 19 日”の 177ページの”表 2-3 : ストレージコア”に載っている RAM_2P_BRAM などを使う必要があるのか?
でも、Cコードでそうするくらいならば HDL を書いたほうがマシなんじゃないだろうか?
Cでのラプラシアン・フィルタの実装としては、前にやったようにC言語の基本となるメモリベースのAXI4 Master で memcpy()で1ラインずつ DMA転送してもらってラプラシアン・フィルタを実行するのが基本的な考え方だと思う。AXI4 Stream を使って実装すると、C言語のソフトウェア言語の書き方から外れてしまって、HDLで実装したほうがマシということになりはしないだろうか?

AXI4 Master での実装は、たぶんバグ?のためにうまくいかないようなので、HDLでラプラシアン・フィルタを書くことにする。
  1. 2013年10月22日 04:52 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:2

コメント

マルチコアプログラミングのように、時間や並行動作まで記述できないと直接H/Wに落とすのは難しそうですね。
そこまで行くとHDLで書いた方が簡単というのも、なんとなく理解できました。

現状では、OSI参照モデルのように階層に分けてHDL層/高位合成層/Cソース層みたいな設計するのがベターっぽいけど。
分ける手間を考えると・・・・

  1. 2013/10/22(火) 09:10:15 |
  2. URL |
  3. おる #qbIq4rIg
  4. [ 編集 ]

おるさん、こんにちは。
やはり、メモリ(配列含む)を読んで来て演算するという書き方でないとCで書いたとは言えませんね。その意味からすると、Cで書くというテーマからすると、AXI4 Streamを使うということは邪道になるんだと私はお思います。
  1. 2013/10/22(火) 18:43:37 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

コメントの投稿


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

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