是否可以根据定义在项目设置中设置顶部函数的名称?我有一个基于定义使用不同参数和不同顶级函数名称的IP,但我不想每次更改定义时都更改项目设置中的顶级函数名称。我想根据定义更改Top Function的名称,因为生成的IP块的名称与Top Function的名称相同。
例如我有这些定义:
#ifdef CONV1
#define INPUT_LENGTH 32
#define IN_CHAN 2
#define OUT_CHAN 8
#define CONV_FUNC conv_8x2x5x5
#else
#ifdef CONV2
#define INPUT_LENGTH 28
#define IN_CHAN 8
#define OUT_CHAN 16
#define CONV_FUNC conv_16x8x5x5
#else
#define INPUT_LENGTH 24
#define IN_CHAN 16
#define OUT_CHAN 20
#define CONV_FUNC conv_20x16x5x5
#endif
#endif
Top函数定义为:
void CONV_FUNC (...) {
...
}
我定义了例如CONV1, Top函数的名称变为conv_8x2x5x5,因此生成的IP块的名称变为conv_8x2x5x5。如何使合成自动选择正确的Top函数名称?
我不确定我是否理解了问题的细节,但是您可以使用C预处理器来实现您想要的(甚至可以摆脱CONV_FUNC
宏):
#include <stdio.h>
#ifdef CONV1
#define INPUT_LENGTH 32
#define IN_CHAN 2
#define OUT_CHAN 8
// #define CONV_FUNC conv_8x2x5x5
#else
#ifdef CONV2
#define INPUT_LENGTH 28
#define IN_CHAN 8
#define OUT_CHAN 16
// #define CONV_FUNC conv_16x8x5x5
#else
#define INPUT_LENGTH 24
#define IN_CHAN 16
#define OUT_CHAN 20
// #define CONV_FUNC conv_20x16x5x5
#endif
#endif
#define MAKE_FUNC_NAME(o, i) conv_##o##x##i##x5x5
#define TOP_FUNC(o, i) MAKE_FUNC_NAME(o, i)
#define TOP TOP_FUNC(OUT_CHAN, IN_CHAN)
int TOP(int x) {
printf("Top function: %sn", __func__);
return x + 1;
}
int main(int argc, char const *argv[]) {
int dummy_ret = TOP(41);
return 0;
}
将打印:
Top function: conv_20x16x5x5
搜索"标记连接";查看更多信息。