CコードとRTL記述の対応

[] [] []


合成可能なCコードをざっくり把握するために、合成後のRTL記述との対応を示す。

(1) トップ階層はCの関数がRTLmoduleになる。

(2) クロックとリセットは自動的に生成される。

(3) IO信号はC関数の引数から生成される。

 引数にハンドシェーク信号(vld,ack)を付けるにはpragmaで指定する。

 入力の場合、vld1にしてack1になったら受け付けられたことになる。

 

Cコード

合成後のRTL記述

void dut

  (ap_uint<8> din        // (i)

  ,ap_uint<8> *dout        // (o)

) {

  #pragma HLS INTERFACE ap_ctrl_none port=return

  #pragma HLS INTERFACE ap_hs port=din

  #pragma HLS INTERFACE ap_hs register port=dout

  *dout = din;

}

module dut

  (input       ap_clk

  ,input       ap_rst

  ,output      din_ap_ack

  ,input       din_ap_vld

  ,input[7:0] din

  ,input       dout_ap_ack

  ,output reg dout_ap_vld

  ,output reg[7:0] dout

  );

  ...

endmodule

生成されるRTLIO信号をまとめると次表のようになる。

IO信号

生成方法

クロック

 (i) ap_clk

・自動的に生成される

リセット

 (i) ap_rst   (正論理)

 (i) ap_rst_n (負論理)

Solution Settings...config_rtlコマンドで指定する

-reset control(default) 制御信号を作るFFのみリセットあり

 またはnone リセットなし、またはall FFリセットあり

-reset_async非同期リセット、指定しなければ同期リセット

-reset_level high(default)正論理、またはlow負論理

クロックイネーブル

 (i) ap_ce

Solution Settings...config_interfaceコマンドで指定する

-clock_enable

トップ階層の開始終了信号

 (i) ap_start 開始

 (o) ap_done 終了

 (o) ap_ready 次を開始可

 (o) ap_idle   アイドル

#pragma HLS INTERFACEで指定する

 ap_ctrl_none port=return なし

 ap_ctrl_hs port=return   あり

通常は「なし」、トップ階層をバスマスタにするとき「あり」にする

引数のハンドシェーク信号

 引数が入力の場合は

 (i) *_ap_vld 確定valid

 (o) *_ap_ack 受付

 出力の場合は逆方向になる

#pragma HLS INTERFACEで指定する

 ap_none port=引数名 なし(処理中は入力一定に保つ)

 ap_hs port=引数名   ハンドシェーク信号(vld,ack)付き

() GUISolution Settingsで指定したものはscript.tclに記述される。

◇◇

pragmaGUIで設定してdirectives.tclに記述する方法もあるが、回路の意図がわかるようにCコード中に書いた方がよいと思う。どのみちS/W用のCコードはH/W向けに書き換えなければならないので。


[] [] []