FC2カウンター FPGAの部屋 2022年09月19日
fc2ブログ

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

FPGAの部屋

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

Vitis HLS 2022.1 で multi_axi4ls IP を作成する

Vitis アクセラレーション・プラットフォーム上に予め回路を埋め込んでおいて、その回路を XRT 経由で操作するというお題は以前やってみたのだが、失敗した。それなら、Vitis とは別のソフトウェアで動かせば良いのでは?というアドバイスを AMD XILINX TECH DAY TOKYO 2022 の後のタリーズコーヒーでいただいたので、やってみることにした。

今回は、”自作回路を cocotb でシミュレーションする1(Vitis HLS で multiplier を作成1)”と”自作回路を cocotb でシミュレーションする2(Vitis HLS で multiplier を作成2)”で作成した multiplier を multi_axi4ls として、 AXI4 Lite インターフェース対応にする。
multi_axi4ls IP を Vitis アクセラレーション・プラットフォームのハードウエア・プラットフォーム上に実装する。

ソースコードの multi_axi4ls.cpp を示す。

// multi_axi4ls.cpp
// 2022/09/18 by marsee
//

#include <stdint.h>

int multi_axi4ls(int16_t a, int16_t b, int32_t *c){
#pragma HLS INTERFACE mode=s_axilite port=c
#pragma HLS INTERFACE mode=s_axilite port=b
#pragma HLS INTERFACE mode=s_axilite port=a
#pragma HLS INTERFACE mode=s_axilite port=return

    *c = a * b;

    return(0);
}


テストベンチの multi_axi4ls_tb.cpp を示す。

// multi_axi4ls_tb.cpp
// 2022/09/18 by marsee
//

#include <stdio.h>
#include <stdint.h>

int multi_axi4ls(int16_t a, int16_t b, int32_t *c);

int main(){
    int16_t a, b;
    int32_t c;

    a = 3;
    b = 4;

    multi_axi4ls(a, b, &c);
    printf("a = %d, b = %d, c = (a*b) = %d\n", a, b, c);

    return(0);
}


Vitis HLS 2022.1 の multi_axi4ls プロジェクトを示す。KV260 用だ。Part は xck26-sfvc784-2LV-c だ。
KV260_custom_platform_1_220918.jpg

C シミュレーションの結果を示す。
KV260_custom_platform_2_220918.jpg

C コードの合成を行った。結果を示す。
なお、200 MHz で動かす予定なので、クロック周期は 5 ns に設定してある。
KV260_custom_platform_3_220919.png

C/RTL 協調シミュレーションを行った。結果を示す。
レイテンシは 3 クロックだった。
KV260_custom_platform_4_220919.png

C/RTL 協調シミュレーションの波形を示す。
KV260_custom_platform_5_220919.png

Export RTL を行った。

Implementation の結果を示す。
問題ないようだ。
KV260_custom_platform_6_220919.png
  1. 2022年09月19日 06:48 |
  2. Vitis HLS
  3. | トラックバック:0
  4. | コメント:0