Add bitread PGM support

Signed-off-by: Clifford Wolf <clifford@clifford.at>
Signed-off-by: Tim 'mithro' Ansell <mithro@mithis.com>
This commit is contained in:
Clifford Wolf 2017-10-16 02:35:12 +02:00
parent 6a2965caa2
commit 9e80cadfcc
4 changed files with 72 additions and 11 deletions

View File

@ -11,7 +11,7 @@ cd $1
vivado -mode batch -source ../generate.tcl
for x in design*.bit; do
../../../tools/bitread -F $XRAY_ROI_FRAMES -o ${x}s -zy < $x
../../../tools/bitread -F $XRAY_ROI_FRAMES -o ${x}s -zy $x
done
for x in design_*.bits; do

View File

@ -13,7 +13,7 @@ echo '`define SEED 32'"'h$(echo $1 | md5sum | cut -c1-8)" > setseed.vh
vivado -mode batch -source ../generate.tcl
for i in 0 1 2; do
../../../tools/bitread -F $XRAY_ROI_FRAMES -o design_$i.bits -zy < design_$i.bit
../../../tools/bitread -F $XRAY_ROI_FRAMES -o design_$i.bits -zy design_$i.bit
python3 ../generate.py $i
done

View File

@ -59,8 +59,8 @@ vivado -nojournal -log design.log -mode batch -source design.tcl
for f0 in logicframes_SLICE_*_0.bit; do
f1=${f0%_0.bit}_1.bit
../tools/bitread -xo ${f0%.bit}.asc < $f0 > /dev/null
../tools/bitread -xo ${f1%.bit}.asc < $f1 > /dev/null
../tools/bitread -xo ${f0%.bit}.asc $f0 > /dev/null
../tools/bitread -xo ${f1%.bit}.asc $f1 > /dev/null
f0=${f0%.bit}.asc
f1=${f1%.bit}.asc
n=${f0%_0.asc}

View File

@ -13,6 +13,7 @@ bool mode_m = false;
bool mode_x = false;
bool mode_y = false;
bool mode_z = false;
bool mode_p = false;
bool chksum = false;
char *outfile = nullptr;
std::set<uint32_t> frames;
@ -229,7 +230,7 @@ public:
int main(int argc, char **argv)
{
int opt;
while ((opt = getopt(argc, argv, "crmxyzCf:F:o:")) != -1)
while ((opt = getopt(argc, argv, "crmxyzpCf:F:o:")) != -1)
switch (opt)
{
case 'c':
@ -250,6 +251,9 @@ int main(int argc, char **argv)
case 'z':
mode_z = true;
break;
case 'p':
mode_p = true;
break;
case 'C':
chksum = true;
break;
@ -267,10 +271,10 @@ int main(int argc, char **argv)
goto help;
}
if (optind != argc) {
if (optind != argc && optind+1 != argc) {
help:
fprintf(stderr, "\n");
fprintf(stderr, "Usage: %s [options] < bitfile.bit\n", argv[0]);
fprintf(stderr, "Usage: %s [options] [bitfile]\n", argv[0]);
fprintf(stderr, "\n");
fprintf(stderr, " -c\n");
fprintf(stderr, " continuation mode. output '*' for repeating patterns\n");
@ -290,6 +294,9 @@ help:
fprintf(stderr, " -y\n");
fprintf(stderr, " use format 'bit_%%08x_%%02x_%%02x'\n");
fprintf(stderr, "\n");
fprintf(stderr, " -p\n");
fprintf(stderr, " output a binary netpgm image\n");
fprintf(stderr, "\n");
fprintf(stderr, " -C\n");
fprintf(stderr, " do not ignore the checksum in each frame\n");
fprintf(stderr, "\n");
@ -317,10 +324,24 @@ help:
return 1;
}
while (1) {
int c = getchar();
if (c == EOF) break;
bitdata.push_back(c);
if (optind+1 == argc) {
FILE *f = fopen(argv[optind], "rb");
if (f == nullptr) {
printf("Can't open input file '%s' for writing!\n", outfile);
return 1;
}
while (1) {
int c = fgetc(f);
if (c == EOF) break;
bitdata.push_back(c);
}
fclose(f);
} else {
while (1) {
int c = getchar();
if (c == EOF) break;
bitdata.push_back(c);
}
}
printf("Bitstream size: %d bytes\n", int(bitdata.size()));
@ -511,6 +532,9 @@ help:
if (outfile == nullptr)
fprintf(f, "\n");
std::vector<std::vector<bool>> pgmdata;
std::vector<int> pgmsep;
for (auto &it : configframes)
{
if (mode_z && it.second == zero_frame)
@ -533,7 +557,18 @@ help:
return 1;
}
if (mode_p)
{
if (fid.get_minor() == 0 && !pgmdata.empty())
pgmsep.push_back(pgmdata.size());
pgmdata.push_back(std::vector<bool>());
for (int i = 0; i < 101; i++)
for (int k = 0; k < 32; k++)
pgmdata.back().push_back((it.second.at(i) & (1 << k)) != 0);
}
else
if (mode_x || mode_y)
{
for (int i = 0; i < 101; i++)
@ -560,6 +595,32 @@ help:
}
}
if (mode_p)
{
int width = pgmdata.size() + pgmsep.size();
int height = 101*32+100;
fprintf(f, "P5 %d %d 15\n", width, height);
for (int y = 0, bit = 0; y < height; y++, bit++)
{
if (bit % 32 == 0 && y) {
for (int x = 0; x < width; x++)
fputc(8, f);
y++;
}
for (int x = 0, frame = 0, sep = 0; x < width; x++, frame++)
{
if (sep < int(pgmsep.size()) && frame == pgmsep.at(sep)) {
fputc(8, f);
x++, sep++;
}
fputc(pgmdata.at(frame).at(bit) ? 15 : 0, f);
}
}
}
if (outfile != nullptr)
fclose(f);
}