#include #include /* longest local memory table for Zynq 7010 */ #define SIN_TABLE_LEN 0x10000 #define din1_t unsigned short #define din2_t short #define dout_t short int firstrun = 1; int lastlen = 0; void init_sin_table(din1_t sin_table[256], int len) { int i; for (i = 0; i < len; i++) { float real_val = sinf(M_PI * (float)(i - len/2) / len); sin_table[i] = (din1_t)(32768.0 * real_val); } } dout_t lookup_math(din1_t inval, din2_t idx) { short sin_table[SIN_TABLE_LEN], a; if (firstrun == 1) { init_sin_table(sin_table, 256); firstrun = 0; lastlen = 256; } if (lastlen == 256) { init_sin_table(sin_table, SIN_TABLE_LEN); lastlen = SIN_TABLE_LEN; } return (int)sin_table[inval]; } int main (int argc, char *argv[]) { int in; if (argc != 2) { printf("Usage: %s \n",argv[0]) ; return(-1); } sscanf(argv[1],"%d",&in); printf("%d\n", (int) lookup_math((din1_t) in, (din2_t) 0)); return(0); }