LoginSignup
0
1

More than 5 years have passed since last update.

HLSで設定レジスタを作る

Last updated at Posted at 2018-06-13

Config.png


PSからPLのモジュールへ値を読み書きしたいとき、AXI経由で読み書きするのが普通かと思う。
モジュールがAXIに対応していなければ、AXIとの変換モジュールを作ることになる。
その場合、

  • GPIOモジュールを使う
  • RTLをガリガリ書く

と言う手段があるが、GPIOではどのレジスタの何ビット目が何だったかがコードに現れないので辛いし、
RTL書くのは輪をかけて面倒である。

というわけでHLSで書く。イメージとしてはこんな感じ。

typedef struct{
    int32_t A;
    bool B;
} Config_write;

typedef struct{
    uint16_t C;
    bool D;
    uint8_t E;
} Config_read;

void HogeConfigurator(
    Config_write wcfg_axi,
    Config_read& rcfg_axi,

    Config_write& wcfg_pl,
    Config_read rcfg_pl
    ){
    wcfg_pl = wcfg_axi;
    rcfg_axi = rcfg_pl;
}

PLへ書き込む設定値はConfig_write、PLから読み込む設定値はConfig_read構造体にまとめる。
引数の~_axiはAXI側、_plはモジュール側である。

_axiと関数本体のインターフェースをs_axiliteにして
_plのインターフェースをap_noneにすればAXI経由で操作でき、おまけにドライバをHLSが生成してくれる。

(本当にap_noneでええんか?validいらんのか?と警告が出るが無視する。)

レジスタ指定をつければ、XHogeConfigurator_Start()を呼ぶとまとめて変更が反映される動作になるし、
つけなければ即座に変更が反映される動作になる。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1