From 51c482ac52448c5ce34a36d8ff8945bea098c7e4 Mon Sep 17 00:00:00 2001 From: Wolfgang Spraul Date: Sat, 16 Feb 2013 07:08:04 -0500 Subject: [PATCH] some cleanup to prepare for block memory support --- libs/bit_regs.c | 392 ++++++++++++++++++------------------------------ libs/helper.c | 149 +++++++++++++++--- libs/helper.h | 16 +- 3 files changed, 280 insertions(+), 277 deletions(-) diff --git a/libs/bit_regs.c b/libs/bit_regs.c index cbda213..e9bc0f0 100644 --- a/libs/bit_regs.c +++ b/libs/bit_regs.c @@ -542,6 +542,143 @@ fail: return rc; } +static int dump_maj_zero(const uint8_t* bits, int row, int major) +{ + int minor; + + for (minor = 0; minor < get_major_minors(XC6SLX9, major); minor++) + printf_clock(&bits[minor*FRAME_SIZE], row, major, minor); + for (minor = 0; minor < get_major_minors(XC6SLX9, major); minor++) + printf_frames(&bits[minor*FRAME_SIZE], /*max_frames*/ 1, + row, major, minor, /*print_empty*/ 0, /*no_clock*/ 1); + return 0; +} + +static int dump_maj_left(const uint8_t* bits, int row, int major) +{ + int minor; + + for (minor = 0; minor < get_major_minors(XC6SLX9, major); minor++) + printf_clock(&bits[minor*FRAME_SIZE], row, major, minor); + for (minor = 0; minor < get_major_minors(XC6SLX9, major); minor++) + printf_frames(&bits[minor*FRAME_SIZE], /*max_frames*/ 1, + row, major, minor, /*print_empty*/ 0, /*no_clock*/ 1); + return 0; +} + +static int dump_maj_right(const uint8_t* bits, int row, int major) +{ + int minor; + + for (minor = 0; minor < get_major_minors(XC6SLX9, major); minor++) + printf_clock(&bits[minor*FRAME_SIZE], row, major, minor); + for (minor = 0; minor < get_major_minors(XC6SLX9, major); minor++) + printf_frames(&bits[minor*FRAME_SIZE], /*max_frames*/ 1, + row, major, minor, /*print_empty*/ 0, /*no_clock*/ 1); + return 0; +} + +static int dump_maj_logic(const uint8_t* bits, int row, int major) +{ + const struct xc_die* xci = xc_die_info(XC6SLX9); + int minor, i, logdev_start, logdev_end; + + for (minor = 0; minor < xci->majors[major].minors; minor++) + printf_clock(&bits[minor*FRAME_SIZE], row, major, minor); + + // 0:19 routing minor pairs + for (i = 0; i < 10; i++) + printf_routing_2minors(&bits[i*2*FRAME_SIZE], row, major, i*2); + + // mi20 as 64-char 0/1 string + printf_v64_mi20(&bits[20*FRAME_SIZE], row, major); + + logdev_start = 0; + logdev_end = 15; + if (xci->majors[major].flags & XC_MAJ_TOP_BOT_IO) { + if (row == xc_die_info(XC6SLX9)->num_rows-1) + logdev_start += TOPBOT_IO_ROWS; + else if (!row) + logdev_end -= TOPBOT_IO_ROWS; + } + + if (xci->majors[major].flags & XC_MAJ_XM) { + if (xci->majors[major].minors != 31) HERE(); + + // M devices + if (logdev_start) + printf_extrabits(bits, 21, 2, 0, logdev_start*64, row, major); + for (i = logdev_start; i <= logdev_end; i++) { + printf_lut_words(bits, row, major, 21, i*4); + printf_lut_words(bits, row, major, 21, i*4+2); + } + if (logdev_end < 15) + printf_extrabits(bits, 21, 2, i*64 + XC6_HCLK_BITS, (15-logdev_end)*64, row, major); + printf_frames(&bits[23*FRAME_SIZE], /*max_frames*/ 1, + row, major, 23, /*print_empty*/ 0, /*no_clock*/ 1); + if (logdev_start) + printf_extrabits(bits, 24, 2, 0, logdev_start*64, row, major); + for (i = logdev_start; i <= logdev_end; i++) { + printf_lut_words(bits, row, major, 24, i*4); + printf_lut_words(bits, row, major, 24, i*4+2); + } + if (logdev_end < 15) + printf_extrabits(bits, 24, 2, i*64 + XC6_HCLK_BITS, (15-logdev_end)*64, row, major); + + // X devices + printf_frames(&bits[26*FRAME_SIZE], /*max_frames*/ 1, + row, major, 26, /*print_empty*/ 0, /*no_clock*/ 1); + if (logdev_start) + printf_extrabits(bits, 27, 4, 0, logdev_start*64, row, major); + for (i = logdev_start; i <= logdev_end; i++) { + printf_lut_words(bits, row, major, 27, i*4); + printf_lut_words(bits, row, major, 29, i*4); + printf_lut_words(bits, row, major, 27, i*4+2); + printf_lut_words(bits, row, major, 29, i*4+2); + } + if (logdev_end < 15) + printf_extrabits(bits, 27, 4, i*64 + XC6_HCLK_BITS, (15-logdev_end)*64, row, major); + } else if (xci->majors[major].flags & (XC_MAJ_XL|XC_MAJ_CENTER)) { + + // L devices + if (logdev_start) + printf_extrabits(bits, 21, 4, 0, logdev_start*64, row, major); + for (i = logdev_start; i <= logdev_end; i++) { + printf_lut_words(bits, row, major, 21, i*4); + printf_lut_words(bits, row, major, 23, i*4); + printf_lut_words(bits, row, major, 21, i*4+2); + printf_lut_words(bits, row, major, 23, i*4+2); + } + if (logdev_end < 15) + printf_extrabits(bits, 21, 4, i*64 + XC6_HCLK_BITS, (15-logdev_end)*64, row, major); + printf_frames(&bits[25*FRAME_SIZE], /*max_frames*/ 1, + row, major, 25, /*print_empty*/ 0, /*no_clock*/ 1); + // X devices + if (logdev_start) + printf_extrabits(bits, 26, 4, 0, logdev_start*64, row, major); + for (i = logdev_start; i <= logdev_end; i++) { + printf_lut_words(bits, row, major, 26, i*4); + printf_lut_words(bits, row, major, 28, i*4); + printf_lut_words(bits, row, major, 26, i*4+2); + printf_lut_words(bits, row, major, 28, i*4+2); + } + if (logdev_end < 15) + printf_extrabits(bits, 26, 4, i*64 + XC6_HCLK_BITS, (15-logdev_end)*64, row, major); + + // one extra minor in the center major + if (xci->majors[major].flags & XC_MAJ_CENTER) { + if (xci->majors[major].minors != 31) HERE(); + printf_frames(&bits[30*FRAME_SIZE], /*max_frames*/ 1, + row, major, 30, /*print_empty*/ 0, /*no_clock*/ 1); + } else { // XL + if (xci->majors[major].minors != 30) HERE(); + } + } else + HERE(); + + return 0; +} + typedef struct ramb16_cfg { uint8_t byte[64]; @@ -714,252 +851,6 @@ static void print_ramb16_cfg(ramb16_cfg_t* cfg) printf("}\n"); } -static void printf_routing_2minors(const uint8_t* bits, int row, int major, - int even_minor) -{ - int y, i, hclk; - uint64_t u64_0, u64_1; - char bit_str[129]; - - bit_str[128] = 0; - for (y = 0; y < 16; y++) { - hclk = (y < 8) ? 0 : 2; - u64_0 = frame_get_u64(bits + y*8 + hclk); - u64_1 = frame_get_u64(bits + y*8 + hclk + FRAME_SIZE); - if (u64_0 || u64_1) { - for (i = 0; i < 128; i++) - bit_str[i] = '0'; - for (i = 0; i < 64; i++) { - if (u64_0 & (1ULL << i)) - bit_str[i*2] = '1'; - if (u64_1 & (1ULL << i)) - bit_str[i*2+1] = '1'; - } - // todo: might be nice to add the tile y and x here - printf("r%i ma%i v64_%i mip%i %s\n", - row, major, y, even_minor, bit_str); - } - } -} - -static void printf_v64_mi20(const uint8_t* bits, int row, int major) -{ - int y, i, num_bits_on, hclk; - uint64_t u64; - char bit_str[65]; - - bit_str[64] = 0; - for (y = 0; y < 16; y++) { - hclk = (y < 8) ? 0 : 2; - u64 = frame_get_u64(bits + y*8 + hclk); - if (u64) { - for (i = 0; i < 64; i++) - bit_str[i] = (u64 & (1ULL << i)) ? '1' : '0'; - printf("r%i ma%i v64_%i mi20 %s\n", - row, major, y, bit_str); - num_bits_on = 0; - for (i = 0; i < 64; i++) { - if (u64 & (1ULL << i)) - num_bits_on++; - } - // this is most helpful for bits 24:39 which are - // part of logic device configuration - if (num_bits_on < 5) { - for (i = 0; i < 64; i++) { - if (!(u64 & (1ULL << i))) - continue; - printf("r%i ma%i v64_%i mi20 b%i\n", - row, major, y, i); - } - } - } - } -} - -static void printf_word(int word, int row, int major, int minor, int v16_i) -{ - char bit_str[XC6_WORD_BITS]; - int i, num_bits_on; - - num_bits_on = 0; - for (i = 0; i < XC6_WORD_BITS; i++) { - if (word & (1ULL << i)) - num_bits_on++; - } - if (num_bits_on >= 1 && num_bits_on <= 4) { - printf("r%i ma%i v%i_%i mi%i", row, - major, XC6_WORD_BITS, v16_i, minor); - for (i = 0; i < XC6_WORD_BITS; i++) { - if (word & (1ULL << i)) - printf(" b%i", i); - } - printf("\n"); - } else { - for (i = 0; i < XC6_WORD_BITS; i++) - bit_str[i] = (word & (1ULL << i)) ? '1' : '0'; - printf("r%i ma%i v%i_%i mi%i %.*s\n", row, - major, XC6_WORD_BITS, v16_i, minor, XC6_WORD_BITS, bit_str); - } -} - -static void printf_lut_words(const uint8_t *major_bits, int row, int major, int minor, int v16_i) -{ - int off_in_frame, w; - - off_in_frame = v16_i*XC6_WORD_BYTES; - if (off_in_frame >= XC6_HCLK_POS) - off_in_frame += XC6_HCLK_BYTES; - - w = frame_get_pinword(&major_bits[minor*FRAME_SIZE + off_in_frame]); - if (w) printf_word(w, row, major, minor, v16_i); - - w = frame_get_pinword(&major_bits[minor*FRAME_SIZE + off_in_frame + XC6_WORD_BYTES]); - if (w) printf_word(w, row, major, minor, v16_i+1); - - w = frame_get_pinword(&major_bits[(minor+1)*FRAME_SIZE + off_in_frame]); - if (w) printf_word(w, row, major, minor+1, v16_i); - - w = frame_get_pinword(&major_bits[(minor+1)*FRAME_SIZE + off_in_frame + XC6_WORD_BYTES]); - if (w) printf_word(w, row, major, minor+1, v16_i+1); -} - -static int dump_maj_zero(const uint8_t* bits, int row, int major) -{ - int minor; - - for (minor = 0; minor < get_major_minors(XC6SLX9, major); minor++) - printf_clock(&bits[minor*FRAME_SIZE], row, major, minor); - for (minor = 0; minor < get_major_minors(XC6SLX9, major); minor++) - printf_frames(&bits[minor*FRAME_SIZE], /*max_frames*/ 1, - row, major, minor, /*print_empty*/ 0, /*no_clock*/ 1); - return 0; -} - -static int dump_maj_left(const uint8_t* bits, int row, int major) -{ - int minor; - - for (minor = 0; minor < get_major_minors(XC6SLX9, major); minor++) - printf_clock(&bits[minor*FRAME_SIZE], row, major, minor); - for (minor = 0; minor < get_major_minors(XC6SLX9, major); minor++) - printf_frames(&bits[minor*FRAME_SIZE], /*max_frames*/ 1, - row, major, minor, /*print_empty*/ 0, /*no_clock*/ 1); - return 0; -} - -static int dump_maj_right(const uint8_t* bits, int row, int major) -{ - int minor; - - for (minor = 0; minor < get_major_minors(XC6SLX9, major); minor++) - printf_clock(&bits[minor*FRAME_SIZE], row, major, minor); - for (minor = 0; minor < get_major_minors(XC6SLX9, major); minor++) - printf_frames(&bits[minor*FRAME_SIZE], /*max_frames*/ 1, - row, major, minor, /*print_empty*/ 0, /*no_clock*/ 1); - return 0; -} - -static int dump_maj_logic(const uint8_t* bits, int row, int major) -{ - const struct xc_die* xci = xc_die_info(XC6SLX9); - int minor, i, logdev_start, logdev_end; - - for (minor = 0; minor < xci->majors[major].minors; minor++) - printf_clock(&bits[minor*FRAME_SIZE], row, major, minor); - - // 0:19 routing minor pairs - for (i = 0; i < 10; i++) - printf_routing_2minors(&bits[i*2*FRAME_SIZE], row, major, i*2); - - // mi20 as 64-char 0/1 string - printf_v64_mi20(&bits[20*FRAME_SIZE], row, major); - - logdev_start = 0; - logdev_end = 15; - if (xci->majors[major].flags & XC_MAJ_TOP_BOT_IO) { - if (row == xc_die_info(XC6SLX9)->num_rows-1) - logdev_start += TOPBOT_IO_ROWS; - else if (!row) - logdev_end -= TOPBOT_IO_ROWS; - } - - if (xci->majors[major].flags & XC_MAJ_XM) { - if (xci->majors[major].minors != 31) HERE(); - - // M devices - if (logdev_start) - printf_extrabits(bits, 21, 2, 0, logdev_start*64, row, major); - for (i = logdev_start; i <= logdev_end; i++) { - printf_lut_words(bits, row, major, 21, i*4); - printf_lut_words(bits, row, major, 21, i*4+2); - } - if (logdev_end < 15) - printf_extrabits(bits, 21, 2, i*64 + XC6_HCLK_BITS, (15-logdev_end)*64, row, major); - printf_frames(&bits[23*FRAME_SIZE], /*max_frames*/ 1, - row, major, 23, /*print_empty*/ 0, /*no_clock*/ 1); - if (logdev_start) - printf_extrabits(bits, 24, 2, 0, logdev_start*64, row, major); - for (i = logdev_start; i <= logdev_end; i++) { - printf_lut_words(bits, row, major, 24, i*4); - printf_lut_words(bits, row, major, 24, i*4+2); - } - if (logdev_end < 15) - printf_extrabits(bits, 24, 2, i*64 + XC6_HCLK_BITS, (15-logdev_end)*64, row, major); - - // X devices - printf_frames(&bits[26*FRAME_SIZE], /*max_frames*/ 1, - row, major, 26, /*print_empty*/ 0, /*no_clock*/ 1); - if (logdev_start) - printf_extrabits(bits, 27, 4, 0, logdev_start*64, row, major); - for (i = logdev_start; i <= logdev_end; i++) { - printf_lut_words(bits, row, major, 27, i*4); - printf_lut_words(bits, row, major, 29, i*4); - printf_lut_words(bits, row, major, 27, i*4+2); - printf_lut_words(bits, row, major, 29, i*4+2); - } - if (logdev_end < 15) - printf_extrabits(bits, 27, 4, i*64 + XC6_HCLK_BITS, (15-logdev_end)*64, row, major); - } else if (xci->majors[major].flags & (XC_MAJ_XL|XC_MAJ_CENTER)) { - - // L devices - if (logdev_start) - printf_extrabits(bits, 21, 4, 0, logdev_start*64, row, major); - for (i = logdev_start; i <= logdev_end; i++) { - printf_lut_words(bits, row, major, 21, i*4); - printf_lut_words(bits, row, major, 23, i*4); - printf_lut_words(bits, row, major, 21, i*4+2); - printf_lut_words(bits, row, major, 23, i*4+2); - } - if (logdev_end < 15) - printf_extrabits(bits, 21, 4, i*64 + XC6_HCLK_BITS, (15-logdev_end)*64, row, major); - printf_frames(&bits[25*FRAME_SIZE], /*max_frames*/ 1, - row, major, 25, /*print_empty*/ 0, /*no_clock*/ 1); - // X devices - if (logdev_start) - printf_extrabits(bits, 26, 4, 0, logdev_start*64, row, major); - for (i = logdev_start; i <= logdev_end; i++) { - printf_lut_words(bits, row, major, 26, i*4); - printf_lut_words(bits, row, major, 28, i*4); - printf_lut_words(bits, row, major, 26, i*4+2); - printf_lut_words(bits, row, major, 28, i*4+2); - } - if (logdev_end < 15) - printf_extrabits(bits, 26, 4, i*64 + XC6_HCLK_BITS, (15-logdev_end)*64, row, major); - - // one extra minor in the center major - if (xci->majors[major].flags & XC_MAJ_CENTER) { - if (xci->majors[major].minors != 31) HERE(); - printf_frames(&bits[30*FRAME_SIZE], /*max_frames*/ 1, - row, major, 30, /*print_empty*/ 0, /*no_clock*/ 1); - } else { // XL - if (xci->majors[major].minors != 30) HERE(); - } - } else - HERE(); - - return 0; -} - static int dump_maj_bram(const uint8_t* bits, int row, int major) { ramb16_cfg_t ramb16_cfg[4]; @@ -975,6 +866,14 @@ static int dump_maj_bram(const uint8_t* bits, int row, int major) // mi20 as 64-char 0/1 string printf_v64_mi20(&bits[20*FRAME_SIZE], row, major); +// todo: minors 21-24 +// r%i ma%i v16_%i mi%i pins 0000000000000000 0xFFFF +// r%i ma%i v16_%i mi%i pin 12 +// r%i ma%i v16_%i mi%i bits 0000000000000000 0xFFFF +// r%i ma%i v16_%i mi%i bit 12 +// v16_clk + +#if 0 printf_frames(&bits[21*FRAME_SIZE], /*max_frames*/ 1, row, major, 21, /*print_empty*/ 0, /*no_clock*/ 1); printf_frames(&bits[22*FRAME_SIZE], /*max_frames*/ 1, @@ -1001,6 +900,7 @@ static int dump_maj_bram(const uint8_t* bits, int row, int major) row, major, i); print_ramb16_cfg(&ramb16_cfg[i]); } +#endif return 0; } diff --git a/libs/helper.c b/libs/helper.c index 265fea4..0a75e2d 100644 --- a/libs/helper.c +++ b/libs/helper.c @@ -90,10 +90,6 @@ void atom_remove(char *bits, const cfg_atom_t *atom) } } -// for an equivalent schematic, see lut.svg -const int lut_base_vars[6] = {0 /* A1 */, 1, 0 /* A3 - not used */, - 0, 0, 1 /* A6 */}; - static int bool_nextlen(const char *expr, int len) { int i, depth; @@ -558,25 +554,30 @@ void frame_set_pinword(void* bits, int v) ((uint8_t*)bits)[1] = v & 0xFF; } -uint8_t frame_get_u8(const uint8_t *frame_d) +uint8_t mirror_bits(uint8_t v) { - uint8_t v = 0; + uint8_t mv = 0; int i; for (i = 0; i < 8; i++) - if (*frame_d & (1<> 8)) << 8 | mirror_bits(pinword & 0xFF); } // see ug380, table 2-5, bit ordering uint16_t frame_get_u16(const uint8_t *frame_d) { uint16_t high_b, low_b; - high_b = frame_get_u8(frame_d); - low_b = frame_get_u8(frame_d+1); + high_b = mirror_bits(frame_d[0]); + low_b = mirror_bits(frame_d[1]); return (high_b << 8) | low_b; } -uint32_t frame_get_u32(const uint8_t *frame_d) +static uint32_t frame_get_u32(const uint8_t *frame_d) { uint32_t high_w, low_w; low_w = frame_get_u16(frame_d); @@ -592,27 +593,16 @@ uint64_t frame_get_u64(const uint8_t *frame_d) return (high_w << 32) | low_w; } -void frame_set_u8(uint8_t *frame_d, uint8_t v) -{ - int i; - for (i = 0; i < 8; i++) { - if (v & (1<<(7-i))) - (*frame_d) |= 1<> 8; low_b = v & 0xFF; - frame_set_u8(frame_d, high_b); - frame_set_u8(frame_d+1, low_b); + frame_d[0] = mirror_bits(high_b); + frame_d[1] = mirror_bits(low_b); } -void frame_set_u32(uint8_t* frame_d, uint32_t v) +static void frame_set_u32(uint8_t* frame_d, uint32_t v) { uint32_t high_w, low_w; high_w = v >> 16; @@ -788,6 +778,115 @@ void write_lut64(uint8_t* two_minors, int off_in_frame, uint64_t u64) } } +void printf_routing_2minors(const uint8_t* bits, int row, int major, + int even_minor) +{ + int y, i, hclk; + uint64_t u64_0, u64_1; + char bit_str[129]; + + bit_str[128] = 0; + for (y = 0; y < 16; y++) { + hclk = (y < 8) ? 0 : 2; + u64_0 = frame_get_u64(bits + y*8 + hclk); + u64_1 = frame_get_u64(bits + y*8 + hclk + FRAME_SIZE); + if (u64_0 || u64_1) { + for (i = 0; i < 128; i++) + bit_str[i] = '0'; + for (i = 0; i < 64; i++) { + if (u64_0 & (1ULL << i)) + bit_str[i*2] = '1'; + if (u64_1 & (1ULL << i)) + bit_str[i*2+1] = '1'; + } + // todo: might be nice to add the tile y and x here + printf("r%i ma%i v64_%i mip%i %s\n", + row, major, y, even_minor, bit_str); + } + } +} + +void printf_v64_mi20(const uint8_t* bits, int row, int major) +{ + int y, i, num_bits_on, hclk; + uint64_t u64; + char bit_str[65]; + + bit_str[64] = 0; + for (y = 0; y < 16; y++) { + hclk = (y < 8) ? 0 : 2; + u64 = frame_get_u64(bits + y*8 + hclk); + if (u64) { + for (i = 0; i < 64; i++) + bit_str[i] = (u64 & (1ULL << i)) ? '1' : '0'; + printf("r%i ma%i v64_%i mi20 %s\n", + row, major, y, bit_str); + num_bits_on = 0; + for (i = 0; i < 64; i++) { + if (u64 & (1ULL << i)) + num_bits_on++; + } + // this is most helpful for bits 24:39 which are + // part of logic device configuration + if (num_bits_on < 5) { + for (i = 0; i < 64; i++) { + if (!(u64 & (1ULL << i))) + continue; + printf("r%i ma%i v64_%i mi20 b%i\n", + row, major, y, i); + } + } + } + } +} + +void printf_word(int word, int row, int major, int minor, int v16_i) +{ + char bit_str[XC6_WORD_BITS]; + int i, num_bits_on; + + num_bits_on = 0; + for (i = 0; i < XC6_WORD_BITS; i++) { + if (word & (1ULL << i)) + num_bits_on++; + } + if (num_bits_on >= 1 && num_bits_on <= 4) { + printf("r%i ma%i v%i_%i mi%i", row, + major, XC6_WORD_BITS, v16_i, minor); + for (i = 0; i < XC6_WORD_BITS; i++) { + if (word & (1ULL << i)) + printf(" b%i", i); + } + printf("\n"); + } else { + for (i = 0; i < XC6_WORD_BITS; i++) + bit_str[i] = (word & (1ULL << i)) ? '1' : '0'; + printf("r%i ma%i v%i_%i mi%i %.*s\n", row, + major, XC6_WORD_BITS, v16_i, minor, XC6_WORD_BITS, bit_str); + } +} + +void printf_lut_words(const uint8_t *major_bits, int row, int major, int minor, int v16_i) +{ + int off_in_frame, w; + + off_in_frame = v16_i*XC6_WORD_BYTES; + if (off_in_frame >= XC6_HCLK_POS) + off_in_frame += XC6_HCLK_BYTES; + + w = frame_get_pinword(&major_bits[minor*FRAME_SIZE + off_in_frame]); + if (w) printf_word(w, row, major, minor, v16_i); + + w = frame_get_pinword(&major_bits[minor*FRAME_SIZE + off_in_frame + XC6_WORD_BYTES]); + if (w) printf_word(w, row, major, minor, v16_i+1); + + w = frame_get_pinword(&major_bits[(minor+1)*FRAME_SIZE + off_in_frame]); + if (w) printf_word(w, row, major, minor+1, v16_i); + + w = frame_get_pinword(&major_bits[(minor+1)*FRAME_SIZE + off_in_frame + XC6_WORD_BYTES]); + if (w) printf_word(w, row, major, minor+1, v16_i+1); +} + int get_vm_mb(void) { FILE* statusf = fopen("/proc/self/status", "r"); diff --git a/libs/helper.h b/libs/helper.h index aa8a2b9..9ee8b6c 100644 --- a/libs/helper.h +++ b/libs/helper.h @@ -87,14 +87,12 @@ void frame_set_bit(uint8_t* frame_d, int bit); int frame_get_pinword(const void *bits); void frame_set_pinword(void* bits, int v); -uint8_t frame_get_u8(const uint8_t* frame_d); -uint16_t frame_get_u16(const uint8_t* frame_d); -uint32_t frame_get_u32(const uint8_t* frame_d); -uint64_t frame_get_u64(const uint8_t* frame_d); +uint8_t mirror_bits(uint8_t v); +int pinword_to_cpu(int pinword); -void frame_set_u8(uint8_t* frame_d, uint8_t v); +uint16_t frame_get_u16(const uint8_t* frame_d); +uint64_t frame_get_u64(const uint8_t* frame_d); void frame_set_u16(uint8_t* frame_d, uint16_t v); -void frame_set_u32(uint8_t* frame_d, uint32_t v); void frame_set_u64(uint8_t* frame_d, uint64_t v); uint64_t frame_get_lut64(int lut_pos, const uint8_t *two_minors, int v16); @@ -112,6 +110,12 @@ int clb_empty(uint8_t* maj_bits, int idx); void printf_extrabits(const uint8_t* maj_bits, int start_minor, int num_minors, int start_bit, int num_bits, int row, int major); void write_lut64(uint8_t* two_minors, int off_in_frame, uint64_t u64); +void printf_routing_2minors(const uint8_t* bits, int row, int major, + int even_minor); +void printf_v64_mi20(const uint8_t* bits, int row, int major); +void printf_word(int word, int row, int major, int minor, int v16_i); +void printf_lut_words(const uint8_t *major_bits, int row, int major, + int minor, int v16_i); int get_vm_mb(void); int get_random(void);