volatile uint32_t *fpga_lx_master_reset = (volatile uint32_t *)FPGA_LX_MASTER_RESET;
volatile uint32_t *fpga_lx_master_conf = (volatile uint32_t *)FPGA_CONFIGURATION_FILE_ADDRESS;
+#define FPGA_FNCAPPROX_BASE 0x80023000
+
+volatile uint32_t *fpga_fncapprox_base = (volatile uint32_t *)FPGA_FNCAPPROX_BASE;
+
/* BUS measurement - values (shifting all bits) */
#define MEAS_VAL1 0xAAAAAAAA
#define MEAS_VAL2 0x55555555
#define FPGA_LX_MASTER_CONTROL_ADDRESS_MASK 0x0000FF00
#define FPGA_LX_MASTER_CONTROL_DATA_LENGTH_MASK 0x000000FF
+/* Function approximation block */
+
+#define FPGA_FNCAPPROX_BASE 0x80023000
+
+extern volatile uint32_t *fpga_fncapprox_base;
+
/* Configuration defines */
#define FPGA_CONFIGURATION_FILE_ADDRESS 0xA1C00000
return 0;
}
+int cmd_do_testfncapprox(cmd_io_t *cmd_io, const struct cmd_des *des, char *param[])
+{
+ char *ps = param[1];
+ unsigned long val;
+ unsigned long res;
+ long diff;
+ unsigned int xb;
+ uint32_t x;
+ uint32_t xl;
+ uint64_t yl;
+
+ si_skspace(&ps);
+ if (si_ulong(&ps, &val, 0) < 0)
+ return -CMDERR_BADPAR;
+
+ x = val;
+ xb = __builtin_clz(x);
+ xl = x << xb;
+
+ *fpga_fncapprox_base = xl;
+
+ res = *fpga_fncapprox_base;
+
+ yl = (1LL << 62) / xl;
+
+ diff = yl - res;
+
+ printf("val=0x%08lx res=0x%08lx ref=0x%08lx diff=%ld\n",
+ val, res, (unsigned long)yl, diff);
+
+ return 0;
+}
+
cmd_des_t const cmd_des_test_memusage = {0, 0,
"memusage", "report memory usage", cmd_do_test_memusage,
{
cmd_do_testlxpwrstat, {(void *)0}
};
+cmd_des_t const cmd_des_testfncapprox = {0, 0,
+ "testfncapprox", "test of function approximator",
+ cmd_do_testfncapprox, {(void *)0}
+ };
+
cmd_des_t const *const cmd_appl_tests[] =
{
&cmd_des_test_memusage,
#endif /*SDRAM_BASE*/
&cmd_des_testlxpwrrx,
&cmd_des_testlxpwrstat,
+ &cmd_des_testfncapprox,
NULL
};