0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[高位合成] データ型関連の話

Last updated at Posted at 2025-05-06

データ型などのあれこれ

高位合成においてC/C++でのデータ型などがどのような扱いなのかを説明します。
今回は基本的なもののみです。

動作環境

IDE:VitisHLS 2023.1

ソースコード

概要

以下の流れで説明していきます。

  1. 標準の型
  2. 高位合成専用の型
  3. 構造体

標準の型

通常のC/C++サイズ 高位合成サイズ
bool 1byte 1bit
char 1byte 8bit
unsigned char 1byte 8bit
short 2byte 16bit
unsigned short 2byte 16bit
int 4byte 32bit
unsigned int 4byte 32bit
long 8byte 64bit
unsigned long 8byte 64bit
long long 8byte 64bit
unsigned long long 8byte 64bit
float 4byte 32bit
double 8byte 64bit

※通常のC/C++は64bit環境を想定しています

OSがWindowsかLinuxかによってサイズが異なるので注意。
SCR-20250430-hwpq.png

また、C99から導入されたstdint.hも使用できます。
floatとdouble以外はこちらを使用した方がいいと思います。

サイズ
intN_t N bit
uintN_t N bit

高位合成の型

ap_int.hをインクルードすれば任意のビット幅も使用できます。

サイズ
ap_int< N > N bit
ap_uint< N > N bit

Nは1〜1024まで指定可能

1024bit以上を扱いたい場合は、以下の通りにマクロを上書きしてあげると
最大4096bitまで扱えます。

#define AP_INT_MAX_W 4096
#include "ap_int.h"

ap_int<4096> tmp;

また、ap_fixed.hをインクルードすれば固定小数点も扱えます。
固定小数点を扱うメリットとしては動作が早くなります。
デメリットとしては精度が落ちてしまいます。

サイズ
ap_fixed< W, I, Q, O, N > W bit
ap_ufixed< W, I, Q, O, N > W bit

Wはビット幅。
Iは整数値を表すビット幅。
Q, O, Nは指定しなくても問題ないため今回は説明は省きます。(丸め込みとかの設定です)

※固定小数点を知らない方は以下のサイトを参考にしてみてください。

構造体

構造体もC/C++同様に使用できます。
この場合どのように合成されるのか?ですが、2通りのパターンがあります。

  • 個別の信号として合成される(分割)
  • 1つのベクタとして合成される(集約)

以下を例にします。

struct MyType
{
    short data1;
    int data2;
};
MyType my_data;
#pragma HLS DISAGGREGATE variable = my_data

DISAGGREGATEプラグマを使用すれば個別の信号として扱われます。

MyType my_data;
#pragma HLS AGGREGATE variable = my_data

AGGREGATEプラグマを使用すれば1つのベクタとして扱われます。

プラグマを指定しなけばデフォルトで個別の信号として扱われます。
ただし、状況によってはベクタになるかもです。

インターフェースで構造体を使用すると、強制的に1つのベクタで扱われます。

また、通常のC/C++同様に構造体にはアライメントがあります。
なにも指定しなければアライメントは4byte(32bit)になります。

以下がアライメントのイメージです。

SCR-20250505-oyhh.png

以下の場合は注意してください。無駄にリソースを食うかもしれません。

SCR-20250505-oyuh.png

もしアライメントを変更したい場合は、以下のように定義してください。
※Nは2のべき乗のみ

struct __attribute__((aligned(N))) xxx
{
}

今回は以上。

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?