5static const char *FNAME =
"kest_fpga_encoding.c";
10#define PRINTLINES_ALLOWED 1
113 if (!batch || !block)
127 if (!batch || !block)
159 if (!batch || !block)
202 kest_block_pll *current = eff->
blocks;
208 current = current->next;
217 if (!batch || !block)
228 if (!batch || !blocks)
231 kest_block_pll *current = blocks;
241 current = current->next;
250 if (!batch || !res || !rpt)
273 if (size < delay + 1)
292 for (
int i = 0; i < filter->
coefs.count; i++)
300 KEST_PRINTF(
"Converting to q%d.%d, we get %d. Masked to 18 bits, that's %d.\n",
313 if (!batch || !list || !rpt)
316 kest_dsp_resource_pll *current = list;
321 current = current->next;
329 if (!batch || !eff || !res)
340 if (!batch || !effect || !res || !pos)
362 if (!batch || !list || !res || !pos)
366 kest_effect_pll *current = list;
371 current = current->next;
374 KEST_PRINTF(
"kest_fpga_batch_append_effects done\n");
439 int src_a_reg = !!(instr & (1 << 10));
442 int src_b_reg = !!(instr & (1 << 15));
445 int src_c_reg = !!(instr & (1 << 20));
449 int sat = !!(instr & (1 << 30));
450 int no_shift = !!(instr & (1 << 31));
454 src_a_reg ?
"r" :
"c", src_a,
455 src_b_reg ?
"r" :
"c", src_b,
456 src_c_reg ?
"r" :
"c", src_c, dest,
457 shift, sat ?
", unsat" :
"");
465 int src_a_reg = !!(instr & (1 << 10));
468 int src_b_reg = !!(instr & (1 << 15));
481 src_a_reg ?
"r" :
"c", src_a,
482 src_b_reg ?
"r" :
"c", src_b,
488 int format = !!(instr & (1 << 5));
500 KEST_PRINTF_(
"Reading out FPGA transfer batch %p (length %d)\n", seq.
buf, n);
529 uint32_t instruction = 0;
535 KEST_PRINTF_(
"\tByte %s%d: 0x%02X. ", (n > 9 && i < 10) ?
" " :
"", i,
byte);
645 block = (block << 8) |
byte;
664 instruction = (instruction << 8) |
byte;
674 instruction = (instruction << 8) |
byte;
689 value = (value << 8) |
byte;
690 KEST_PRINTF_(
"Value: %s = %d = %f (in q%d.%d)",
binary_print_16(value), value, (
float)value / (powf(2.0, 15 - shift)), 1 + shift, 15 - shift);
694 value = (value << 8) |
byte;
707 value = (value << 8) |
byte;
708 KEST_PRINTF_(
"%s: %s = 0x%06x = %.02f", ctr_2 ?
"Delay" :
"Size",
binary_print_24(value), value, (
float)((uint32_t)value) / (powf(2.0, (15 - shift))));
724 value = (value << 8) |
byte;
745 value = (value << 8) |
byte;
761 value = (value << 8) |
byte;
780 value = (value << 8) |
byte;
797 signed_val = (signed_val << 8) |
byte;
802 if (signed_val & (1u << 23))
804 signed_val |= 0xFF000000;
807 KEST_PRINTF_(
"Value: %.04f", ((
float)signed_val) * pow(2, -(16 - shift)));
#define KEST_ASM_ARG_EXPR
#define BLOCK_INSTR_MEM_WRITE
#define BLOCK_INSTR_DELAY_WRITE
#define BLOCK_INSTR_DELAY_READ
#define BLOCK_INSTR_MOV_ACC
#define BLOCK_INSTR_CLAMP
#define BLOCK_INSTR_MOV_UACC
#define BLOCK_INSTR_FILTER
#define BLOCK_INSTR_MEM_READ
#define BLOCK_INSTR_MOV_LACC
#define BLOCK_INSTR_LUT_READ
float kest_expression_evaluate(kest_expression *expr, kest_expr_scope *scope)
kest_fpga_sample_t float_to_q_nminus1(float x, int shift)
int32_t float_to_q_nminus1_18bit(float x, int shift)
char * kest_block_opcode_to_name(uint32_t opcode)
int kest_fpga_batch_append_block_regs(kest_fpga_transfer_batch *batch, kest_block *block, kest_expr_scope *scope, int pos)
char * kest_block_opcode_to_string(uint32_t opcode)
int kest_fpga_batch_append_eff_desc(kest_fpga_transfer_batch *batch, kest_effect_desc *eff, const kest_eff_resource_report *res, kest_expr_scope *scope, int pos)
int kest_fpga_batch_append_effect(kest_fpga_transfer_batch *batch, kest_effect *effect, kest_eff_resource_report *res, int *pos)
int kest_fpga_batch_append_blocks(kest_fpga_transfer_batch *batch, kest_block_pll *blocks, const kest_eff_resource_report *res, kest_expr_scope *scope, int pos)
int kest_fpga_batch_append_block_instr(kest_fpga_transfer_batch *batch, kest_block *block, const kest_eff_resource_report *res, int pos)
int kest_fpga_batch_append_block_register_updates(kest_fpga_transfer_batch *batch, kest_block *block, kest_expr_scope *scope, int pos)
uint32_t kest_block_instr_encode_resource_aware(kest_block *block, const kest_eff_resource_report *res)
int kest_fpga_transfer_batch_append_effect_register_updates(kest_fpga_transfer_batch *batch, kest_effect_desc *eff, kest_expr_scope *scope, int pos)
int kest_fpga_batch_append_resource(kest_fpga_transfer_batch *batch, kest_dsp_resource *res, const kest_eff_resource_report *rpt, kest_expr_scope *scope)
void print_instruction_format_b(uint32_t instr)
int kest_fpga_batch_append_block(kest_fpga_transfer_batch *batch, kest_block *block, const kest_eff_resource_report *res, kest_expr_scope *scope, int pos)
void print_instruction_format_a(uint32_t instr)
int kest_fpga_block_opcode_format(int opcode)
int kest_fpga_batch_print(kest_fpga_transfer_batch seq)
int kest_block_instr_format(kest_block *block)
int kest_fpga_batch_append_block_number(kest_fpga_transfer_batch *batch, int block)
void print_instruction(uint32_t instr)
uint32_t kest_encode_dsp_block_instr_type_a(kest_block *block)
int kest_fpga_batch_append_effects(kest_fpga_transfer_batch *batch, kest_effect_pll *list, kest_eff_resource_report *res, int *pos)
int kest_fpga_batch_append_resources(kest_fpga_transfer_batch *batch, kest_dsp_resource_pll *list, const kest_eff_resource_report *rpt, kest_expr_scope *scope)
uint32_t kest_encode_dsp_block_instr_type_b(kest_block *block, int res_handle)
int kest_fpga_batch_append_16(kest_fpga_transfer_batch *seq, uint16_t x)
int kest_fpga_batch_append(kest_fpga_transfer_batch *seq, uint8_t x)
int kest_fpga_batch_append_24(kest_fpga_transfer_batch *seq, uint32_t x)
int kest_fpga_batch_append_32(kest_fpga_transfer_batch *seq, uint32_t x)
#define COMMAND_UPDATE_BLOCK_REG_0
#define COMMAND_SET_OUTPUT_GAIN
#define COMMAND_WRITE_BLOCK_REG_0
uint8_t kest_fpga_block_addr_t
#define KEST_FPGA_SAMPLE_RATE
#define COMMAND_BEGIN_PROGRAM
#define COMMAND_ALLOC_DELAY
#define KEST_FPGA_N_BLOCKS
#define COMMAND_WRITE_FILTER_COEF
#define COMMAND_WRITE_BLOCK_REG_1
#define COMMAND_ALLOC_FILTER
#define KEST_FPGA_BLOCK_ADDR_BYTES
#define KEST_FPGA_FILTER_WIDTH
#define COMMAND_SET_INPUT_GAIN
#define COMMAND_WRITE_BLOCK_INSTR
#define KEST_FPGA_DATA_BYTES
#define COMMAND_COMMIT_REG_UPDATES
int16_t kest_fpga_sample_t
#define COMMAND_UPDATE_BLOCK_REG_1
#define COMMAND_END_PROGRAM
char * binary_print_16(uint16_t x)
char * binary_print_24(uint32_t x)
#define range_bits(x, n, start)
#define place_bits(x, y, val)
#define KEST_PRINTF_(...)
int kest_resource_report_integrate(kest_eff_resource_report *a, const kest_eff_resource_report *b)
#define KEST_DSP_RESOURCE_MEM
#define KEST_DSP_RESOURCE_FILTER
#define KEST_DSP_RESOURCE_DELAY
#define KEST_DSP_RESOURCE_LUT
struct kest_expression * size
struct kest_expression * delay
kest_dsp_resource_pll * resources
kest_eff_resource_report res_rpt
struct kest_expression_ptr_list coefs