#include "lookup_math.h" #include /* longest local memory table for Zynq 7010 */ #define SIN_TABLE_LEN 0x10000 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) { #pragma HLS INTERFACE s_axilite register port=inval #pragma HLS INTERFACE s_axilite register port=idx #pragma HLS INTERFACE s_axilite register port=return 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]; }