diff --git a/LINKS b/LINKS new file mode 100644 index 0000000..b1e8c8b --- /dev/null +++ b/LINKS @@ -0,0 +1,5 @@ +Collecting links which may be helpful later + +http://en.wikipedia.org/wiki/Wikipedia:WikiProject_Electronics/Programs +http://qfsm.sourceforge.net/about.html +http://www.texample.net/tikz/examples/timing-diagram/ diff --git a/bit2txt.c b/bit2txt.c index f8dccff..3d9422d 100644 --- a/bit2txt.c +++ b/bit2txt.c @@ -85,7 +85,7 @@ const char* cmds[] = typedef enum { MAJ_EXTRA = -1, - MAJ_CLB, MAJ_BRAM + MAJ_CLB, MAJ_BRAM, MAJ_DSP } major_t; typedef struct @@ -97,14 +97,15 @@ typedef struct const MAJOR majors[] = { - /* 0 */ { 0, 4, MAJ_EXTRA }, // clock? + /* 0 */ { 0, 4, MAJ_EXTRA }, // 505 bytes = middle 8-bit + // for each minor? /* 1 */ { 0, 30, MAJ_EXTRA }, /* 2 */ { "clb", 31, MAJ_CLB }, /* 3 */ { 0, 30, MAJ_EXTRA }, /* 4 */ { "bram", 25, MAJ_BRAM }, /* 5 */ { "clb", 31, MAJ_CLB }, /* 6 */ { 0, 30, MAJ_EXTRA }, - /* 7 */ { 0, 24, MAJ_EXTRA }, // dsp? + /* 7 */ { "dsp", 24, MAJ_DSP }, /* 8 */ { "clb", 31, MAJ_CLB }, /* 9 */ { 0, 31, MAJ_EXTRA }, /* 10 */ { "clb", 31, MAJ_CLB }, @@ -526,72 +527,80 @@ void printf_clb(uint8_t* maj_bits, int row, int major) frame_off = i*64; if (i >= 8) frame_off += 16; // skip clock bits for idx >= 8 - printf("r%i ma%i clb i%i\n", row, major, i-start); - printf("{\n"); // LUTs lut64 = read_lut64(&maj_bits[24*130], frame_off+32); - { int logic_base[6] = {0,1,0,0,1,0}; - lut_str = lut2bool(lut64, 64, &logic_base, 1 /* flip_b0 */); } + { int logic_base[6] = {0,1,0,0,1,0}; + lut_str = lut2bool(lut64, 64, &logic_base, 1 /* flip_b0 */); } if (*lut_str) - printf(" s0_A6LUT \"%s\"\n", lut_str); + printf("r%i ma%i clb i%i s0_A6LUT \"%s\"\n", + row, major, i-start, lut_str); lut64 = read_lut64(&maj_bits[21*130], frame_off+32); - { int logic_base[6] = {1,1,0,1,0,1}; - lut_str = lut2bool(lut64, 64, &logic_base, 1 /* flip_b0 */); } + { int logic_base[6] = {1,1,0,1,0,1}; + lut_str = lut2bool(lut64, 64, &logic_base, 1 /* flip_b0 */); } if (*lut_str) - printf(" s0_B6LUT \"%s\"\n", lut_str); + printf("r%i ma%i clb i%i s0_B6LUT \"%s\"\n", + row, major, i-start, lut_str); lut64 = read_lut64(&maj_bits[24*130], frame_off); - { int logic_base[6] = {0,1,0,0,1,0}; - lut_str = lut2bool(lut64, 64, &logic_base, 1 /* flip_b0 */); } + { int logic_base[6] = {0,1,0,0,1,0}; + lut_str = lut2bool(lut64, 64, &logic_base, 1 /* flip_b0 */); } if (*lut_str) - printf(" s0_C6LUT \"%s\"\n", lut_str); + printf("r%i ma%i clb i%i s0_C6LUT \"%s\"\n", + row, major, i-start, lut_str); lut64 = read_lut64(&maj_bits[21*130], frame_off); - { int logic_base[6] = {1,1,0,1,0,1}; - lut_str = lut2bool(lut64, 64, &logic_base, 1 /* flip_b0 */); } + { int logic_base[6] = {1,1,0,1,0,1}; + lut_str = lut2bool(lut64, 64, &logic_base, 1 /* flip_b0 */); } if (*lut_str) - printf(" s0_D6LUT \"%s\"\n", lut_str); + printf("r%i ma%i clb i%i s0_D6LUT \"%s\"\n", + row, major, i-start, lut_str); lut64 = read_lut64(&maj_bits[27*130], frame_off+32); - { int logic_base[6] = {1,1,0,1,1,0}; - lut_str = lut2bool(lut64, 64, &logic_base, 0 /* flip_b0 */); } + { int logic_base[6] = {1,1,0,1,1,0}; + lut_str = lut2bool(lut64, 64, &logic_base, 0 /* flip_b0 */); } if (*lut_str) - printf(" s1_A6LUT \"%s\"\n", lut_str); + printf("r%i ma%i clb i%i s1_A6LUT \"%s\"\n", + row, major, i-start, lut_str); lut64 = read_lut64(&maj_bits[29*130], frame_off+32); - { int logic_base[6] = {1,1,0,1,1,0}; - lut_str = lut2bool(lut64, 64, &logic_base, 0 /* flip_b0 */); } + { int logic_base[6] = {1,1,0,1,1,0}; + lut_str = lut2bool(lut64, 64, &logic_base, 0 /* flip_b0 */); } if (*lut_str) - printf(" s1_B6LUT \"%s\"\n", lut_str); + printf("r%i ma%i clb i%i s1_B6LUT \"%s\"\n", + row, major, i-start, lut_str); lut64 = read_lut64(&maj_bits[27*130], frame_off); - { int logic_base[6] = {0,1,0,0,0,1}; - lut_str = lut2bool(lut64, 64, &logic_base, 0 /* flip_b0 */); } + { int logic_base[6] = {0,1,0,0,0,1}; + lut_str = lut2bool(lut64, 64, &logic_base, 0 /* flip_b0 */); } if (*lut_str) - printf(" s1_C6LUT \"%s\"\n", lut_str); + printf("r%i ma%i clb i%i s1_C6LUT \"%s\"\n", + row, major, i-start, lut_str); lut64 = read_lut64(&maj_bits[29*130], frame_off); - { int logic_base[6] = {0,1,0,0,0,1}; - lut_str = lut2bool(lut64, 64, &logic_base, 0 /* flip_b0 */); } + { int logic_base[6] = {0,1,0,0,0,1}; + lut_str = lut2bool(lut64, 64, &logic_base, 0 /* flip_b0 */); } if (*lut_str) - printf(" s1_D6LUT \"%s\"\n", lut_str); + printf("r%i ma%i clb i%i s1_D6LUT \"%s\"\n", + row, major, i-start, lut_str); // bits for (j = 0; j < 64; j++) { if (bit_set(&maj_bits[20*130], frame_off + j)) - printf(" mi20 b%i\n", j); + printf("r%i ma%i clb i%i mi20 bit %i\n", + row, major, i-start, j); } for (j = 0; j < 64; j++) { if (bit_set(&maj_bits[23*130], frame_off + j)) - printf(" mi23 b%i\n", j); + printf("r%i ma%i clb i%i mi23 bit %i\n", + row, major, i-start, j); } for (j = 0; j < 64; j++) { if (bit_set(&maj_bits[26*130], frame_off + j)) - printf(" mi26 b%i\n", j); + printf("r%i ma%i clb i%i mi26 bit %i\n", + row, major, i-start, j); } - printf("}\n"); } } @@ -605,7 +614,35 @@ void printf_bits(uint8_t* bits, int bits_len, int idcode) printf("\n"); for (row = 0; row < 4; row++) { for (major = 0; major < 18; major++) { - if (majors[major].type == MAJ_CLB) { + if (majors[major].type == MAJ_DSP) { + int last_extra_minor; + + if (!row || row == 3) + last_extra_minor = 23; + else + last_extra_minor = 21; + minor = 0; + while (minor <= last_extra_minor) { + minor += printf_frames(&bits[off + +minor*130], 31 - minor, row, + major, minor, g_cmd_info); + } + + // clock + for (; minor < 24; minor++) + printf_clock(&bits[off+minor*130], + row, major, minor); + + for (i = 0; i < 4; i++) { + for (minor = last_extra_minor+1; minor < 24; + minor++) { + for (j = 0; j < 256; j++) { + if (bit_set(&bits[off+minor*130], i*256 + ((i>=2)?16:0) + j)) + printf("r%i ma%i dsp i%i mi%i bit %i\n", row, major, i, minor, i*256+j); + } + } + } + } else if (majors[major].type == MAJ_CLB) { minor = 0; while (minor < 20) { minor += printf_frames(&bits[off @@ -619,10 +656,10 @@ void printf_bits(uint8_t* bits, int bits_len, int idcode) row, major, minor); // extra bits at bottom of row0 and top of row3 if (row == 3) - printf_singlebits(&bits[off], 20, 11, + printf_extrabits(&bits[off], 20, 11, 0, 128, row, major); else if (!row) - printf_singlebits(&bits[off], 20, 11, + printf_extrabits(&bits[off], 20, 11, 14*64 + 16, 128, row, major); // clbs @@ -657,7 +694,8 @@ void printf_bits(uint8_t* bits, int bits_len, int idcode) } if (j >= 64) continue; - printf("r%i m%i i%i ramb16\n", row, major, i); + printf("r%i ma%i ramb16 i%i\n", + row, major, i); print_ramb16_cfg(&ramb16_cfg[i]); } } else { @@ -688,7 +726,7 @@ void printf_bits(uint8_t* bits, int bits_len, int idcode) newline = 1; printf("\n"); } - printf("br%i i%i ramb16 data\n", row, i); + printf("br%i ramb16 i%i\n", row, i); printf("{\n"); off = bram_data_start + row*144*130 + i*18*130; printf_ramb16_data(bits, off); diff --git a/helper.c b/helper.c index d538eda..961f366 100644 --- a/helper.c +++ b/helper.c @@ -552,7 +552,7 @@ int printf_frames(uint8_t* bits, int max_frames, if (row < 0) sprintf(prefix, "f%i ", abs(row)); else - sprintf(prefix, "r%i m%i-%i ", row, major, minor); + sprintf(prefix, "r%i ma%i extra mi%i ", row, major, minor); if (is_empty(bits, 130)) { for (i = 1; i < max_frames; i++) { @@ -587,7 +587,8 @@ void printf_clock(uint8_t* frame, int row, int major, int minor) int i; for (i = 0; i < 16; i++) { if (bit_set(frame, 512 + i)) - printf("r%i m%i-%i clock %i\n", row, major, minor, i); + printf("r%i ma%i mi%i clock %i\n", + row, major, minor, i); } } @@ -607,7 +608,7 @@ int clb_empty(uint8_t* maj_bits, int idx) return 1; } -void printf_singlebits(uint8_t* maj_bits, int start_minor, int num_minors, +void printf_extrabits(uint8_t* maj_bits, int start_minor, int num_minors, int start_bit, int num_bits, int row, int major) { int minor, bit; @@ -615,7 +616,7 @@ void printf_singlebits(uint8_t* maj_bits, int start_minor, int num_minors, for (minor = start_minor; minor < start_minor + num_minors; minor++) { for (bit = start_bit; bit < start_bit + num_bits; bit++) { if (bit_set(&maj_bits[minor*130], bit)) - printf("r%i m%i-%i b%i\n", + printf("r%i ma%i extra mi%i bit %i\n", row, major, minor, bit); } } diff --git a/helper.h b/helper.h index 6921eee..990e7d0 100644 --- a/helper.h +++ b/helper.h @@ -64,6 +64,6 @@ int printf_frames(uint8_t* bits, int max_frames, int row, int major, int minor, int print_empty); void printf_clock(uint8_t* frame, int row, int major, int minor); int clb_empty(uint8_t* maj_bits, int idx); -void printf_singlebits(uint8_t* maj_bits, int start_minor, int num_minors, +void printf_extrabits(uint8_t* maj_bits, int start_minor, int num_minors, int start_bit, int num_bits, int row, int major); uint64_t read_lut64(uint8_t* two_minors, int off_in_frame);