minor cleanup
This commit is contained in:
parent
5b961b1dfd
commit
153e764bf1
38
bit2fp.c
38
bit2fp.c
|
@ -9,32 +9,40 @@
|
|||
#include "floorplan.h"
|
||||
#include "bit.h"
|
||||
|
||||
int main(int argc, char** argv)
|
||||
static void help_exit(int argc, char **argv)
|
||||
{
|
||||
struct fpga_model model;
|
||||
int bit_header, bit_regs, bit_crc, fp_header, pull_model, file_arg, flags;
|
||||
int rc = -1;
|
||||
struct fpga_config config;
|
||||
|
||||
// parameters
|
||||
if (argc < 2) {
|
||||
fprintf(stderr,
|
||||
"\n"
|
||||
"%s - bitstream to floorplan\n"
|
||||
"Usage: %s [--bit-header] [--bit-regs] [--bit-crc] [--no-model]\n"
|
||||
" %*s [--no-fp-header] <bitstream_file>\n"
|
||||
"Usage: %s [--help] [--verbose] [--bit-header] [--bit-regs] [--bit-crc]\n"
|
||||
" %*s [--no-model] [--no-fp-header] <bitstream_file>\n"
|
||||
"\n", argv[0], argv[0], (int) strlen(argv[0]), "");
|
||||
goto fail;
|
||||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
struct fpga_model model;
|
||||
int bit_header, bit_regs, bit_crc, fp_header, pull_model, file_arg;
|
||||
int verbose, flags, rc = -1;
|
||||
struct fpga_config config;
|
||||
|
||||
// parameters
|
||||
if (argc < 2) help_exit(argc, argv);
|
||||
verbose = 0;
|
||||
bit_header = 0;
|
||||
bit_regs = 0;
|
||||
bit_crc = 0;
|
||||
pull_model = 1;
|
||||
fp_header = 1;
|
||||
file_arg = 1;
|
||||
while (file_arg < argc
|
||||
&& !strncmp(argv[file_arg], "--", 2)) {
|
||||
if (!strcmp(argv[file_arg], "--bit-header"))
|
||||
while (file_arg < argc && !strncmp(argv[file_arg], "--", 2)) {
|
||||
if (!strcmp(argv[file_arg], "--help"))
|
||||
help_exit(argc, argv);
|
||||
|
||||
if (!strcmp(argv[file_arg], "--verbose"))
|
||||
verbose = 1;
|
||||
else if (!strcmp(argv[file_arg], "--bit-header"))
|
||||
bit_header = 1;
|
||||
else if (!strcmp(argv[file_arg], "--bit-regs"))
|
||||
bit_regs = 1;
|
||||
|
@ -55,7 +63,7 @@ int main(int argc, char** argv)
|
|||
fprintf(stderr, "Error opening %s.\n", argv[file_arg]);
|
||||
goto fail;
|
||||
}
|
||||
rc = read_bitfile(&config, fbits);
|
||||
rc = read_bitfile(&config, fbits, verbose);
|
||||
fclose(fbits);
|
||||
if (rc) FAIL(rc);
|
||||
}
|
||||
|
|
|
@ -74,6 +74,8 @@ struct fpga_bits
|
|||
|
||||
struct fpga_config
|
||||
{
|
||||
int verbose_read;
|
||||
|
||||
char header_str[4][MAX_HEADER_STR_LEN];
|
||||
|
||||
int num_regs;
|
||||
|
@ -87,7 +89,7 @@ struct fpga_config
|
|||
uint32_t auto_crc;
|
||||
};
|
||||
|
||||
int read_bitfile(struct fpga_config* cfg, FILE* f);
|
||||
int read_bitfile(struct fpga_config* cfg, FILE* f, int verbose_read);
|
||||
|
||||
#define DUMP_HEADER_STR 0x0001
|
||||
#define DUMP_REGS 0x0002
|
||||
|
|
123
libs/bit_regs.c
123
libs/bit_regs.c
|
@ -29,12 +29,13 @@ static int parse_commands(struct fpga_config* config, uint8_t* d,
|
|||
|
||||
#define BITSTREAM_READ_PAGESIZE 4096
|
||||
|
||||
int read_bitfile(struct fpga_config* cfg, FILE* f)
|
||||
int read_bitfile(struct fpga_config* cfg, FILE* f, int verbose_read)
|
||||
{
|
||||
uint8_t* bit_data = 0;
|
||||
int rc, file_len, bit_len, bit_cur;
|
||||
|
||||
memset(cfg, 0, sizeof(*cfg));
|
||||
cfg->verbose_read = verbose_read;
|
||||
cfg->num_regs_before_bits = -1;
|
||||
cfg->idcode_reg = -1;
|
||||
cfg->FLR_reg = -1;
|
||||
|
@ -851,10 +852,45 @@ static void print_ramb16_cfg(ramb16_cfg_t* cfg)
|
|||
printf("}\n");
|
||||
}
|
||||
|
||||
static void printf_minors(int row, int major, int minor, int num_minors, const uint8_t *major_bits)
|
||||
static void printf_minor_diff(int row, int major, int minor,
|
||||
const uint8_t *old_minor_bits, const uint8_t *new_minor_bits)
|
||||
{
|
||||
int word_i, w_old, w_new;
|
||||
char v16_str[32];
|
||||
|
||||
// print words as pins (fpga bit ordering)
|
||||
for (word_i = 0; word_i < FRAME_SIZE/XC6_WORD_BYTES; word_i++) {
|
||||
if (word_i == XC6_HCLK_POS/XC6_WORD_BYTES)
|
||||
sprintf(v16_str, "v16_clk");
|
||||
else
|
||||
sprintf(v16_str, "v16_%i",
|
||||
word_i<XC6_HCLK_POS/XC6_WORD_BYTES ? word_i : word_i - 1);
|
||||
w_old = frame_get_pinword(&old_minor_bits[word_i*XC6_WORD_BYTES]);
|
||||
w_new = frame_get_pinword(&new_minor_bits[word_i*XC6_WORD_BYTES]);
|
||||
if (w_old == w_new) continue;
|
||||
printf("#I <r%i ma%i %s mi%i pin %s", row, major, v16_str, minor, fmt_word(w_old));
|
||||
printf("#I >r%i ma%i %s mi%i pin %s", row, major, v16_str, minor, fmt_word(w_new));
|
||||
}
|
||||
// print words as bits (cpu bit ordering)
|
||||
for (word_i = 0; word_i < FRAME_SIZE/XC6_WORD_BYTES; word_i++) {
|
||||
if (word_i == XC6_HCLK_POS/XC6_WORD_BYTES)
|
||||
sprintf(v16_str, "v16_clk");
|
||||
else
|
||||
sprintf(v16_str, "v16_%i",
|
||||
word_i<XC6_HCLK_POS/XC6_WORD_BYTES ? word_i : word_i - 1);
|
||||
w_old = frame_get_pinword(&old_minor_bits[word_i*XC6_WORD_BYTES]);
|
||||
w_new = frame_get_pinword(&new_minor_bits[word_i*XC6_WORD_BYTES]);
|
||||
if (w_old == w_new) continue;
|
||||
printf("#I <r%i ma%i %s mi%i cpu %s", row, major, v16_str, minor, fmt_word(pinword_to_cpu(w_old)));
|
||||
printf("#I >r%i ma%i %s mi%i cpu %s", row, major, v16_str, minor, fmt_word(pinword_to_cpu(w_new)));
|
||||
}
|
||||
}
|
||||
|
||||
static void printf_minors(int row, int major, int minor, int num_minors,
|
||||
const uint8_t *major_bits)
|
||||
{
|
||||
int word_i, minor_i, w;
|
||||
char v16_str[32], prefix[128];
|
||||
char v16_str[32];
|
||||
|
||||
// print words as pins (fpga bit ordering)
|
||||
for (word_i = 0; word_i < FRAME_SIZE/XC6_WORD_BYTES; word_i++) {
|
||||
|
@ -867,8 +903,7 @@ static void printf_minors(int row, int major, int minor, int num_minors, const u
|
|||
w = frame_get_pinword(&major_bits[minor_i*FRAME_SIZE
|
||||
+ word_i*XC6_WORD_BYTES]);
|
||||
if (!w) continue;
|
||||
sprintf(prefix, "r%i ma%i %s mi%i pin", row, major, v16_str, minor_i);
|
||||
printf_word(prefix, w);
|
||||
printf("r%i ma%i %s mi%i pin %s", row, major, v16_str, minor_i, fmt_word(w));
|
||||
}
|
||||
}
|
||||
// print words as bits (cpu bit ordering)
|
||||
|
@ -882,8 +917,7 @@ static void printf_minors(int row, int major, int minor, int num_minors, const u
|
|||
w = frame_get_pinword(&major_bits[minor_i*FRAME_SIZE
|
||||
+ word_i*XC6_WORD_BYTES]);
|
||||
if (!w) continue;
|
||||
sprintf(prefix, "r%i ma%i %s mi%i cpu", row, major, v16_str, minor_i);
|
||||
printf_word(prefix, pinword_to_cpu(w));
|
||||
printf("r%i ma%i %s mi%i cpu %s", row, major, v16_str, minor_i, fmt_word(pinword_to_cpu(w)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1055,7 +1089,7 @@ int dump_config(struct fpga_config* cfg, int flags)
|
|||
rc = dump_bram(cfg);
|
||||
if (rc) FAIL(rc);
|
||||
printf_type2(cfg->bits.d, cfg->bits.len,
|
||||
BRAM_DATA_START + BRAM_DATA_LEN, 896*2/8);
|
||||
BRAM_DATA_START + BRAM_DATA_LEN, IOB_WORDS*2/8);
|
||||
if (flags & DUMP_CRC)
|
||||
printf("auto-crc 0x%X\n", cfg->auto_crc);
|
||||
}
|
||||
|
@ -1138,10 +1172,10 @@ static int FAR_pos(int FAR_row, int FAR_major, int FAR_minor)
|
|||
if (FAR_row > 3 || FAR_major > 17
|
||||
|| FAR_minor >= get_major_minors(XC6SLX9, FAR_major))
|
||||
return -1;
|
||||
result = FAR_row * 505*130;
|
||||
result = FAR_row * 505*FRAME_SIZE;
|
||||
for (i = 0; i < FAR_major; i++)
|
||||
result += get_major_minors(XC6SLX9, i)*130;
|
||||
return result + FAR_minor*130;
|
||||
result += get_major_minors(XC6SLX9, i)*FRAME_SIZE;
|
||||
return result + FAR_minor*FRAME_SIZE;
|
||||
}
|
||||
|
||||
static int read_bits(struct fpga_config* cfg, uint8_t* d, int len,
|
||||
|
@ -1159,13 +1193,14 @@ static int read_bits(struct fpga_config* cfg, uint8_t* d, int len,
|
|||
if (cfg->idcode_reg == -1 || cfg->FLR_reg == -1
|
||||
|| (cfg->reg[cfg->idcode_reg].int_v != XC6SLX4
|
||||
&& cfg->reg[cfg->idcode_reg].int_v != XC6SLX9)
|
||||
|| cfg->reg[cfg->FLR_reg].int_v != 896)
|
||||
|| cfg->reg[cfg->FLR_reg].int_v != IOB_WORDS)
|
||||
FAIL(EINVAL);
|
||||
|
||||
cfg->bits.len = (4*505 + 4*144) * FRAME_SIZE + 896*2;
|
||||
cfg->bits.len = (4*505 + 4*144) * FRAME_SIZE + IOB_WORDS*2;
|
||||
cfg->bits.d = calloc(cfg->bits.len, 1 /* elsize */);
|
||||
if (!cfg->bits.d) FAIL(ENOMEM);
|
||||
cfg->auto_crc = 0;
|
||||
POUT(cfg->verbose_read, ("#D expected bits length is %i bytes\n", cfg->bits.len));
|
||||
|
||||
FAR_block = -1;
|
||||
FAR_row = -1;
|
||||
|
@ -1269,6 +1304,8 @@ static int read_bits(struct fpga_config* cfg, uint8_t* d, int len,
|
|||
if (2*u32 < 130) FAIL(EINVAL);
|
||||
|
||||
last_FDRI_pos = src_off+u32*2+/*auto-crc*/4;
|
||||
POUT(cfg->verbose_read, ("#D src 0x%X: %i fdri words, last_FDRI_pos %i\n",
|
||||
src_off-4, u32, last_FDRI_pos));
|
||||
|
||||
// fdri words u32
|
||||
if (FAR_block == -1 || FAR_block > 1 || FAR_row == -1
|
||||
|
@ -1280,17 +1317,22 @@ static int read_bits(struct fpga_config* cfg, uint8_t* d, int len,
|
|||
|
||||
offset_in_bits = FAR_pos(FAR_row, FAR_major, FAR_minor);
|
||||
if (offset_in_bits == -1) FAIL(EINVAL);
|
||||
POUT(cfg->verbose_read,
|
||||
("#D FAR_pos r%i ma%i mi%i = %i bytes\n",
|
||||
FAR_row, FAR_major, FAR_minor, offset_in_bits));
|
||||
|
||||
if (!FAR_row && !FAR_major && !FAR_minor
|
||||
&& u32 > 4*(505+2)*65)
|
||||
block0_words = 4*(505+2)*65;
|
||||
&& u32 > 4*(505+2)*XC6_FRAME_WORDS)
|
||||
block0_words = 4*(505+2)*XC6_FRAME_WORDS;
|
||||
else {
|
||||
block0_words = u32;
|
||||
if (block0_words % 65) FAIL(EINVAL);
|
||||
if (block0_words % XC6_FRAME_WORDS) FAIL(EINVAL);
|
||||
}
|
||||
POUT(cfg->verbose_read, ("#D %i block0 words\n", block0_words));
|
||||
padding_frames = 0;
|
||||
for (i = 0; i < block0_words/65; i++) {
|
||||
if (i && i+1 == block0_words/65) {
|
||||
for (j = 0; j < 130; j++) {
|
||||
for (i = 0; i < block0_words/XC6_FRAME_WORDS; i++) {
|
||||
if (i && i+1 == block0_words/XC6_FRAME_WORDS) {
|
||||
for (j = 0; j < FRAME_SIZE; j++) {
|
||||
if (d[src_off+i*130+j]
|
||||
!= 0xFF) break;
|
||||
}
|
||||
|
@ -1313,13 +1355,40 @@ static int read_bits(struct fpga_config* cfg, uint8_t* d, int len,
|
|||
padding_frames += 2;
|
||||
continue;
|
||||
}
|
||||
if (cfg->verbose_read && offset_in_bits) {
|
||||
printf("#D copying %i bytes from file_off 0x%X to bits_off %i\n",
|
||||
FRAME_SIZE, src_off+i*FRAME_SIZE,
|
||||
offset_in_bits + (i-padding_frames)*FRAME_SIZE);
|
||||
|
||||
for (j = 0; j < FRAME_SIZE; j++) {
|
||||
if (cfg->bits.d[offset_in_bits + (i-padding_frames)*FRAME_SIZE + j])
|
||||
break;
|
||||
}
|
||||
if (j >= FRAME_SIZE)
|
||||
printf("dest all-0\n");
|
||||
else {
|
||||
printf("dest {\n");
|
||||
dump_data(1, &cfg->bits.d[offset_in_bits + (i-padding_frames)*FRAME_SIZE],
|
||||
FRAME_SIZE, 16);
|
||||
printf("}\n");
|
||||
}
|
||||
printf("src {\n");
|
||||
dump_data(1, &d[src_off + i*FRAME_SIZE], FRAME_SIZE, 16);
|
||||
printf("}\n");
|
||||
}
|
||||
if (offset_in_bits)
|
||||
printf_minor_diff(FAR_row, FAR_major, FAR_minor,
|
||||
&cfg->bits.d[offset_in_bits + (i-padding_frames)*FRAME_SIZE],
|
||||
&d[src_off + i*FRAME_SIZE]);
|
||||
memcpy(&cfg->bits.d[offset_in_bits
|
||||
+ (i-padding_frames)*FRAME_SIZE],
|
||||
&d[src_off + i*FRAME_SIZE], FRAME_SIZE);
|
||||
}
|
||||
}
|
||||
if (u32 - block0_words > 0) {
|
||||
int bram_data_words = 4*144*65 + 896;
|
||||
int bram_data_words = 4*144*XC6_FRAME_WORDS + IOB_WORDS;
|
||||
POUT(cfg->verbose_read, ("#D block0 words: %i bram_data words: %i fdri words: %i\n",
|
||||
block0_words, bram_data_words, u32));
|
||||
if (u32 - block0_words != bram_data_words + 1) FAIL(EINVAL);
|
||||
offset_in_bits = BRAM_DATA_START;
|
||||
memcpy(&cfg->bits.d[offset_in_bits],
|
||||
|
@ -1327,7 +1396,15 @@ static int read_bits(struct fpga_config* cfg, uint8_t* d, int len,
|
|||
bram_data_words*2);
|
||||
u16 = __be16_to_cpu(*(uint16_t*)&d[
|
||||
(src_off+block0_words+bram_data_words)*2]);
|
||||
if (u16) FAIL(EINVAL);
|
||||
if (u16) {
|
||||
if (u16 != 0xFFFF) {
|
||||
PERR(("#E %s:%i post-bram word 0x%Xh (expected 0 or 0xFFFF).\n",
|
||||
__FILE__, __LINE__, u16));
|
||||
rc = EINVAL;
|
||||
goto fail;
|
||||
}
|
||||
POUT(cfg->verbose_read, ("#D post-bram word 0xFFFF\n"));
|
||||
}
|
||||
}
|
||||
src_off += 2*u32;
|
||||
cfg->auto_crc = __be32_to_cpu(*(uint32_t*)&d[src_off]);
|
||||
|
@ -1450,7 +1527,7 @@ static int parse_commands(struct fpga_config* cfg, uint8_t* d,
|
|||
|
||||
if ((cfg->reg[cfg->idcode_reg].int_v == XC6SLX4
|
||||
|| cfg->reg[cfg->idcode_reg].int_v == XC6SLX9)
|
||||
&& cfg->reg[cfg->FLR_reg].int_v != 896)
|
||||
&& cfg->reg[cfg->FLR_reg].int_v != IOB_WORDS)
|
||||
printf("#W Unexpected FLR value %i on "
|
||||
"idcode 0x%X.\n",
|
||||
cfg->reg[cfg->FLR_reg].int_v,
|
||||
|
@ -1598,7 +1675,7 @@ fail:
|
|||
static struct fpga_config_reg_rw s_defregs_before_bits[] =
|
||||
{{ CMD, .int_v = CMD_RCRC },
|
||||
{ REG_NOOP },
|
||||
{ FLR, .int_v = 896 },
|
||||
{ FLR, .int_v = IOB_WORDS },
|
||||
{ COR1, .int_v = COR1_DEF | COR1_CRC_BYPASS },
|
||||
{ COR2, .int_v = COR2_DEF },
|
||||
{ IDCODE, .int_v = XC6SLX9 },
|
||||
|
|
|
@ -9,6 +9,22 @@
|
|||
#include <errno.h>
|
||||
#include "model.h"
|
||||
|
||||
void printf_stdout(const char* fmt, ...)
|
||||
{
|
||||
va_list arg_list;
|
||||
va_start(arg_list, fmt);
|
||||
vfprintf(stdout, fmt, arg_list);
|
||||
va_end(arg_list);
|
||||
}
|
||||
|
||||
void printf_stderr(const char* fmt, ...)
|
||||
{
|
||||
va_list arg_list;
|
||||
va_start(arg_list, fmt);
|
||||
vfprintf(stderr, fmt, arg_list);
|
||||
va_end(arg_list);
|
||||
}
|
||||
|
||||
const char *bitstr(uint32_t value, int digits)
|
||||
{
|
||||
static char str[2 /* "0b" */ + 32 + 1 /* '\0' */];
|
||||
|
@ -22,7 +38,7 @@ const char *bitstr(uint32_t value, int digits)
|
|||
return str;
|
||||
}
|
||||
|
||||
static void dump_data(int indent, const uint8_t *data, int len, int base)
|
||||
void dump_data(int indent, const uint8_t *data, int len, int base)
|
||||
{
|
||||
int i, j, k;
|
||||
char fmt_str[16] = "%s@%05x";
|
||||
|
@ -886,64 +902,62 @@ void printf_v64_mi20(const uint8_t* bits, int row, int major)
|
|||
}
|
||||
}
|
||||
|
||||
void printf_word(const char *prefix, int word)
|
||||
const char *fmt_word(int word)
|
||||
{
|
||||
enum { NUM_BUFS = 16, BUF_SIZE = 64 };
|
||||
static char buf[NUM_BUFS][BUF_SIZE];
|
||||
static int last_buf = 0;
|
||||
char bit_str[XC6_WORD_BITS];
|
||||
int i, num_bits_printed;
|
||||
|
||||
last_buf = (last_buf+1)%NUM_BUFS;
|
||||
|
||||
for (i = 0; i < XC6_WORD_BITS; i++)
|
||||
bit_str[i] = (word & (1ULL << (XC6_WORD_BITS-i-1))) ? '1' : '0';
|
||||
printf("%s 0b%.*s 0x%.*X", prefix, XC6_WORD_BITS, bit_str, XC6_WORD_BITS/4, word);
|
||||
snprintf(buf[last_buf], sizeof(*buf), "0b%.*s 0x%.*X", XC6_WORD_BITS, bit_str, XC6_WORD_BITS/4, word);
|
||||
|
||||
num_bits_printed = 0;
|
||||
for (i = 0; i < XC6_WORD_BITS; i++) {
|
||||
if (word & (1 << i)) {
|
||||
if (num_bits_printed >= 4) {
|
||||
printf(" ...");
|
||||
sprintf(&buf[last_buf][strlen(buf[last_buf])], " ...");
|
||||
break;
|
||||
}
|
||||
printf(" %i", i);
|
||||
sprintf(&buf[last_buf][strlen(buf[last_buf])], " %i", i);
|
||||
num_bits_printed++;
|
||||
}
|
||||
}
|
||||
printf("\n");
|
||||
strcat(buf[last_buf], "\n");
|
||||
return buf[last_buf];
|
||||
}
|
||||
|
||||
void printf_lut_words(const uint8_t *major_bits, int row, int major, int minor, int v16_i)
|
||||
{
|
||||
int off_in_frame, w;
|
||||
char prefix[64];
|
||||
|
||||
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) {
|
||||
sprintf(prefix, "r%i ma%i v%i_%i mi%i pin", row, major, XC6_WORD_BITS,
|
||||
v16_i, minor);
|
||||
printf_word(prefix, w);
|
||||
}
|
||||
if (w)
|
||||
printf("r%i ma%i v%i_%i mi%i pin %s", row, major, XC6_WORD_BITS,
|
||||
v16_i, minor, fmt_word(w));
|
||||
|
||||
w = frame_get_pinword(&major_bits[minor*FRAME_SIZE + off_in_frame + XC6_WORD_BYTES]);
|
||||
if (w) {
|
||||
sprintf(prefix, "r%i ma%i v%i_%i mi%i pin", row, major, XC6_WORD_BITS,
|
||||
v16_i+1, minor);
|
||||
printf_word(prefix, w);
|
||||
}
|
||||
if (w)
|
||||
printf("r%i ma%i v%i_%i mi%i pin %s", row, major, XC6_WORD_BITS,
|
||||
v16_i+1, minor, fmt_word(w));
|
||||
|
||||
w = frame_get_pinword(&major_bits[(minor+1)*FRAME_SIZE + off_in_frame]);
|
||||
if (w) {
|
||||
sprintf(prefix, "r%i ma%i v%i_%i mi%i pin", row, major, XC6_WORD_BITS,
|
||||
v16_i, minor+1);
|
||||
printf_word(prefix, w);
|
||||
}
|
||||
if (w)
|
||||
printf("r%i ma%i v%i_%i mi%i pin %s", row, major, XC6_WORD_BITS,
|
||||
v16_i, minor+1, fmt_word(w));
|
||||
|
||||
w = frame_get_pinword(&major_bits[(minor+1)*FRAME_SIZE + off_in_frame + XC6_WORD_BYTES]);
|
||||
if (w) {
|
||||
sprintf(prefix, "r%i ma%i v%i_%i mi%i pin", row, major, XC6_WORD_BITS,
|
||||
v16_i+1, minor+1);
|
||||
printf_word(prefix, w);
|
||||
}
|
||||
if (w)
|
||||
printf("r%i ma%i v%i_%i mi%i pin %s", row, major, XC6_WORD_BITS,
|
||||
v16_i+1, minor+1, fmt_word(w));
|
||||
}
|
||||
|
||||
int get_vm_mb(void)
|
||||
|
|
|
@ -12,17 +12,18 @@
|
|||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/types.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#define PROGRAM_REVISION "2012-06-27"
|
||||
#define MACRO_STR(arg) #arg
|
||||
|
||||
#define OUT_OF_MEM() { fprintf(stderr, \
|
||||
"#E Out of memory in %s:%i\n", __FILE__, __LINE__); }
|
||||
#define EXIT(expr) if (expr) { fprintf(stderr, \
|
||||
"#E Internal error in %s:%i\n", __FILE__, __LINE__); exit(1); }
|
||||
#define POUT(on, varfmt) (on) ? printf_stdout varfmt : (void) 0
|
||||
#define PERR(varfmt) do { fflush(stdout); printf_stderr varfmt; } while (0)
|
||||
#define PHERE() PERR(("#E Internal error in %s:%i\n", __FILE__, __LINE__))
|
||||
|
||||
#define HERE() fprintf(stderr, "#E Internal error in %s:%i\n", \
|
||||
__FILE__, __LINE__)
|
||||
#define OUT_OF_MEM() PERR(("#E Out of memory in %s:%i\n", __FILE__, __LINE__))
|
||||
#define EXIT(expr) if (expr) { PERR(("#E Internal error in %s:%i\n", __FILE__, __LINE__)); exit(1); }
|
||||
|
||||
#define HERE() do { PERR(("#E Internal error in %s:%i\n", __FILE__, __LINE__)); } while (0)
|
||||
#define FAIL(code) do { HERE(); rc = (code); goto fail; } while (0)
|
||||
#define XOUT() do { HERE(); goto xout; } while (0)
|
||||
#define ASSERT(what) do { if (!(what)) FAIL(EINVAL); } while (0)
|
||||
|
@ -36,7 +37,10 @@
|
|||
|
||||
#define OUT_OF_U16(val) ((val) < 0 || (val) > 0xFFFF)
|
||||
|
||||
void printf_stdout(const char* fmt, ...);
|
||||
void printf_stderr(const char* fmt, ...);
|
||||
const char* bitstr(uint32_t value, int digits);
|
||||
void dump_data(int indent, const uint8_t *data, int len, int base);
|
||||
|
||||
uint16_t __swab16(uint16_t x);
|
||||
uint32_t __swab32(uint32_t x);
|
||||
|
@ -112,7 +116,7 @@ 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(const char *prefix, int word);
|
||||
const char *fmt_word(int word);
|
||||
void printf_lut_words(const uint8_t *major_bits, int row, int major,
|
||||
int minor, int v16_i);
|
||||
|
||||
|
|
|
@ -665,6 +665,7 @@ enum {
|
|||
|
||||
struct fpgadev_bram
|
||||
{
|
||||
// rstram and rst_priority must be set for A and B.
|
||||
};
|
||||
|
||||
//
|
||||
|
|
|
@ -130,7 +130,9 @@ const struct xc6_pkg_info *xc6_pkg_info(enum xc6_pkg pkg);
|
|||
// returns 0 if description not found
|
||||
const char *xc6_find_pkg_pin(const struct xc6_pkg_info *pkg_info, const char *description);
|
||||
|
||||
#define FRAME_SIZE 130
|
||||
#define XC6_FRAME_WORDS 65
|
||||
#define XC6_WORD_BYTES 2
|
||||
#define FRAME_SIZE (XC6_FRAME_WORDS*XC6_WORD_BYTES)
|
||||
#define FRAMES_PER_ROW 505 // for slx4 and slx9
|
||||
#define PADDING_FRAMES_PER_ROW 2
|
||||
#define NUM_ROWS 4 // for slx9 and slx9
|
||||
|
|
Loading…
Reference in New Issue
Block a user