diff --git a/fuzzers/011-ffconfig/generate.py b/fuzzers/011-ffconfig/generate.py
index 04700fa2..91f0dbc7 100644
--- a/fuzzers/011-ffconfig/generate.py
+++ b/fuzzers/011-ffconfig/generate.py
@@ -45,10 +45,10 @@ with open("design_%s.txt" % sys.argv[1], "r") as f:
if site not in data:
data[site] = dict()
- data[site]["%s.INIT" % bel] = init
- data[site]["%s.CINV" % bel] = cinv
- data[site]["%s.DINV" % bel] = dinv
- data[site]["%s.RINV" % bel] = rinv
+ data[site]["%s.ZINI" % bel] = 1-init
+ # data[site]["%s.CINV" % bel] = cinv
+ # data[site]["%s.DINV" % bel] = dinv
+ # data[site]["%s.RINV" % bel] = rinv
#################################################
diff --git a/htmlgen/htmlgen.py b/htmlgen/htmlgen.py
index 412a0226..937c249c 100644
--- a/htmlgen/htmlgen.py
+++ b/htmlgen/htmlgen.py
@@ -139,6 +139,14 @@ for segtype in segbits.keys():
m = re.search(r"(.)LUT.INIT\[(..)\]", bit_name)
label = m.group(1) + m.group(2)
+ if re.search(r"\.[ABCD]5?FF\.", bit_name):
+ bgcolor = "#aaffaa"
+ m = re.search(r"\.([ABCD]5?)FF\.([A-Z]+)", bit_name)
+ if m.group(2) == "ZINI":
+ label = m.group(1) + "Z"
+ else:
+ label = m.group(1) + "?"
+
print("
%s | " % (bgcolor, "\n".join(title), label), file=f)
print("", file =f)
diff --git a/tools/segmatch.cc b/tools/segmatch.cc
index b798bb8d..3ad07382 100644
--- a/tools/segmatch.cc
+++ b/tools/segmatch.cc
@@ -15,6 +15,8 @@ using std::tuple;
using std::vector;
using std::string;
+bool mode_inv = false;
+
int num_bits = 0, num_tags = 0;
map bit_ids, tag_ids;
vector bit_ids_r, tag_ids_r;
@@ -84,6 +86,26 @@ void read_input(std::istream &f, std::string filename)
tags.resize(tag_idx+1);
tags[tag_idx] = true;
+
+ if (mode_inv)
+ {
+ auto &inv_tags = token == "1" ? segdata_tags0(*segptr) : segdata_tags1(*segptr);
+
+ token = tag_ids_r.at(tag_idx) + "__INV";
+
+ if (tag_ids.count(token) == 0) {
+ tag_ids[token] = num_tags++;
+ tag_ids_r.push_back(token);
+ }
+
+ int inv_tag_idx = tag_ids.at(token);
+
+ if (int(inv_tags.size()) <= inv_tag_idx)
+ inv_tags.resize(inv_tag_idx+1);
+
+ inv_tags[inv_tag_idx] = true;
+ }
+
continue;
}
@@ -120,12 +142,15 @@ int main(int argc, char **argv)
const char *outfile = nullptr;
int opt;
- while ((opt = getopt(argc, argv, "o:")) != -1)
+ while ((opt = getopt(argc, argv, "io:")) != -1)
switch (opt)
{
case 'o':
outfile = optarg;
break;
+ case 'i':
+ mode_inv = true;
+ break;
default:
goto help;
}
@@ -138,6 +163,9 @@ help:
fprintf(stderr, " -o \n");
fprintf(stderr, " set output file\n");
fprintf(stderr, "\n");
+ fprintf(stderr, " -i\n");
+ fprintf(stderr, " add inverted tags\n");
+ fprintf(stderr, "\n");
return 1;
}