mirror of https://github.com/openXC7/prjxray.git
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:
parent
6a2965caa2
commit
9e80cadfcc
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue