a little DSP support, lots of reading and thinking

This commit is contained in:
Wolfgang Spraul 2012-07-08 03:47:59 +02:00
parent 492a8bbae4
commit aedf4bd4b4
4 changed files with 87 additions and 43 deletions

5
LINKS Normal file
View File

@ -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/

114
bit2txt.c
View File

@ -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);

View File

@ -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);
}
}

View File

@ -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);